Plan
目次
- skill の情報
- 参考: SKILL.md 全文
- 基本のふるまい
- 書き出すもの
- 保存先
- 対話のしかた
- 概要
- 実装計画をきちんと書くと効く場面
- ひと口サイズの粒度
- 計画書の構成
- 冒頭(必須)
- タスクの書式
- Writing Process
- Step 1: Understand Requirements
- Step 2: Explore the Codebase
- ステップ 3: 進め方を決める
- ステップ 4: タスクを書く
- ステップ 5: 細部まで書き込む
- ステップ 6: 計画書を見直す
- 原則
- DRY(繰り返さない)
- YAGNI(今要らないものは作らない)
- TDD(テスト駆動開発)
- こまめなコミット
- よくある失敗
- あいまいなタスク
- コードが途中までしかない
- 確認手順がない
- ファイルパスがない
- 実行への引き継ぎ
- 覚えておくこと
.hermes/plans/ に markdown の計画書を書きます。実行はしません。
skill の情報
| 提供元 | 最初から入っています |
| パス | skills/software-development/plan |
| バージョン | 2.0.0 |
| 作者 | Hermes Agent(文章の作法は obra/superpowers から取り入れています) |
| ライセンス | MIT |
| 対応プラットフォーム | linux, macos, windows |
| タグ | planning, plan-mode, implementation, workflow, design, documentation |
| 関連 skill | subagent-driven-development, test-driven-development, requesting-code-review |
参考: SKILL.md 全文
計画モード
実行ではなく計画を求められたときに、この skill を使います。
基本のふるまい
このターンでは、計画を立てることだけを行います。
- コードは実装しません。
- 計画の markdown ファイル以外、プロジェクトのファイルは編集しません。
- 状態を変えるターミナルコマンドの実行、コミット、プッシュ、外部への操作は行いません。
- 必要に応じて、読み取りだけのコマンドやツールでリポジトリなどの状況を調べてかまいません。
- 成果物は、作業中のワークスペース内の
.hermes/plans/に保存した markdown の計画書です。
書き出すもの
具体的で、そのまま動ける markdown の計画書を書きます。
関係する範囲で、次の項目を入れます。
- 目的
- 現状と前提
- 提案する進め方
- 手順を追った計画
- 変更しそうなファイル
- テストと検証
- リスク、トレードオフ、未確定の論点
コードに関わる作業なら、正確なファイルパス、対象になりそうなテスト、検証の手順を入れます。
保存先
write_file を使い、次の場所に計画書を保存します。
.hermes/plans/YYYY-MM-DD_HHMMSS-<slug>.md
このパスは、作業中のディレクトリ(バックエンドのワークスペース)からの相対パスとして扱います。Hermes のファイル操作ツールはバックエンドを意識して動くので、この相対パスのままにしておけば、local、docker、ssh、modal、daytona のどのバックエンドでも計画書がワークスペースと一緒に残ります。
実行環境から保存先が指定されている場合は、そのパスをそのまま使います。 指定がなければ、.hermes/plans/ の下に日時入りのファイル名を自分で決めて作ります。
対話のしかた
- 依頼の内容がはっきりしていれば、そのまま計画書を書きます。
/planだけで指示が添えられていない場合は、そこまでの会話の流れから作業内容を読み取ります。- 本当に情報が足りないときは、当て推量で進めず、短く一つだけ確認します。
- 保存し終えたら、何を計画したかと保存先のパスを簡潔に伝えます。
よい計画書の書き方
ここから先は、*よい*実装計画を書くための作法です。上で作る markdown ファイルの中身にあたります。
概要
実装する人はこのコードベースの前提知識がまったくなく、センスも当てにならない、という想定で計画書を書きます。必要なものはすべて書き残します。どのファイルに触るか、コードの全文、テストの実行コマンド、確認すべきドキュメント、動作の確かめ方。作業は小さく刻みます。DRY、YAGNI、TDD、こまめなコミット。
実装する人は開発者としては優秀だが、道具立てや対象領域についてはほとんど知らない、と考えてください。テストの設計にもあまり詳しくないものとします。
大事な原則: よい計画書は、実装のしかたを自明にします。誰かが推測しなければならないなら、その計画書はまだ不完全です。
実装計画をきちんと書くと効く場面
次の前には必ず書きます:
- 手順の多い機能を実装するとき
- 複雑な要件を分解するとき
- subagent-driven-development でサブエージェントに任せるとき
次の理由では省きません:
- 簡単そうな機能に見える(思い込みがバグを生みます)
- 自分で実装するつもりだ(あとの自分に案内が要ります)
- 一人で作業している(記録は残す価値があります)
ひと口サイズの粒度
1 タスク = 集中して 2〜5 分の作業。
各ステップは 1 つの動作だけにします。
- 「失敗するテストを書く」— 1 ステップ
- 「実行して、確かに失敗することを確かめる」— 1 ステップ
- 「テストを通す最小限のコードを書く」— 1 ステップ
- 「テストを実行して、通ることを確かめる」— 1 ステップ
- 「コミットする」— 1 ステップ
大きすぎる例:
### Task 1: Build authentication system
[50 lines of code across 5 files]ちょうどよい大きさ:
### Task 1: Create User model with email field
[10 lines, 1 file]
### Task 2: Add password hash field to User
[8 lines, 1 file]
### Task 3: Create password hashing utility
[15 lines, 1 file]計画書の構成
冒頭(必須)
すべての計画書は、次の形で始めます。
# [Feature Name] Implementation Plan
> **For Hermes:** Use subagent-driven-development skill to implement this plan task-by-task.
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
---タスクの書式
各タスクは、次の形にそろえます。
### Task N: [Descriptive Name]
**Objective:** What this task accomplishes (one sentence)
**Files:**
- Create: `exact/path/to/new_file.py`
- Modify: `exact/path/to/existing.py:45-67` (line numbers if known)
- Test: `tests/path/to/test_file.py`
**Step 1: Write failing test**
```python
def test_specific_behavior():
result = function(input)
assert result == expectedStep 2: Run test to verify failure
Run: pytest tests/path/test.py::test_specific_behavior -v Expected: FAIL — "function not defined"
Step 3: Write minimal implementation
def function(input):
return expectedStep 4: Run test to verify pass
Run: pytest tests/path/test.py::test_specific_behavior -v Expected: PASS
Step 5: Commit
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
## Writing Process
### Step 1: Understand Requirements
Read and understand:
- Feature requirements
- Design documents or user description
- Acceptance criteria
- Constraints
### Step 2: Explore the Codebase
Use Hermes tools to understand the project:
```python
# Understand project structure
search_files("*.py", target="files", path="src/")
# Look at similar features
search_files("similar_pattern", path="src/", file_glob="*.py")
# Check existing tests
search_files("*.py", target="files", path="tests/")
# Read key files
read_file("src/app.py")ステップ 3: 進め方を決める
決めること。
- どの設計パターンにするか
- ファイルをどう分けるか
- 必要になる依存関係
- テストの方針
ステップ 4: タスクを書く
次の順にタスクを並べます。
- 下ごしらえ、土台づくり
- 中心となる機能(それぞれ TDD で)
- 例外的なケース
- 結合
- 後片づけと記録
ステップ 5: 細部まで書き込む
各タスクに、次を入れます。
- 正確なファイルパス(「設定ファイル」ではなく
src/config/settings.py) - 省略のないコード例(「バリデーションを足す」ではなく、実際のコードそのもの)
- 正確なコマンドと、期待される出力
- そのタスクが本当に動いたことを示す確認手順
ステップ 6: 計画書を見直す
確かめること。
- [ ] タスクが順を追っていて、筋が通っている
- [ ] 各タスクがひと口サイズ(2〜5 分)になっている
- [ ] ファイルパスが正確である
- [ ] コード例がそのまま貼り付けられる形になっている
- [ ] コマンドが正確で、期待される出力が書いてある
- [ ] 抜けている前提がない
- [ ] DRY、YAGNI、TDD の考え方が行き渡っている
原則
DRY(繰り返さない)
よくない例: 同じバリデーションを 3 か所にコピーする よい例: バリデーションを関数にまとめ、どこからもそれを呼ぶ
YAGNI(今要らないものは作らない)
よくない例: 将来の要件に備えて「柔軟さ」を足しておく よい例: いま必要なものだけを実装する
# Bad — YAGNI violation
class User:
def __init__(self, name, email):
self.name = name
self.email = email
self.preferences = {} # Not needed yet!
self.metadata = {} # Not needed yet!
# Good — YAGNI
class User:
def __init__(self, name, email):
self.name = name
self.email = emailTDD(テスト駆動開発)
コードを生むタスクには、TDD のひと回りをすべて入れます。
- 失敗するテストを書く
- 実行して、失敗することを確かめる
- 最小限のコードを書く
- 実行して、通ることを確かめる
詳しくは test-driven-development skill を見てください。
こまめなコミット
タスクが 1 つ終わるたびにコミットします。
git add [files]
git commit -m "type: description"よくある失敗
あいまいなタスク
よくない例: 「認証を追加する」 よい例: 「email と password_hash を持つ User モデルを作る」
コードが途中までしかない
よくない例: 「Step 1: バリデーション関数を足す」 よい例: 「Step 1: バリデーション関数を足す」に続けて、その関数の全文を書く
確認手順がない
よくない例: 「Step 3: 動くか試す」 よい例: 「Step 3: pytest tests/test_auth.py -v を実行する。期待される結果: 3 passed」
ファイルパスがない
よくない例: 「モデルのファイルを作る」 よい例: 「Create: src/models/user.py」
実行への引き継ぎ
計画書を保存したら、実行のしかたを提案します。
「計画がまとまり、保存しました。subagent-driven-development で実行できます。タスクごとに新しいサブエージェントを立て、2 段階のレビュー(まず仕様どおりか、次にコードの質)を通します。進めてよいですか?」
実行するときは subagent-driven-development skill を使います。
- タスクごとに、文脈をすべて渡した新しい
delegate_taskを立てる - 各タスクのあとに、仕様どおりかのレビュー
- それが通ったら、コードの質のレビュー
- 両方のレビューが通ってから次へ進む
覚えておくこと
Bite-sized tasks (2-5 min each)
Exact file paths
Complete code (copy-pasteable)
Exact commands with expected output
Verification steps
DRY, YAGNI, TDD
Frequent commitsよい計画書は、実装のしかたを自明にします。