skills/cycle-metrics/SKILL.md
Issue サイクル(/ship 1回)の所要時間・トークン量・ボトルネックを実測する。 PR タイミングと Claude Code セッションログから集計し、 `~/.cache/vibecorp/state/<repo-id>/cycle-metrics/YYYY-MM-DD.md` に保存する(揮発データ)。full プリセット限定。 「/cycle-metrics」「サイクル計測」と言った時に使用。
npx skillsauth add hirokimry/vibecorp cycle-metricsInstall 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] このスキルは直近 N 回の Issue サイクル(
/ship1 回 = PR 1 本)の 所要時間・トークン量・各エージェント呼び出し を実測する。 データ生成専用 であり、Critical/Major 等の判断や Issue 起票は行わない(CFO/audit-cost側の責務)。 ヘッドレス Claude(claude -p/npx/bunx)を一切伴わない。計測自体が課金を発生させると本末転倒。
直近 N 回の Issue サイクルについて所要時間・トークン量・各エージェント呼び出しを実測し、改善判断のためのデータを生成する。full プリセット専用。
| 項目 | 条件 |
|---|---|
| プリセット | full プリセット専用(/audit-cost と同等のスコープ) |
| 認証 | gh CLI が認証済み |
| ログ | ~/.claude/projects/<slug>/*.jsonl(Claude Code セッションログ)が存在 |
| テンプレ | knowledge/accounting/cycle-metrics-template.md が配置済み |
本スキルおよび配下スクリプトは ヘッドレス Claude(claude -p / npx / bunx 経由の LLM 呼び出し)を一切伴わない。
.claude/rules/autonomous-restrictions.md 第 3 項(課金構造)。計測自体が課金を発生させると本末転倒。gh API(PR timeline / check runs)と Claude Code セッション JSONL の静的読み取りのみ。tests/test_cycle_metrics.sh で全スクリプトに対する文字列検査を実施し、違反を CI で検出する。awk '/^preset:[[:space:]]*/ { sub(/^preset:[[:space:]]*/, ""); print; exit }' .claude/vibecorp.yml
full 以外の場合は「/vibecorp:cycle-metrics は full プリセット専用です」と報告して終了する。
gh pr list でマージ済み PR の直近 N 件(デフォルト 20 件)を取得し、PR 単位の所要時間・レビュー時間・CI 時間を JSON で出力する。
bash skills/cycle-metrics/fetch-pr-metrics.sh --limit 20 > /tmp/cycle-pr.json
出力フィールド:
| フィールド | 内容 |
|---|---|
| number | PR 番号 |
| issue_number | ブランチ名から抽出した Issue 番号(dev/{番号}_*) |
| created_at / merged_at | ISO8601 |
| total_seconds | マージまでの総所要時間 |
| first_review_seconds | 最初のレビューまでの時間(無い場合は null) |
| ci_seconds | CI 完了までの所要時間(statusCheckRollup ベース) |
| additions / deletions | 差分量 |
日付計算は jq 'fromdateiso8601' を使用し、date -d(GNU 固有)は使わない。
~/.claude/projects/<slug>/*.jsonl から、ブランチ単位(gitBranch == "dev/{Issue番号}_*")でセッションを抽出し、トークン量と sidechain 呼び出し回数を集計する。
bash skills/cycle-metrics/fetch-agent-metrics.sh --since "30 days ago" > /tmp/cycle-agent.json
出力フィールド:
| フィールド | 内容 |
|---|---|
| branch | 集計対象のブランチ名 |
| issue_number | ブランチ名から抽出した Issue 番号 |
| total_input_tokens / total_output_tokens / total_cache_creation_tokens / total_cache_read_tokens | トークン内訳 |
| models | モデル別集計 |
| sidechain_count | サブエージェント呼び出し回数(isSidechain == true のメッセージ数) |
| subagent_types | Agent tool_use の subagent_type 別呼び出し回数 |
| session_count | 関連セッション数 |
エージェント別の正確な紐付け(sidechain と subagent_type の対応)は best-effort で実装する。
PR と Agent の JSON を読み込んで Markdown レポートを生成する。出力先は ~/.cache/vibecorp/state/<repo-id>/cycle-metrics/ の揮発データ領域(.claude/knowledge/ には書かない)。
. "${CLAUDE_PROJECT_DIR:-.}/.claude/lib/common.sh"
today=$(date -u +%Y-%m-%d)
state_dir="$(vibecorp_state_dir)"
mkdir -p "${state_dir}/cycle-metrics"
out="${state_dir}/cycle-metrics/${today}.md"
bash skills/cycle-metrics/generate-report.sh /tmp/cycle-pr.json /tmp/cycle-agent.json "$out"
レポートは cycle-metrics-template.md の雛形を埋める形で出力する(テンプレート読取先は .claude/knowledge/accounting/cycle-metrics-template.md のまま、出力先のみ ~/.cache/ に変更)。
## /vibecorp:cycle-metrics 完了
### 集計範囲
- PR: 直近 N 件(マージ済み)
- セッション: 直近 30 日間
### サマリ
- 平均サイクル時間: X 時間
- 最長フェーズ: {フェーズ名} (Y 時間)
- 総トークン消費: Z(input / output / cache 内訳)
### 出力
- レポート: ~/.cache/vibecorp/state/<repo-id>/cycle-metrics/YYYY-MM-DD.md
本スキルの出力は CFO が /audit-cost 監査時に データ源 として参照する。ファイル名で責務を区別する。
| ファイル | 場所 | 担当 | 内容 |
|---|---|---|---|
| audit-log/YYYY-QN.md | .claude/knowledge/accounting/ | CFO(/audit-cost) | 監査判断(Critical/Major、Issue 起票要否) |
| cycle-metrics/YYYY-MM-DD.md | ~/.cache/vibecorp/state/<repo-id>/ | /cycle-metrics | 実測データのみ(判断ロジックなし、揮発) |
/audit-cost 側の責務。git add / git commit / git push は実行しない。--force、--hard、--no-verify は使用しない。\(...) を使わない — 必ず + で結合する。2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しない。date -d(GNU 固有)を使わない — jq 'fromdateiso8601' で BSD/GNU 両対応にする。本スキルの出力 cycle-metrics/YYYY-MM-DD.md は 揮発データ であり、~/.cache/vibecorp/state/<repo-id>/cycle-metrics/ 配下に保存する。.claude/knowledge/ にも knowledge/buffer にも載せない(Issue #442 で確定した方針)。
理由:
audit-log/YYYY-QN.md 側に集約され、cycle-metrics/ は同日中に CFO が消費する一過性データのため。protect-knowledge-direct-writes.sh フックの deny パターン(*/audit-log/*)に該当しない(出力先が .claude/knowledge/ 外)。CFO 監査結果(audit-log/YYYY-QN.md)は /audit-cost が ${BUFFER_DIR}/.claude/knowledge/accounting/audit-log/ 経由で buffer に保存し、/vibecorp:knowledge-pr で main に反映される。
.claude/rules/autonomous-restrictions.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 段階で挙動を壊さず適用する。自動マージ禁止。