Skip to content

feat(harness): MCP の配布先に codex を追加し、未使用の codex MCP サーバーを削除する #312

Description

@tanimon

2026-09-18 改訂: ADR 0005 で #308 の範囲が指示文の共有に縮小されたため、本 issue も書き直した。当初本文(3 製品への配布・Credential Reference・lock の integrity/provenance・clean fixture からの frozen install)は編集履歴に残る。縮小と方針の根拠は docs/adr/0006-apm-owns-only-the-mcp-servers-table-of-codex-config.md、挙動の実測は同 ADR の Consequences を参照。

Parent

#308

What to build

MCP の配布先を claude のみから claude + codex に広げる。cursor は対象外(~/.cursor/mcp.json が存在せず MCP の利用実績が無い)。

配布は APM がサーバー単位の target 指定に対応していないため all-or-nothing になる。そのため、現在未使用の codex MCP サーバーを apm.yml から削除する(Codex 自身を MCP として Codex に配る再帰を避ける)。APM は prune するので、削除すれば次の chezmoi apply で ~/.claude.json からも自動で消える。

Acceptance criteria

  • dot_apm/apm.yml が targets: [claude, codex](複数形)を宣言し、codex MCP サーバーの定義が削除されている
  • .chezmoiscripts/run_onchange_after_apm-install.sh.tmpl が --target claude,codex を渡し、apm.yml の targets: との二重宣言が意図的なフェイルセーフである理由(--target を省略すると auto-detect で Gemini CLI 等へ fan-out する)がコメントに書かれている
  • apm install 後、~/.claude.json と ~/.codex/config.toml の双方に code-review-graph と deepwiki が存在する
  • ~/.claude.json から codex エントリが prune されている
  • ~/.codex/config.toml のうち lock に名前が無いもの(Codex 自身が入れた node_repl、[projects.*] の trust 記録)が保持されている
  • 手で書かれた [mcp_servers.codex](enabled = false 付き)は 削除される。APM の prune は lock のサーバー名キーで動き、APM が書いていないエントリにも及ぶため(実測。ADR 0006 の Consequences 3)。無効化のためだけに存在していたエントリなので結果は意図どおりだが、保持されないことを受け入れ条件として明示する
  • 上記の挙動を偽 HOME の fixture で検証する bats テストがある。apm が無い環境では skip し、skip した事実と理由を出力する(黙って pass すると clean に見えるため)
  • just lint が通る
  • docs/adr/0006-*.md が追加されている
  • harness/modules/project/50-pitfalls.md の「MCP stdio servers do not pass through zsh wrapper functions」が、例に使っている codex MCP サーバーの削除に合わせて書き直されている(教訓は一般則として有効なので削除しない)
  • harness/modules/runtime/codex-extension.md の「~/.codex/config.toml はこのリポジトリが管理していない(feat(harness): ~/.codex/AGENTS.md を Claude と同じ共有本文から chezmoi テンプレートで生成する #311)」が、[mcp_servers.*] だけは APM が書く事実に合わせて修正されている(feat(harness): ~/.codex/AGENTS.md を Claude と同じ共有本文から chezmoi テンプレートで生成する #311 はマージ済みで参照も古い)
  • 手動確認を PR 本文に 1 度だけ示す: 実機で apm install 後に Codex を起動して MCP が接続すること(APM が書く id = "" と空の [mcp_servers.X.env] テーブルを Codex が拒否しないことの確認)

Out of scope

  • cursor への配布
  • apm.lock.yaml の version control(prune は配備先の lock で動くので Source に持つ必要が無い。APM パッケージは撤回済みで固定すべき revision が存在しない)
  • 既存エントリの定義変更が反映されない件の解決 → APM は MCP エントリの定義変更を配布先に反映しない(既存エントリは already configured で素通り) #349(ブロッキング関係は無い)
  • ~/.codex/config.toml の [mcp_servers.*] 以外の管理
  • 認証付き MCP のための専用概念(当初本文の Credential Reference)。秘密値の混入は just scan-sensitive が既に全ファイルを見ている

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions