name: permission-sync description: Sync and harden command permissions between .claude/settings.json and .codex/rules/default.rules in this dotfiles repo.
permission-sync
このドキュメントは、./.claude/settings.json と ./.codex/rules/default.rules を
安全性を維持しつつ双方向同期するための正本手順です。
使う場面
- 許可ルールを移行可能な形で整理したい
settings.jsonとdefault.rulesの差分をなくしたい- 危険な権限を除外して read-only 寄りにしたい
- 見やすい順にソートしたい
手順
- 現在値を確認する
sed -n '1,260p' ./.claude/settings.json
sed -n '1,260p' ./.codex/rules/default.rules
- 安全ゲートを先に適用する(必須)
- 双方向同期の前に、両ファイルを同じ安全 allowlist でフィルタする
- 許可外は必ず削除する(片側にあっても復活させない)
- 例:
python3 *,npm *,pnpm *,cargo *,git checkout:*,git commit:*,git stash:*,brew bundle:*は除外対象
- 正規化して比較可能な形にする
settings.jsonはBash(...)形式、default.rulesはprefix_rule(...)形式なので、同じ意味に正規化して比較する- 表記ゆれは吸収する
- 例:
Bash(ps:*)<->prefix_rule(pattern=["ps"], decision="allow") - 例:
Bash(git diff:*)<->prefix_rule(pattern=["git", "diff"], decision="allow")
- 例:
- 並び順も統一する(セクション順 + セクション内ソート)
- 双方向同期する
- お互いに無いものを追加し合う
- ただし追加対象は「安全ゲート通過済み」のものだけ
- 追加後、両ファイルが同じ許可集合になることを確認する
- 同期後検証を行う(必須)
jq empty ./.claude/settings.json
sed -n '1,260p' ./.codex/rules/default.rules
- 両者の件数と要素が一致することを確認する
- 許可外コマンドが 1 つでも残っていれば失敗として修正する
安全ルール
auth.jsonやsessionsなど機密/履歴は管理対象にしない- マシン依存パスを含む許可は除外する
- 同期の原則は「安全フィルタ -> 正規化 -> 双方向同期 -> 同期後検証」
- この順序を崩さない
ソート方針
- セクション順:
basic->git->gh->brew - セクション内は「文字数が短い順、同じならアルファベット順」
settings.jsonのセクションコメント(// basic,// git,// gh,// brew)は維持する