Skip to content

ロードマップ

このページでは ccchain の計画中の機能を説明します。リリースの約束ではなく、概念レベルの方向性を示すものです。各項目は「何ができるようになるか」と「現在の制限がどう解消されるか」を中心に記述しています。

現在の実装状況

以下の機能は実装済みです:

  • パイプ・チェーン・サブシェルを考慮した構造的コンテキスト評価
  • Bash コマンドへの allow / deny / ask アクション
  • args: による引数レベルの正規表現ルール
  • ルールを段階的に導入するための permissive モード
  • ccchain init / ccchain check / ccchain eval CLI コマンド
  • マージ順序を持つ複数ファイル設定

推奨実装順序

セキュリティレビューに基づく推奨実装順序(Phase 番号とは異なります):

順序Phase機能セキュリティ根拠
19DSL 一貫性修正mode: の誤動作・ドキュメント誤誘導を早期修正
214マルチツール制御Read/Edit の hook 枠組みを先に作る(スコープの前提)
311ワークスペーススコープ14 があれば Bash + Read/Edit 両方にスコープ適用可
416パスリダイレクト14(マルチツール制御)に依存
510デフォルトルール強化スコープ制御完成後に安全なデフォルトを設計
613セマンティクステーブル10 のデフォルトルールと統合
715プロジェクト自動検出13 のテーブルを活用
812メッセージテンプレート基盤が固まってから最後に

計画中の機能

Phase 9 — DSL の一貫性修正

状態: 次の実施対象

ドキュメントと DSL の整合性を修正するフェーズです。mode: プロパティは DSL でパースされますが、現在は評価時に効果がありません。このフェーズでは設計意図を明確化します。

ユーザーへの影響:

  • warn アクションの正しい構文例がドキュメントに反映されます
  • mode: プロパティの現在の挙動が明記され、誤解を防ぎます

機能的な変更は不要です。ドキュメントと設計意図の正確性修正が主な内容です。


Phase 10 — settings.json 移行支援とデフォルトルール強化

現在できること:

Claude Code 組み込みの settings.json パーミッションシステムから移行する場合、"Bash(git log *)" のようなエントリを手動で ccchain DSL ルールに変換する必要があります。

できるようになること:

ccchain import コマンドが既存の settings.json を読み込み、.ccchain.conf の下書きを生成します:

bash
ccchain import
# settings.json のパーミッションを元に .ccchain.conf の下書きを出力
# 内容を確認してから設定ファイルに追記する

また、組み込みのデフォルトルールセットが拡充されます。catechodiffwc などの一般的な安全コマンドや、gitgo のサブコマンドレベルのルールがデフォルトで含まれるようになります。現在はこれらを自分で記述する必要がありますが、このフェーズ以降は多くがデフォルトで提供されます。


Phase 11 — ワークスペーススコープ: パスベースアクセス制御

現在できること:

ccchain はコマンド名と構造的コンテキストで制御します。cat ~/workspace/README.mdcat ~/.ssh/id_rsacat ルールのみで同じように評価されます。

できるようになること:

scope: ディレクティブでワークスペースディレクトリを宣言できます。ワークスペース外のパスを参照するコマンドは、異なるアクションで評価されます:

scope:
  workspace: ~/workspace

allow cat
  scope:
    inside: allow
    outside: ask  "ワークスペース外のファイルです"

allow rm
  scope:
    inside: ask   "削除を確認してください"
    outside: deny "ワークスペース外のファイル削除は禁止"

静的解析の限界(既知の制約):

  • $HOME/file のようなシェル変数は解決できず、コマンドレベルのルールにフォールバックします
  • 相対パスはワークスペース内として扱われます(fail-open)
  • シンボリックリンクは解決されません

Phase 12 — 動的 deny メッセージ

現在できること:

deny メッセージは静的な文字列のみです。コマンドがブロックされたとき、Claude には書いた固定メッセージだけが伝わります。

できるようになること:

メッセージテンプレートにブロックされたコマンドの情報を埋め込めるようになります。deny がより具体的な代替手段の提示として機能します:

deny rm
  message: "{command} は禁止です。代わりに: find . -name '...' -print > /tmp/targets_{id}.txt"

利用可能な変数: {command}{cmd}{args}{id}(実行ごとのユニーク ID)、{cwd}

別途ドキュメントを書かなくても、Claude に安全な代替手段を誘導しやすくなります。


Phase 13 — コマンドセマンティクステーブル

現在できること:

サブコマンドレベルの制御には、args: の正規表現ルールを自分で記述する必要があります。sed -n(安全)と sed -i(ファイル上書き)を区別するには、パターンを手書きします。

できるようになること:

45 種類以上の CLI ツールについて、安全・危険なフラグとサブコマンドを記録した組み込みテーブルが追加されます。ccchain generate-rules コマンドがこのテーブルを元に args: ルールの候補を出力します:

bash
ccchain generate-rules --from-semantics
# git, go, npm, sed, docker, kubectl などの args: ルールを出力
# 内容を確認して .ccchain.conf に追記する

精度の高いルールセットをゼロから構築するためのブートストラップツールです。


Phase 14 — マルチツール制御(Read / Edit / WebFetch / MCP)

現在できること:

ccchain が制御するのは Bash ツールのみです。Claude の ReadEditWriteWebFetch、MCP ツールは ccchain のルール対象外で、チェックなしに通過します。

できるようになること:

DSL に Bash 以外のツール用トップレベルセクションが追加されます:

preToolUse
  Read
    scope:
      inside: allow
      outside: ask  "ワークスペース外の読み取り"
    args:
      \.env|\.ssh|credentials: deny  "機密ファイルの読み取りは禁止"

  WebFetch
    args:
      ^https://: allow
      ^http://: ask  "HTTP(非暗号化)アクセスです"
      \.internal\.: deny  "内部ネットワークへのアクセスは禁止"

  mcp__*__delete_*
    action: deny  "MCP 経由の削除は手動承認が必要"

このフェーズは Phase 11(ワークスペーススコープ)の実装を前提とします。


Phase 15 — プロジェクト自動検出

現在できること:

ccchain init は汎用的なデフォルト設定を生成します。プロジェクト固有のルールは手動で追記する必要があります。

できるようになること:

ccchain detect がプロジェクトファイル(go.modpackage.jsonCargo.tomlMakefile 等)を検査し、プロジェクトに合わせたルール候補を出力します:

bash
ccchain detect
# Detected: Go project (go.mod), Make (Makefile)
# go, make 向けのルール候補を出力

ccchain init --detect は検出と初期化を一度に実行します。


Phase 16 — パスリダイレクト

現在できること:

ファイルへのアクセスを deny し、代替手段をメッセージで説明できます。ただし「代わりにこのパスを使え」という構造的な誘導は自由テキストのみで、ccchain に専用の概念はありません。

できるようになること:

redirect ディレクティブで代替パスを構造的に指示できます:

redirect .env
  to: .env.example
  message: ".env を直接編集せず .env.example を更新してください"

redirect node_modules/
  action: deny
  message: "node_modules 内の直接編集は禁止。package.json を変更してください"

Phase 14(マルチツール制御)と統合することで、Bash コマンドだけでなく Read/Edit/Write ツールへのアクセスにも適用されます。


未計画のアイデア

計画書には起こされていないが記録された構想です:

PostToolUse ターンカウント — ツールを連続で何回実行したら確認を要求するかを制限する機能。ループの暴走防止に有効です。

source / . コマンドの追跡 — ソースされたスクリプトは現在のシェルコンテキストで実行されるため、静的解析では追跡が原理的に不可能です。技術的な解決策ではなく、この制限事項をドキュメントに明記することが計画の成果物になります。


依存関係

Phase 9  (DSL 一貫性)          — 依存なし
Phase 10 (settings 移行)       — 依存なし
Phase 11 (ワークスペーススコープ) — 依存なし
Phase 12 (動的メッセージ)       — 依存なし
Phase 13 (セマンティクステーブル) — 依存なし
Phase 14 (マルチツール)         — Phase 11 に依存
Phase 15 (プロジェクト検出)     — 依存なし
Phase 16 (パスリダイレクト)     — Phase 14 に依存

Phase 9–13 と 15 は任意の順序で実施可能です。Phase 14 が完了することで Phase 16 が実装可能になります。

Released under the MIT License.