skills/diagnose/SKILL.md
コードベースを自律的に診断し、改善点を発見→フィルタリング→GitHub Issue 起票まで行う。 実装はユーザーが /ship で別途実行する。full プリセット専用。 「/diagnose」「診断」「コード診断」と言った時に使用。
npx skillsauth add hirokimry/vibecorp diagnoseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ultrathink
[!IMPORTANT] このスキルは Issue 起票のみを行い、コード変更は一切行わない。起票と実装を分離することで暴走を防止する。 3 者承認ゲート(CISO + CPO + SM)が不可領域(認証 / 暗号 / 課金構造 / ガードレール / MVV / CI エージェント)を自動除外する。 diagnose-active スタンプの作成と削除を正常終了・異常終了を問わず必ず実行する(
diagnose-guard.shの保護解除)。 介入ポイントではユーザーの指示を待つ(自動でスキップしない)。
コードベースを自律的に診断し、改善点を発見してフィルタリング後に GitHub Issue として起票する。実装は行わない。起票と実装を分離することで暴走を防止する。
スピード/UX 観点はモデル指定・コスト最適化には一切踏み込まない。モデル指定の変更提案(Opus → Sonnet 等)・エージェント削減・合議制回数削減・並列度自体の削減・max_issues_per_run 等のコスト上限値の変更は CFO 管轄(Issue #354 系)に閉じ込め、品質劣化ルートを遮断する。スピード/UX 観点は逐次処理の並列化余地・同期待ちボトルネック・フック実行時間の肥大化・スキル間の冗長な再実行のみを対象とする。
/vibecorp:diagnose # 発見→フィルタ→確認→起票
/vibecorp:diagnose --dry-run # レポート出力のみ(起票しない)
/vibecorp:diagnose --scope <path> # 走査対象を限定
rules/autonomous-restrictions.md 準拠)vibecorp.yml の preset を確認する。full 以外の場合は以下を出力して終了する。
/vibecorp:diagnose は full プリセット専用です。現在のプリセット: <preset>
awk '/^preset:/ { print $2 }' "$CLAUDE_PROJECT_DIR/.claude/vibecorp.yml"
vibecorp.yml の diagnose セクションから設定を読み込む。セクションが存在しない場合はデフォルト値を使用する。
| 設定キー | デフォルト値 | 説明 |
|---------|------------|------|
| max_issues_per_run | 7 | 1 回の実行で起票する最大 Issue 数 |
| max_issues_per_day | 14 | 1 日に起票する最大 Issue 数 |
| max_files_per_issue | 10 | 1 つの Issue に含める最大ファイル数 |
| scope | "" | デフォルトの走査スコープ(空 = 全体) |
| forbidden_targets | (下記参照) | 改善対象から除外するパターン |
forbidden_targets のデフォルト値:
hooks/*.shvibecorp.ymlMVV.mdSECURITY.mdPOLICY.mdskills/**(再帰マッチ。** が .* に変換され、.claude/skills/ 配下の全 SKILL.md・サブディレクトリを保護する)source "$CLAUDE_PROJECT_DIR"/.claude/lib/common.sh
stamp_dir="$(vibecorp_state_mkdir)"
touch "${stamp_dir}/diagnose-active"
このスタンプが存在する間、diagnose-guard.sh が保護ファイルへの変更を deny する。
以下の 4 つを並行して実行する(4つを並行して実行する)。
/vibecorp:harvest-all --dry-run を実行してください。
結果のレポートを取得する。--scope が指定されている場合は /vibecorp:harvest-all --dry-run --scope <path> で実行する。
CTO エージェントに依頼する。プロンプトは skills/diagnose/prompts/agent-call-cto-tech-debt.md を参照する。
--scope が指定されている場合はそのディレクトリに限定して分析する。
CPO エージェントに依頼する。プロンプトは skills/diagnose/prompts/agent-call-cpo-mvv-alignment.md を参照する。
--scope が指定されている場合はそのディレクトリに限定して分析する。
claude-code-guide エージェントに依頼する。プロンプトは skills/diagnose/prompts/agent-call-claude-code-guide-drift.md を参照する。
--scope が指定されている場合はそのディレクトリに限定して分析する。
スコープは仕様ドリフト検出に限定される。以下は 4d の対象外とする。
対象ファイル:
.claude/hooks/*.sh.claude/skills/*/SKILL.md.claude/agents/*.md.claude/settings.json*.mcp.json検出例:
PreToolUse 等の旧名)フォールバック動作: claude-code-guide 利用不可時は ワークフローを即時停止 し、ユーザー介入を要求する。
claude-code-guide が利用不可(外部依存の障害等)の場合は /vibecorp:diagnose 全体を停止するprompt-writing.md の「claude-code-guide 参照(MUST)」と整合させる)docs.claude.com を WebFetch で直参照する等)に切り替えるまで待機するデータ取得方式:
claude-code-guide 側に委譲する(/vibecorp:diagnose 自身はキャッシュを持たない)claude-code-guide が WebFetch / WebSearch で docs.claude.com を直接参照する設計とするdocs/cost-analysis.md を参照)CISO エージェントに発見した改善候補を渡し、自己制約緩和に該当する候補を除外させる。プロンプトは skills/diagnose/prompts/agent-call-ciso-self-constraint.md を参照する。
CISO が「除外」と判定した候補はリストから除外する。
CPO エージェントに残った候補を渡し、MVV との整合性をチェックさせる。プロンプトは skills/diagnose/prompts/agent-call-cpo-mvv-filter.md を参照する。
CPO が「除外」と判定した候補はリストから除外する。
SM エージェントに残った候補を渡し、rules/autonomous-restrictions.md の不可領域に該当するものを除外させる。プロンプトは skills/diagnose/prompts/agent-call-sm-autonomous-filter.md を参照する。
SM が「除外」と判定した候補はリストから除外する。
3者承認ゲート: ここまでで CISO + CPO + SM の 3 者フィルタを通過した候補のみが /vibecorp:autopilot → /vibecorp:ship-parallel での自律実行対象となる。
既存の [diagnose] ラベル付き Issue を確認する。
gh issue list --label "diagnose" --state open --json number --jq 'length'
当日起票済みの diagnose Issue 数を確認する。
gh issue list --label "diagnose" --state all --json createdAt --jq '[.[] | select(.createdAt | startswith("'$(date -u +%Y-%m-%d)'"))] | length'
max_issues_per_run を超える場合、超過分を候補から除外するmax_issues_per_day を超える場合、超過分を候補から除外する## /vibecorp:diagnose 改善候補
| # | カテゴリ | 優先度 | タイトル | 対象ファイル | 根拠 |
|---|---------|--------|---------|-------------|------|
| 1 | 技術的負債 | 高 | {タイトル} | {ファイルパス} | {理由} |
| 2 | テスト不足 | 中 | {タイトル} | {ファイルパス} | {理由} |
### フィルタ結果(3者承認ゲート)
- 発見: {n} 件
- CISO 除外: {n} 件(自己制約緩和)
- CPO 除外: {n} 件(MVV 不整合)
- SM 除外: {n} 件(不可領域 — 認証 / 暗号 / 課金構造 / ガードレール / MVV / CI エージェント)
- 上限除外: {n} 件
- 最終候補: {n} 件
起票しますか?
- 全て起票: y
- 選択して起票: 番号をカンマ区切りで指定(例: 1,3)
- 中止: n
--dry-run の場合はこのレポートを出力して終了する(スタンプも削除する)。
ユーザーが承認した候補について、/vibecorp:issue スキルで起票する。
各 Issue には以下を付与する。
diagnose[diagnose]/vibecorp:plan-review-loop が完了条件を前提に走るため、空欄にしない)/vibecorp:diagnose が自律起票する Issue は、以下のセクション構造で本文を生成する。
## 💡 概要
<改善候補の概要 — 動作主語で「〜になる」「〜できるようになる」と書く>
## 🎯 背景
<なぜこの改善が必要か — CTO/CPO 分析の根拠>
## 📝 提案
<具体的な改善内容>
## ✅ 完了条件
<!-- 検証可能なチェックリスト形式(acceptance criteria)。空欄不可。 -->
- [ ] <検証可能な完了条件 1>
- [ ] <検証可能な完了条件 2>
- [ ] tests/ 配下に検証テストが追加され、CI で通っている
## 📍 関連ファイル
<!-- 触れるファイル・モジュールのパス(relevant file locations)。空欄不可。 -->
- `<対象ファイル 1>`
- `<対象ファイル 2>`
---
この Issue は /vibecorp:diagnose による自律改善ループで自動起票されました。
実装は /vibecorp:ship で別途実行してください。
## ✅ 完了条件 と ## 📍 関連ファイル セクションは必須。/vibecorp:diagnose が自律起票する場合も、CTO / CPO 分析時点でこの 2 要素を確定させてから /vibecorp:issue に渡すことで、/vibecorp:issue の CPO 4 要素チェック(ステップ 6b)を確実に通過させる。
source "$CLAUDE_PROJECT_DIR"/.claude/lib/common.sh
rm -f "$(vibecorp_state_path diagnose-active)"
## /vibecorp:diagnose 完了
### 起票済み Issue
| # | タイトル | URL |
|---|---------|-----|
| 1 | {タイトル} | {URL} |
### サマリ
- 発見: {n} 件
- フィルタ除外: {n} 件
- 起票: {n} 件
- スキップ(ユーザー判断): {n} 件
以下の状況ではユーザーに報告して判断を委ねる。
| 状況 | タイミング | |------|-----------| | full プリセットでない | ステップ 1 | | 改善候補が 0 件 | ステップ 7 | | ユーザーが起票を承認しない | ステップ 8 | | gh CLI が利用できない | ステップ 9 |
forbidden_targets に含まれるファイルの変更を提案しない--force、--hard、--no-verify は使用しない\(...) を使わない — Bash 上で \ がエスケープ文字、() がサブシェルとして解釈され、意図しない展開やパースエラーを引き起こすため。必ず + で結合する2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しない(根拠).claude/rules/autonomous-restrictions.md.claude/hooks/diagnose-guard.sh/vibecorp:issue/vibecorp:autopilot / /vibecorp:ship-parallel.claude/rules/prompt-writing.md.claude/rules/markdown.md.claude/rules/shell.mddata-ai
skills/**/SKILL.md 内に embed された 5 行以上のエージェント呼出プロンプトテンプレ・長文ブロックを .claude/rules/notification-prompt-extraction.md 基準で skills/<skill>/prompts/<name>.md に切り出す migration skill。「/prompts-extract-all」「プロンプト切り出し」「プロンプト extract」「SKILL.md プロンプト migration」と言った時に使用。検出は awk でフェンスコードブロックを抽出して行数カウント、要否判定は LLM が閾値・用途軸・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
documentation
.github/workflows/**/*.{yml,yaml} の --body 通知文と hooks/**/*.sh の長文 echo/printf/heredoc を .claude/rules/notification-prompt-extraction.md 基準で個別 .md ファイルに切り出す migration skill。「/notifications-extract-all」「通知文切り出し」「通知文 extract」「workflow 通知 migration」と言った時に使用。検出は grep で機械絞り込み、要否判定は LLM が閾値・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
development
`**/*.sh` / `**/*.js` / `**/*.ts` / `**/*.py` / `**/*.rb` / `**/*.go` / 設定ファイル等のコード内コメントを一括棚卸しし、 `.claude/rules/code-comments.md` と機械的に照合する。 diff 提案 → CEO 承認 → 書換の 2 段階で自動マージを禁じる。 生成コード・`node_modules`・`vendor`・`dist`・`build` 等は除外する。 「/vibecorp:comments-rewrite-all」「コメント全書き直し」「コード内コメント棚卸し」 と言った時に使用。
development
skills/**/SKILL.md・agents/*.md・.claude/rules/*.md を .claude/rules/prompt-writing.md 基準で一括書き直し提案するスキル。「/prompts-rewrite-all」「プロンプト書き直し」「スキル一括書き直し」「エージェント書き直し」と言った時に使用。claude-code-guide サブエージェントで Claude Code 公式仕様(docs.claude.com)を確認し、prompt-writing.md の指針 MUST / 禁止パターンと照合する。diff 提案 → CEO 承認 → 書き換えの 2 段階で挙動を壊さず適用する。自動マージ禁止。