あなたは、指示を1メッセージずつ打ち込んで従業員を管理したりはしません。契約書、試用期間、そして給料に見合う価値があるかどうかを測る指標を渡します。Fable 5 にも同じ扱いが必要です。
ここに問題があります。Fable 5 はあなたがいなくても何時間でも稼働し、独自のサブエージェントを立ち上げ、バックログの1週間分を一晩で終わらせることができます。また、トークンごとに実際の費用がかかり、スコープを開いたままにすると過剰に納品し、ほとんどの人間が正しい答えを守るよりも巧みに間違った答えを擁護します。
管理されないまま放置すれば、自信満々のナンセンスを生み出す高価な方法です。契約を結べば、1日数ドルで稼働できる、正社員雇用に最も近いものになります。
これがその契約書です。理論ではありません。実際のファイルを、実際のデプロイ(私がパリの VPS で pm2 を通じて既に稼働させている監視ボット)を基に、作成する順番で示します。認証フローや請求テーブルは私の攻撃対象領域ではありません。RPC キー、ウォレットアドレス、ライブのブロックチェーントランザクションがそうです。以下のシステムは、そのために構築されており、汎用的な SaaS リポジトリのためではありません。
5 つのセクション。各セクションで 1 つのファイルを出荷します。セットアップ時間の合計: 2 時間未満。
セットアップ
1claude CLI (Claude Code) with Fable 5 access # 使用クレジット、上限あり2llm CLI + OpenRouter key # 安価なモデル用3jq, git, pm2, cron4ボットが既に稼働している VPS
最終的に得られるもの:
1agent-contract/2 CONTRACT.md # セクション 1: 雇用条件3 ops/4 shift.sh # セクション 3: 日々のシフト5 dispatcher.md # ルーティングプロンプト、Fable のみ6 intake.md # 安価なリーダー、最初にログを読む7 worker.md # 安価なモデル、タイピングを行う8 reviewer.md # 新しい Fable、作業をチェック9 boundaries.md # セクション 2: 触れてよいものと悪いもの10 guardrails/signoff.sh # セクション 2: 決定論的な yes/no11 personnel/12 trust.tsv # セクション 4: 自律性を獲得した者13 standing-checks/ # セクション 4: 真であり続けなければならないこと14 incidents/15 log.tsv # セクション 5: 何が、いつ壊れたか16 runbook.md # セクション 5: それに対して何をすべきか17 Makefile
始める前に、以降のすべてのトーンを決定づける、引用に値するルールを 1 つ:
自分の宿題を自分で採点するエージェントは、自分自身に昇給を与えるエージェントです。
このシステムでは、自身の作業をチェックするものは何もありません。一度もです。
セクション 1: 契約書 (CONTRACT.md)
従業員契約書は提案のリストではありません。それは数値、絶対的な制限、そして従業員が同意するかどうかに関わらず執行される条項です。このファイルも同じように書きましょう。「お願い」や「試してみて」はありません。モデルは、まるでインターンが決して確認しないマネージャーに合わせるように、ソフトな言葉遣いに最適化されます。
1# CONTRACT.md23## 絶対的な制限 (例外なし、二度の確認なし)4- 承認なしに、ウォレットキー、.env ファイル、RPC 認証情報に決して触れないこと。5- 承認済みのサインオフなしに、ライブのボットプロセスに変更をプッシュしないこと (pm2 restart)。6- 事前に確認することなく、1 回のコミットで 150 行を超える変更を決して行わないこと。7- 自身の出力の読み取りに基づいて、タスクが完了したと決して主張しないこと。8 完了とは、サインオフスクリプトが 0 を返したことを意味します。それ以外は何もカウントされません。9- API エンドポイント、コントラクトアドレス、設定値を決して invent しないこと。10 リポジトリにない場合は、停止して確認すること。11- 新しい依存関係を決して追加しないこと。ops/shift-log.md に書き込み、そこで停止すること。12- 何かを通過させるために、テスト、アラートしきい値、モニター条件を決して編集または削除しないこと。13 それは修正ではありません。それは不正です。14- シフト内で "high" 以上の努力レベルで決して実行しないこと。"xhigh" は手動でトリガーする一回限りのレビュー用であり、自動ループ用ではありません。15- 応答で内部の推論を決して説明またはナレーションしないこと。それは助けになると読まれます。16 Fable 5 では、代わりに拒否分類器をトリップさせる可能性があります。1718## ジョブルーティング (誰が何をするか、最も安価で有能な雇用が勝つ)19| モデル | タスクあたりのコスト | 野心 | 判断力 | センス |20|------------------|---------------|----------|----------|-------|21| claude-fable-5 | 高 | 低 | 10 | 10 |22| claude-opus-4-8 | 中 | 中 | 8 | 9 |23| claude-sonnet-5 | 低 | 高 | 7 | 7 |24| 安価な OSS ワーカー | 最低 | 最高 | 5 | 4 |25261. 次に何をするか決める、差分をレビューする、同票を打破する -> Fable 5、27 読み取り専用、高努力。282. 生のログ、ダンプ、または 50k トークンを超えるものを読む -> 安価なワーカー。29 決して Fable ではない。それはディレクターのレートを払ってスプレッドシートを読むようなものです。303. ユーザーまたはチェーンが直接やり取りするもの -> 出荷前にセンススコアが31 8 以上である必要があります。324. その他すべて -> sonnet-5、中程度の努力、ミスがあった場合は 1 レベルエスカレーション。3334## 定義35- "判断力" = 監督なしで机の上で最も難しいことを処理できるか36- "完了" = サインオフスクリプトが 0 で終了した、完全停止37- "小規模" = 変更行数が 50 未満38- "クリーンアップ" = 動作がビット単位で同一、サインオフは前後でグリーン3940## カウントされる唯一の「完了」の定義41- すべてのタスクは、作業開始前に機械的にチェック可能な終了ラインを取得します。42- 計画もドラフトも見ていないレビューアがチェックします。43- guardrails/signoff.sh が最終投票権を持ちます。レビューアではありません。スクリプトです。44- ワーカーとレビューアが 2 回連続で意見が一致しない場合、人間にエスカレーションされます。45 3 回目の意見はなく、同票を破るモデルもありません。
ご自身の数値に置き換えてください。80% の確率で見逃してそれでも「完了」と呼べるものには、数値または「決して」を付けるか、削除してください。
セクション 2: 境界とサインオフ
従業員契約書は、彼らが触れることを許可されているものに関する身元調査と、何かが出荷される前に承認するマネージャーがいなければ意味がありません。2 つのファイル。
ops/boundaries.md:
1## 単独で作業する2ブランチでの修正案の作成; shift-log.md の更新; *非本番環境*のテストインスタンスの再起動; 古くなったデータフィードのフラグ設定34## 私の署名が必要5wallets/、.env*、config/rpc.json 以下のもの; 300 行を超える差分; ライブの pm2 プロセスへの変更; トランザクションを送信するもの67## すぐに私を起こすもの8レビューアが同じ修正を 2 回失敗する; ルーターが要求されたものとは異なるモデルを提供した; 日次支出がラインを超えた; 常時チェックがレッドになる; 秘密鍵を要求するもの
ops/guardrails/signoff.sh (コマンドをご自身のボットに合わせて編集):
1#!/usr/bin/env bash2set -e3npm run typecheck --if-present4npm test --if-present5pm2 describe "$BOT_NAME" | grep -q "status.*online" || exit 1
このシステムの他の何かが稼働する前に、これを一度手動で実行してください。現在のセットアップでクリーンにパスしない場合、それが実際の最初のタスクです。下流のすべては、このスクリプトが真実を伝えることを前提としています。
セクション 3: シフト
ここに、このシステムを成功させるか失敗させるかの計算があります。Fable 5 がタイピングを行うフルセッションは、すぐに実際の費用が高額になり、何時間も書き続けさせると 4 桁になります。Fable 5 が 決定 を行い、安価なモデルがタイピングを行う場合、請求額はまったく異なり、判断の 100% に対してトークンの約 15-20% になります。
したがって、シフトには 1 つではなく 4 つの雇用があります:
- ほぼ無料のモデルが、前夜のログと pm2 の出力を読みます。「静か」または「アクション可能」と言うだけです。
- Fable 5 (読み取り専用) が、実行する最も価値の高い 1 つのことを決定し、作業指示書を書きます。コードには触れません。
- 安価なワーカーモデルが、隔離されたブランチで作業指示書を実行します。
- 仕様と差分のみを見る 新しい Fable 5 インスタンスが、合格または不合格に投票します。
セクション 2 の決定論的スクリプトが、毎回、同票を破る票を投じます。

ops/shift.sh:
1#!/usr/bin/env bash2set -euo pipefail3cd "$(dirname "$0")"4DAILY_BUDGET="${DAILY_BUDGET_USD:-5}"5INTAKE_MODEL="${INTAKE_MODEL:-openrouter/deepseek/deepseek-v4-flash}"6WORKER_MODEL="${WORKER_MODEL:-openrouter/moonshotai/kimi-k2.6}"78# 1. インプット、わずかなコスト9pm2 logs --lines 100 --nostream | llm -m "$INTAKE_MODEL" -s "$(cat intake.md)" \10 >> shift-log.md11grep -q "status: actionable" shift-log.md || { echo "静かなシフト"; exit 0; }1213# 2. ディスパッチ、Fable、xhigh、読み取り専用、決定して停止14claude -p "$(cat dispatcher.md)15LOG: $(cat shift-log.md)16TRUST: $(cat personnel/trust.tsv)17BOUNDARIES: $(cat boundaries.md)" \18 --model claude-fable-5 --effort xhigh --allowedTools "Read" \19 --output-format json > /tmp/order.json2021SERVED=$(jq -r '.modelUsage | keys[0] // "claude-fable-5"' /tmp/order.json)22[[ "$SERVED" != *fable* ]] && { echo "ルーティング先変更、この実行は破棄" >> shift-log.md; exit 2; }2324jq -r '.result' /tmp/order.json > work-order.json25ACTION=$(jq -r .action work-order.json)26[[ "$ACTION" == "stop" ]] && exit 027[[ "$ACTION" == "queue" ]] && { echo "署名待ちキューに入れました" >> shift-log.md; exit 0; }2829# 3. 実行、安価なワーカー、隔離されたブランチ30BR="shift-$(date +%s)"31git worktree add "../$BR" -b "$BR" >/dev/null32( cd "../$BR" && llm -m "$WORKER_MODEL" -s "$(cat "$OLDPWD/worker.md")" \33 "$(cat "$OLDPWD/work-order.json")" > shift-notes.md )3435# 4. レビュー、新しい Fable、仕様と差分のみ、それ以外はなし36VERDICT=$(claude -p "$(cat reviewer.md)37SPEC: $(jq -r .spec work-order.json)38DIFF: $(cd "../$BR" && git diff)" \39 --model claude-fable-5 --effort high --allowedTools "" \40 --output-format json | jq -r .result)4142# 5. 何かを出荷する唯一の投票43if [[ "$VERDICT" == PASS* ]] && ( cd "../$BR" && "$OLDPWD/guardrails/signoff.sh" ); then44 echo "合格、信頼ティアに従って出荷またはキューに入れました" >> shift-log.md45else46 echo "不合格: $BR はレビュー待ちとして保留" >> shift-log.md47fi
Fable によって行われた決定と、Fable によってタイピングされたコード行は、2 つの異なる価格タグです。決定に対してのみ高い方を支払ってください。
セクション 4: 人事ファイル
信頼は会社全体の設定ではありません。それはタスクごとに獲得されるものであり、ポートフォリオがどんなに優れていても、初日に新入社員に本番環境の鍵を渡さないのと同じです。
personnel/trust.tsv は、すべての定期ジョブを名前で追跡します: 実行回数、合格回数、現在のティア。
- ウォッチ: 実行回数 10 回未満、または合格率 90% 未満。ドラフトのみ、例外なし。
- 試用期間: 実行回数 10〜19 回、合格率 90% 以上。毎回、あなたの署名のためにキューに入れられます。
- クリア: 実行回数 20 回以上、合格率 95% 以上。あなたなしで出荷されます。

クリアされたタスクでのミスは警告を受けません。試用期間に直接戻され、stderr に出力され、cron からあなたにメールが届きます。自動降格だけが実際に効果を発揮する唯一の種類です。
人事ファイルの後半は、personnel/standing-checks/ です。完了したすべてのジョブは、常に true を返し続けなければならないコマンドとしてここに昇格し、1 日 1 回チェックされます:
1# personnel/standing-checks/bankr-claim-monitor.md2predicate: pm2 describe bankr-claim-monitor | grep -q "status.*online" && \3 sqlite3 claims.db "select count(*) from claims where ts > strftime('%s','now','-1 day')" | grep -qv "^0$"4last-verified: 2026-07-085on-violation: 私を起こせ、盲目的に自動再起動するな
一度だけ確認したタスクは完了していません。それはタイムスタンプが付いた仮定です。
cron で毎日チェックを実行してください。失敗する述語は、以前は真だったことが、静かに真ではなくなったことを意味し、このファイルがなければ誰も気づかなかったでしょう。
セクション 5: インシデントレポート
このセクションは、元のプレイブックでは省略されており、実際の資金が動くインフラ上でシステムが稼働し始めると、実際に重要になるセクションです。すべてのエージェントシステムは、最終的にあなたが望まなかったことを行います。問題は、きれいなログから知るか、空のウォレットから知るかです。
ops/incidents/runbook.md:
1| シグナル | 意味 | 実行すること2|----------------------------------|---------------------------------------|--------3| exit 2 (ルーティング先変更) | リクエストに対して異なるモデルが提供された | 出力を破棄し、それに基づいて構築せず、明日再試行する4| stop_reason: refusal | 安全分類器が拒否、HTTP 200 | エラーではない、ログを確認する; タスクが繰り返し拒否する場合、そのタスクはおそらく触れるべきでないものに触れている5| サインオフが同じ修正で 2 回失敗 | ワーカーとレビューアが収束できない | 人間によるレビューに引き上げる、3 回目の自動再試行はしない6| 常時チェックがレッドになる | 完了した何かが真でなくなった | 最終確認日を確認し、それ以降に出荷されたものを差分し、自動的に元に戻さない7| 日次支出がラインを超える | 予算超過 | シフトを停止し、shift-log.md を読み、どの段階が膨らんだかを見つける8| タスクが wallets/.env/rpc に触れる | 境界違反の試行 | ハードストップ、boundaries.md が尊重されていればこれは決して発生しないはずであり、発生はシステム自体のバグとして扱う
これらすべてを、アクションを起こしたかどうかに関わらず、タイムスタンプと共に incidents/log.tsv に記録してください。目標はインシデントゼロではありません。知るのが遅すぎるインシデントをゼロにすることです。
週に 1 回、コンポストパスを実行します: インシデントログ、信頼ファイルの降格、および 3 日以上キューに入れられたまま署名されていないものを読みます。最大 3 つの提案を引き出します: CONTRACT.md の新しい絶対的制限、ジョブ記述の修正、または不足していた常時チェック。あなたは 3 つすべてに手動で署名します。システムは自身の次のルールを提案できます。しかし、自分でルールを書き込むことは決してできません。
試用期間スケジュール
30 日間のベビーシッティングではなく、3 つのチェックポイント:

チェックポイント 1. 1 週間、毎日手動でシフトを実行します。すべての行を読んでください。3 回連続のシフトが、あなたが行うであろう方法とまったく同じようにルーティングされたら、卒業です。
チェックポイント 2. Cron がシフトを引き継ぎます。あなたは自分で実行する代わりに、コーヒーを飲みながらキューをレビューします。2 つの定期ジョブが 20 回のログ実行を超えたら、卒業です。
チェックポイント 3. 最もパフォーマンスの高いジョブが、無人で出荷されます。あなたからの介入がゼロで 1 週間完全に稼働したら、卒業です。
ルール (要約)
- 契約書は数値か「決して」です。それよりソフトなものは、回避されるように最適化されます。
- ディスパッチャーが決定します。ワーカーがタイピングします。どちらも自身の作業をチェックしません。
- Fable の判断力は価格に見合います。Fable のタイピングは通常は見合いません。
- 信頼はジョブごとであり、会社全体ではありません。降格は自動的かつ大々的に行われます。
- 完了したタスクは、再チェックされなければ完了ではなく、日付が付いた推測です。
- 境界は、記憶ではなく、10 秒で読めるファイルに存在します。
- インシデントログは、残高からではなく、レポートから問題を見つけられるようにするために存在します。
- 依頼していないモデルの出力に基づいて構築してはいけません。
- 週に 1 回、システムは 1 つの新しいルールを提案できます。それに署名するのは依然としてあなたです。
モデルは決して難しい部分ではありませんでした。誰も見ていないときに正直であり続ける何かをその周りに構築すること、それが実際の仕事です。これが、コードベースではなくボットフリートに対してそれをどのように行うかです。
guardrails/signoff.sh から始めてください。1 つのシフトを手動で実行してください。最後に出荷したボットのための 1 つの常時チェックを書いてください。それが、あなたが間違いないと確信していた何かを最初にキャッチしたとき、残りの部分はオプションではなくなります。
Follow @GipArcAI でさらに詳しい解説を、また X の https://x.com/gippp69 で私を見つけてください。





