You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As a dotfiles maintainer, I want グローバルの行動指針を 1 つの Source に置きたい, so that Claude と Codex の指示文を 2 箇所で手で揃えなくてよい。
As a Codex user, I want ~/.codex/AGENTS.md が Claude の ~/.claude/CLAUDE.md と同じ共有本文から生成されてほしい, so that 存在しないルール置き場を指す古い指示を読まされない。
As a Codex user, I want Claude の ~/.claude/rules/common/* に相当する共通ルールが ~/.codex/AGENTS.md に畳み込まれてほしい, so that Codex に rules ディレクトリ相当が無くても同じルールを読める。
As a Claude Code user, I want 現在の ~/.claude/CLAUDE.md の内容と挙動が保たれてほしい, so that この変更で成熟した Claude ハーネスが退行しない。
As a Claude Code user, I want Claude 専用ツール(AskUserQuestion)への言及が Claude 用前置きに残ってほしい, so that 共有化で Claude 固有の使い方が失われない。
As a Codex user, I want 「選択肢は番号付きで提示する」という製品非依存の意図だけを読みたい, so that Codex に存在しないツール名で混乱しない。
As a dotfiles maintainer, I want 製品別の前置きは「その製品にしかない機能」に限ってほしい, so that 共有本文に入るべき意図が製品別に分散しない。
As a dotfiles maintainer, I want ~/.claude/CLAUDE.md と ~/.codex/AGENTS.md の Target Owner が chezmoi 1 つであってほしい, so that 2 つの仕組みが同じファイルを書き合う drift ループが起きない。
As a dotfiles maintainer, I want ~/.claude/settings.json を従来どおり chezmoi の 1 テンプレートで所有し続けたい, so that permissions のコメント・順序・テンプレート変数(.ghOrg)が失われない。
As a dotfiles maintainer, I want 共有 rules の Source を現在の置き場のまま使いたい, so that 製品が 2 つの段階でファイル数を倍にしない。
As a Codex user, I want 生成された ~/.codex/AGENTS.md が Codex の既定 32 KiB 切り捨て未満であることを検査してほしい, so that 末尾のルールが黙って読み飛ばされない。
As a dotfiles maintainer, I want マシン固有の仕事用ルール(~/.claude/rules/ に symlink で差し込まれるもの)をグローバル Target に含めないでほしい, so that public リポジトリの Source に仕事側の内容や名前が入らない。
As a CI maintainer, I want 共有本文が両 Target に含まれることをテンプレートのレンダリング結果で検査してほしい, so that 片方だけ直した drift の再発が CI で止まる。
As a CI maintainer, I want 既存の check-templates / bats の流儀でテストが書かれてほしい, so that 新しいテスト基盤を持ち込まない。
As a new-machine user, I want chezmoi apply だけで ~/.codex/AGENTS.md が配置されてほしい, so that Codex のセットアップ手順を別に覚えなくてよい。
As a Cursor user, I want Cursor のグローバル User Rules 非公開ストレージには触れないでほしい, so that ADR 0004 の決定が守られる(Cursor は Managed Project 内の AGENTS.md で共有内容を受け取る)。
As a dotfiles maintainer, I want 根拠を失った当初チケット(permissions / hooks 翻訳、Enforcement Grade、APM Skill、apply 統合)を決定コメント付きで close したい, so that backlog そのものが重さにならない。
As a future maintainer, I want 再開条件(その製品を日常利用している事実)が ADR に残ってほしい, so that 同じ議論を証拠なしに繰り返さない。
Problem Statement
Claude Code のハーネス(グローバル指示・rules・permissions・hooks)は chezmoi が Source として成熟しているが、Codex のグローバル指示
~/.codex/AGENTS.mdは chezmoi 管理外の手コピーで、Claude 側の古い英語版のまま存在しないルール置き場を指している。今後 Codex / Cursor を本格的に使い始めたとき、「Claude と同じ行動指針を読んでいるか」を確かめる手段が無く、指示文を直すたびに 2 箇所を手で揃える必要がある。一方で、当初の #308 は permissions・hooks・MCP・Skill まで含む 3 製品の意味的同期を掲げたが、Codex / Cursor はまだ日常利用されておらず、翻訳先の無い翻訳規則(Enforcement Grade、tighten-only、Portable Hook)を先回りで設計することが未着手 13 チケットの重さになっていた。
Solution
範囲を指示文(Content Module)の共有に限定する。Codex / Cursor に保証するのは「Claude と同じ Content Module を読む」ことだけで、permissions / hooks / sandbox は各製品ネイティブの設定のまま触らない。
グローバル指示は chezmoi テンプレートで合成する: 共有本文を製品名の付かない共有テンプレートに置き、
~/.claude/CLAUDE.mdと~/.codex/AGENTS.mdはそれぞれ製品別の前置き(Runtime Extension)+ 共有本文 + 共有 rules から生成される。Target Owner は両方とも chezmoi の 1 つで、既存のharness/compose adapter は Managed Project(リポジトリ内CLAUDE.md/AGENTS.md/.cursor/rules)専用に据え置く。APM は MCP のみの Dependency Plane を維持する。最初の slice は
~/.codex/AGENTS.mdの drift 解消(#311 の書き換え版)。User Stories
~/.codex/AGENTS.mdが Claude の~/.claude/CLAUDE.mdと同じ共有本文から生成されてほしい, so that 存在しないルール置き場を指す古い指示を読まされない。~/.claude/rules/common/*に相当する共通ルールが~/.codex/AGENTS.mdに畳み込まれてほしい, so that Codex に rules ディレクトリ相当が無くても同じルールを読める。~/.claude/CLAUDE.mdの内容と挙動が保たれてほしい, so that この変更で成熟した Claude ハーネスが退行しない。AskUserQuestion)への言及が Claude 用前置きに残ってほしい, so that 共有化で Claude 固有の使い方が失われない。~/.claude/CLAUDE.mdと~/.codex/AGENTS.mdの Target Owner が chezmoi 1 つであってほしい, so that 2 つの仕組みが同じファイルを書き合う drift ループが起きない。~/.claude/settings.jsonを従来どおり chezmoi の 1 テンプレートで所有し続けたい, so that permissions のコメント・順序・テンプレート変数(.ghOrg)が失われない。~/.codex/AGENTS.mdが Codex の既定 32 KiB 切り捨て未満であることを検査してほしい, so that 末尾のルールが黙って読み飛ばされない。~/.claude/rules/に symlink で差し込まれるもの)をグローバル Target に含めないでほしい, so that public リポジトリの Source に仕事側の内容や名前が入らない。check-templates/ bats の流儀でテストが書かれてほしい, so that 新しいテスト基盤を持ち込まない。chezmoi applyだけで~/.codex/AGENTS.mdが配置されてほしい, so that Codex のセットアップ手順を別に覚えなくてよい。AGENTS.mdで共有内容を受け取る)。CLAUDE.md/AGENTS.md(Managed Project 側)は従来どおりharness/compose で生成され続けてほしい, so that feat(harness): synchronize this repository's project instructions #310 で出荷済みの経路が変わらない。CLAUDE.mdの Key Patterns にグローバル指示の合成方式が追記されてほしい, so that 次に触るエージェントが~/.codex/AGENTS.mdを手で直さない。Implementation Decisions
.chezmoitemplates/配下の製品名を含まない名前のテンプレートに置き、{{ template }}で取り込む(gitignore-commonと同じ既存パターン)。共有 rules は現在の Claude 向け Source をそのまま{{ include }}で読む(移動しない)。~/.claude/CLAUDE.mdはテンプレート化(前置き + 共有本文)、~/.codex/AGENTS.mdは新規テンプレート(Codex 前置き → 共有本文 → 共有 rules を連結)。両方の Owner は chezmoi。harness/manifest.jsonのtargetsは空のまま、harness/はこのリポジトリの Managed Project Target 専用。AskUserQuestionの段落は共有本文では「選択肢を求めるときは番号付きの選択肢で提示する」とし、ツール名は Claude 前置きへ。AGENTS.mdの責務(本 spec のスコープ外)。~/.codex/config.toml/~/.codex/hooks.json/~/.cursor/*: 触らない。Runtime State が大半で、宣言的な行も製品ネイティブのまま。target: claudeの MCP のみ。Skill 配布は再開しない。wontfix+ 決定コメントで close。feat(harness): ~/.codex/AGENTS.md を Claude と同じ共有本文から chezmoi テンプレートで生成する #311 は本 spec の slice として書き換え。feat(harness): MCP の配布先に codex を追加し、未使用の codex MCP サーバーを削除する #312(MCP の Codex / Cursor 配布)と feat(harness): enroll a new Managed Project explicitly #322(Managed Project の明示登録)は残す。docs/research/の rulesync 調査は ADR が引用するため同じコミットに含める。Testing Decisions
chezmoi execute-template --config <test toml> --source <repo>によるレンダリング結果。テンプレートの内部構造(.chezmoitemplatesの分割、includeの書き方)は検査しない。CLAUDE.mdとAGENTS.mdの両出力に含まれる、(2) 共有 rules の全ファイル内容がAGENTS.mdに含まれる、(3)AskUserQuestionはCLAUDE.mdの出力にだけ現れる、(4)AGENTS.mdの出力が 32 KiB 未満、(5)chezmoi managed --source <repo>に.codex/AGENTS.mdが現れる。test/harness-instructions.bats(外部コマンドだけを呼び、出力を検査する流儀)とjustfileのcheck-templates(test toml に[data]を置いて--config/--sourceで render する手順。--sourceを付けないと main worktree の Source を読んで空振りで通る点に注意)。just check-templatesが render 失敗と JSON 妥当性を、just scan-sensitiveが仕事側の org 名・アカウント名の混入を検出する。新テストはこれらと重複しない内容検査に絞る。~/.claude/CLAUDE.mdのレンダリング結果と変更後を比較し、AskUserQuestion段落の言い換え以外に差分が無いことを実装 PR で示す。Out of Scope
~/.codex/config.toml、~/.codex/hooks.json、~/.cursor/*の管理。chezmoi applyへのharness sync統合。Further Notes
~/.codex/AGENTS.md(chezmoi 管理外)は 570 バイトの英語版で~/.Codex/rules/という存在しないパスを指す。本 spec の最初の slice で置き換わる。project_doc_max_bytes既定 32 KiB に対して余裕がある。