delegate
Skill0 starsChanged 6 days agoMITView on GitHub
子に委任するとき、別系統の CLI(Claude Code・Codex・Grok Build)を bb-writ 専用のログインで起動するとき、非対話実行や再開の呼び出し方が要るときに使う。ホストごとの接続点。
- Reads credentials
84 other projects use a version of this.
Adopted by
Most recently taken up by
- timursafiullin/aodtheir own version, first seen Nov 15, 2026
- hyprcat/skillstheir own version, first seen Nov 15, 2026
- finolabs/vibecodetheir own version, first seen Nov 15, 2026
- NickolasBenakis/agent-playbooktheir own version, first seen Nov 15, 2026
- tomw1808/flash-agentstheir own version, first seen Nov 15, 2026
- brasillero/brstacktheir own version, first seen Nov 8, 2026
Used with
Projects with it also use state, preview and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillstate
Store and query a Microsoft Managed App's built-in state and file attachments with `ms project state` CLI schema commands and generated TypeScript clients. First, with the user signed in to the CLI, run `ms feature status --name state --json`; if `feature.enabled` is not `true`, recommend an alternative connector or data source.
Also in 3 projects that use this
kv0906Skillpreview
Render vault notes as styled HTML and open in browser. Turn markdown docs, decisions, progress reports into readable previews. Use for "/preview docs/project-a/checkout-flow.md", "/preview progress all", "/preview decide auth-approach", or when user wants to see a doc before sharing.
Also in 3 projects that use this
GitHubSkillprd
Generate high-quality Product Requirements Documents (PRDs) for software systems and AI-powered features. Includes executive summaries, user stories, technical specifications, and risk analysis.
Also in 5 projects that use this
nicolasestremSkilldocument
Create focused documentation for specific components or features
Also in 3 projects that use this
anombyte93Skilldiscover
Phase 1 of the prd-taskmaster pipeline: brainstorm-driven discovery. Delegates to superpowers:brainstorming in Interactive Mode (one adaptive question at a time), or self-brainstorms in Autonomous Mode when no user is present. Intercepts before the brainstorming chain hands off to writing-plans — this skill owns the exit. Extracts constraints, calibrates scale (Solo / Team / Enterprise), and advances the pipeline to GENERATE.
Also in 3 projects that use this
Microsoft AzureSkillskill-authoring
Write Agent Skills that comply with the agentskills.io specification. WHEN: "create a skill", "new skill", "write a skill", "skill template", "skill structure", "review skill", "skill PR", "skill compliance", "SKILL.md format", "skill frontmatter", "skill best practices". DO NOT USE FOR: general documentation. INVOKES: vally CLI.
Also in 3 projects that use this
Other versions84 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 84
- prassanna-ravishankar/repowire★ 270same name
- HurricaHjz/SecondSelf★ 156same name
- wlsdks/ontology-atlas★ 149same name
- HurricaHjz/second-yourself★ 105same name
- spmtitsolution/OpenBA-Kit★ 38same name
- pvjbuilds/delegate-router★ 32same name
- PyModel/claude-architect★ 31same name
- peterpme/skills★ 28same name
- jisuzzzz/haechi★ 17same name
- mhlaghari/stuntman★ 16same name
74 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository39 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- verify-parallelSkill
- bb-writSkill
- correctSkill
- create-formal-verification-skillSkill
- create-property-test-skillSkill
- create-verification-skillSkill
- interrogateSkill
- playbook-bugSkill
- playbook-deliverSkill
- playbook-docs-skillSkill
- playbook-evalSkill
- playbook-featureSkill
- playbook-investigationSkill
- playbook-parallelSkill
- playbook-pause-safelySkill
- playbook-session-pickupSkill
- playbook-verifySkill
- principle-attack-the-premiseSkill
- principle-encode-lessons-in-structureSkill
- principle-experience-firstSkill
- principle-fail-loudSkill
- principle-fix-root-causesSkill
- principle-foundational-thinkingSkill
- principle-laziness-protocolSkill
- principle-model-the-domainSkill
- principle-never-block-on-the-humanSkill
- principle-no-budget-cap-on-qualitySkill
- principle-no-speculative-structureSkill
- principle-prove-it-worksSkill
- principle-route-lessonsSkill
- principle-sequence-verifiable-unitsSkill
- principle-single-user-machineSkill
- principle-subtract-before-you-addSkill
- principle-test-behavior-not-implementationSkill
- principle-two-human-rolesSkill
- reflectSkill
- unknownsSkill
The file
Files
委任と、ホストごとの接続点
入口 bb-writ から始めた仕事で会話が要約された後は、入口を呼び直して全文を読み直す(要約の後は、先に呼んだ入口が落ちていることがある)。
正本は SKILL.md で、どのホストでも同じものを読む。bb-writ の hook やカスタム subagent 定義に必須の機能を置かない。ここに書くのは、委任・非対話実行・再開・権限の、ホストごとに違う呼び出し方だけ。版ごとに実測し、確かめた日を書く(2026-10-17: Claude Code 2.1.302、Codex CLI 0.163.0。2026-10-18: Grok Build 1.0.63)。
共通
- 委任に渡すもの: 目的、判定対象(何を見て何を判断するか)、変更できる範囲、許可された操作、報告の形(成果と証拠の場所、結論、残る不明点)。子の「できました」を読み替えず、実物を見る。Issue の本文やレビューの文のような資料を渡すときは、引用として区切り、子への指示として写さない。子の報告も資料で、親の依頼で許された操作を広げない。
- モデルと effort: launcher の子には
--model・--effortを渡さないのが既定。launcher が、役割(--audit・--interrogate・読み取り専用・書く子・最も難しい書く子)とホストから、scripts/launch.pyのCHOICESの表で選ぶ(親が毎回手で選ぶと、同じ審査役が Opushighと Sonnetmediumに割れた)。設計・大きな移行やリファクタリング・長い無人実行を任せる書く子には--hardestを付ける(Claude Code では Fable 5.2。時間の上限の既定は、どのホストでも 3600 秒)。渡すのは、表に無い組み合わせ(Grok のhardestなど)と、表と違う段が要るとき(effort を上げて確かめ直す、など)だけ。launcher を通らない委任(Agentツール、codex execを直に)は、読む・集めるなら軽い段(sonnet・gpt-6-sol)、判断なら重い段(opus・fable、gpt-6.1-sol・gpt-6-astra)。Haiku は、報告の形を守れないことが多かった(読み取りの子の 26 件中 10 件)ので、子に使わない(launcher を通さない委任でも)。実効値(実際に使われたモデル・effort。記録のmodel_effective)が確認できなければ「不明」と書く。 - 別系統の判断: 設計の是非や重要な検証では、もう一方の CLI を bb-writ 専用のログインで起動する。同じ系統の名前を変えて呼んだだけで「別モデルで確認した」としない。片方しか使えない場所では、新しい文脈の同系統で進め、独立性の差を記録する。
- 専用ログイン: Claude Code は
~/.config/bb-writ/.envのCLAUDE_CODE_OAUTH_TOKEN(dotenvx で暗号化し、鍵は同じ場所の.env.keys。dotenvx setに--no-nativeを付けないと、dotenvx 2.25 以降は鍵を OS の secret store に置くことがあり、launcher はそれを使わない。dotenvx run -f ~/.config/bb-writ/.env -fk ~/.config/bb-writ/.env.keys -- claude ...)とCLAUDE_CONFIG_DIR=~/.config/bb-writ/claude-home。Codex はCODEX_HOME=~/.config/bb-writ/codex-home。Grok Build はGROK_HOME=~/.config/bb-writ/grok-auth。オーナーの~/.claude・~/.codex・~/.grokの写しを作らない。トークンを画面・ログ・会話に出さない。 - 権限: 親・組織・対象リポジトリの制約を委任で広げない。読み取り専用を保証したい経路は、ツール名の列挙でなく実際の書き込み拒否で試す。判定を任せる子(審査役・確かめ役・返す前の判定の子)は、どのホストでも launcher で読み取り専用に立てる。launcher を起動できなければ(専用ログインが無いなど)、その子は立てず、審査や判定が無いことを範囲に書く。返答には、launcher が返した
problemsの理由を書く。理由が専用ログインの不足(「専用ログインが無い」「専用ログインの鍵が無い」)なら、用意のしかたが bb-writ の README の「任意機能の準備」にあることも書く(利用者が次に何をすれば子を立てられるかが分かるように。利用枠などほかの理由では書かない)。
launcher(別系統の子の起動と報告の検査)
scripts/launch.py(プラグインの置き場の下。Claude Code では ${CLAUDE_PLUGIN_ROOT}/scripts/launch.py、Codex・Grok Build ではこのスキルの SKILL.md から 2 つ上の scripts/launch.py)。
python3 <launch.py> --host codex|claude|grok --cwd <対象> --prompt-file <依頼文> [--model M] [--effort E] [--write [--hardest] | --interrogate | --audit] [--timeout 秒] [--out <まだ無いディレクトリ>]
python3 <launch.py> --resume <前の記録の out> --prompt-file <続きの依頼文> [--timeout 秒] [--out <まだ無いディレクトリ>] # 時間切れなどで止めた子を続きから- launcher は子が終わるまで戻らない。呼ぶコマンドの時間の上限が
--timeoutより 2 分以上長ければ、前景で呼んで終わりを待つ。長くかかる起動(Claude Code の Bash の前景は 10 分まで)は背景に回して経過を見張り、終わりはホストの終わりの通知(Claude Code のrun_in_background)か、launcher の pid(kill -0 <pid>)か、--outのrecord.jsonができたかで待つ。親が非対話の実行(claude -p。Claude Code 2.1.316 ではCLAUDE_CODE_ENTRYPOINTがsdk-cli)なら、終わりの通知を待って返答を終えない(下の「Claude Code」の非対話実行)。--outを付けた launcher をnohup … &で起こし(--outは launcher が作るので先に作らず、nohupの出力は別の場所へ)、10 分より短い前景の呼び出しを繰り返してrecord.jsonを待つ。pgrep -fのようにコマンド行の文字列で探す待ちを書かない(探す文字列が待つ側のコマンド行にも入り、自分を見つけ続ける。審査役の launcher が 3〜4 分で終わった後も、待つループが 6 時間終わらなかった。2026-10-25)。 - launcher の子にブラウザを動かさせない。Chrome は Claude Code の読み取り専用の子と書く子で
socket()を拒否されて異常終了し、読み取り専用の Codex の子でも DOM を返さなかった(2026-11-01、Claude Code 2.1.316・Codex 0.166.0、WSL2。Grok Build は確かめていない)。読み取り専用の Codex の子は、同じコマンドの中で起こした localhost のサーバーにも接続できなかった。Claude Code の子は接続できた。sandbox を広げて通さない。ブラウザの確かめは親が動かし、画像・DOM・操作のログをnote.evidence_dirの下の新しいディレクトリに置く。子には、そのディレクトリを--cwdにして読み取り専用で起動し、判定だけを頼む(Claude Code の読み取り専用の子は、対象の外にある証拠の置き場を読めない。--cwdにすると画像も開けた。2026-11-01)。この起動はheadがnullなので--reviewedに数えない。審査役の報告とは別に、親が動かしたことと、その子の判定を返答の 3 に書く。追加の操作が要れば、子に手順を報告させ、親が読んで依頼の範囲に収まるものだけを動かして、結果を渡す。 - 書く委任で子に渡すのは、対象(作業場所)と、その作業場所の記録(
work.pyのclaim・statusが返すnote.pathの置き場)だけ。タスクの一覧・統合の記録・他の worktree は親だけが書く(子が書けると、親が信用する記録を書き換えられる)。Claude Code の書く子は--restrictedと Bash の sandbox で同じ範囲に閉じ、認証情報の置き場と環境変数は読ませず、ネットワークは許す。ただし worktree の共有.gitの ref は、Claude Code の sandbox では守られない(統合先のmainを動かせた。2026-10-19)。そこで launcher は、書く子の前後で、自分のブランチ以外の ref・作業場所の.git・管理ディレクトリのcommondir・gitdir・共通ディレクトリのconfig・hooks・info・alternatesを比べ、変わっていればfailedにする。failedの作業場所では、問題に出た場所を確かめるまで git を動かさない(偽の設定が sandbox の外で動きうる)。動いた ref には前後の値と戻すコマンドが出る。launcher は自動では戻さない(子の実行中に親や別のタスクが正当に動かしたかもしれない)。Claude Code の sandbox で共通ディレクトリを拒否して commit の場所だけを許す書き方は、拒否が勝って commit もできなくなった(2026-10-19)。元の checkout とその下では、書く子を起動しない(unavailable)。元の checkout の Git メタデータなど、ホスト側の承認が必要な操作はその承認に従う。 - 既定は読み取り専用(Codex は下の権限の profile、Claude Code は下の sandbox、Grok Build は
--sandbox read-only)。変更を任せるときだけ--write。interrogateの審査役(3 の依頼文で立てる子)には--interrogateを付ける。記録のinterrogateが真になり、work.pyは危険度が中・高の push・pr でこの記録を求める(playbook-deliver)。入口の条件 (5) の子と、返す前の判定の子には付けない。返す前の判定の子(遵守の監査役、playbook-verify)には--auditを付ける。記録のauditが真になり、work.pyはすべての push・pr で、HEAD を対象にokで返ったこの記録を求める(読んだだけのnot-runは数えない)。監査役は審査役に数えない。どの子も、依頼文が out のprompt.mdに伏せ字なしで残る(依頼文に認証情報を書かない。依頼文を読めないときは残らず、子の起動が失敗として記録される)。Claude Code の監査役は、その場所の作業の記録・その場所を--cwdにした子の out・bb-writ のスキルも読める(ほかの読み取り専用の子は、ホームの下の対象の外を読めない。Read は対象の外を拒否されるが、Skill ツールで bb-writ のスキルを呼ぶことはできた。2026-11-10、2.1.322)。Codex・Grok の監査役がそれらを読めるかは確かめていないので、要るものは中身を依頼文に写す。--resumeは前の記録から引き継ぐ。 - 読み取り専用の Codex は、
-sでなく、read-only を継いで書ける場所を起動ごとの一時ディレクトリだけにした権限の profile(-c default_permissions=…・permissions.<名>.extends=":read-only"・filesystem={":tmpdir"="write"})で起動し、その一時ディレクトリ(bb-writ の状態の置き場のdelegations/<id>/tmp/。記録のscratch)をTMPDIRに渡す。--outを渡しても、一時ディレクトリはその下に置かない(--outには launcher 自身の記録だけを書く。Git の管理ディレクトリには向けない。呼び出し側が選ぶ場所の下に置くと、対象のリポジトリや Git の管理ディレクトリの中かを判定し続けることになり、判定の穴が尽きなかった)。状態の置き場が対象の下か、Git の管理ディレクトリの中(.gitの下・bare の形)にあれば、置き場も記録も作らずに引数の誤りとして止まる(終了コード 2)。この判定は、状態の置き場の道筋を解く前と解いた後の形で分かる場合だけで、symlink を何段も張って Git の管理ディレクトリに入る配置は見分けない(利用者が自分のホームに作る配置で、単一ユーザーの開発機を前提にするので、敵対的な配置への堅牢化はしない)。状態の置き場は利用者が選ぶので、対象でない作業ツリー(元の checkout など)の中に置けば、子はそこに書ける。対象がホームそのもの(ホームを Git で管理しているなど)なら、既定の状態の置き場は対象の下なので、BB_WRIT_STATE_DIRを対象の外に移して起動する。-s read-onlyではmktemp -dも失敗し、審査役が試験を動かせなかった。この profile では$TMPDIRのmktemp -dが通り、対象・/tmp・その外への書き込みは Read-only file system で止まり、ネットワークは名前解決もできなかった(2026-10-23、0.163.0)。名前を挙げた認証情報の置き場(読み取り専用の Claude Code の子のdenyReadと同じ一覧の~/.config・~/.sshなどと専用ログイン、Git の認証情報~/.config/git/credentials)は profile の deny で読ませない。Claude Code の子と違い、ホームのそれ以外の場所(別のリポジトリの.env、~/.npmrcなど)は読める。子に渡す環境は、読み取り専用の Claude Code の子と同じ許可の一覧(PATH・HOME・USER・LOGNAME・SHELL・言語・端末・TZ・TMPDIR・プロキシ・証明書・LC_*)とCODEX_HOMEだけで、認証情報らしい名前(credentials.envVarsと同じ規則)は一覧の中でも外す。プロキシの URL に書いた資格情報は渡る。-s read-onlyのころは、子が~/.configの下を読めた(同日)。無い場所・symlink の場所・拒んだ場所の下の場所を書くと bwrap が起動せず、拒んだ~/.codexの下に read を書いても codex 本体を実行できなかった(同日)。そこで launcher は read を書かず、あるものだけを symlink を解いた行き先で書き、入れ子は書かない。残すもの(実機で要ると分かったものだけ: codex 本体とそのパッケージ(本体の 2 つ上。standalone の版で実測。npm の版のネイティブの本体の置き場は確かめていない)、Git の設定~/.config/git(行き先が置き場の根そのものか専用ログインの中なら残さない。根の下を指すように利用者が symlink を張った配置は見分けない)、対象とその Git の共通ディレクトリ。置き場の根・ホーム・専用ログインの中のパッケージは数えない)を含む置き場は、起動の時点にある中身を 1 つずつ見て、残すものを含まないものだけを拒む(起動の後にできた項目は拒まない)。照合は、渡した deny が記録にすべてあり、その下に read・write が足されていないことも見る(より狭い指定が勝つので、設定が足した read は拒んだ場所を開き直す。例外は Codex 自身が足す専用ログインのtmp/arg0-linux/codex-arg0*の read だけ)。HOME が無いか/を指すなら起動しない(unavailable)。ネットワークを止めるのは子のコマンドだけで、Codex 自身の通信(モデル・web 検索など)は profile の外にある(公式文書)。ここまでの実測は Linux(WSL2)の 0.163.0 だけで、macOS の Codex の sandbox では確かめていない。-s(sandbox_mode)はdefault_permissionsより優先されるので一緒に渡さない。同じ理由で、対象の.codex/config.toml(信頼したプロジェクトで読まれる)のsandbox_modeや、同じ profile に足した書ける場所は profile を広げうる。sandbox_modeが勝つと逆に狭くなり、-s read-onlyと一緒に渡した実機では、記録は root を読むだけになりmktemp -dが失敗した(同日)。launcher は記録のturn_contextのpermission_profileを turn ごとに読み、どれかの turn で、書ける場所が一時ディレクトリ(:tmpdir)の外にあるか、一時ディレクトリに書けないか、ネットワークがrestrictedでないか、記録を読めなければ(読めない行、項目の形・access の値・path の形・network の欠け)failedにする(報告はreport.mdに残すが使わない)。同じ表記の場所の deny は write に勝つものとして扱う。表記の違う、より狭い deny(:tmpdirの下の絶対パスなど)は見ないので、そのときは子が試験を動かせずにnoと申告し、not-runになる。記録の形とネットワークの値restrictedは公式文書に無く、0.163.0 の実測による(profile は beta)。記録のsandbox_policy.typeは、この profile でもworkspace-writeと出る。読み取り専用の子の前後で、launcher は対象の Git の管理情報を比べない(ref・HEAD・index・config・info/は、長い審査の間に親の commit・git gc・push -u・fetch も正当に変え、誰が変えたか見分けられない)。対象と元のリポジトリに書けないことは、実効の権限の照合と、実機の確認python3 -B tests/verify_sandbox_live.py --out <新しい証拠ディレクトリ> --only codex-read-only(子に対象・/tmp・対象の外・共通ディレクトリの hooks・ref への書き込みとネットワークを試させ、手順ごとの終了コードとエラー文で拒否を見る)で確かめる。対象は丸ごと読ませるので、対象が名前を挙げた置き場そのものかその下(~/.claudeを Git で管理しているなど)なら、その中の認証情報も読める。codex 本体のパッケージが置き場の根の下(~/.config/dotfiles/bin/codexなど)にあれば、そのパッケージも読める。PATH の道具(nvm を~/.configに入れた node・npm、dotfiles を指す道具など)は残すものに数えないので、名前を挙げた置き場の下にあれば拒まれ、子の試験は動かずnot-runになる(読んだだけの審査として扱われる。残すものを足すたびに別の置き場を開けたので、実測の無い配置は足さない)。一時ディレクトリは残る(子が写した対象や証拠のファイルがあり、主審が読む。Grok の起動ごとの home と同じく、続きの起動のために残り、使われなくなったものは launcher が消す。手で消さない)。 - 読み取り専用の Claude Code は、コマンドの許可規則でなく OS の sandbox で守る。
--restricted --tools Read,Grep,Glob,Bash,Skill --permission-mode dontAskに、--settingsで Bash の sandbox(対象への書き込みも拒否、認証情報の置き場の読み取りを拒否、ネットワークの宛先なし、起動できなければ子を起動しない)を渡す。許可規則のBash(git diff:*)だけでは、git log --output=<任意のパス>で対象の外や.git/hooksに書け、対象の.claude/settings.jsonの SessionStart hook も動いた(2026-10-19、2.1.302)。--restrictedは対象の.claudeの設定を読まず、Read を対象の中に閉じる。その下では--allowedToolsが効かないので、許可は--settingsに書く。対象の CLAUDE.md は自動では読まれないので、launcher は子に AGENTS.md・CLAUDE.md を資料として読ませる。Linux・WSL2 の sandbox はbwrapとsocatが要る。sandbox の書き込み拒否は絶対パスで書く("."は対象を指さなかった。同日)。launcher は親のCLAUDE*・ANTHROPIC_*の環境変数を子に渡さない(親のCLAUDE_CODE_PLUGIN_DIRSが利用者の mod を子に読み込ませていた。mod は sandbox の外で利用者の権限で動き、-pでも hook が動く。ANTHROPIC_API_KEYがあると専用ログインの代わりに別料金の API へ落ちうる。2026-10-19)。子の Bash は Claude Code の環境変数を継承するので、launcher は認証情報らしい名前の変数をsandbox.credentials.envVarsで消す。CLAUDE_CODE_SUBPROCESS_ENV_SCRUBは使わない(許可の方針を default に戻し、対象に空の.env・package.jsonなどを残した)。読みは、ホームのうち対象・Git の共通ディレクトリ・Git の設定・PATH 上の道具に至る経路の外を拒否し(経路の上の兄弟を並べる。ホーム全体を拒否すると、対象への書き込みの拒否とぶつかって bwrap が起動しなかった。permissions.blockReadsOutsideWorkingDirectoriesも同じ。2026-10-19)、子に渡す環境変数も最小限(PATH・HOME・言語・端末・プロキシ・証明書)にする。対象が linked worktree だと、sandbox は共有の.gitとその周り(元のリポジトリの親まで)への書き込みを自動で許すので、ホームと共通ディレクトリも書き込みを拒否する。実機の確認はpython3 -B tests/verify_sandbox_live.py --out <新しい証拠ディレクトリ>。 - launcher は、どの子でも起動の前後でホームの 2 段目までを比べ、新しくできて空のままのファイル・ディレクトリがあれば
home_residueに並べてfailedにする(設定・状態の置き場・対象・~/.cacheは見ない。Claude Code 2.1.309 の sandbox が作る空のディレクトリ~/.claude/sshは、CLI 自身の置き場なので数えない)。子の CLI の sandbox は、守る対象のうち無いものを空のファイルで作って残すことがあり、空の~/.bash_profileが残るとログインシェルが~/.profileと~/.bashrcを読まなくなった(Claude Code 2.1.302、2026-10-19)。launcher は消さない(同じ時刻に別の道具が作ったものかもしれない)。並んだ場所を確かめてから消す。書く子(--write)では対象の直下も同じく比べ、新しくでき、中身が空のまま(入れ子も空)で index に無いものをcwd_residueに並べてfailedにする。読み取り専用の子では比べない(同じ対象で並行する審査役の一時的な場所を、互いの残りとして数えないため)。前からあるディレクトリの下は見ず、index と照らすのは対象が作業ツリーの根のときだけ。Claude Code 2.1.310 の sandbox は、守る対象のうち無いもの(.bashrc・.gitconfig・.claude/の下など)を対象に空で作り、子が正常に終われば片付けるが、時間切れで止めると残した(2026-10-24)。0 バイトのファイルが残るとtask cleanupが未保存の変更とみなし、git add -Aで commit に入りうる。 - launcher は、子の CLI が終わったら(時間切れを含む)、子が起こしたプロセスを止めてから照合する。子のプロセスグループを止めるだけでは、Claude Code 2.1.309 の Bash のように新しいセッションで起こしたコマンド(
sh -c bwrap …の sid・pgid が自分の pid。2026-10-24 の実測)が残り、読み取り専用の子の終了から 49 分以上、試験を回し続けた(2026-10-23。Grok Build の子の背景のコマンドも別のセッションに出た。Codex 0.164 の子では残らなかった。2026-10-24)。Linux では launcher が自分の子孫の subreaper(PR_SET_CHILD_SUBREAPER)になり、子の CLI が終わったら(出力を開いたままの子孫がいても、待たずに)、そのプロセスグループと、自分の下へ付け替わった子孫を、残らなくなるまで(5 秒まで)止め、残っていたものを「pid コマンド行」で記録のstopped_after_exitに並べる(止める前に自分で終わっていたものも入る。子の CLI のグループのもの(dotenvx の下の claude など)は並べない。子の実行中に親を失って終わったものは、待つ間に刈り、並べない。statusは変えない。コマンド行には子が引数に書いた値がそのまま出る)。止めきれない(子の CLI 自身が SIGKILL の後 10 秒で終わらないことも)、/procを読めないならfailedにする。subreaper になれなければ子を起動しない(failed)。届かないのは、launcher の子孫でなくなったもの(systemd-runや docker のように別のサービスに起こさせたもの)と、launcher 自身が KILL されたとき。子を途中で止めるときは、launcher に TERM を送る(kill <launcher の pid>。HUP・INT も同じ)。 launcher は直下の子(Claude Code なら dotenvx。dotenvx が子の CLI に伝える)に TERM を伝え、子が片付けて終わるのを待ち(30 秒か--timeoutの残りの短い方。過ぎたら KILL。Linux の外は偽の子でしか確かめていない)、照合して記録を書く(stopped_by_signalと、okでなければ止めた理由。sessionがあれば--resumeで続けられる)。起動時に無視されていたシグナル(nohupの HUP)は無視のまま。照合の間に端末の Ctrl-C が launcher のグループに届くと、後処理の git が止まり、記録の照合(headなど)が欠けることがある。子が自分で終わった直後(刈る前)に受けたシグナルは、子を止めたと記録されることがある。launcher と子を木ごと KILL しない。子の CLI が片付けられず、Claude Code 2.1.310 の子が対象に空の.claude/.cc-writesを残し、記録も残らなかった(2026-10-25)。子を起動する前に受けたシグナルと、launcher を KILL したときは、記録は残らない。macOS など Linux の外では、プロセスグループを止めるだけで、stopped_after_exitは出ない(そこで同じことが起きるかは確かめていない)。どこでも、子の CLI が終わった後に子の出力を開いたままのプロセスが 10 秒残ればfailedにする(止めきれないプロセスが並んだときは待たない。Linux の外では確かめていない)。親のコマンドの時間切れが launcher を KILL すると、記録は残らず、続きからも起動できない(TERM なら上のとおり記録を書く)。 - 時間切れ(
--timeout秒。既定 1800、--hardestの書く子は 3600)の子には、まず TERM を送って片付けを 30 秒まで待ち、終わらなければ KILL する(2026-10-30、Claude Code の書く子の時間切れで、空の残りが出ないことを確かめた)。止めた子はstatusがtimeoutになり、記録にsessionが残る。--timeoutは、launcher を呼ぶコマンドの時間の上限(呼び出し側が launcher を止める時間)より 2 分以上短くする(子の片付けを 30 秒まで待ち、その後も、子孫を止め、出力を読み終え、Git とホームを照合するのに数十秒かかる。KILL されたときは上の段落)。上限のあるコマンドで起動するときは--out <まだ無いディレクトリ>で記録の置き場を先に決める(launcher が終わったのに標準出力を受け取れなかったとき、そのrecord.jsonから続けられる)。最初から起動し直さず、--resume <その記録の out>で続ける。止めた時点の作業は子の会話記録に残っていて、続きの子は文脈を保ったまま答えた(2026-10-25。Claude Code 2.1.310・Codex 0.164.0・Grok Build 1.0.70 を SIGKILL で止めた後に再開して確かめた)。止めたときに動いていたコマンドは途中で止まっているので、続きの依頼文は「時間切れで止められた。止められたコマンドだけをやり直し、続けて報告を書く」の形にする。host・cwd・model・effort・write・interrogate・audit と役割(--hardest)は前の記録から取り、同じ権限で組み直す(一緒に渡すと引数の誤りとして止まる)。session は起動の前に launcher が決めて渡す(Claude Code は--session-id、Grok Build は-s)。Codex は出力の最初のthread.startedから取るので、最初の起動がそれを出す前に止まったときと、止めきれないプロセスが子の出力を開いたままのときは、続きから起動できない(Claude Code・Grok Build の session は残る)。続きの起動が、結果やthread.startedを出す前に時間切れになったときは、session を照らさず、launcher が渡した session で続けられる。続けられるのは、記録のresumableが真の起動だけ(session があり、Grok の警告・読み取り専用の Codex の権限の照合(確かめられないときも)・続きの session を確かめられないか食い違う・Git の管理情報の変化・止めきれないプロセス・空の.claudeを片付けられない・対象とホームの残りを確かめられない・想定外の例外(記録に書けない値も)のどれにも当たらなかった。どのstatusになったかによらない。利用枠と空の残りでは続けられ、そのときは記録のproblemsに--resumeの案内が付く)。利用枠と判定するのは、子が成功しなかったとき(時間切れか、終了コードが 0 でない・is_error・本文が空)に、stderr か CLI のエラーに利用枠の文言があるときだけ。利用枠で止まった CLI が成功の形(終了コード 0・is_errorが偽・本文あり)で終わると、quotaでなく、報告の検査でokかinvalid-reportになる(本物の CLI が利用枠で止まったときの終了コードとis_errorは確かめていない)。続けられない記録の--resumeは、子を起こさずに止まる。これまでの起動のcwd_residue・home_residueがまだあるとき、同じ session の続きが動いているとき、その session のどの記録かのblockedにunsafe・breach・other-session・left・gitがあるときも、同じく止まる(想定外の例外で止まった起動は、照らせなかっただけの扱いで、前の記録から続けられる。照らすのは同じ状態の置き場の記録だけ。手で書き換えた記録・置き場の付け替え・launcher が KILL されて書かれなかった起動・移した残りは見ない)。続きの記録が、読み取り専用の Codex の続きが turn を書かずに返った・止まった(その子の権限を照らせない)か、続きの session を確かめられなかっただけで止まったなら、その前の続けられる記録から続ける。Grok の警告・権限の照合に当たった・別の session が返った・Git の管理情報の変化・止めきれないプロセスで止まったときは、どの記録からも続けない(前の記録から続けると、止まった続きがした変更を、次の続きのokが隠す)。確かめてから最初から起動し直す。続きも 1 回の起動として記録し(resumed_fromに前のout)、headはその時点のものが前の起動のheadと、その session の起動が見た commit(記録のsaw)の全部と同じときだけ書く(違えばnullとhead_lost。続きの子は前の起動で別の commit を見たので、そのokを新しい commit の審査に数えない)。読み取り専用の Codex の続きは、前と同じ一時ディレクトリ(記録のscratch)に書け、実効の権限は、前の起動で照らし終えた turn(記録のcodex_turns)を除いて、続きの deny で照らす(除けるのは、続きの子が前と同じ thread で、その記録ファイルが 1 つのときだけ。0.164.0 は、続きの turn を同じファイルに足した。違えばfailed)。Grok Build の続きは新しい home で起動し、前の home からはその session の記録(sessions/<対象>/<session>/の通常のファイル。symlink は写さない)だけを写す(前の home の設定・hooks は子の sandbox から書けたので、続きに読ませない。新しい home と写した記録で-rが続いた。2026-10-25、1.0.70)。時間切れより先に、利用枠・Grok の警告・読み取り専用の Codex の実効の権限を照らし、当たればquota・failedにする(権限が約束どおりだったか分からない子を、続きから起動させない。Codex が turn の記録を書く前に止まったときも、権限を確かめられないのでfailed。続きの起動でも同じ)。時間切れの後にhome_residue・cwd_residueがあればfailedになるが、resumableは真のままなので、並んだものを確かめて片付けてから同じく続ける。Git の管理情報の変化・止めきれないプロセスの後は続けられない(確かめてから最初から起動し直す)。2 回続けて時間切れになったら、続ける前に、子の会話記録(Claude Code なら専用ログインのprojects/の下の<session>.jsonl)のメタデータで道具ごとの時間を見て、何に使ったかを確かめる(本文は引用しない)。記録のload(CPU 数と、起動時と終了時の 1 分平均の負荷)も見る。試験を回す子を同時に複数立てるときは、依頼文に 1 人あたりの同時実行数(CPU 数を子の数で割った数まで)を書く。2 人の審査役がそれぞれ試験を背景で並列に回し、16 CPU の機械で負荷の 15 分平均が 300 を超え、2 人とも時間の約 2/3 を試験に使って時間切れになった(2026-10-25)。 - launcher は、起動のたびに、自分が状態の置き場に作った一時の置き場(読み取り専用の Codex の子の一時ディレクトリと、Grok Build の子の起動ごとの home)のうち、もう続きから起動されないものを消す。消えるのは、最後に使われてから(その置き場を使った起動の終わりから)7 日を過ぎたもの(記録の
statusによらない)と、それを指す記録の対象が、どれも、もう無いタスクの作業場所(状態の置き場のworktrees/の下。task cleanupで消えたもの。launcher は、その作業場所が無いことだけを見る)であるもの。消した場所は、その起動の記録のsweptに並ぶ。この 2 つに当たる置き場を指す記録からの--resumeは、置き場がまだ消えていなくても、子を起こさずに理由を出して止まるので、新しく起動する(Claude Code の続きは一時の置き場を使わないので、これでは止まらない)。launcher は、使っている置き場のディレクトリに排他を掛けて終わりまで持つので、使っている置き場(最初の起動も、続きも)は消えない。報告・記録(out の中、delegations.jsonl)も消えない。ほかの launcher が同じ置き場を使っているか片付けている間の--resumeは、少し待つよう言って止まる(待ってから、同じ--resumeをもう一度実行する)。片付けに失敗しても子の起動は止まらず、理由がsweptのproblemsに出る。一時の置き場を手で消さない(排他を通らずに、使っている置き場を消せてしまう)。状態の置き場のdelegations/・grok-homes/の下は launcher だけが書く(読み取り専用の Codex の子と Grok Build の子は、自分の置き場の中にだけ書けた)。ほかのプロセスでその下の名前を付け替えない(launcher は、片付けや起動と同時の付け替えを守らない)。7 日より長く要るもの(子が一時ディレクトリに残した証拠のファイル、Grok Build の home の中の要るファイル)は、主審が作業の記録の証拠の置き場(note.evidence_dir)に写しておく。home は丸ごと写さず、auth.jsonは写さない(専用ログインへの symlink)。 - 子に、最後に結論・証拠・不明点・実行(
execution: 対象の試験・検査を最後まで実行できたかyes・no・not-neededと、実行したコマンドと終了コード)の JSON を書かせる。報告を使うのは、標準出力の 1 行の JSON のstatusがokのときと、not-run(読み取り専用の子で、実行の欄が無いかno)を読んだだけの報告として使うときだけ(実行が要る審査での数え方はinterrogateの 3)。書く子の実行の欄は記録(execution)に残すだけで、statusを変えない。読み取り専用の子にだけ、対象に書く試験は$TMPDIRに写して動かすよう約束に足す。終了コードだけでは、一時ディレクトリを作れないような環境の失敗と、試験が退行を見つけて落ちたことを見分けられないので、子の申告で分ける(申告の真偽は確かめない)。invalid-report(実行の欄の形が違うことも)・timeout・failed・quota・unavailableは理由(problems)を記録して扱う。JSON が返ったことを成功にしない。 - 実効のモデル・effort を記録する(Claude Code と Grok Build は結果の
modelUsage、Codex は記録のturn_context)。Grok Build の結果に effort は出ないので「不明」とする。記録は~/.local/state/bb-writ/delegations/とdelegations.jsonl。--cwdが Git の作業ツリーで、子の起動の前と終わりの両方で HEAD が同じで未 commit の変更(staged・追跡外のファイルを含む。無視するものは除く)が無ければ、その HEAD をheadに書く(ほかはnull。終わりに変わっていたらhead_lostに書く。途中で変えて戻したものと、git update-index --assume-unchanged・--skip-worktree・fsmonitor で隠した変更は見分けない。サブモジュールの中の変更は、設定で無視していても数える)。work.pyの--reviewedは、このheadとstatus(okだけ)・write(偽だけ)を、行とoutのrecord.jsonの両方で照らす(危険度が中・高ならinterrogate(真だけ)も)。
担当の貸し出しと外部操作の記録
scripts/work.py(launcher と同じ置き場)。子に書く仕事を任せるときは、親が担当を持ったままにせず、子に claim させる(同じ作業場所に親と子が同時に書かない)。別タスクを子に任せるときは、親が playbook-parallel の task start で専用 worktree を作って release し、子はその worktree を --cwd にして起動し、そこで claim する(元の checkout で起動すると、その記録の置き場にタスクの一覧が含まれる)。task start・task resume・integrate・task cleanup は親が行う(子はタスクの一覧と統合の記録に書けない)。子が終わったら、親が同じ worktree で claim し直して確かめ、統合する。作業場所の記録(lease.json・ops.jsonl)は子が書き換えうるので、子に任せている間はその作業場所で外部操作を始めたままにしない。担当の期限は 24 時間までで、それを超える記録は切れたものとみなす(子が期限を遠い将来にして、親の取り直しを止められないように)。CLI 名や担当の表示名が同じでも、タスクと token で区別する。使い方はplaybook-deliver。
外部操作(push・PR・コメントなど)は元の checkout から op run --from <元の checkout> -- <コマンド> で実行する(照合を通ったときだけ実行し、終了コードを記録する)。成果物を出す操作は --verified <検証した commit> も付け、push・PR は --reviewed <届ける前の審査を通した commit の ID か none:<理由>> と --risk 低|中|高:<理由> も付ける(HEAD などの参照は受けない。commit は、それを対象に launcher で起動して ok で返った読み取り専用の子の記録が要り、危険度が中・高ならそのうち --interrogate を付けた審査役の記録が要る)。外部操作は親が行い、子には頼まない(子の付与は作業場所の中だけ)。work.py check --dir <作業場所> --from <実行する場所> で、そこで使われる GitHub のアカウントと書き込み権限を事前に見られる。子の起動に GH_CONFIG_DIR や GH_TOKEN を足してアカウントを決めない(利用者の環境の切り替えを上書きし、別の名前で外に出る)。
Claude Code
- 同じ系統の委任:
Agentツール(新しい文脈)は、大量の読み取りと、書き込みの範囲を守らなくてよい作業に使う。読み取り専用の探索は Explore 型。Agentの子の書き込みは OS で止まらない。Explore 型も Bash を持ち、「ここにだけ書く」は依頼文の指示にとどまる(審査役が依頼で許された一時ディレクトリの外の~/.npmに書いた)。判定を任せる子(審査役・確かめ役・返す前の判定の子)は launcher の--host claudeで立てる。Agentツールの子は委任の記録にも残らず、work.pyの--reviewedがその commit を通さない。 - 非対話実行:
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 claude -p "<依頼>" --output-format json --model <m> --effort <low|medium|high|xhigh|max> < /dev/null。この変数を付けないと、背景のコマンドの終わりの知らせが次のターンを起こし、stream-json の result が 2 回出て、1 回目は「終わると通知が届くので…」という途中の文だった。付けるとrun_in_backgroundが道具から消え、result は 1 回だった(2026-11-01、2.1.316)。付けないclaude -pが途中の文で止まり、外の時間切れまで進まなかった報告もある(その停止の再現は確かめていない)。付けられない実行の中では、背景に回さず前景で待つ(nohup … &で起こしたコマンドを、前景の呼び出しの繰り返しで待つと、1 回の result で終わった)。手元の作業ツリーのプラグインを読み込むには--plugin-dir <ディレクトリ>。入口の明示は/bb-writ:bb-writ <依頼>(普通の依頼文だけでは入口が使われない。実測 2026-10-17)。確認を求める操作を自動で拒否するなら--permission-prompts none、許可の方針は--permission-mode <acceptEdits|auto|bypassPermissions|manual|dontAsk|plan>。子の起動に--dangerously-skip-permissionsを付けると、親の auto mode の分類器が起動を拒否した。--permission-mode auto --permission-prompts noneは通り、実課題を完了した(同日)。 - 再開と背景:
--resume <session-id>(結果 JSON のsession_id。-p --output-format jsonは終わるまで何も出さないので、launcher は起動の前に--session-id <uuid>で決めて渡す)。端末を離れても続けるときは--bg(--resumeと併用可)。記録を残さないなら--no-session-persistence。 - Codex を子にする: Bash から
CODEX_HOME=~/.config/bb-writ/codex-home codex exec --json -m <model> -c model_reasoning_effort="<effort>" -C <対象> "<依頼>" < /dev/null。出力のthread.startedの id が session。
Codex
- 同じ系統の委任: 新しい文脈が要るときは
codex execを別プロセスで起動する。Codex 自身のサブエージェント機能は版と設定で有効・無効が変わるので、使えるかはその場で確かめ、使えなければそう書く。 - launcher の書く子:
--add-dirで渡すのは、作業場所の記録と、Git の共通ディレクトリのうち commit に要るobjects・自分のブランチのディレクトリの ref と reflog・その worktree の管理ディレクトリだけ。管理ディレクトリが無いとindex.lockを作れずに commit が失敗し、共通のconfig・hooks・mainには書けなかった(2026-10-19、0.163.0)。 - 非対話実行:
codex exec --json -m <model> -c model_reasoning_effort="<effort>" [-s read-only|workspace-write|danger-full-access] [-C <dir>] [--add-dir <dir>] "<依頼>" < /dev/null。stdin を閉じないと「Reading additional input from stdin...」で待ち続ける(実測 2026-10-17)。承認を Codex 自身の自動レビューに任せるなら--approve-for-me(workspace-write を含むので-sと併用できない)。sandbox の中でネットワークが要るなら-c sandbox_workspace_write.network_access=true、作業領域の外に書く場所は--add-dir。構造化した結果が要るなら--output-schema <file>。利用者の設定と AGENTS を切るなら--ignore-user-config・--ignore-rules。Git 管理外で動かすなら--skip-git-repo-check。 - 再開:
codex exec resume <SESSION_ID>(--lastで直前)。resumeは-C・--add-dir・--approve-for-meを受けないので、launcher はexecの引数をexecの側に置いたまま、依頼の前にresume <id>を挟む(0.164.0 で、読み取り専用の権限の照合も、書く子の書き込みも、続きで同じだった。2026-10-25)。 - プラグイン:
codex plugin marketplace add <このリポジトリの絶対パス>→codex plugin add bb-writ@bb-writ。.claude-plugin/marketplace.jsonと root のplugin.jsonをそのまま読む。写しが$CODEX_HOME/plugins/cache/bb-writ/bb-writ/<版>/に置かれるので、版を上げたらcodex plugin remove bb-writ@bb-writ→add。launcher の Codex の子は専用ログインの写しのスキルと補助スクリプトを読む(起動ごとに置き場を渡す引数が無い。読み取り専用の子は、スキルの一覧は写しから見えるが、写しの本文は launcher が専用ログインの置き場の読みを拒むので読めなかった(2026-11-11)。Claude Code の子には--plugin-dirで launcher と同じ bb-writ を渡し、Grok の子は bb-writ を読まない)。そこで launcher は、写しのskills/・scripts/が launcher 自身と中身で違えば Codex の子を起動せずunavailableにし、入れ直すコマンド(remove・add。GitHub から入れた marketplace なら先にmarketplace upgrade。手元のディレクトリで登録した marketplace では upgrade がエラーになる。0.166.0)を理由に出す。写しは marketplace に登録した置き場から作られるので、作業場所の launcher では、統合してから入れ直す。写しが無ければ bb-writ 無しの子として起動する。Git の private リポジトリからの追加は未確認。 - Claude Code を子にする:
CLAUDE_CONFIG_DIR=~/.config/bb-writ/claude-home CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 dotenvx run -f ~/.config/bb-writ/.env -fk ~/.config/bb-writ/.env.keys -- claude -p "<依頼>" --output-format json --model <m> --effort <e>。背景の処理を止めるのは、終わりの知らせが次のターンを起こすと json の出力が最後のターンの結果だけになり、報告が消えるため(launcher も渡す)。
Grok Build
- プラグイン: root の
plugin.jsonを読む。grok plugin install B16B1RD/bb-writ --trust(手元ならgrok plugin install <ディレクトリ> --trust)。--trustを付けないと、どちらも導入せずに止まる(updateには要らない。1.0.63 で確認)。手元のディレクトリからの導入は写しで、grok plugin updateは「local symlink, already live」と表示しても変更を取り込まない。grok plugin uninstall bb-writ(repo の id でなくプラグインの名前)→installで入れ直す。Git から入れた場合、updateは既定のブランチの最新の commit に追従する。Claude 互換(既定で有効)で~/.claudeのプラグインも読むので、Claude Code に入れた bb-writ もスキル一覧に[claude]付きで出る。両方あれば Grok に入れたほうが使われる。スキルのallowed-toolsはツールを制限せず、model・effortは受け取っても適用されない(公式文書 https://docs.x.ai/build/features/skills-plugins-marketplaces)。 - 入口: 普通の依頼文(入口の名前なし)でも、最初に
skills/bb-writ/SKILL.mdを読み、work.pyで作業場所を取り、修正・試験・統合まで進んだ(2026-10-18、2 回)。明示するなら/bb-writ <依頼>。 - 同じ系統の委任: 新しい文脈が要るときは
grok -pを別プロセスで起動する(launcher の--host grok)。Grok 自身のサブエージェントは、launcher では--no-subagentsで切る。 - 非対話実行:
grok -p "<依頼>" --output-format json -m <model> --effort <effort> --cwd <dir> < /dev/null。結果は 1 つの JSON(text・sessionId・stopReason・modelUsage・total_cost_usd・num_turns)。認証が無ければ{"type":"error","message":"Not signed in…"}で終了コード 1。modelUsageのモデル名は指定に-buildが付いたもの(grok-4.7→grok-4.7-build)。grok modelsは認証が通っていても「not authenticated」と表示するので、ログインの検査に使わない。 - 専用ログインと隔離:
GROK_HOME=~/.config/bb-writ/grok-auth(GROK_HOME=… grok login)。launcher は親のGROK_*・XAI_API_KEY(あると専用ログインの代わりに別料金の API へ落ちる)を渡さず、GROK_{CLAUDE,CURSOR}_{AGENTS,SKILLS,RULES,HOOKS,MCPS}_ENABLED=falseとGROK_MEMORY=0を渡す。GROK_HOMEを分けても、Grok は~/.claudeの CLAUDE.md・skills・hooks・permissions を読み、切らないと子が利用者の個人設定に従った(同日)。launcher は起動ごとに使い捨てのGROK_HOME(~/.local/state/bb-writ/grok-homes/の下。grok -rの再開のために残り、使われなくなったものは launcher が消す。手で消さない)を作り、専用ログインからはauth.jsonだけを symlink で共有する。sandbox・設定・hooks・信頼の記録を後の子と共有しないため。子は自分の home に書けるので、home で置き換わったauth.jsonを専用ログインへ書き戻すことはしない(別のアカウントのものかもしれない)。Grok はトークンの更新で symlink の先(専用ログインのauth.json)を置き換え、home の symlink は残った(2026-10-19)。並行する 2 つの子がそれぞれの home で動き、専用ログインのauth.json・sandbox.toml・config.tomlが変わらないことを確かめた(2026-10-19)。 - 権限: 守りは sandbox で、承認は
--always-approve。組み込みの profile は適用できないと警告して強制せずに続くが、独自の profile は起動を拒む(公式文書 18-sandbox)。そのため launcher は読み取り専用もextends = "read-only"の独自の profile にし、起動ごとの$GROK_HOME/sandbox.tomlに書く。stderr にwarningの行があればfailedにする(適用失敗の文言はwarning: sandbox could not be applied: …)。適用の記録は$GROK_HOME/sessions/sandbox-events.jsonlのProfileApplied(enforced・read_write_paths)。- 読み取り専用は
/tmpの外への書き込みを、シェルでも write ツールでも Permission denied で止めた(2026-10-18)。read-only でも/tmp・/var/tmp・一時ディレクトリ・$GROK_HOMEには書けるので、launcher はそれと重なる対象(下にある、または含む)を読み取り専用では起動しない。 - 1.0.63 の読み取り専用の子は、
$GROK_HOMEにシェルからは書けなかったが、Grok のファイルの道具では新しいファイルを作れた。sandbox.tomlは道具でも書けなかった(2026-10-19)。home を起動ごとに分けるのは、この残ったファイルを後の子に読ませないため。 - 塞げない所:
auth.jsonをdenyに入れると Grok 自身が読めず「Not signed in」で起動しない(2026-10-18)。symlink の先(専用ログイン)へ子が書けるかは試していない(壊すと専用ログインを失うため)。Linux の Landlock はファイルの mode・時刻・拡張属性の変更を止めない(公式文書)。 --writeは、作業場所の記録と、Git の共通ディレクトリのうち commit に要るobjects・refs・logs・その worktree の管理ディレクトリ(git rev-parse --git-dir)に書けるextends = "workspace"の profile。共通ディレクトリを外すと、worktree の commit がindex.lockを作れずに失敗した(2026-10-18)。この 4 か所なら commit でき、共通ディレクトリのconfig・hooksには書けなかった(2026-10-19)。元の checkout で起動すると対象の.git全体に書けるので、書く子は作業場所で起動する。workspace の profile は子プロセスのネットワークを止めない。
- 読み取り専用は
- 再開:
grok -r <sessionId>(その session の記録sessions/<対象>/<session>/があるGROK_HOMEで)。sandbox の profile はセッションに保存され、再開時に違う--sandboxを渡すと拒否される(公式文書 18-sandbox)。launcher は新しい会話の session を-s <uuid>で先に決める。続き(--resume)は、新しい home(新しいsandbox.toml、同じ profile 名)に前の home からその session の記録だけを写して-rする(2026-10-25、1.0.70 で、写した記録で続き、ProfileAppliedがenforced: trueだった)。前の home で手で-rしない(前の home の設定・hooks は子の sandbox から書けた)。写した記録の中身も子が書けた。続きの sandbox は新しいsandbox.tomlの独自の profile に拠り、Grok は独自の profile を適用できなければ起動を拒む(公式文書 18-sandbox)。記録のsummary.jsonのsandbox_profileをoffに書き換えて続けると、Grok は「作られたときは 'off'」と再開を拒み、launcher はfailedにした。続きの Grok は、記録のgrok_homeが指す前の home の中のファイルを開かなかった(strace で 0 回)(2026-10-25、1.0.70)。確かめたのはこの 2 つだけで、記録のほかの中身が-rに何をさせるかは確かめていない(ProfileAppliedの記録も子が書ける場所にあるので、証拠にしない)。
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

