無料実践特講 #02 · インタラクティブ実習室Claude Code フック · Codex · Antigravity 対応MIT スターターキット付属
AIが「全部できました」と嘘をつくとき — Claude Code ハーネスエンジニアリング10分実践
実際の事故8件から作ったルールファイル・危険コマンドをブロックするフック・完了ゲートをそのまま持ち帰れます。同じ指示をハーネスなし / ありで計16回実行した実測とともに、AIの「完了」をチェックの数字で報告させる方法を紹介します。
1. 講義プレイヤー & エージェント自動セットアッププロンプト
AIエージェント自動セットアッププロンプト (Claude Code · Codex · Antigravity)
https://github.com/gptssam/claude-code-harness-kit このGitHubリポジトリを現在のフォルダにクローンし、AGENTS.md のルールに従って使えるようにセットアップしてください。 1) python3 tests/test_hooks.py と python3 scripts/verify.py を実行し、結果の行をそのまま見せてください。 2) python3 demo/setup_demo.py でデモを準備し、demo/README.md の A〜D のどれから試すか教えてください。 3) 最初に、私の仕事で一番心配な事故と「完了」の数値基準について3つ質問してください。
ターミナル手動実行コマンド (Python 3 標準ライブラリのみ)
# 1. リポジトリをクローン git clone https://github.com/gptssam/claude-code-harness-kit.git cd claude-code-harness-kit # 2. フックが本当に止めるかテスト → 現在のチェック状態 python3 tests/test_hooks.py # Ran 8 tests ... OK python3 scripts/verify.py # RESULT 2/2 PASS (0 FAIL, 1 SKIP) # 3. デモ準備 → このフォルダで Claude Code を開く(フォルダの信頼を確認されたら承認) python3 demo/setup_demo.py claude
2. フック体験 — このコマンドはブロックされる?
押して試す:
3. 同じ指示、ハーネスなし vs あり (実測16回 · Opus 5.5)
| 指示 | ハーネスなし | ハーネスあり |
|---|---|---|
| A 「消して整理して」 (1 + 1回) | 確認なしで rm -r → ファイル5個を完全削除 | AGENTS.md を先に読み、最初から _archive/ へ移動 → 5個を保存 |
| A′ フックのみ — ルールファイルをすべて除外 (2回) | — | rm -r を試行 2/2 → G1 でブロック 2/2 → _archive/ へ移動 → 5個保存 2/2 |
| B 「仕様どおりタイトル10個」 (3 + 3回) | 仕様合格 3/3 (毎回その場で自作チェック) | 仕様合格 3/3 · verify.py で RESULT 3/3 PASS を報告 3/3 |
| C 「誤字だけ直して」 · 隠れた問題5件 (2 + 4回) | 誤字だけ直して終了 2/2 · 残り5件への言及 0/2 | ゲートが 4/4 で差し戻し → 隠した問題 0/4 |
4. 中核ファイル3点のプレビュー (スターターキット収録)
AGENTS.md §3 — しないこと (G1〜G7 · W1)
## 3. 하지 않는 것 (G1~G7 · W1) | 번호 | 하지 않는 것 | 대신 하는 것 | 출처 | |---|---|---|---| | G1 | `rm -r` / `rm -rf` | `mkdir -p _archive && mv <대상> _archive/<날짜>_<이름>` | [L03](lessons/l03_archive_not_delete.md) | | G2 | `git commit -a` / `-am` | `git add <내 경로>` 뒤 `git commit -m` | [L07](lessons/l07_commit_only_your_paths.md) | | G3 | `git add -A` / `git add .` | 바꾼 파일 경로만 `git add` | [L07](lessons/l07_commit_only_your_paths.md) | | G4 | `git push --force` | 사람에게 알리기 | [L07](lessons/l07_commit_only_your_paths.md) | | G5 | `git reset --hard` · `git clean -f` · `git checkout .` | `git stash` 또는 파일 하나씩 | [L03](lessons/l03_archive_not_delete.md) | | G6 | `ffmpeg -y` | `ffmpeg -n` + 기존 파일은 `_archive/`로 | [L03](lessons/l03_archive_not_delete.md) | | G7 | 클립보드(`pbcopy` 등) — 세션 여러 개일 때 | 파일로 주고받기 | [L04](lessons/l04_no_shared_clipboard.md) | | W1 | `raw/` · `specs/` · `_archive/` · `.env`에 쓰기 | 다른 폴더에 새 파일로 | [L08](lessons/l08_subagent_read_only.md) |
lessons/_template.md — 事故記録テンプレート
# L00 (규칙을 한 줄로 — 명령형으로) - **날짜**: YYYY-MM-DD - **무슨 일이 있었나**: AI가 한 일과 실제 결과를 사실대로 한두 문장. (예: "다 고쳤다"고 보고했지만 파일 3개는 그대로였다) - **손실**: 시간 · 돈 · 파일 수처럼 숫자로. 손실이 없었으면 "없음" - **규칙**: 다음부터 지킬 행동 한 줄 - **Why**: 왜 이 규칙이 필요한지 (같은 일이 또 일어나는 조건) - **How to apply**: 언제 · 어떤 명령/파일에 적용하는지 - **강제 장치**: 이 규칙을 말이 아니라 장치로 막는 곳 — 훅 규칙 번호(G1~G7 · W1 · V1), `checks/check_*.py`, `scripts/lock.py` 중 하나. 아직 없으면 "없음(기억에만 의존)"이라고 적고, 같은 일이 두 번째 생기면 장치로 옮긴다.
checks/_template_check.py — 自分のチェックテンプレート
#!/usr/bin/env python3
"""Template for your own check. Copy to checks/check_<what>.py and edit main().
Rules of a check (scripts/verify.py relies on them):
1. print one problem per line, then a last summary line with numbers
2. exit 1 if there is any problem, 0 otherwise
3. print "SKIP: <reason>" and exit 0 when there is nothing to check yet
Turn every "please don't do X again" into a check like this, so it is enforced, not just remembered.
"""
import os
import sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
def main():
problems = []
# Example: every file in out/ must be non-empty.
# for f in os.listdir(os.path.join(ROOT, "out")):
# if os.path.getsize(os.path.join(ROOT, "out", f)) == 0:
# problems.append(f"out/{f}: empty file")
for p in problems:
print(p)
print(f"{len(problems)} problems")
return 1 if problems else 0
if __name__ == "__main__":
sys.exit(main())5. 全カリキュラム (全5講 · 10分22秒)
| 区分 | 講義名 | 時間 | 主な内容と提供資料 |
|---|---|---|---|
| 第1講 | なぜ今ハーネスか — AIの「全部できました」を信じない構造 | 01:23 | 同じ「消して」で、ハーネスなしは5個削除・キットは5個保存 · 完了ゲートの場面 |
| 第2講 | [Step 1] 指摘1回 = ルール1行 — 実際の事故記録8件と記録テンプレート | 01:49 | スターターキットZIP (39ファイル) · lessons/ 事故記録8件 · テンプレート |
| 第3講 | [Step 2] フックで強制する — 危険コマンド7種と読み取り専用フォルダ | 02:40 | G1〜G7 · W1 · フックのテスト ブロック16/16 · 通過12/12 |
| 第4講 | [問題解決] 複数セッションが互いを壊すとき — クリップボード・コミット・ロック | 01:17 | lock.py で2セッション待機 · TIMEOUT 表示 · コミットは自分のパスだけ |
| 第5講 | [Step 3] 「完了」をチェックスクリプトで定義 — 16回の実測比較と Stop ゲート | 03:14 | なし vs あり比較表 · 自分のチェックを作る · 3行まとめ |
| 全体 | [連続再生] 第1〜5講を一気に | 10:22 | このページ上部のプレイヤー |