門を機械にする
CI が緑のものしか staging に入らないようにする。ここが立つと、この先は全部「CI に1本足す」で済む。
- 済み
- CLAUDE.md の開発フローを MR+自動マージに書き換え、hook で staging への直接 push を止めた(ブランチ上・未 push)
- 次の一手
- GitLab の保護ブランチ設定と「Pipelines must succeed」、glab の導入
Claude を動かす仕組み(権限・hook・CI・評価役・指示書)を、何から・どのリポジトリで直すかの地図。正本は nanco-knowledge/ops/harness-roadmap.md。
TL;DR
今は姉崎さんが「検査役」をやっている。それを機械に置き換えると、ループもグラフも回り出す。順番は「門(CI)→ ルールを仕組みに → 評価役 → 指示書を削る → 測る」。実装は各リポジトリで、束ねるのは nanco-knowledge だけ。
ルールも役者もたくさん作ってきた。足りないのは「本当に終わったか」を判定する仕組み。今はそこを全部、姉崎さんが手でやっている。
Anthropic が「ハーネス」と呼んでいる考え方は3つの部品でできている。nanco はすでに「状態」を持っていて、ここからの伸びしろは「ループ」と「グラフ」。
AI は会話をまたいで覚えていない。だから「今どこまで進んだか」をファイルに書いて次に渡す。
nanco:できている。decision-log・sessions・ops/now.md。
「終わった?」を作った本人ではなく評価役が判定し、合格するまで自動で回す。/goal や Stop hook がこれ。
nanco:評価役が足りない。在庫の不変条件テストが1本目。
観点を分けた評価役を1回だけ並列に流し、指摘を一括で直す。往復を減らす仕組み。
nanco:手でやっている。Fable × Codex の2ラウンド議論がこれ。
上から順に通す。上が通ると下が楽になる。4(指示書を削る)を2より先にやると、削ったルールが守られなくなる。
CI が緑のものしか staging に入らないようにする。ここが立つと、この先は全部「CI に1本足す」で済む。
「必ず〜する」を文章で書く代わりに、破ったら CI か hook が止める。
「終わった?」を機械が判定する部品。これがあると /goal や Stop hook で「緑になるまで回す」が使える。
長い指示書ほど1つひとつのルールが守られにくい。仕組みに移したルールから消していく。
ハーネスはモデルの世代が変わると古くなる。数字を見ていないと気づけない。
実装はそれぞれのリポジトリで、1リポジトリ=1セッション=1MRで進める。CI も hook も CLAUDE.md もリポジトリ単位で効くので、まとめて1か所ではやれない。優先順と進捗を束ねるのは nanco-knowledge の ops/harness-roadmap.md だけ。このページはその読む用のスナップショット。
| 幹 | nanco-nextWeb・API(GitLab) | nanco-flutterアプリ(GitLab) | nanco-knowledge戦略・ルール(GitHub) | そのほかreports / analytics(GitHub) |
|---|---|---|---|---|
| 1 門 | 保護ブランチ+MR 自動マージ。CLAUDE.md と hook はブランチ上で済み | 同じ GitLab 設定。hook はブランチ上で済み | draft PR → 姉崎がマージ、の運用はすでにある | 同じく PR 運用 |
| 2 仕組み | fix にテスト必須の CI チェック、max-lines |
同じ CI チェック。dart_code_metrics・custom_lint を実際に効かせる | hook 3本(Linear ラベル全置換・レビューなしの外向け文章・裏取りなしの decision-log) | analytics は lint の hook あり |
| 3 評価役 | 不変条件テスト(1本目済み)→ OPS 追加、UI の見た目の比較 | 後回し。既存の maestro を評価役に使える | ai-tone-check-cases を合否付きの評価セットに | — |
| 4 指示書 | CLAUDE.md 749 行 → 200 行未満、AGENTS.md と揃える | CLAUDE.md は 63 行で短い。AGENTS.md とのずれだけ確認 | CLAUDE.md 274 行、AGENTS.md が旧5層のまま | — |
| 5 測る | 元データ(git 履歴) | 元データ(git 履歴) | 月1で集計してロードマップを更新(ここで束ねる) | 集計の仕組みは analytics に置く案 |
共通で使うもの(本番操作を止める hook など)は、片方で作ってもう片方へコピーしている。増えてきたら Claude Code のプラグインにまとめる。
同じルールを3か所に書くと、少しずつずれていく。ルールの中身は1か所(CI / lint の設定)だけに置き、ほかはそこを呼ぶか説明するだけにする。
max-lines: 800、fix にテスト必須のチェック、不変条件テストnanco-next の git 履歴から(2026年9月、マージを除く。71 件の行だけ 6月以降)。
幹1は姉崎さんの作業が終わらないと効かない。合わせて10分ほど。
brew install glab && glab auth loginchore/claude-harness:権限・hook・開発フローtest/stock-invariants:不変条件テスト+不具合修正chore/claude-harness:権限・hook権限と hook は staging に入るまで効かない。
noImplicitAny: false.codex/agents のずれ「必ず」と書きたくなったら、まず CI か hook にできないか考える。
9/11 に本番監視でやった「送ったではなく届いた」を AI の作業にも当てはめる。
人格の代わりに「合否と理由」のデータを貯める。不変条件テストはその1本目。
人は毎回 OK を出す係ではなく、評価役とのズレを直す係になる。