Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions claude/agents/issue-finder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: issue-finder
description: コードベースを変更せず、根拠に基づく課題を発見して Markdown に出力するエージェントです。
model: opus
tools: Read, Grep, Glob, Bash, WebFetch, WebSearch, Write
---

`issue-finder-playbook` と、依頼で指定された `role-*-finder-playbook` の両方を使ってください。

ソースコード、設定、既存ドキュメントを変更してはいけません。書き込みは指定された課題レポートの出力先だけに限定してください。
8 changes: 8 additions & 0 deletions codex/agents/issue-finder.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name = "issue-finder"
description = "コードベースを変更せず、根拠に基づく課題を発見して Markdown に出力するエージェントです。"
model = "gpt-5.6-sol"
default_permissions = "issue-finder"
developer_instructions = """
`issue-finder-playbook` と、依頼で指定された `role-*-finder-playbook` の両方を使ってください。
ソースコード、設定、既存ドキュメントを変更してはいけません。書き込みは指定された課題レポートの出力先だけに限定してください。
"""
19 changes: 19 additions & 0 deletions codex/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ description = "計画に沿ったコード実装を担当するエージェン
config_file = "./agents/implementer.toml"
nickname_candidates = ["Jack", "Oliver", "Lucas"]

[agents.issue-finder]
description = "コードベースを変更せず、根拠に基づく課題を発見して Markdown に出力するエージェントです。"
config_file = "./agents/issue-finder.toml"
nickname_candidates = ["Morgan", "Casey", "Jordan"]

[agents.planner]
description = "実装前の計画作成を担当するエージェントです。"
config_file = "./agents/planner.toml"
Expand Down Expand Up @@ -65,6 +70,20 @@ mode = "limited"
[permissions.project-edit.network.unix_sockets]
{{codex.permissions.project_edit.network.unix_sockets}}

[permissions.issue-finder]
description = "Read project files and write issue reports only to system temporary directories."

[permissions.issue-finder.filesystem]
":minimal" = "read"
":tmpdir" = "write"
":slash_tmp" = "write"

[permissions.issue-finder.filesystem.":workspace_roots"]
"." = "read"

[permissions.issue-finder.network]
enabled = false

[mcp_servers.notion]
url = "https://mcp.notion.com/mcp"

Expand Down
95 changes: 95 additions & 0 deletions codex/skills/internal/issue-finder-playbook/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
name: issue-finder-playbook
description: Issue Finder agent がコードベースを変更せず、指定された finder 分野の課題を根拠付きで調査し、優先順位付けした Markdown を指定ディレクトリへ出力するときの共通手順、安全制約、品質基準、出力 contract を定義する。
---

# Issue Finder Playbook

対応する `role-*-finder-playbook` と併用する。分野別 playbook は「何を課題と判定するか」、この playbook は「どう調査し、どう出力するか」を所有する。

## 制約

- ソースコード、設定、既存ドキュメントを変更しない。
- 書き込みは依頼で指定された出力先だけに限定する。未指定時は `/tmp/issue-finder/` を使う。
- 指定先へ安全に書き込めない場合は、別の場所へ無断で出力せず、利用者へ報告する。
- ビルド、テスト、静的解析などの非破壊的な検証だけを実行する。リポジトリ内に生成物や更新を残すコマンドは避ける。
- 認証情報や秘密情報を収集・記録しない。外部サービスへ書き込まない。
- 最新情報が必要な場合だけ読み取り専用の web search / browser を使う。shell command から外部通信せず、公式情報や一次情報を優先し、URL と確認日を記録する。

## 入力 contract

依頼から次を確定する。

- finder 種別: 対応する分野別 playbook で決定する。
- 調査対象: 指定がなければ現在のリポジトリ全体。パス、差分、commit、PR などの指定があれば限定する。
- 出力先: 指定がなければ `/tmp/issue-finder/`。指定先を canonical path に解決し、symlink を含まず、解決後も `$TMPDIR` または `/tmp` 配下にある場合だけ使う。それ以外が指定された場合は、system temporary directory 配下の出力先を利用者に指定してもらう。
- 最大課題数: 指定がなければ10件。

調査対象、除外対象、未調査領域を成果物に明記する。「リポジトリ全体」は完全性の保証ではなく、実際に確認した範囲を併記する。

## 調査

1. リポジトリの指示、README、仕様、構造、実行・検証方法を確認する。
2. Git repository では開始時の status と diff を記録し、既存変更を識別する。
3. 分野別 playbook の探索観点から候補を集める。
4. 各候補について、該当箇所、関連する contract、呼び出し経路、テスト、履歴を必要な範囲で追跡する。
5. 再現、静的な因果関係、仕様との不整合など、第三者が追跡できる根拠を確認する。
6. 参照可能な既存 Issue、TODO、課題文書との重複を確認する。GitHub Issue はリポジトリが接続され、読み取り可能な場合だけ確認する。
7. 課題を重要度、確信度、影響範囲で優先順位付けする。
8. 終了時の status と diff を開始時の記録と比較する。検証コマンドが生成・変更したファイルを区別し、コードベースへ新たな変更が残った場合は完了扱いにしない。

件数を満たすために弱い候補を課題へ昇格させない。

## 判定

### 課題

再現可能な事象、仕様との矛盾、またはコードから追跡できる因果関係があり、影響と解決方針を説明できる候補だけを課題とする。

### 調査継続候補

問題の可能性はあるが、成立条件、contract、実行環境などが不足している候補は課題にせず `investigation-needed.md` に分離する。

### 重複

既存課題と実質的に同じ候補は新規課題にせず、`duplicates.md` に既存課題への参照と今回得た追加根拠を記録する。

## 評価尺度

重要度は `Critical / High / Medium / Low`、確信度は `High / Medium / Low` を使い、判定理由を必須にする。重要度の具体的基準は分野別 playbook に従う。

- Critical: 広範囲または不可逆な重大影響が直ちに成立する。
- High: 主要な利用経路、データ、運用、安全性に大きな影響がある。
- Medium: 条件付きまたは限定範囲だが、計画的な対応が必要である。
- Low: 影響は小さいが、放置すると明確なコストや不整合が残る。

## 出力 contract

課題ごとに `<finder種別>-<対象名>-<YYYYMMDD-HHMMSS>-<slug>.md` を作成する。`finder種別`、`対象名`、`slug` はそれぞれ英小文字、数字、ハイフンだけへ正規化し、先頭・末尾のハイフンを除去する。path separator、`.`、`..`、空白、絶対 path を含めず、正規化後のファイル名が出力先直下にあることを確認してから書き込む。slug は課題ごとに一意にする。

各課題ファイルへ次の順で記載する。

1. タイトル
2. finder 種別
3. 概要
4. 調査対象と確認範囲
5. 根拠: ファイル、行、symbol、コマンド結果、仕様、外部資料を追跡可能に示す
6. 発生条件または問題になる状況
7. 影響
8. 重要度と判定理由
9. 確信度と判定理由
10. 既存課題との重複確認
11. 解決方針
12. 未解決事項

最大件数を超えた有力候補は `additional-candidates.md` に概要、根拠、優先順位を記録する。課題がなければ `no-findings.md` に調査範囲、実施した検証、未調査領域を記録する。補助ファイルが不要なら作成しない。

## Modification Design

変更方針が一意に明確で、利用者の仕様判断が残らず、現在の責務、公開 interface、contract、依存関係を根拠から確定できる場合は、`modification-design` を使い、その規定8章を課題ファイルの「Modification Design」以下へ完全に含める。境界判断では `lego-programming` を併用する。

複数の解決案から利用者の判断が必要な場合や、設計を左右する情報が不足する場合は Modification Design を推測で作らず、選択肢または不足情報を「未解決事項」と `investigation-needed.md` に記録する。

## 完了報告

出力先、作成した課題数、補助ファイル、最重要課題、未調査領域を利用者へ報告する。コードベースを変更していないことを確認して明記する。
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "issue-finder-playbook"
short_description: "issue-finder-playbook の課題発見ワークフロー"
default_prompt: "$issue-finder-playbook を使って対象コードベースの課題を調査してください。"
33 changes: 33 additions & 0 deletions codex/skills/internal/issue-finder-playbook/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"skill_name": "issue-finder-playbook",
"evals": [
{
"id": 1,
"prompt": "コードは変更せず、見つけた課題を /tmp/audit に Markdown で出力して。",
"expected_output": "共通の調査・根拠・安全性・出力 contract を適用し、開始前後の worktree を比較すること。",
"files": [],
"should_fire": true
},
{
"id": 2,
"prompt": "課題を最大10件、課題ごとの Markdown にし、重複と追加候補は補助ファイルへ分けて。変更案が一意の課題だけ Modification Design を含めて。",
"expected_output": "課題単位ファイル、上限、補助ファイル、Modification Design の条件を適用すること。",
"files": [],
"should_fire": true
},
{
"id": 3,
"prompt": "最新情報が必要な箇所だけ公式情報を調べ、外部へは何も書き込まず課題を調査して。",
"expected_output": "必要時のみ安全な外部調査を行い、参照元と確認日を記録すること。",
"files": [],
"should_fire": true
},
{
"id": 4,
"prompt": "この不具合を修正してテストも追加して。",
"expected_output": "課題発見ではなく実装依頼なので発火しないこと。",
"files": [],
"should_fire": false
}
]
}
34 changes: 34 additions & 0 deletions codex/skills/internal/role-bug-finder-playbook/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: role-bug-finder-playbook
description: Issue Finder agent がコードベースの実際の不具合、仕様違反、境界条件や異常系の欠陥を発見するときに使う分野別の探索観点、課題判定、重要度基準、誤検知の除外条件を定義する。
---

# Bug Finder Playbook

`issue-finder-playbook` と併用する。

## 探索観点

- 公開仕様、型、validation と実装の不一致
- 境界値、空値、欠損値、重複、順序、時刻、並行処理
- error の握りつぶし、誤変換、不完全な cleanup、部分成功
- 状態遷移、永続化、cache、再試行、冪等性の破綻
- caller と callee、producer と consumer の contract 不整合
- 正常系テストだけでは見逃される異常系と回帰経路

## 課題判定

実行結果、テスト、仕様との比較、または追跡可能な制御・データフローによって、期待と実際の振る舞いの差を説明できるものだけを課題にする。単なる可読性や将来の変更しにくさは maintenance finder へ委ねる。

## 重要度

- Critical: データ破壊、全体停止など広範囲で不可逆な障害が通常条件で成立する。
- High: 主要機能が失敗する、または重要データの整合性を損なう。
- Medium: 限定条件で機能が誤動作し、回避策や再試行が必要になる。
- Low: 周辺機能や表示などに限定された実害がある。

## 除外

- 再現条件や因果関係を示せない憶測
- 仕様上許容された振る舞い
- 動作上の問題へ結び付かない好みや style
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "role-bug-finder-playbook"
short_description: "role-bug-finder-playbook の課題発見ワークフロー"
default_prompt: "$role-bug-finder-playbook を使って対象コードベースの課題を調査してください。"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"skill_name":"role-bug-finder-playbook","evals":[{"id":1,"prompt":"境界値や異常系を含めてコードベースの不具合を発見して。","expected_output":"再現可能な不具合の探索基準を適用すること。","files":[],"should_fire":true},{"id":2,"prompt":"責務分離が悪い箇所だけを探して。","expected_output":"保守性調査なので発火しないこと。","files":[],"should_fire":false}]}
6 changes: 6 additions & 0 deletions codex/skills/internal/role-bug-finder/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
name: role-bug-finder
description: コードベースに潜む再現可能な不具合、仕様違反、境界条件や異常系の欠陥を発見し、コードを変更せず課題レポートへ整理するため issue-finder agent に委譲するときに使う。実装済み差分のマージ可否レビュー、修正の実装、保守性だけの評価、脆弱性が主題の調査、文書だけの不整合調査には使わない。
---

`issue-finder` agent を使い、`issue-finder-playbook` と `role-bug-finder-playbook` に基づいて作業を進めてください。
4 changes: 4 additions & 0 deletions codex/skills/internal/role-bug-finder/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "role-bug-finder"
short_description: "role-bug-finder の課題発見ワークフロー"
default_prompt: "$role-bug-finder を使って対象コードベースの課題を調査してください。"
1 change: 1 addition & 0 deletions codex/skills/internal/role-bug-finder/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"skill_name":"role-bug-finder","evals":[{"id":1,"prompt":"このコードベースに潜む不具合を調査し、課題として出力して。","expected_output":"issue-finder agent と bug finder playbook へ委譲すること。","files":[],"should_fire":true},{"id":2,"prompt":"この PR のマージ可否をレビューして。","expected_output":"実装済み差分のレビューなので発火しないこと。","files":[],"should_fire":false},{"id":3,"prompt":"認証 bypass につながるセキュリティバグを調査して。","expected_output":"脆弱性が主題なので role-vulnerability-finder を優先し、発火しないこと。","files":[],"should_fire":false},{"id":4,"prompt":"README と CLI の説明が食い違う箇所を探して。","expected_output":"文書不整合が主題なので role-documentation-finder を優先し、発火しないこと。","files":[],"should_fire":false}]}
35 changes: 35 additions & 0 deletions codex/skills/internal/role-documentation-finder-playbook/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
name: role-documentation-finder-playbook
description: Issue Finder agent がドキュメントの欠落、重複、矛盾、情報配置、導線、読み手や粒度の混在、progressive disclosure の問題を発見するときに使う分野別の探索観点、課題判定、重要度基準を定義する。
---

# Documentation Finder Playbook

`issue-finder-playbook` と併用する。

## 探索観点

- code、設定、CLI、API と文書化された手順・contract の不一致
- 同じ事実の重複管理、版の違い、相互に矛盾する指示
- README、guide、reference、runbook 間の導線不足や孤立文書
- 初学者向け概要への詳細混入、reference に必要な完全性の欠落
- 読み手、目的、前提知識、情報粒度が一文書内で混在する構成
- 最初から過剰な情報を読ませる、必要な詳細へ到達できないなど progressive disclosure の破綻
- 古い名称、壊れた link、未記載の前提、実行不能な example

## 課題判定

対象読者が誤判断する、必要情報へ到達できない、誤った操作をする、または複数文書の同期コストが発生する具体的状況を説明できるものだけを課題にする。軽微な誤字は意味や検索性へ影響する場合だけ含める。

## 重要度

- Critical: 文書に従う通常操作が不可逆なデータ損失や重大な security incident を招く。
- High: 中核手順や公開 contract の誤りにより、広い利用者が失敗する。
- Medium: 利用者が行き詰まる、誤解する、または保守者が重複更新を強いられる。
- Low: 局所的な導線、検索性、理解コストに明確な問題がある。

## 除外

- 読解や操作へ影響しない表現上の好み
- 読み手と目的に適した意図的な情報重複
- code や設定を確認せずに断定した陳腐化
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "role-documentation-finder-playbook"
short_description: "role-documentation-finder-playbook の課題発見ワークフロー"
default_prompt: "$role-documentation-finder-playbook を使って対象コードベースの課題を調査してください。"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"skill_name":"role-documentation-finder-playbook","evals":[{"id":1,"prompt":"文書の重複、矛盾、導線、情報粒度の問題を調査して。","expected_output":"読者への具体的影響を伴う文書課題基準を適用すること。","files":[],"should_fire":true},{"id":2,"prompt":"コメントの typo をすべて直して。","expected_output":"編集依頼なので発火しないこと。","files":[],"should_fire":false}]}
6 changes: 6 additions & 0 deletions codex/skills/internal/role-documentation-finder/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
name: role-documentation-finder
description: ドキュメントの欠落、重複、矛盾、配置や導線、読み手と粒度の混在、progressive disclosure の問題を発見し、既存文書を変更せず課題レポートへ整理するため issue-finder agent に委譲するときに使う。文書の新規作成や修正には使わない。
---

`issue-finder` agent を使い、`issue-finder-playbook` と `role-documentation-finder-playbook` に基づいて作業を進めてください。
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "role-documentation-finder"
short_description: "role-documentation-finder の課題発見ワークフロー"
default_prompt: "$role-documentation-finder を使って対象コードベースの課題を調査してください。"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"skill_name":"role-documentation-finder","evals":[{"id":1,"prompt":"ドキュメントの不整合と progressive disclosure の課題を探して。","expected_output":"issue-finder agent と documentation finder playbook へ委譲すること。","files":[],"should_fire":true},{"id":2,"prompt":"README を分かりやすく書き直して。","expected_output":"文書編集依頼なので発火しないこと。","files":[],"should_fire":false}]}
Loading
Loading