docs: CLAUDE.md 監査による Agent Teams 記述の更新とプラグイン宣言の同期 - #759
Conversation
claude-md-improver による監査で見つかった 3 点を修正する。 - Agent Teams: teammateMode の既定値が v2.1.179 で auto → in-process に 変わった点、tmux 指定は split-pane で VS Code 統合ターミナル等では 非対応な点、TeamCreate / TeamDelete 廃止と team_name 無視を追記。 公式が明記するトークンコスト増と「使わない場面」(逐次タスク・同一 ファイル編集・依存の多い作業)が欠落しており、common.md 6.9 節の 委譲判断と方向性が矛盾していたため補った。 - 推奨プラグイン: claude-md-management を enabledPlugins に宣言。 claude plugin install はユーザーレベル設定に書くため宣言漏れだと web セッションで install されない旨も明記。 - 前提モデル節を新設: settings.json の model: opus[1m] と、規約が Opus 5 世代の既定挙動を前提にしている旨を出典付きで明示。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🖼️ Visual Regression Test 結果
|
fumtas1k
left a comment
There was a problem hiding this comment.
レビュー(セキュリティ / デザイン / ロジック / アーキテクチャ / テスト)
docs のみの PR ですが、Currency 監査という性質上「記述内容が公式と一致しているか」が最重要なので、引用元 2 リンクを実際に取得して事実確認しました。総評: マージ可。指摘は 1 件の nit と 1 件の deferral 整備のみで、いずれもブロッカーではありません。
✅ 事実確認(公式ドキュメントと突き合わせ)
Agent teams / Prompting Claude Opus 5 を fetch し、本 PR の主張は以下すべて公式と一致することを確認しました。
teammateMode既定値が v2.1.179 で"auto"→"in-process"に変更(公式明記)TeamCreate/TeamDelete廃止・team_nameは受理されるが無視される(公式明記)- split-pane は tmux / iTerm2 必須、VS Code 統合ターミナル / Windows Terminal / Ghostty で非対応(公式の Limitations に同記述)
- トークン線形増・初手 3〜5 teammate・research/review から(公式 Best practices に同記述)
- Opus 5 の「応答と生成ドキュメントが長い / subagent 委譲に積極的」(Opus 5 ページに同記述)
リンク切れ・記述乖離は無し。監査 PR としての精度は高いです。
✅ アーキテクチャ改善として妥当
旧記述の「長大な実装を複数エージェントで分担」を削除し**「使わない場面(逐次・同一ファイル編集・依存過多)」を新設した点は、公式の file-conflict 警告および .agents/rules/common.md 6.9 節の委譲判断との矛盾を解消**しており、監査の狙いどおりです。
🔒 セキュリティ
懸念なし。enabledPlugins に追加した claude-md-management@claude-plugins-official は既存 context7 と同じ公式マーケットプレイス由来で、session-install.sh 側の name-format regex(^[A-Za-z0-9][A-Za-z0-9_.-]*@...$)がインジェクション防止として機能したまま。宣言漏れ→web 未 install の因果も実コード(55〜65 行が enabledPlugins を読む)と一致しています。
🎨 フロントエンド / E2E
UI 差分なし。「src/ tests/ 無変更のため E2E 未実行・CI を最終ゲート」は .agents/rules/common.md 3 章の運用と整合しており妥当な省略です。
🟡 nit(ロジック / Currency)— 「前提モデル」節の "Opus 5" ハードコード
model: "opus[1m]"(Claude Opus 5 / 1M context)
opus は現行世代の最新 Opus を指すエイリアスで、次世代が出れば opus[1m] の解決先も移動します。ここに世代番号 "Opus 5" を固定すると、まさに本 PR が潰そうとしている Currency ドリフトを再導入することになります(実際このレビューを行っているセッションは Opus 4.8 で動作しており、opus が現時点で必ず Opus 5 を指すとは限りません)。
- 提案: 本文は
opus エイリアス(現行世代の最新 Opus / 1M context)のように世代非依存の表現にし、Opus 5 リンクは「現行世代の挙動リファレンス」として残す。あるいは「エイリアス解決先が世代更新されたら本節も見直す」旨を一言添える。
規約の背景を明示する意図自体は良く、リンク先の behavioral 記述も正確なので、表現の微調整のみで解消できます。
🟡 deferral 整備 — plugin?: unbound variable 注記
PR 本文の別 issue 候補について、npm run test(develop)で再現しませんでした。while IFS= read -r plugin ループは入力が空でも plugin を束縛するため set -u には引っかからず、tests/meta/session-install.test.ts 実行時の stderr にも当該行は出ていません。
- 実際に断続再現する不具合なら、
.agents/rules/common.md6.4 節に従い**「必要なら起票」ではなく今 issue 化**するのが規約どおりです。 - 再現しないなら、stale な注記として本文から落とすのが無難です。
いずれも本 PR スコープ外なので、deferral の扱いを締める趣旨の指摘です。
💭 任意(ブロッカーではない)
.claude/settings.json は teammateMode: "tmux" を固定したままですが、既定が in-process に移り、かつ本リポジトリは web セッション主体です。設定値そのものの再考余地はありますが、docs-only の本 PR が caveat を正しく明文化しているので対応不要と考えます。
Generated by Claude Code
opus は現行世代の最新 Opus を指すエイリアスで解決先が移動するため、 世代番号 Opus 5 を固定すると本 PR が潰そうとした Currency ドリフトを 再導入することになる。エイリアスの性質を明記し、Opus 5 は「執筆時点の 現行世代」として behavioral リファレンスに残したうえで、解決先が次世代に 移ったら見直す旨を追記した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
レビューありがとうございます。公式ドキュメント 2 本を実際に fetch して事実確認いただいた点、特に助かりました。 nit(
|
| チェック | 結果 |
|---|---|
npm run format:check |
✅ pass |
npm run test |
✅ 148 files / 2716 passed, 1 skipped |
node_modules/.bin/astro check |
✅ 0 errors / 0 warnings / 0 hints |
Generated by Claude Code
fumtas1k
left a comment
There was a problem hiding this comment.
再レビュー(02e767f)— 指摘はすべて解消、マージ可
前回の 2 点をどちらも的確に対応いただけました。差分(CLAUDE.md / .claude/settings.json のみ)を再確認しました。
✅ nit(Currency ドリフト再導入)— 解消
「前提モデル」節が
opusを現行世代の最新 Opus を指すエイリアス([1m]は 1M context 版、世代更新で解決先が移動)と明記- "Claude Opus 5" を執筆時点の現行世代として位置づけ(世代番号の固定ではなくなった)
- エイリアスの解決先が次世代に移ったら本節と規約前提を見直す旨を追記
という形になり、監査 PR 自身がドリフト源になる懸念は解消。behavioral リファレンスとして Opus 5 リンクを残した判断も適切です。
✅ deferral 整備 — 撤回の判断に同意
unbound variable 注記の撤回に異論ありません。while IFS= read -r plugin が空入力でも plugin を束縛する以上 set -u には該当せず、直接実行 3 回・develop 双方で再現しないなら「再現しない観測」であって §6.4 の対象(スコープ判断による先送り)ではない、という切り分けは正確です。文字化け(plugin?:)が stderr 混線由来という推定も筋が通っています。
✅ teammateMode 据え置き — 合意どおり
docs-only の本 PR で caveat を明文化済みのため、設定値変更は別途で問題なし。
多角観点(セキュリティ / デザイン / ロジック / アーキテクチャ / テスト)で残課題なし。#758 → 本 PR の順というマージ順序の整理も妥当です。当方は同一アカウントのため formal approve は付けられませんが、内容としては LGTM / マージ可です。
Generated by Claude Code
目的
claude-md-improverskill によるCLAUDE.md監査の結果を反映する。**スコア 87/100(Grade B)**で、最大の弱点は Currency(10/15)だった。対象ファイルは
./CLAUDE.md1 件のみ(.claude.local.md/~/.claude/CLAUDE.mdは未使用)。@import先 4 ファイルは全て実在確認済み。修正した 3 点
1. Agent Teams セクション(Currency)
公式ドキュメントと突き合わせ、以下の乖離を修正した。
teammateModeの既定値"auto"→"in-process"に変更された旨を追記"tmux"の前提it2) が必須。VS Code 統合ターミナル / Windows Terminal / Ghostty では非対応と明記TeamCreate/TeamDeleteは廃止済み(事前セットアップ不要)、Agent tool のteam_nameは受理されるが無視されるなぜ重要か: 旧記述の「長大な実装を複数エージェントで分担する場合」は公式の file conflict 警告と衝突し、また
.agents/rules/common.md6.9 節の委譲判断(往復コストを踏まえて委譲しない条件)とも方向性が矛盾していた。2. プラグイン宣言のドリフト(Currency)
claude-md-managementを install したがenabledPluginsに宣言されていなかった。claude plugin installはユーザーレベル設定に書き込むため、宣言漏れだとsession-install.shが読めず web セッションでは install されない。.claude/settings.jsonのenabledPluginsに追加CLAUDE.mdの推奨プラグイン表に行追加3. 前提モデル節を新設(Actionability)
settings.jsonはmodel: "opus[1m]"を指定しているがCLAUDE.mdにその前提が書かれておらず、規約の背景が追えなかった。opusが現行世代の最新 Opus を指すエイリアスであること、規約が執筆時点の現行世代(Claude Opus 5)の既定挙動(応答・生成ドキュメントが長い / subagent 委譲に積極的)を前提にしていること、エイリアスの解決先が世代更新されたら本節を見直すことを出典付きで明示した(世代番号の固定は避けた → レビュー指摘対応)。監査で判明したが修正していないもの
npm ciが worktree 文脈(common.md 6.2.1)にしか書かれていない。実害が小さいため未対応docs/auto scan 除外、loopback deny、workflow_dispatch403 等が事故 PR 番号付きで根拠を残しており、この項目は模範的。変更不要取り下げた注記:
session-install.shのunbound variable当初「
npm run testの stderr に.claude/scripts/session-install.sh: line 65: plugin: unbound variableが出る」という別 issue 候補を記載していたが、再現しないため取り下げた。bash .claude/scripts/session-install.shを 3 回直接実行 → 一度も再現せずset -uは 15 行目にあるが、while IFS= read -r pluginは入力が空でもpluginを束縛するためset -uには引っかからない(レビューの指摘どおり)plugin?:)、hook の stderr がテスト出力に混線した見かけ上の症状と判断.agents/rules/common.md6.4 節は「先送りは必ず issue 化」を求めるが、これはスコープ判断による先送りではなく再現しない観測なので、issue 化せず本文から削除する扱いとした。検証
settings.jsonJSON 妥当性npm run format:checknpm run formatでテーブル整形修正)npm run testnode_modules/.bin/astro checknpm run test:e2eE2E 未実行の理由: diff は
CLAUDE.mdと.claude/settings.jsonのみで、src/tests/に変更がなく E2E が検証する実行時挙動に影響しない。CI を最終ゲートとする。関連
PR #758(
.agents/rules/common.mdへの出力量の規律・委譲判断の追加)と同じ監査の流れだが、対象ファイルが異なるため独立した PRにしている。本 PR の「前提モデル」節は #758 で追加する規約を参照するので、#758 → 本 PR の順でマージするのが自然(逆順でも壊れない)。🤖 Generated with Claude Code
レビュー対応(2026-07-28)
Opus 5ハードコードが Currency ドリフトを再導入するopusがエイリアスである旨を明記し、世代番号は「執筆時点の現行世代」として位置づけ、解決先が移ったら見直す旨を追記02e767funbound variableは再現しないので issue 化するか注記を落とすteammateMode: "tmux"設定値そのものの再考nit 修正の差分
指摘のとおり、監査 PR 自身が Currency ドリフトの発生源になるのは本末転倒でした。エイリアスの性質を明示したうえで、behavioral リファレンスとしての Opus 5 リンクは残しています。
再検証(
02e767f時点)npm run format:checknpm run testnode_modules/.bin/astro check