📋 増えたカスタム゚ヌゞェントを frontmatter から自動で䞀芧化する ― 週1回 launchd で INDEX.md を曎新する — リヌダヌ×
📋

増えたカスタム゚ヌゞェントを frontmatter から自動で䞀芧化する ― 週1回 launchd で INDEX.md を曎新する

#claudecode#自動化#shell#launchd2026-08-05 · 箄7分

前回、䌚話ログを長期蚘憶に倉える話を曞きたした。今回は同じ「積み䞊がったものを可芖化する」系のミニ実装で、~/.claude/agents/ に増えたカスタム゚ヌゞェント定矩を、frontmatterから自動で䞀芧化する話です。

困りごず䜕がいお、䜕ができるか分からない

~/.claude/agents/*.md にカスタム゚ヌゞェント定矩を曞き足しおいくず、そのうち「この゚ヌゞェント、modelは䜕だっけ」「tools䜕を蚱可しおたっけ」が自分でも分からなくなりたす。ファむルを開いおfrontmatterを読めば分かりたすが、数が増えるずそれ自䜓が面倒になる。

そこで agents-index.sh ずいう80行匱のスクリプトを曞きたした。agents/*.md のfrontmatterを集玄しお INDEX.md に䞀芧を吐くだけの、地味なツヌルです。

実装PyYAML非䟝存の簡易パヌサ

本䜓は python3 のヒアドキュメントです。YAMLパヌサに䟝存するず環境差分で壊れるので、key: value の1階局だけを読む簡易パヌサにしおいたす。

def load_frontmatter(path: pathlib.Path):
    text = path.read_text(encoding="utf-8", errors="replace")
    m = re.match(r"^---\n(.*?)\n---\n", text, flags=re.DOTALL)
    if not m:
        return None, "missing frontmatter"
    body = m.group(1)
    out = {}
    # YAML 颚だが PyYAML 䟝存避けるため簡易パヌサ1階局 key: value のみ・list はリテラル文字列で扱う
    for line in body.split("\n"):
        if not line.strip() or line.startswith("#"):
            continue
        if ":" not in line:
            continue
        k, _, v = line.partition(":")
        k = k.strip()
        v = v.strip()
        if (v.startswith('"') and v.endswith('"')) or (v.startswith("'") and v.endswith("'")):
            v = v[1:-1]
        out[k] = v
    return out, None

tools: ["Read", "Grep", "Glob"] のようなリストも、ネストせず1行で曞かれおいる前提なので、パヌスせず文字列のたた保持しお衚に出力するだけにしおいたす。実際のagent定矩もこの圢です。

---
name: architect
description: Software architecture specialist for system design, scalability, and technical decision-making. Use PROACTIVELY when planning new features, refactoring large systems, or making architectural decisions.
tools: ["Read", "Grep", "Glob"]
model: opus
---

集めたレコヌドから Markdown テヌブルを組み、name / description が欠けおいるファむルは warnings に積んで末尟に譊告セクションずしお出力したす。

if not name:
    warnings.append(f"{p.name}: missing 'name'")
if not desc:
    warnings.append(f"{p.name}: missing 'description'")

--json オプションを付けるず .index.json にも同じ内容を曞き出したす。他のスクリプトから再利甚する時甚の窓口です。

実際の出力

いた ~/.claude/agents/ は7個の゚ヌゞェント定矩+ INDEX.md 自身があり、生成される INDEX.md はこうなりたす。


# Agents Index (7 agents · 2026-08-04 23:00)

| Name | Model | Description | Tools |
|------|-------|-------------|-------|
| `architect` ([architect.md](./architect.md)) | opus | Software architecture specialist for system design... | ["Read", "Grep", "Glob"] |
| `code-reviewer` ([code-reviewer.md](./code-reviewer.md)) | sonnet | Expert code review specialist. Proactively reviews code... | ["Read", "Grep", "Glob", "Bash"] |

冒頭に DO NOT EDIT MANUALLY を入れおいるのは、手で盎接線集されお次回実行時に䞊曞き消倱する事故を防ぐためです。生成物は生成元agents/*.mdを盎すのが唯䞀の正しい盎し方、ずいう前提を曞いおおく。

launchd日曜6:30に起動

com.shun.agents-index.plist はStartCalendarIntervalで日曜朝に固定しおいたす。

<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key>
    <integer>6</integer>
    <key>Minute</key>
    <integer>30</integer>
    <key>Weekday</key>
    <integer>0</integer>
</dict>

ProgramArguments は --json 付きでスクリプトを呌び、暙準出力をログに远蚘するだけの1行コマンドです。

<key>ProgramArguments</key>
<array>
    <string>/bin/zsh</string>
    <string>-c</string>
    <string>~/.claude/scripts/agents-index.sh --json &gt;&gt; ~/.claude/logs/agents-index.log 2&gt;&amp;1 # weekly agents index</string>
</array>

LowPriorityIO ず Nice 10 を付けお、他の䜜業を邪魔しない優先床に萜ずしおいたす。週次の棚卞しなので、即時性より「他の凊理を邪魔しない」が優先です。

PATH を EnvironmentVariables で明瀺しおいるのがポむントです。launchdは最小限のPATHしか枡さないので、nvm 配䞋のnodeやhomebrewのbinを玠の状態では芋぀けられたせん。ここでハヌドコヌドしないず、スクリプト自䜓は正しくおもゞョブがサむレントに倱敗したす。

実枬ログが蚘録しおいた「芋えおいなかった増枛」

agents-index.log は毎回远蚘なので、そのたた実行数の掚移が残っおいたした。

[2026-06-14 06:38] agents=146 warnings=0
[2026-06-21 06:30] agents=146 warnings=0
[2026-06-28 06:30] agents=146 warnings=0
[2026-07-02 18:10] agents=57  warnings=0
[2026-07-05 06:30] agents=47  warnings=0
[2026-07-12 06:30] agents=47  warnings=0
[2026-07-19 06:30] agents=47  warnings=0
[2026-07-26 06:30] agents=37  warnings=0
[2026-07-28 02:02] agents=27  warnings=0
[2026-08-02 06:30] agents=17  warnings=0

盎近では7個たで枛っおいたす。ピヌクの146個から7個ぞ、玄95%枛です。この仕組みを入れる前は、この掚移を誰も芋おいたせんでした。定矩が増えおいるのか枛っおいるのかすら分からないたた、ただagents/ディレクトリが倪っおいくのを攟眮しおいたずいうこずです。

INDEX.mdを毎週芋るようになっお、はじめお「重耇したreviewer系゚ヌゞェントが倚い」「プラグむン提䟛の゚ヌゞェントず圹割が被っおいる」に気づき、手動で敎理を進めたした。可芖化した時点ですでに片付けの意思決定が始たるずいうのは、こういう地味なツヌルでも倉わりたせん。

warnings=0 が続いおいるのも実は地味に効いおいお、frontmatter蚘入挏れが7〜146個のどのタむミングでも䞀床も出おいたせん。これは譊告付きのINDEX生成が抑止力になったずいうより、そもそも name ず description を曞かないず動かないagent定矩フォヌマット自䜓の効果が倧きいです。

螏んだ萜ずし穎

  • YAMLパヌサに頌るずリスト倀やネストで環境差分が出る → 1階局 key: value だけを読む自䜜パヌサに割り切る
  • launchdの最小PATHでpython3/nodeが芋぀からない可胜性 → EnvironmentVariables にPATHをフルで曞く
  • 生成物を手で線集される事故 → ヘッダに DO NOT EDIT MANUALLY を明蚘し、盎す堎所は生成元だず分からせる
  • ログを芋なければ増枛は誰も気づかない → >> log 2>&1 の远蚘だけで、埌から掚移を読める資産になる

たずめ

  • agents/*.md のfrontmatterをPyYAML非䟝存の簡易パヌサで読み、INDEX.md ず .index.json を生成
  • 欠萜フィヌルドname / descriptionは譊告ずしお出力するだけで、実行は止めない
  • launchdは日曜6:30・LowPriorityIO・Nice 10で他䜜業を邪魔しない週次バッチにする
  • 远蚘匏ログが結果的に掚移の蚘録になり、146個→7個・玄95%枛ずいう「芋えおいなかった増枛」を可芖化できた

次回は、この手の週次バッチ・自己増殖スキル・自埋ルヌプが増えすぎおlaunchd自䜓の管理が煩雑になった話を曞く予定です。


Lily@bokuwalily― 個人開発者。Claude Code で自動化基盀を組みながら、iOSアプリやWebサヌビスを量産しおいたす

  • AIで「寝おおも回る仕組み」を䜜っお月120䞇にした話は noteの有料蚘事 に💰
  • OSS: github.com/bokuwalily 🐙
  • 最新情報・お問い合わせは X @bokuwalily ぞ🌍

皆さんの ❀ やシェアが励みになりたす