ln-004-agent-config-sync について
Claude Code を基準に、Gemini CLI と Codex CLI へスキルと MCP サーバー設定を同期するユーティリティです。OS に応じたリンク作成や設定形式の変換を行い、同期先だけの設定を保ち、変更前にバックアップします。
主な機能
- 01シンボリックリンクやジャンクションでスキルを同期
- 02Gemini と Codex 向けに MCP 設定を変換
- 03同期先だけの設定を保ってマージ
- 04適用前の変更内容を表示
- 05書き込み前に設定をバックアップ
活用シーン
- 01Claude Code と Gemini CLI または Codex CLI の初期設定
- 02Claude の MCP サーバー設定変更の反映
- 03複数エージェント間でのスキル配置の同期
- 04適用前に同期内容を確認
MCP 対応
Claude Code の MCP サーバー設定を Gemini CLI と Codex CLI にコピーし、形式を変換します。MCP サーバー自体は公開しません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ levnikolaevich/ claude-code-skills --skill ln-004-agent-config-syncインストール後、Claude Code で/ln-004-agent-config-syncを入力して読み込まれたか確認します。
詳細
パス: ファイルパス(
shared/、references/、../ln-*)は skills リポジトリのルートを基準とします。CWD に見つからない場合は、この SKILL.md ディレクトリを探し、1 つ上の階層をリポジトリのルートとしてください。
エージェントの同期(スタンドアロンユーティリティ)
タイプ: スタンドアロンユーティリティ
カテゴリ: 0XX Shared
Claude Code(信頼できる唯一の情報源)から Gemini CLI および Codex CLI に、スキルと MCP サーバーの設定を同期します。スキルのシンボリックリンクを作成し、MCP 設定をコピー/変換します。
このスキルを使用するタイミング
- Claude Code の設定で MCP サーバーを追加または削除した後
- Claude Code に新しいプラグインをインストールした後
- Claude Code と併用して Gemini CLI または Codex CLI を初めてセットアップするとき
- すべてのエージェントを定期的に同期するとき
入力パラメーター
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
| targets | いいえ | both | gemini、codex、または both |
| mode | いいえ | full | skills(シンボリックリンクのみ)、mcp(MCP のみ)、または full(両方) |
| dry_run | いいえ | false | 実行せずに予定されている操作を表示 |
ワークフロー
Detect OS → Discover Configs → Sync Skills → Sync MCP → Report
フェーズ 0:OS の検出
| 確認項目 | 結果 | 影響 |
|---|---|---|
uname またはプラットフォーム | win32 / darwin / linux | ジャンクションとシンボリックリンクの選択 |
| ホームディレクトリ | $HOME または $USERPROFILE | 設定パス |
OS 別のパス:
| エージェント | Windows | macOS / Linux |
|---|---|---|
| Claude | %USERPROFILE%\.claude.json(優先) | ~/.claude.json(優先) |
| Claude | %USERPROFILE%\.claude\settings.json(フォールバック) | ~/.claude/settings.json(フォールバック) |
| Gemini | %USERPROFILE%\.gemini\settings.json | ~/.gemini/settings.json |
| Codex | %USERPROFILE%\.codex\config.toml | ~/.codex/config.toml |
フェーズ 1:現在の状態を確認
-
Claude の設定を読み込む(両方のソースを確認して統合):
~/.claude.jsonを解析 →mcpServersブロックを抽出(優先ソース、アプリ状態ファイル)~/.claude/settings.jsonを解析 →mcpServersブロックを抽出(フォールバック、ユーザー設定ファイル)- 統合:サーバー名が同じ場合は優先ソースを優先
- いずれにも
mcpServersがない場合 → 「Claude に MCP サーバーが設定されていません」と警告し、MCP の同期をスキップ
-
同期先の設定を読み込む(存在する場合):
- Gemini:
~/.gemini/settings.jsonを解析 → 既存のmcpServersを抽出 - Codex:
~/.codex/config.tomlを解析 → 既存の[mcp_servers.*]を抽出
- Gemini:
-
インストール済みプラグインを検出:
~/.claude/plugins/*/plugin.jsonに対して Glob を実行 → プラグインディレクトリを一覧表示- スキルリポジトリ自体がプラグインのソースかどうかも確認
-
既存のシンボリックリンクを確認:
~/.gemini/skills→ 存在するか、リンク先はどこか~/.codex/skills→ 存在するか、リンク先はどこか
-
現在の状態を表示:
Current State: | Agent | Skills | MCP Servers | Config Exists | |-------|--------|-------------|---------------| | Claude (source) | 5 plugins | 4 servers | yes | | Gemini | no link | 2 servers | yes | | Codex | → ~/.claude/plugins | 4 servers | yes |
フェーズ 2:スキルを同期(シンボリックリンク/ジャンクション)
対象が targets に含まれる場合、各対象(gemini、codex)について:
-
リンク先のパスを決定:
- Gemini:
~/.gemini/skills - Codex:
~/.codex/skills
- Gemini:
-
正しくリンクされているか確認:
- リンクが存在し、正しいソースを指している場合 → スキップ(同期済み)
- リンクが存在するが、誤ったソースを指している場合 → 警告し、置き換える前にユーザーに確認
- 通常のディレクトリ(リンクではない)が存在する場合 → 「同期先はリンクではなく実ディレクトリです。データ損失を避けるためスキップします」と警告
-
ソースを決定:
- プラグインが 1 つの場合:プラグインディレクトリに直接リンク
- 複数のプラグインがある場合:共有するプラグインをユーザーに確認
-
リンクを作成:
OS コマンド Windows cmd /c mklink /J "{target_path}" "{source_path}"macOS / Linux ln -s "{source_path}" "{target_path}" -
検証: リンクが存在し、正しく解決されることを確認
フェーズ 3:MCP 設定を同期
ソース: ~/.claude.json(優先)+ ~/.claude/settings.json(フォールバック)→ 統合された mcpServers
3a: Claude → Gemini(JSON → JSON)
- Claude の
mcpServersを JSON オブジェクトとして読み取ります - Gemini の
settings.jsonを読み取ります(存在しない場合は{}を作成します) - マージ戦略: キー名が同じ場合、Claude のサーバーで Gemini のサーバーを上書きします。Gemini のみにあるサーバーは保持します。
- 更新した
settings.jsonを書き込みます
変換: トランスポートタイプのマッピングが必要です。
| Claude のフィールド | Gemini のフィールド | 備考 |
|---|---|---|
type: "http" + url | httpUrl | Streamable HTTP |
type: "sse" + url | url | SSE トランスポート |
command + args | command + args + cwd | stdio(同じ形式) |
env | env | 同じ形式(Gemini では $VAR_NAME 構文) |
headers | headers | 同じ形式(JSON オブジェクト。url/httpUrl 用) |
Gemini 固有のフィールド(Claude からはマッピングされません):
timeout— リクエストのタイムアウト(ミリ秒、デフォルト:10 分)trust— ツールの確認を省略しますincludeTools/excludeTools— ツールの許可リスト/ブロックリスト
3b: Claude → Codex(JSON → TOML)
-
Claude の
mcpServersを JSON オブジェクトとして読み取ります -
Codex の
config.tomlを読み取ります(存在しない場合は空のファイルを作成します) -
各サーバーを変換します:
Claude の JSON フィールド Codex の TOML フィールド 備考 commandcommand同じ argsargsJSON 配列 → TOML 配列 env[mcp_servers.{name}.env]入れ子のテーブル type: "http"+urlurlStreamable HTTP(Codex は urlの有無で自動判定します)type: "sse"+urlurlSSE → Streamable HTTP(同じ urlフィールド)headershttp_headersキー名が異なります! 静的なヘッダー値 変換例:
"context7": { "command": "npx", "args": ["-y", "@upstash/context7-mcp"] }[mcp_servers.context7] command = "npx" args = ["-y", "@upstash/context7-mcp"] -
マージ戦略: Claude のサーバーで上書きします。Codex のみにあるサーバーは保持します。
-
更新した
config.tomlを書き込みます
Codex 固有のフィールド(そのまま保持し、Claude に対応する項目はありません):
bearer_token_env_var— Codex のベアラートークン認証enabled_tools/disabled_tools— Codex のツールフィルタリングstartup_timeout_sec/tool_timeout_sec— Codex のタイムアウトenabled/required— Codex のサーバーライフサイクルenv_vars/env_http_headers— Codex の環境変数ベースのヘッダー
Phase 4: レポート
Sync Complete:
| Action | Target | Status |
|--------|--------|--------|
| Skills symlink | Gemini | Created → ~/.claude/plugins/... |
| Skills symlink | Codex | Already linked |
| MCP sync | Gemini | 4 servers synced (2 new, 2 updated) |
| MCP sync | Codex | 4 servers synced (1 new, 3 updated) |
重要なルール
- Claude を信頼できる唯一の情報源とします。 Claude の設定には書き込みません。読み取り専用のソースです。
- 非破壊的にマージします。 対象のみにあるサーバー/設定は保持します。追加または更新するのは Claude のサーバーのみです。
- データ損失を防ぎます。 対象が実ディレクトリ(シンボリックリンクではない)の場合は警告して処理をスキップし、決して削除しません。
- 書き込み前にバックアップします。 設定ファイルを変更する前に、
.bakコピーを作成します。 - まずドライランを行います。
dry_run=trueの場合は、実行せずに予定しているすべての操作を表示します。 - 競合時は確認します。 シンボリックリンクが別のソースを指している場合は、ユーザーに確認し、自動で置き換えません。
避けるべきパターン
- Gemini/Codex から Claude の設定に書き込む(逆方向の同期)
- 同期中に対象のみにある MCP サーバーを削除する
- シンボリックリンクの中にシンボリックリンクを作成する(循環)
- バックアップなしで設定ファイルを変更する
完了の定義
- Claude の設定を正常に読み取りました
- 各対象の Skills シンボリックリンクを作成/確認しました
- MCP の設定を形式変換して同期しました(Codex の場合は JSON→TOML)
- 設定を変更する前にバックアップファイルを作成しました
- すべての操作と警告を含むレポートを表示しました
バージョン: 1.1.0 最終更新日: 2026-03-09