Skip to content

feat(claude): 複数プロジェクトの .claude 設定から汎用的な知見を反映する - #64

Merged
msageha merged 1 commit into
mainfrom
feat/claude-settings-sync-from-projects
Aug 9, 2026
Merged

feat(claude): 複数プロジェクトの .claude 設定から汎用的な知見を反映する#64
msageha merged 1 commit into
mainfrom
feat/claude-settings-sync-from-projects

Conversation

@msageha

@msageha msageha commented Aug 9, 2026

Copy link
Copy Markdown
Owner

概要

~/Works/src 配下にクローンされている 113 個の .claude ディレクトリ (node_modules・third_party/submodule・CTF ベンチマークのノイズを除いた実質 37 個) を調査し、複数プロジェクトにまたがって独立に観測された汎用パターンのみを chezmoi 管理の Claude Code 設定に反映した。

調査は 5 グループ (msageha 個人リポジトリ群 / dope-corp 群 / SakanaAI・EUD-Cloud-Service 群 / SakanaAIBusiness 群 x2) に分けて並列で実施し、各グループには既存の chezmoi 側の permissions.allow・hooks・agents・skills・rules を渡した上で「chezmoi 側に無く汎用的な差分のみ」を抽出させた。プロジェクト固有の API URL・インフラリソース名・社内ライブラリに強く結合した知見は除外している。

変更内容

  • permissions.allow に追加: perl, golangci-lint, prek, dprint, actionlint, glab, pkill, nohup
    • 複数プロジェクトの settings.local.json で個別に許可プロンプトが繰り返し発生していたコマンド (sed/awk の並びに perl、gofmt の並びに golangci-lint、pre-commit の並びに prek/dprint/actionlint、gh の並びに glab、kill/ps/pgrep の並びに pkill/nohup)
  • Bash(chmod +x .claude/verify.sh) を狭いスコープで allow に追加
    • 既存の create-verify skill の手順そのもの (chmod で実行権限を付与) なのに許可されておらず、skill を使うたび毎回プロンプトが発生していた
  • PreToolUse の危険コマンド検知正規表現に、追跡外ファイルの強制クリーンと DB 削除の2パターンを追加
    • 既存の再帰削除・強制リセット・テーブル削除系と同じ「取り返しのつかない破壊的操作」のカテゴリ
    • ブランチの強制削除も候補だったが、hook 全体が case-insensitive な grep のため、安全な小文字オプションの通常削除まで誤検知してしまうことを実測で確認し、見送った
  • debugger agent に根本原因分析の原則を追記
    • 「症状名で犯人を決めない」「最初に見つけたエラー=原因と即断しない」「正常系の終端まで追う」「確定/仮説/未確認を区別する」。3 つの独立したリポジトリの log-investigate 系スキルで同じパターンが観測されたため採用
  • security-reviewer agent に、AI レビュアー自身を欺くための埋め込み指示 (偽の承認主張・存在しない規約引用など、コード内コメントや PR description 経由のプロンプトインジェクション) を検出する観点を追加

動作確認

  • mise run pre-commit が通った
  • mise run test が通った (42 件全て pass)
  • mise run dry-run で意図した差分のみであることを確認した (secret ファイルを含まない対象に絞った chezmoi diff で目視確認、secret パターンの混入なし)
  • chezmoi execute-template でレンダリングした JSON の構文検証、および追加した危険コマンド検知の正規表現をテストケース (新規ブロック対象・既存パターン維持・誤検知しないケース) で個別検証済み

補足情報

以下は精査の過程で見つかったが、既存の方針と矛盾する・設計判断を要する・裏付けが 1 リポジトリのみで確信度が低い等の理由で今回は見送った。ユーザー判断が必要な項目として記録する。

  • secret ファイル (.env/.pem/.key/credentials.json 等) への Edit/Write deny 追加: chukei-financial-simulationsafety_gate.py に同種の保護がある。価値は高いが、Claude Code の permission 評価は deny が allow より常に優先されるため、単純に .env.* パターンを deny に足すと既存の .env.template allow (プレースホルダのみのテンプレート編集) まで塞いでしまう。安全なパターン設計 (具体的な .env バリアント名の列挙 or PreToolUse hook 側での拡張子除外ロジック) を詰めてから別途対応する方が良い
  • bisect skill の新設 (torchtitan の torch_bisect を汎用化): 依存リポジトリを bisect して回帰を探すタスクに使える設計だが、1 リポジトリのみでの観測
  • docs-lint agent の新設 (aquarium の doc-source drift 検出、read-only 監査): 同上、1 リポジトリのみ
  • playwright skill への待機戦略追記: ai-native-pm-ringi の MCP snapshot ベース CLI ワークフローでの sleep リトライパターンが見つかったが、既存の playwright skill の Golden Rule 「Never waitForTimeout」と文脈が異なるため慎重な書き分けが必要
  • 日本語技術文書規範 skill 2 件の移設 (portfoliojapanese-tech-writing / cognitive-rhythm-writing): 非常に高品質だが書籍原稿執筆に強く最適化されており、ユーザースコープの共通設定として汎用化すべきかは判断が要る
  • context: fork + agent: general-purpose の skill frontmatter パターン: 重い生成系 skill を親 context から隔離実行する技法。documentation-writer 等への適用は既存 skill の設計変更を伴うため保留

~/Works/src 配下 113 個の .claude ディレクトリ (node_modules・third_party・
submodule・CTF ベンチマークのノイズを除いた実質 37 個) を精査し、複数プロ
ジェクトで独立に観測された汎用パターンのみを chezmoi 側へ反映した。

- permissions.allow に追加: perl, golangci-lint, prek, dprint, actionlint,
  glab, pkill, nohup, および create-verify skill の運用に必要な
  `chmod +x .claude/verify.sh` (狭いスコープ限定)
- PreToolUse の危険コマンド検知に git clean -f / dropdb / drop database を
  追加 (誤検知テスト済み。git branch -D は case-insensitive grep の制約上
  git branch -d の誤検知を避けられないため見送り)
- debugger agent に根本原因分析の原則を追記 (症状名で犯人を決めない/最初の
  エラーを主因と即断しない/正常系の終端まで追う/confirmed・hypothesis を
  区別する。3 リポジトリで独立に観測された log-investigate 系スキルの共通
  パターン)
- security-reviewer agent に、AI レビュアー自身を欺くための埋め込み指示
  (偽の承認主張・存在しない規約引用など) を検出する観点を追加
@msageha
msageha merged commit 4c99ad5 into main Aug 9, 2026
8 checks passed
@msageha
msageha deleted the feat/claude-settings-sync-from-projects branch August 9, 2026 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant