| name | update-claude |
| description | 既存の .claude/ 体系(CLAUDE.md・Agents・Rules・Skills・hooks)を診断し、理想形との差分を提示して ユーザー承認後に追補・充実させる。「.claude 充実させて」「CLAUDE.md 充実させて」「Agent 整備して」 「claude 体系アップデート」「Rules 追加して」などで使用。新規セットアップは init-claude を使用。 npx skills add 不足分の補完・implement-issue-tree の前提確認・既存資産の破壊なし差分更新が特徴。
|
| model | opus |
| user-invocable | true |
| argument-hint | <対象リポジトリのパス(省略時はカレントディレクトリ)> |
update-claude
既存の .claude/ 体系を診断し、理想形(日本語運用・カテゴリ別 Agent・Rules 整備・
委譲ルール・model 配分・SessionStart hooks・implement-issue-tree 前提)との差分を提示して
ユーザー承認後に差分のみ追補する。既存の Agent・Rules・CLAUDE.md は上書き前に確認を取る。
.claude/ が存在しないリポジトリには init-claude を使用する。
使い方
update-claude [対象リポジトリのパス]
パスを省略した場合はカレントディレクトリを対象とする。
前提条件
- 対象リポジトリに
.claude/ ディレクトリが存在すること
gh CLI がインストールされ、認証済みであること(gh auth status で確認)
npx が使用できること(npx skills add によるスキル補完に使用)。skills CLI は固定版(SKILLS_CLI_VERSION)で実行する。値と更新手順は「skills CLI のバージョン固定と更新手順」節を参照
readlink コマンドが使用できること(workflow js symlink の stale/dangling 判定に使用。command -v readlink で事前確認し、利用できない環境では該当処理を中断する)
フロー
Step 1: 対象リポジトリと既存 .claude/ を調査する
ls <target-repo>/.claude/ 2>/dev/null || echo ".claude/ が存在しない"
find <target-repo>/.claude/agents -name "*.md" 2>/dev/null | sort
find <target-repo>/.claude/rules -name "*.md" 2>/dev/null | sort
ls <target-repo>/.claude/skills/ 2>/dev/null | sort
cat <target-repo>/.claude/settings.json 2>/dev/null || echo "settings.json なし"
cat <target-repo>/CLAUDE.md 2>/dev/null | head -80 || echo "CLAUDE.md なし"
cat <target-repo>/skills-lock.json 2>/dev/null | head -30 || echo "skills-lock.json なし"
LINK="<target-repo>/.claude/workflows/implement-issue-tree.js"
EXPECTED_TARGET="../skills/implement-issue-tree/scripts/implement-issue-tree.js"
if ! command -v readlink >/dev/null 2>&1; then
echo "エラー: readlink コマンドが見つからない。workflow js の stale/dangling 判定を中断する"
elif [ -L "$LINK" ]; then
echo "symlink ターゲット: $(readlink )(期待値: )"
[ -e ] ||
[ -e ];
.claude/ が存在しない場合は init-claude を案内して処理を中断する。
Step 2: 理想形との差分を診断する
以下の観点で現状を診断し、ギャップ一覧を作成する。
2-1. Agent 診断
| 診断項目 | 確認内容 |
|---|
| カテゴリ分割 | research / implement / testing / quality / docs のカテゴリ分割があるか |
| 技術レイヤ別 builder | リポの技術レイヤに対応した builder Agent が存在するか |
| model 配分 | 実装・調査=sonnet / 機械的=haiku / 横断判断=opus または fable(fable は Opus 上位の最上位 tier)が守られているか |
| 最小権限 | Agent の tools リストが必要最小限か |
| 委譲 Agent | skill-author / agent-author / rules-author / docs-writer に相当する Agent があるか |
2-2. Rules 診断
| 診断項目 | 確認内容 |
|---|
| delegation.md | 調査モードの委譲原則・パスベース切り替え表があるか |
| delegation-impl.md | 作成・編集モードの委譲マッピングがあるか |
| coding 規約 | リポの主要言語に対応したコーディング規約があるか |
| security.md | OWASP Top 10・秘密情報混入防止の記載があるか |
| japanese-style.md | 日本語出力スタイルの記載があるか |
| conventional-commits.md | Conventional Commits 詳細規約があるか |
| code-comment-style.md | コメント規約(役割・呼び出し文脈・責務境界の埋め込み方針)があるか |
| out-of-scope-tracking.md | スコープ外事項の追跡規約(Issue 確認→ユーザー承認→起票フロー)があるか |
2-3. Skills 診断
npx skills add Fandhe-AI/agent-cli-skills で導入できるスキルのうち、
skills-lock.json に含まれていないものを列挙する。
必須スキル(不足していれば追補対象):
create-commit・create-pr・create-issue
implement-issue・implement-issue-tree
implement-review・implement-review-pr
update-docs
comment-code(code-comment-style.md 規約に従うコメント追加・補強スキル)
2-4. hooks 診断
| 診断項目 | 確認内容 |
|---|
| SessionStart | 日本語・委譲・Conventional Commits・--no-verify 禁止のリマインダーがあるか |
| PostToolUse | 言語に応じた自動整形フックがあるか |
2-5. CLAUDE.md 診断
| 診断項目 | 確認内容 |
|---|
| 委譲方針 | パスベース切り替え表・model 配分表があるか |
| Sub-agents 一覧 | カテゴリ別 Agent の表があるか |
| Rules 一覧 | ルールファイルの表があるか |
| Current Skills | 導入済みスキル一覧があるか |
2-6. implement-issue-tree 前提診断
gh auth status
gh api "repos/<owner>/<repo>/issues/<既存issue番号>/sub_issues" 2>&1 | head -5
LINK="<target-repo>/.claude/workflows/implement-issue-tree.js"
EXPECTED_TARGET="../skills/implement-issue-tree/scripts/implement-issue-tree.js"
if ! command -v readlink >/dev/null 2>&1; then
echo "エラー: readlink コマンドが見つからない。workflow js の symlink 検証を中断する"
elif [ -L "$LINK" ]; then
echo "symlink ターゲット: $(readlink "$LINK")(期待値: $EXPECTED_TARGET)"
[ -e "$LINK" ] || echo "警告: dangling symlink"
else
echo "workflow js: 未配置または非 symlink"
fi
- gh auth の認証状態
- sub_issues API の応答(既存 issue 番号を指定。404 = GitHub Apps が有効でない可能性。
なお
repos/{owner}/{repo}/sub_issues というリポジトリ直下のエンドポイントは存在しないため使わない)
- workflow js の存在・ターゲット一致(stale でないか)・参照先解決(dangling でないか)
Step 3: ギャップ一覧をユーザーに提示して承認を得る
以下の形式でギャップ一覧を提示する。
## .claude/ 診断結果
### 不足・追補が必要な項目
#### Agents
- [ ] <カテゴリ>/<Agent名>.md: <不足理由>
- ...
#### Rules
- [ ] delegation.md: 存在しない
- [ ] coding-<lang>.md: 主要言語(<lang>)対応規約が存在しない
- ...
#### Skills(npx skills add で補完可能)
- [ ] <スキル名>: skills-lock.json に含まれていない
- ...
#### hooks
- [ ] SessionStart: settings.json に SessionStart hook がない
- [ ] PostToolUse: <lang> の自動整形フックがない
- ...
#### CLAUDE.md
- [ ] 委譲方針表: パスベース切り替え表がない
- ...
#### implement-issue-tree 前提
- [ ] workflow js: .claude/workflows/implement-issue-tree.js が存在しない
- [ ] workflow js: symlink のターゲットが期待値と異なる(stale。旧パスを指したまま)
- [ ] workflow js: symlink の参照先が消失している(dangling)
- ...
### 既存資産(上書き確認が必要な項目)
以下は既に存在します。変更する場合は個別に確認します。
- <ファイルパス>: <現在の状態の要約>
ユーザーの承認なしに追補・変更を開始しない。
承認の粒度:
- 「全て追補する」→ Step 4 に進む
- 「項目を絞って追補する」→ 対象を確認してから Step 4 に進む
- 「既存ファイルを上書きする場合」→ 上書き前に個別確認を取る
Step 4: 差分を追補する
承認された項目のみ追補する。既存ファイルは上書き確認を取った項目のみ変更する。
4-1. 不足 Agent を追加する
.claude/agents/<category>/<name>.md に追加する。
対象リポに dotclaude-via-temp ルール(_/dotclaude/ 経由)が存在する場合はそのルールに従う。
存在しない場合は .claude/ へ直接書き込んで良い。
---
name: <name>
description: "<役割の説明(発火トリガー語を含める)>"
model: <haiku|sonnet|opus|fable>
tools: [必要最小限のツール]
---
frontmatter のキーは Claude Code の subagent 定義仕様に従い name を使う
(subagent_type は Agent ツール呼び出し時のパラメータ名であり、定義キーではない)。
4-2. 不足 Rules を追加する
.claude/rules/ に追加する。
delegation.md・delegation-impl.md は Fandhe-AI/agent-cli-skills の実例を参考に
対象リポのパス構成に合わせてカスタマイズする。
code-comment-style.md と out-of-scope-tracking.md が不足している場合は、
init-claude スキルの「3-3. rules/ を生成する」に記載の雛形骨子を参照して生成する。
生成時は対象リポの言語・構成(ドキュメンテーションコメント形式・ディレクトリ構成等)に合わせて調整する。
4-3. 不足スキルを補完する
cd <target-repo>
SKILLS_CLI_VERSION="1.5.23"
npx --yes "skills@${SKILLS_CLI_VERSION}" add Fandhe-AI/agent-cli-skills || {
echo "エラー: skills@${SKILLS_CLI_VERSION} の実行が失敗しました(該当版の不存在・レジストリ障害等、原因は問わない)。未固定 npx skills add へのフォールバックは行わない。原因を確認してから再実行する。" >&2
exit 1
}
skills-lock.json が更新されることを確認する。
4-4. hooks を追補する
settings.json に SessionStart hook を追加・更新する。
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "echo '<リポ名>: 日本語でやりとり / 作業は subagent へ委譲し main 消費を抑える / Conventional Commits 厳守 (--no-verify 禁止) / implement-issue は計画承認後に実装'"
}
]
}
]
}
}
セキュリティ注意事項:
command の値に API キー・トークン・パスワードを埋め込まない
- ユーザー入力をそのまま
command に展開しない
PostToolUse 自動整形フックは言語のツール存在確認後に提案し、ユーザーが希望する場合のみ追加する。
4-5. CLAUDE.md を更新する
不足セクション(委譲方針表・Sub-agents 一覧・Rules 一覧・model 配分表・Current Skills)を追補する。
既存セクションを上書きする場合は承認済み項目のみ変更する。
4-6. implement-issue-tree の前提を整備する
workflow js が存在しない場合の案内:
named workflow({name: "implement-issue-tree"})として呼ばない場合は .claude/workflows/ への配置自体が不要で、Workflow ツールの scriptPath に .claude/skills/implement-issue-tree/scripts/implement-issue-tree.js を直接指定すればよい。
named workflow として配置する場合は cp ではなく相対 symlink を使用する。cp で配置すると symlink が実体ファイルに置き換わり、npx skills add による更新が named workflow に届かなくなる。
symlink は readlink で現在のターゲットを検証し、期待ターゲットと異なる場合(stale)・参照先が消失している場合(dangling)は張り替える。実体ファイル(非 symlink)は上書きしない。対象リポに dotclaude-via-temp ルールがある場合はそのルールに従い _/dotclaude/ 経由で配置する(ない場合は ln -s 直接作成でも可)。readlink が利用できない環境では stale 判定が正しく行えず(空の CURRENT_TARGET により正常な symlink を stale と誤判定しうる)、そのまま張り替え処理へ進むと意図せず既存 symlink を書き換える危険があるため、command -v readlink で事前確認し、利用できない場合は自動張り替えを中断してユーザーに手動対応を案内する。
if ! command -v readlink >/dev/null 2>&1; then
echo "エラー: readlink コマンドが見つからない。stale/dangling を正しく判定できないため workflow js の自動張り替えを中断する。readlink を導入するか、手動で symlink の張り替えを行う: ls -la <target-repo>/.claude/workflows/implement-issue-tree.js"
else
EXPECTED_TARGET="../skills/implement-issue-tree/scripts/implement-issue-tree.js"
LINK="<target-repo>/.claude/workflows/implement-issue-tree.js"
if [ -L "$LINK" ]; then
if [ "$(readlink "$LINK")" != "$EXPECTED_TARGET" ] || [ ! -e "$LINK" ]; then
if [ -d "$LINK" ]; then
echo "エラー: $LINK はディレクトリを指す symlink のため自動では張り替えない。内容を確認し、意図しない参照先であれば手動で削除してから再実行する: ls -la $LINK"
else
echo "張り替え前のターゲット: $(readlink "$LINK")"
TMP_LINK=
[ -e ] || [ -L ];
-p && -s ;
;
<target-repo>/_/dotclaude/workflows 2>/dev/null
<target-repo>/_/dotclaude 2>/dev/null
[ -e ];
TMP_LINK=
[ -e ] || [ -L ];
-p && -s && -p ;
<target-repo>/_/dotclaude/workflows 2>/dev/null
<target-repo>/_/dotclaude 2>/dev/null
[ -L ];
[ -e ] ||
sub_issues API が使用できない場合は GitHub Apps の有効化をユーザーに案内する。
Step 5: 追補結果を報告する
報告項目:
- 追補したファイル一覧と変更内容
- スキップした項目と理由
- implement-issue-tree の動作前提の充足状況
- ユーザーへの次のアクション案内(手動設定が必要な項目など)
skills CLI のバージョン固定と更新手順
Why: npx skills add をバージョン未固定で実行すると、npx はローカルキャッシュに無い場合レジストリのその時点の最新版を確認なしで即時取得・実行する。skills(vercel-labs/skills)パッケージが乗っ取られた場合、これは任意コード実行の経路になる。exact 版(X.Y.Z。dist-tag・^/~ レンジは禁止)への固定が信頼アンカーになる。
固定版の決め方:
npm view skills version で現在の latest を確認する
npm view skills repository.url が vercel-labs/skills であることを確認する
npm view skills time --json 等で公開日時が不自然でないことを確認する
更新手順:
- Step 4-3 フェンス内の
SKILLS_CLI_VERSION を更新する(このスキル内での正の定義箇所はここ 1 箇所のみ)
node --test skills/update-claude/tests/*.mjs で exact semver・実行行の固定を検証する
- 1 リポジトリで実際に実行し、差分が正常であることを確認する
chore(update-claude): skills CLI を X.Y.Z へ更新 でコミットする
- 同じ
skills CLI を固定する init-claude / sync-skills-lock の同名節も同時更新することを推奨する(値の同期は必須ではないが、乖離した場合はどちらかの節にその旨を記録する)
既知の乖離(記録): 本節の SKILLS_CLI_VERSION の値(1.5.23)は、sync-skills-lock/SKILL.md・sync-skills-lock/scripts/skills-lock-update.sh が固定する SKILLS_CLI_VERSION の値(1.5.22)と異なる(init-claude は本節と同一の値で同期済み)。各スキルは独立した固定版として運用しており同期は必須ではないため、意図的な乖離として記録する。次回いずれかを更新する際は、この乖離が解消したか維持されたかを本行で更新する。
fail-closed: 固定版が解決できない場合(該当版の不存在・レジストリ障害等どの原因でも)は npx が非ゼロ終了し停止する。未固定 npx skills add へのフォールバック再試行は行わない。
検証
find <target-repo>/.claude -type f | sort
ls <target-repo>/CLAUDE.md
cat <target-repo>/skills-lock.json 2>/dev/null | head -20
LINK="<target-repo>/.claude/workflows/implement-issue-tree.js"
EXPECTED_TARGET="../skills/implement-issue-tree/scripts/implement-issue-tree.js"
if ! command -v readlink >/dev/null 2>&1; then
echo "エラー: readlink コマンドが見つからない。symlink ターゲット検証を中断する"
elif [ -L "$LINK" ]; then
echo "symlink ターゲット: $(readlink "$LINK")(期待値: $EXPECTED_TARGET)"
[ -e "$LINK" ] && echo "参照先: 解決OK" || echo "参照先: dangling(未解決)"
else
echo "workflow js: 未配置または非 symlink"
fi
gh auth status
注意事項
.claude/ が存在しないリポジトリには init-claude を案内して処理を中断する
- 既存ファイルの上書きはユーザーの個別承認後のみ実施する
- ユーザーの診断承認なしに変更を開始しない
settings.json の command にトークン・シークレットをハードコードしない
--no-verify を含むコマンドを hooks に仕込まない
npx skills add が失敗した場合はエラーメッセージを表示してユーザーに手動手順を案内する
skills CLI は固定版で実行する。固定版の決め方・更新手順は「skills CLI のバージョン固定と更新手順」節を参照
- 対象リポに
dotclaude-via-temp ルールがある場合はそのルールに従う(ない場合は直接書き込み可)
- Agent の
tools リストは最小権限原則に従い必要なもののみ列挙する
- セキュリティ問題(秘密情報の混入・インジェクションリスク)を発見した場合は追補を中断してユーザーに警告する