From meta-plugin
AI実行環境のシークレット境界設定。settings.json permissions.denyルールを生成し、シークレットへの事故的アクセスを防止する。
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta-plugin:secret-boundaryThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
AI実行環境のシークレット境界を設定する。
AI実行環境のシークレット境界を設定する。
重要: このスキルが提供するのは「事故防止のガードレール」です。
permissions.denyはAIエージェントの事故的なシークレット読み取りを防ぎますが、 強制的なセキュリティ境界ではありません(ユーザー自身が変更可能なため)。 強制力が必要な場合はmanaged settingsとsandboxを併用してください。このスキルでは守れないもの:
- 悪意ある攻撃者による意図的な回避(
cat .env、python -c "open('.env').read()"等)- 環境変数に展開済みのシークレット(
op run等で注入されたもの)- sandbox外のファイルシステムアクセス
プロジェクト構造を分析し、適切なセキュリティ設定を生成する。
プロジェクト構造を確認し、シークレットが存在しうる場所を特定する:
# リポジトリ内のシークレット候補ファイルを検出
# 値は一切読まず、パスのみ列挙する
find . -maxdepth 3 \( \
-name ".env" -o -name ".env.*" -o -name "*.env" \
-o -name "*.pem" -o -name "*.p12" -o -name "*.pfx" -o -name "*.key" \
-o -name "credentials.json" -o -name "service-account*.json" \
-o -name ".npmrc" -o -name ".netrc" -o -name ".pypirc" \
-o -name "secrets.yml" -o -name "secrets.yaml" \
\) -not -path "./.git/*" -not -path "./node_modules/*" 2>/dev/null | sort
# 現在のpermissions.deny設定のみを抽出(全文表示はしない)
for f in .claude/settings.json .claude/settings.local.json; do
if [ -f "$f" ]; then
echo "=== $f: permissions.deny ==="
python3 - "$f" <<'PYEOF'
import json, sys
try:
d = json.load(open(sys.argv[1]))
deny = d.get('permissions', {}).get('deny', [])
if deny:
for r in deny: print(f' - {r}')
else:
print(' (deny rules not set)')
except Exception as e:
print(f' (parse error: {e})')
PYEOF
fi
done
Step 1の結果をもとに、permissions.denyルールを生成する。
基本ルール(ほぼ全プロジェクトに適用可能):
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(**/.env)",
"Read(**/.env.*)",
"Read(**/secrets/**)",
"Read(**/*.pem)",
"Read(**/*.p12)",
"Read(**/*.pfx)",
"Read(**/*.key)",
"Read(**/credentials.json)",
"Read(**/service-account*.json)",
"Edit(./.env)",
"Edit(./.env.*)",
"Edit(**/.env)",
"Edit(**/.env.*)",
"Edit(**/secrets/**)",
"Edit(**/*.pem)",
"Edit(**/*.p12)",
"Edit(**/*.pfx)",
"Edit(**/*.key)",
"Edit(**/credentials.json)",
"Edit(**/service-account*.json)",
"Write(./.env)",
"Write(./.env.*)",
"Write(**/.env)",
"Write(**/.env.*)",
"Write(**/secrets/**)",
"Write(**/*.pem)",
"Write(**/*.p12)",
"Write(**/*.pfx)",
"Write(**/*.key)",
"Write(**/credentials.json)",
"Write(**/service-account*.json)",
"Bash(env:*)",
"Bash(printenv:*)",
"Bash(sudo:*)"
]
}
}
プロジェクト固有ルール(検出結果に応じて追加):
検出されたファイルパターンに合わせてRead/Edit/Writeのdenyルールを追加する。例:
.npmrcが存在 → "Read(.npmrc)", "Edit(.npmrc)", "Write(.npmrc)"config/secrets.ymlが存在 → "Read(config/secrets.yml)", "Edit(config/secrets.yml)", "Write(config/secrets.yml)"既存のsettings.jsonがある場合は上書きしない。 差分を提示し、ユーザーにマージ方針を確認する。
=== 推奨追加ルール ===
現在のdeny: [既存ルール一覧]
追加推奨: [新規ルール一覧]
マージ方法:
1. 追加ルールのみ追記(既存ルールは維持)
2. 推奨ルール全体で置換
3. 個別に選択
どの方法で適用しますか?
ユーザーの確認後、.claude/settings.jsonまたは.claude/settings.local.jsonを更新する。
生成した設定の検証手順を提示する:
=== 検証手順 ===
1. 防御されるケース(以下はdenyされるはず):
- Read(.env) → ブロック
- Bash(printenv) → ブロック
2. 防御されないケース(以下は通過する。これは仕様):
- Bash(cat .env) → 通過(Bashの引数マッチの限界)
- Bash(python3 -c "print(open('.env').read())") → 通過
- op runで展開された環境変数の読み取り → 通過
3. より強い保護が必要な場合:
- managed settingsを使用(ユーザーが変更不可)
- sandbox modeを有効化
- PreToolUse hooksで追加パターンを検出(hooks設定は手動で行う必要あり)
検出結果をもとに改善推奨を提示する:
/op-env migrateでop://参照に移行を推奨ガードレール以上の保護が必要な場合の案内:
リポジトリ内(およびオプションでホーム配下)のシークレット候補を走査し、現在の保護状況を報告する。
AIに秘密値を見せない。 スキャンはローカルscriptで実行し、パスと種別のみ返す。
# リポジトリのみ走査(デフォルト)
bash meta-plugin/skills/secret-boundary/scripts/secret-scan.sh
# ホーム配下も走査(opt-in)
bash meta-plugin/skills/secret-boundary/scripts/secret-scan.sh --include-home
path,type,modified,permissions,deny_rule_exists
./.env,env-file,2025-12-01,644,no
./config/secrets.yml,config-secret,2025-11-15,644,no
能力分類(prod到達性、課金影響、書込可否等)はscriptでは判定しない。
必要に応じてユーザーに対話で確認し、secret-boundary.local.yamlに記録する。
能力分類の補助台帳。必ず.gitignoreに追加すること(メタデータ自体が機微情報のため)。
# secret-boundary.local.yaml
# このファイルは.gitignoreに追加すること
secrets:
- path: .env
type: env-file
prod_reachable: false
billing_impact: true
writable: true
ttl: permanent
revocable: true
notes: "OpenAI API key (dev), Supabase anon key"
/op-env: 平文.envの保管衛生改善。secret-boundaryのremediate推奨からリンク/security-observation: コード内のセキュリティ脆弱性検出。対象が異なり補完関係/claude-md-optimizer: .claude/settings.json の最適化。secret-boundaryが生成した設定との整合性確認npx claudepluginhub caphtech/claude-marketplace --plugin meta-pluginInitializes Claude Code security settings by detecting project tech stack via Glob (Node.js, Python, Go, Rust, Docker, etc.) and configuring file denial patterns in .claude/settings.json.
Scans source code for hardcoded secrets, API keys, and credentials; classifies risk severity; checks .gitignore and git history; enforces credential externalization.
Scans codebases for exposed credentials including API keys, passwords, and private keys. Activates on queries about secret scanning or credential leaks.