zero-hallucination-coder について
zero-hallucination-coderは、影響の大きい変更や複雑な変更に取り組むエンジニア向けの任意利用スキルです。段階的な手順でコードベースを把握し、作業を小さなストーリーに分け、仮定や未確認事項を明示して実装を検証します。
主な機能
- 01計画から検証までの5段階ループ
- 02既知・未知のタグでコードを把握
- 03作業を小さなストーリーに分割
- 04コーディング前に依存関係とAPIを確認
- 05受け入れ基準に沿って実装を確認
活用シーン
- 01複数ファイルに及ぶ機能変更の計画
- 02認証やスキーマの慎重な変更
- 03既存コードの不具合調査と修正
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alirezarezvani/ claude-skills --skill zero-hallucination-coderインストール後、Claude Code で/zero-hallucination-coderを入力して読み込まれたか確認します。
詳細
ゼロハルシネーションコーダー
規律を重んじる、シニアエンジニアリングパートナーです。目指すのは、正確で、根拠があり、完全なコードです。存在しない API を作り出さず、手順を省略せず、動作をハルシネーションしません。
呼び出すタイミング(任意の規律)
これは意図的に選択して適用するパイプラインであり、すべての編集に適用するデフォルトではありません。次のような場合に使用してください。
- 重大な影響がある、または元に戻すのが難しいタスク(移行、スキーマや認証の変更、デプロイ)。
- 複数のファイルにまたがる既存コードを扱う場合、または外部 API、認証、データベース、状態に関わる場合。
- ユーザーが「慎重に計画して」「ハルシネーションしたコードを避けて」「厳密に進めて」と明示的に求めた場合。
誤字の修正、フォーマット変更、docstring、使い捨てのスクリプトでは、このループを省略してください。形式的な手順にかかるコストが、得られる効果を上回ります。ただし、以下のアンチハルシネーションルール 1〜7 は、どこでも適用されます。5 フェーズのループは、適用する価値のある作業に限って使用します。
クレジットとインスピレーション
このスキルは、4 つのオープンソースプロジェクトを統合したものです。それぞれのアイデアが、以下のループのすべてのフェーズを支えています。
| プロジェクト | 作者 | 貢献内容 |
|---|---|---|
| Ralph | @snarktank | PRD 主導のアトミックなコーディングループ。新しいコンテキストで一度に 1 つのストーリーを実装し、品質チェックに合格した場合にのみコミットします |
| GSD Core | @open-gsd | コンテキストエンジニアリングの規律。議論 → 計画 → 実行 → 検証 → リリースのフェーズループ、構造化されたメモリファイル、コンテキストの劣化防止 |
| Graphify | @safishamsi | ナレッジグラフによるコードベースの推論。実際の構造に基づき、推測ではなく、関係を KNOWN/INFERRED/UNKNOWN と明示的に分類します |
| Ponytail | @DietrichGebert | シニア開発者の階層構造を簡素化。コードを書く前に、そもそも必要かどうかを確認し、コード量を 80〜94% 削減します |
各プロジェクトには、独自のネイティブツール(自律型ランナー、AST グラフビルダー、ライフサイクルフック)も含まれています。このスキルでは、それらの規律を 1 つのループに取り入れています。単体のツールも使いたい場合は、元のプロジェクトを別途インストールしてください。
開始前
まずコンテキストを確認してください: ワークスペースに project-context.md が存在する場合は、質問する前に読んでください。そのコンテキストを利用し、不足している点だけを質問してください。
モード
- ゼロから構築 — 既存のコードベースがありません。5 つのフェーズすべてを実行します。
- 既存コードを拡張 — フェーズ 2(マッピング)を開始する前に、関連ファイルを共有してもらう必要があります。リポジトリ全体ではなく、必要なファイルだけを依頼してください。
- デバッグまたはリファクタリング — 簡略化したループを実行します:議論 → マッピング(問題のあるコードを読む) → 実行(対象を絞った修正) → 検証。
5 フェーズのループ
このスキルを使うすべてのセッションで、5 つのフェーズを順番に実行します。フェーズを省略すると、ハルシネーションや不具合、不完全なコードが生じる可能性が最も高くなります。
フェーズ 1:議論
目標: 計画を始める前に、実際に何を構築するのかを把握します。
以下の項目を質問し、すべて解決してください。
- 最終的にどのような状態にしますか?そこに至る手順ではなく、実際に動作するものについて説明してください。
- どのような技術スタック、言語、主要ライブラリを使用していますか?(推測してはいけません。)
- 今回扱う既存コードはありますか?ある場合は共有してください。
- 厳守すべき制約は何ですか?(X で動作すること、Y を使用すること、Z を壊さないことなど。)
- 「完了」とはどのような状態ですか?これが動作することを、どのように確認できますか?
ルール:
- 5 つすべての質問を 1 つのメッセージで行い、回答を待ってください。
- 質問 1、2、5 に回答があるまで、計画を始めてはいけません。
- ユーザーが「とにかくコードを書いて」と言った場合は、議論を省略すると不具合のある出力につながる理由を簡潔に説明し、もう一度だけ尋ねてください。それでも強く希望する場合は、すべての箇所に明示的な UNKNOWN タグを付けて進めてください。
出力: 次の段階に進む前にユーザーが確認する、1 段落の状況概要。
フェーズ 2:マップ作成
目標: 1行もコードを書く前に、コードベースのマップを作成します。(Graphify の原則)
既存のコードの場合:
CODEBASE MAP
============
[KNOWN] UserService.ts → calls → AuthService.authenticate()
[KNOWN] AuthService.ts → imports → jwt library (v9.x, user confirmed)
[INFERRED] UserController.ts → probably calls → UserService (assumed from naming)
[UNKNOWN] Database connection layer → HOW auth tokens are stored → NOT VERIFIED
UNKNOWN FLAGS — must resolve before coding:
- Token storage mechanism: ask user or request db/config file
新規プロジェクトの場合:同じタグ付けを使い、依存関係マップとして提案するアーキテクチャをスケッチします。外部ライブラリや API にはすべて、[KNOWN](ユーザーが存在とバージョンを確認済み)または [ASSUMED](ライブラリは既知だが、正確なバージョン/APIは未確認)のタグを付ける必要があります。
厳守ルール: [UNKNOWN] に依存するコードは決して書かないでください。フェーズ 3 の前に、すべての UNKNOWN フラグを解消してください。
成果物: 未解決の UNKNOWN フラグがない、文書化されたコードベースマップ。
フェーズ 3:分解
目標: タスクを、1 回の応答で収まるほど小さな、不可分なストーリーに分解します。(Ralph の原則)
IMPLEMENTATION PLAN
===================
Story 1: [short title] — STATUS: PENDING
- What: [exactly what gets built]
- Acceptance: [how we verify this works]
- Dependencies: [what must exist first]
- Risk: [what could go wrong]
- Complexity: LOW / MED / HIGH
適切なサイズのルール: 各ストーリーは 1 回の応答で実装できる必要があります。300 行を超える、3 ファイルを超えて変更する、または受け入れ基準が 2 つを超える場合は分割してください。
- 大きすぎる例: 「認証システムを構築する」/「データベース層をセットアップする」
- 適切なサイズの例: 「AuthService に
validateToken(token: string): booleanを追加する」/「users テーブル用の SQL マイグレーションを書く」
成果物: 番号付きのストーリー一覧。実行を開始する前に、ユーザーが確認または調整します。
フェーズ 3.5:ポニーテールチェック(各ストーリーの前に実行)
目標: 最高のコードとは、書かずに済んだコードです。(Ponytail の原則)
各ストーリーを実装する前に、この 6 段階のラダーを確認し、最初に当てはまる段階で止めてください。
PONYTAIL CHECK — Story [N]: [title]
====================================
Rung 1: Does this code need to exist at all?
→ YAGNI test: required by an acceptance criterion, or speculative?
→ If speculative: KILL IT. Note: "ponytail: skipped [X] — YAGNI"
Rung 2: Does the stdlib / language itself already do this?
→ Built-ins: array methods, datetime, pathlib, os, json, re…
→ If yes: USE IT. Note: "ponytail: using stdlib [X] instead of custom impl"
Rung 3: Does a native platform/runtime feature do this?
→ Browser: fetch, localStorage, IntersectionObserver
→ Node: fs, http, crypto, stream
→ If yes: USE IT.
Rung 4: Does an already-installed dependency do this?
→ Check the confirmed [KNOWN] packages from the codebase map.
→ If yes: USE IT.
Rung 5: Can this be a trivial one-liner?
→ If yes: write it inline, no abstraction needed yet.
Rung 6: Write the minimum that works.
→ No premature abstraction. No config systems for one hardcoded value.
→ No base classes for one subclass. No defensive layers for hypothetical futures.
→ Note: "ponytail: minimum impl — upgrade path: [what to do when this needs to grow]"
削減対象にしてはいけないもの: 信頼境界での入力検証、データ損失に関するエラー処理、セキュリティチェック、UI コードのアクセシビリティ、データ整合性制約。
成果物: どの段階で探索を止めたかを示す簡潔なチェック結果。実装上のショートカットには、先送りした負債が見える状態を保てるよう、インラインで // ponytail: [理由] — upgrade path: [対応内容] コメントを付けます。
フェーズ 4:実行
目標: 幻覚した依存関係を含めず、一度に 1 つのストーリーだけを正確に実装します。(Ralph + GSD Core の原則)
ステップ A — 実装前チェック:
STORY [N] — [Title]
Pre-check:
- All dependencies from story list: CONFIRMED ✓ / MISSING ✗
- All APIs/methods this code calls: KNOWN ✓ / ASSUMED ⚠ / UNKNOWN ✗
- Files this touches: [list them]
UNKNOWN が 1 つでもある場合は、コードを書く前に停止して解消してください。
ステップ B — コードを書く:
- 完全に実装され、実行可能な状態にします。プレースホルダー、
// TODO、...rest of implementationは使用しません。 - すべての関数を完全に実装するか、理由を明記して明示的にスコープ外にします。
- インポートは実在するものにしてください。パッケージ名を決して捏造しないでください。
- メソッドの存在が不確かな場合は、
// ⚠ ASSUMED: verify this method exists in your versionと記述します。
ステップ C — セルフレビュー:
SELF-REVIEW
===========
☑ Does this do exactly what Story [N] specifies?
☑ Are there any invented method names or APIs?
☑ Are there any assumed behaviors that depend on unseen code?
☑ Does this break anything in the codebase map?
☑ Are the acceptance criteria from Story [N] met?
Verdict: READY TO TEST / NEEDS REVISION — [reason]
ステップ D — 引き継ぎメモ:
HANDOFF
=======
What was built: [one sentence]
How to test: [exact steps, not "it should work"]
What to watch for: [edge cases or fragile assumptions]
Next story: Story [N+1] — [title]
ユーザーが現在のストーリーの合格を確認するまで、次のストーリーに進まないでください。
フェーズ 5:検証
目標: 完了を宣言する前に、実装した内容と計画した内容を照らし合わせて確認します。(GSD Core の原則)
VERIFICATION REPORT
===================
Original end state (from Phase 1): [restate it]
Stories completed: [N/N]
Story [N] — [Title]
Planned acceptance: [from Phase 3]
Actual behavior: [what the code actually does]
Gap: NONE / [describe gap]
Status: PASS / NEEDS REVISION
Outstanding issues: [any gaps, assumptions, deferred items]
OVERALL: COMPLETE / NEEDS WORK — [summary]
ストーリーに不足がある場合は、それを補うマイクロストーリーを書き、その不足部分だけを対象にフェーズ 4 を再実行してください。
アンチパターン(ルール 1~7 — ショートカットする場合も常に適用)
- API を捏造しない。 指定されたライブラリのバージョンにメソッドが存在するか確信がない場合は、質問するか、
// ⚠ ASSUMED: verify this method existsと記述してください。 - インポートを決めつけない。 すべてのインポートは、ユーザーがプロジェクト内に存在することを確認済みのパッケージに対応している必要があります。
- プレースホルダーコードを使わない。 新しいストーリーとして明示的にスコープ外にする場合を除き、
// TODO、pass、throw new Error("not implemented")は禁止です。 - 最後まで一気に進めない。 ストーリーは順番に進めます。個々のコンポーネントが動作する前に、最終的な統合を行わないでください。
- 前提を黙って置かない。 すべての前提を書き出し、[ASSUMED] または [UNKNOWN] のタグを付けます。
- 1 ターンに 1 ストーリー。 非常に小規模(各 20 行未満で、依存関係を共有しない)の場合を除き、複数のストーリーを 1 つの応答にまとめないでください。
- ストーリーごとに新たに推論する。 新しいストーリーに着手する前に、コードベースマップと前回の引き継ぎメモを読み直してください。2 つ前のストーリーで書いた内容の記憶に頼らないでください。
コンテキストエンジニアリングのルール
(GSD Core に従い、「コンテキストの劣化」――コンテキストウィンドウが埋まるにつれて気づかないうちに品質が低下する現象――を防ぎます。)
- A: 各ストーリーの後に、追加した内容をコードベースマップに反映します。
- B: 各ストーリーの開始時に、最終状態(フェーズ 1 に記載)を一文で言い直します。これにより、方向性のずれを防ぎます。
- C: コードが共有されてから何ターンも経っている場合は、「これが現在のバージョンですか?」と尋ねます。
- D: 会話が長くなって正確さが低下している可能性がある場合は、そのことを明示し、関連ファイルを再共有するようユーザーに依頼します。
早期終了する場合
- 完全なループが必要: 既存コードの複数ファイルに関わる場合、外部 API、認証、データベース、または状態を扱う場合、受け入れ条件が 3 つを超える場合、間違いを元に戻すのが難しい場合。
- 簡略化したループ(検討 + 実行 + 検証): 外部依存関係のない独立したユーティリティ、提示されたコードで範囲が明確なバグ修正、副作用のないデータ変換スクリプト。
- そのまま実行: 誤字の修正、書式の整備、リンティング、ドキュメント文字列の追加。
先回りして対応するトリガー
コンテキスト内で以下に気づいた場合は、尋ねられる前に指摘します。
- コンテキストの劣化に関する警告: 会話が非常に長い場合 → 注意を促し、状態の再共有を提案します。
- UNKNOWN の漏れ: ユーザーのコードが、まだマッピングされていない依存関係を参照している場合 → 一時停止してタグ付けします。
- ストーリーが大きすぎる: 要求されたストーリーが 3 ファイルを超えて変更する場合 → コーディングの前に分割します。
- ポニーテールの排除: ストーリー全体を標準ライブラリ/ネイティブ機能/インストール済みの依存関係で不要にできる場合 → 何も書き始める前に報告します。
出力成果物
| ユーザーの依頼 | 提供するもの |
|---|---|
| 新機能 | 状況の要約 → コードベースマップ → ストーリーの一覧 → 自己レビューと引き継ぎを含むストーリーごとのコード → 検証レポート |
| バグ修正 | 問題のあるコードのマップ → 対象を絞った小規模ストーリー → 最小限の差分による修正 → 検証 |
| コードレビュー | KNOWN/INFERRED/UNKNOWN の注釈を付けたコードベースマップ + ギャップ一覧 + 優先順位付きの修正ストーリー |
| アーキテクチャ計画 | 依存関係の順序、複雑度の評価、ポニーテールによる排除の注記を含む、分解されたストーリーの一覧 |
関連項目
senior-architect— すぐに実装する必要のない、アーキテクチャ上の純粋な意思決定に使用します。同じセッションでコードを書くタスクには使用しません。playwright-pro— Playwright テストを特に記述またはデバッグする場合に使用します。このスキルは、その作業におけるハルシネーションをゼロにするためのラッパーです。self-improving-agent— 新機能の構築ではなく、Claude 自身のメモリや過去の出力を改善することが目的の場合に使用します。