実装前に提案する
CC Safety Net のスコープは明確です。コーディングエージェントによる、データ損失につながる意図しない誤操作を防ぐことに絞っています。汎用のセキュリティ強化ツールや攻撃防止ツールではありません。新しい検出ルール、コマンドの分類、アーキテクチャの変更、設定項目を実装する前に、Issue を作成して方針を相談してください。誤字の修正や、対処方法が明らかな小さなバグ修正は、そのままプルリクエストを送って構いません。開発環境をセットアップする
- Bun 1.4.0:ビルドとテストに必須のランタイムで、サポートされる唯一のパッケージマネージャーです(インストールガイド)。
package.jsonのpackageManagerで固定しています。 - Node.js 18 以降:ビルド成果物を実行するためのランタイムです。公開されている CLI やプラグインの実行に Bun は不要です。
- Claude Code または OpenCode:プラグインをローカルで読み込んで動作を確認する場合にのみ必要です。プロジェクトのビルドやテストスイートの実行には不要です。
bun run check が唯一のゲートです。Biome の lint と format、TypeScript の型チェック、knip によるデッドコード検出、jscpd による重複検出、カバレッジ付きのテストスイート、カバレッジしきい値チェックを、この順に実行します。変更が一段落したら、個別のサブコマンドではなく、このコマンドを実行してください。プルリクエストを作成する前に、エラーなく完了することを確認してください。
作業中は、個別のコマンドも使えます。
ローカルプラグインをテストする
ビルドしてからローカルのプラグインを読み込むと、実際のブロックを試せます。- Claude Code:インストール済みの safety-net プラグインを無効にして Claude Code を終了し、リポジトリのルートで
claude --plugin-dir .を実行します。 - OpenCode:
~/.config/opencode/opencode.jsonのplugin[]配列を、ビルド済みのfile://.../cc-safety-net/dist/index.jsに向けます。競合を避けるため npm のcc-safety-netの項目を削除し、OpenCode を再起動します。/statusを実行し、プラグイン名がdistと表示されることを確認します。
git checkout -- ':(exclude,top)**' はブロックされなければなりません。保護が有効になっていない場合も、この pathspec はファイルを 1 つも選択しません。
コード規約に従う
スタイルガイド
- 本当に組み合わせや再利用が必要な場合を除き、コードは 1 つの関数にまとめます。
try/catch、any型、else節は避け、早期 return を使います。forループより配列メソッド(flatMap、filter、map)を優先します。filterには型ガードを使い、後続処理でも型推論が効くようにします。letよりconstを優先し、再代入ではなく三項演算子か早期 return を使います。- 1 回しか使わない値は名前を付けずにインライン化し、不要な分割代入は避けます。
スコープを厳守する
このプロジェクトでは、過剰設計を避けてください。要求を満たす最小の変更を実装します。それ以上を追加する場合は、その追加で防げる具体的な失敗を示してください。チェックには、実際に反証できる条件が必要です。実データがない段階で、スキーマ、バリデーター、レジストリ、ハーネスを作らないでください。プロセスは、コードで強制する前に文書化してください。Knip
knip.ts の ignoreIssues に項目を追加してはいけません。knip が未使用の export を報告した場合は、根本原因を修正します。本当に不要なコードは削除するか export を外し、テスト専用の export には /** @internal */ の JSDoc コメントを付けます(knip は --production モードで動作するため、テストファイルは対象外です)。barrel ファイルからは未使用の名前を削除します。
プルリクエストを準備する
- コードが上記の規約に従っている。
bun run checkがエラーなく完了する。- 新しいルールにテストを追加し、カバレッジが 90% 以上である。
- 対応するエージェント(Codex、Claude Code、Gemini CLI、GitHub Copilot CLI、Kimi Code、Pi など)を 1 つ以上使い、ローカルで動作を確認している。全 13 種類はインストールページに記載しています。
- 必要に応じてドキュメント(
README.md、AGENTS.md)を更新している。 package.jsonのバージョンを変更していない。
package.json や plugin.json のバージョンを直接変更しないでください。
開発の支援を得る
bunx cc-safety-net doctorでセットアップを確認できます。bunx cc-safety-net explain "<command>"を使うと、コマンドがどう解析されるかを段階ごとに確認できます。- アーキテクチャと規約はソースリポジトリの
CLAUDE.mdまたはAGENTS.mdを参照し、コードをレビューする前にREVIEW.mdを読んでください。 - 実装パターンは
src/analyzer/の既存コードを、テスト用ユーティリティはtests/helpers.tsを参照してください。 - バグの報告や機能の要望は Issue を作成してください。