skills/audit-security/SKILL.md
CISO による月次セキュリティ監査。直近30日間の変更から脆弱性・認証変更を分析し、 `knowledge/security/audit-log/YYYY-QN.md` に追記 + `audit-log-index.md` に 1 行サマリ追記する。full プリセット限定。 「/vibecorp:audit-security」「セキュリティ監査」と言った時に使用。
npx skillsauth add hirokimry/vibecorp audit-securityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
[!IMPORTANT] このスキルは CISO エージェントを呼び出し、直近 30 日の変更から 脆弱性・認証変更を分析 する。 監査レポートは
knowledge/bufferworktree 経由で main に反映する(作業ブランチ直書きはprotect-knowledge-direct-writes.shフックで deny)。 full プリセット専用。Critical / Major 検出時は/vibecorp:issueで Issue を起票する。
CISO エージェントによる月次セキュリティ監査を自動化する。監査レポートは knowledge/security/ に保存する。脆弱性検出時は Issue を起票する。
| 項目 | 条件 |
|---|---|
| プリセット | full プリセット専用(CISO エージェントが必要) |
| エージェント | CISO エージェント定義(.claude/agents/ciso.md)が配置済み |
| テンプレ | knowledge/security/security-audit-template.md が存在 |
awk '/^preset:[[:space:]]*/ { sub(/^preset:[[:space:]]*/, ""); print; exit }' .claude/vibecorp.yml
full 以外の場合は「/vibecorp:audit-security は full プリセット専用です」と報告して終了する。
監査レポートは knowledge/buffer worktree 経由で main に反映する(docs/specification.md の「自動反映フロー」原則)。作業ブランチへの直書きは protect-knowledge-direct-writes.sh フックで deny される。
. "$CLAUDE_PROJECT_DIR/.claude/lib/knowledge_buffer.sh"
knowledge_buffer_ensure || { echo "[audit-security] buffer 準備失敗。作業ブランチへの直書きはフックで deny されるため処理を中止" >&2; exit 1; }
knowledge_buffer_lock_acquire || { echo "[audit-security] ロック取得失敗(${VIBECORP_LOCK_TIMEOUT:-60}s)" >&2; exit 2; }
trap knowledge_buffer_lock_release EXIT
BUFFER_DIR="$(knowledge_buffer_worktree_dir)"
直近 30 日間の変更を取得する。
git log --since="30 days ago" --oneline
git diff "@{30 days ago}"..HEAD --stat
コミット数が 0 件の場合は「監査対象期間に変更なし」とレポートし、空の監査ファイルを生成して終了する。
CISO エージェントに以下を渡して起動する(Agent ツール)。プロンプトは skills/audit-security/prompts/agent-call-ciso-monthly-audit.md を参照する。
CISO の出力を buffer worktree 内 の ${BUFFER_DIR}/.claude/knowledge/security/audit-log/YYYY-QN.md に 追記 する。さらに audit-log-index.md に 1 行サマリを追記する。
today=$(date -u +%Y-%m-%d)
year=$(date -u +%Y)
month=$(date -u +%m)
# 10#$month で 8 進数解釈を回避(08/09 が無効になる問題対策)
quarter=$(( (10#$month - 1) / 3 + 1 ))
target="${year}-Q${quarter}"
mkdir -p "${BUFFER_DIR}/.claude/knowledge/security/audit-log"
audit_file="${BUFFER_DIR}/.claude/knowledge/security/audit-log/${target}.md"
index_file="${BUFFER_DIR}/.claude/knowledge/security/audit-log/audit-log-index.md"
# 四半期ファイルがなければ初期化(初回作成時)
if [ ! -f "$audit_file" ]; then
printf '# セキュリティ監査ログ — %s\n\n`/vibecorp:audit-security` および `security-analyst` 合議結果のアーカイブ。\n\n---\n\n' "$target" > "$audit_file"
fi
# index がなければ templates から初期化
# 既存導入先(.claude/)を優先し、無ければ配布元(templates/)から複製する。
# `2>/dev/null || cp ...` のフォールバックは docs/design-philosophy.md のフォールバック
# 禁止ルール違反のため、明示的な存在チェックで分岐する。
if [ ! -f "$index_file" ]; then
installed_index=".claude/knowledge/security/audit-log/audit-log-index.md"
template_index="templates/claude/knowledge/security/audit-log/audit-log-index.md"
if [ -f "$installed_index" ]; then
if ! cp "$installed_index" "$index_file"; then
echo "[audit-security] index 初期化失敗: ${installed_index} → ${index_file}(権限・容量等を確認)" >&2
exit 4
fi
elif [ -f "$template_index" ]; then
if ! cp "$template_index" "$index_file"; then
echo "[audit-security] index 初期化失敗: ${template_index} → ${index_file}(権限・容量等を確認)" >&2
exit 4
fi
else
echo "[audit-security] audit-log-index.md テンプレートが見つかりません。導入先と配布元の両方を確認してください: ${installed_index} / ${template_index}" >&2
exit 4
fi
fi
その後、CISO の出力内容を ${audit_file} に統一書式(## YYYY-MM-DD — Issue #N — /vibecorp:audit-security 見出し)で追記し、${index_file} の ## 索引 セクション直後に 1 行サマリを追加する。
追記書式:
## YYYY-MM-DD — Issue #N — /vibecorp:audit-security
### 監査範囲
(CISO 出力の本文)
index 1 行サマリ書式:
- YYYY-MM-DD — Issue #N — `/vibecorp:audit-security` Critical N / Major N / Minor N
CISO の出力に ### 判断記録(記録先取得失敗) セクションが含まれる場合、CISO の自前 buffer 取得が失敗している。判断内容を結果レポート末尾の「⚠️ 手動反映が必要な判断記録」ブロックに転記し、ユーザーに docs/migration-knowledge-buffer.md の手順での手動反映を促す。
# 現在実行分の CISO 出力のみを検査する。
# 四半期集約後は audit_file に過去 fallback エントリが残っている可能性があるため、
# audit_file 全体走査による誤検知を避ける。
if echo "$ciso_output" | grep -q '^### 判断記録(記録先取得失敗)$'; then
fallback_warning=1
fi
knowledge_buffer_commit は差分なしを成功扱い(exit 0)するため || true は不要。実際の git エラーを握り潰さないために、commit 失敗時は push を中止する。
push_status="success"
if ! knowledge_buffer_commit "chore(knowledge): audit-security ${today}"; then
echo "[audit-security] commit 失敗。push は中止します。buffer 内容を確認してください: ${BUFFER_DIR}" >&2
push_status="failed (commit 失敗)"
elif ! knowledge_buffer_push; then
echo "[audit-security] push 失敗。commit は ${BUFFER_DIR} に保持。手動 push: git -C ${BUFFER_DIR} push origin knowledge/buffer" >&2
push_status="failed (worktree に保持)"
fi
Critical または Major 指摘がある場合、/vibecorp:issue スキルで Issue を起票する。
| 項目 | 値 |
|---|---|
| ラベル | audit, security |
| タイトルプレフィックス | [audit-security] |
| 本文 | 監査レポートのサマリ + レポートファイルへのリンク |
Minor のみの場合は起票しない(レポート保存のみ)。
## /vibecorp:audit-security 完了
### 監査範囲
- 期間: YYYY-MM-DD 〜 YYYY-MM-DD
- コミット数: N
- 変更ファイル数: N
### 指摘サマリ
- Critical: N 件
- Major: N 件
- Minor: N 件
### OWASP Top 10 該当
- A01 / A02 / A03 / A07 / A08: あり / なし
### 出力
- レポート: ${BUFFER_DIR}/.claude/knowledge/security/audit-log/YYYY-QN.md(追記)
- index: ${BUFFER_DIR}/.claude/knowledge/security/audit-log/audit-log-index.md(1 行サマリ追記)
- 起票 Issue: {URL} / なし
### 出力ステータス
- レポート保存: 成功 / 失敗
- buffer commit: 成功 / 失敗(差分なしスキップ)
- buffer push: 成功 / 失敗(失敗時は ${BUFFER_DIR} に保持。手動 push 手順を出力)
### ⚠️ 手動反映が必要な判断記録(CISO フォールバック発動時のみ)
{CISO 出力の「### 判断記録(記録先取得失敗)」セクションをここに転記}
→ docs/migration-knowledge-buffer.md の手順で手動反映してください
/schedule または cron で月次実行する。
# 毎月1日 09:00 JST に実行
/schedule monthly "0 0 1 * *" /vibecorp:audit-security
git add / git commit / git push は knowledge_buffer_* ヘルパー経由でのみ実行する(buffer worktree 内に限定)。protect-knowledge-direct-writes.sh フックで deny される)。--force、--hard、--no-verify は使用しない。\(...) を使わない — 必ず + で結合する。2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しない。.claude/rules/autonomous-restrictions.md.claude/rules/review-observations.md.claude/rules/prompt-writing.md.claude/rules/markdown.md.claude/rules/shell.mddata-ai
skills/**/SKILL.md 内に embed された 5 行以上のエージェント呼出プロンプトテンプレ・長文ブロックを .claude/rules/notification-prompt-extraction.md 基準で skills/<skill>/prompts/<name>.md に切り出す migration skill。「/prompts-extract-all」「プロンプト切り出し」「プロンプト extract」「SKILL.md プロンプト migration」と言った時に使用。検出は awk でフェンスコードブロックを抽出して行数カウント、要否判定は LLM が閾値・用途軸・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
documentation
.github/workflows/**/*.{yml,yaml} の --body 通知文と hooks/**/*.sh の長文 echo/printf/heredoc を .claude/rules/notification-prompt-extraction.md 基準で個別 .md ファイルに切り出す migration skill。「/notifications-extract-all」「通知文切り出し」「通知文 extract」「workflow 通知 migration」と言った時に使用。検出は grep で機械絞り込み、要否判定は LLM が閾値・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
development
`**/*.sh` / `**/*.js` / `**/*.ts` / `**/*.py` / `**/*.rb` / `**/*.go` / 設定ファイル等のコード内コメントを一括棚卸しし、 `.claude/rules/code-comments.md` と機械的に照合する。 diff 提案 → CEO 承認 → 書換の 2 段階で自動マージを禁じる。 生成コード・`node_modules`・`vendor`・`dist`・`build` 等は除外する。 「/vibecorp:comments-rewrite-all」「コメント全書き直し」「コード内コメント棚卸し」 と言った時に使用。
development
skills/**/SKILL.md・agents/*.md・.claude/rules/*.md を .claude/rules/prompt-writing.md 基準で一括書き直し提案するスキル。「/prompts-rewrite-all」「プロンプト書き直し」「スキル一括書き直し」「エージェント書き直し」と言った時に使用。claude-code-guide サブエージェントで Claude Code 公式仕様(docs.claude.com)を確認し、prompt-writing.md の指針 MUST / 禁止パターンと照合する。diff 提案 → CEO 承認 → 書き換えの 2 段階で挙動を壊さず適用する。自動マージ禁止。