Skip to content
cccskills
FreePublished on GitHub

recurring-task-extractor

自分のClaude Codeログから3回以上繰り返している作業を洗い出し、実用できるエージェントスキルを生成する。「定期作業洗い出し」「ログから繰り返し作業」「スキル化候補出して」「この作業をスキル化して」と言われたら起動。

2モード搭載 (keyword=高速30秒・無料 / semantic=並列サブエージェント・3-5分・$1〜$3)。出力は候補リスト、生成SKILL.md、実インストールはユーザー承認後

The English summary is being prepared. Showing the original description.

See how to install

Files included (10)

  • SKILL.md9.6 KB
  • .gitignore86 B
  • agents/openai.yaml469 B
  • LICENSE1.0 KB
  • README.md6.7 KB
  • scripts/chunk_sessions.py2.3 KB
  • scripts/cluster_tasks.py8.3 KB
  • scripts/draft_skills.py42.0 KB
  • scripts/prepare_ai_skill.py7.4 KB
  • scripts/scan_logs.py5.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Recurring Task Extractor

過去のClaude Codeセッションログから、繰り返している作業を抽出して実用スキルを生成する「メタスキル」。

重要: keyword モードの自動生成はテンプレートベースの fallback。実用スキルを作る本命は、代表セッションを集めてAIに書かせる AI-backed generation。

2つの動作モード

モード仕組み速度コスト精度
keywordキーワード共起カウント~30秒0粗(言い回しの揺れに弱い)
semantic並列サブエージェントが意味で束ねる~3-5分$1〜$3高(「請求書出して」と「インボイス送って」を同一視)

迷ったら semantic 推奨。月1回の棚卸しなら十分元取れる。

いつ起動するか

  • 「最近よくやってる作業を自動化したい」
  • 「自分のログ見て、スキル化できそうなやつ出して」
  • 月次棚卸し

共通: Phase 1 ログスキャン

両モード共通の前処理。直近30日のセッションから「ユーザーの最初の依頼」と「使ったツール一覧」を抽出。

python3 ~/.claude/skills/recurring-task-extractor/scripts/scan_logs.py \
  --days 30 \
  --out /tmp/recurring-task-extractor/sessions.jsonl

オプション: --days N(直近N日、デフォ30)/ --all(全期間)


モードA: keyword(高速・無料)

Phase 2: クラスタリング

python3 ~/.claude/skills/recurring-task-extractor/scripts/cluster_tasks.py \
  --in /tmp/recurring-task-extractor/sessions.jsonl \
  --min-count 5 \
  --top-n 25 \
  --out /tmp/recurring-task-extractor/clusters.json

Phase 3: 候補リスト表示

python3 ~/.claude/skills/recurring-task-extractor/scripts/draft_skills.py \
  --in /tmp/recurring-task-extractor/clusters.json \
  --mode list

モードB: semantic(並列サブエージェント)

Phase 2: チャンク分割

python3 ~/.claude/skills/recurring-task-extractor/scripts/chunk_sessions.py \
  --in /tmp/recurring-task-extractor/sessions.jsonl \
  --chunk-size 250 \
  --max-chunks 15 \
  --out-dir /tmp/recurring-task-extractor/chunks

出力: chunk_01.jsonl ... chunk_15.jsonl

Phase 3: 並列サブエージェント分析(Claude Code側でAgent toolを使う)

このスキルが起動した時点で、Claude(あなた)は全チャンクを並列でAgent toolにディスパッチします。

各サブエージェント (subagent_type: general-purpose) に全く同じ指示テンプレートで投げる。チャンクパスだけ置換:

あなたは過去Claude Codeセッションログを分析するアナリストです。

入力: {CHUNK_PATH}

このJSONLファイルには {N} 件のセッション要約が入っています(各行 JSON: session_id, first_user_prompt, tools, cwd, timestamp)。

タスク:
1. 全セッションを読み、「同じ目的の作業を繰り返し依頼している」パターンを意味で抽出する
2. 単発・1回限りの作業はスキップ
3. 2件以上の類似セッションがあるパターンのみ採用
4. パターンごとに以下のJSONを返す:

{
  "patterns": [
    {
      "name": "問い合わせ返信ドラフト",
      "description": "問い合わせフォームから来たメールに対して返信文を考える作業",
      "trigger_phrases": ["これ返信考えて", "問い合わせどう答える", "コレ返信"],
      "sample_session_ids": ["xxx", "yyy", "zzz"],
      "approximate_count": 8,
      "suggested_skill_name": "inquiry-reply-drafter",
      "suggested_tools": ["Bash", "Read", "WebSearch"]
    }
  ]
}

出力先: {FINDINGS_PATH}(JSONを書き込み)

書き込み完了したら "OK: written N patterns to {FINDINGS_PATH}" とだけ返す。本文での説明は不要。

{FINDINGS_PATH} は /tmp/recurring-task-extractor/chunks/findings_NN.json(NNはチャンク番号)。

重要: 全チャンクを1メッセージ内で全て同時にAgent tool callする(並列実行)。順次実行すると遅い。

Phase 4: 統合(Claudeが直接マージ)

全 findings_*.json をRead(並列)→ Claudeが意味で束ねる:

  • name が類似なら同一パターン扱い(例: 「請求書発行」と「請求書作成」は同一)
  • approximate_count を足し合わせ
  • sample_session_ids を結合(重複除去)
  • 統合結果を以下の形式で /tmp/recurring-task-extractor/clusters.json に書き出す(draft_skills.py互換):
[
  {
    "trigger": "問い合わせ返信ドラフト",
    "count": 12,
    "tool_signature": "Bash + Read + WebSearch",
    "top_tools": ["Bash","Read","WebSearch"],
    "top_cwds": ["..."],
    "samples": [
      {"prompt": "...", "timestamp": "...", "cwd": "..."}
    ],
    "_semantic": {
      "description": "...",
      "trigger_phrases": [...],
      "suggested_skill_name": "..."
    }
  }
]

Phase 5: 候補リスト提示

python3 ~/.claude/skills/recurring-task-extractor/scripts/draft_skills.py \
  --in /tmp/recurring-task-extractor/clusters.json \
  --mode list

採用判定 → AI-backed generation(推奨)

ユーザーが「1番と3番を採用」のように指定したら:

python3 ~/.claude/skills/recurring-task-extractor/scripts/prepare_ai_skill.py \
  --clusters /tmp/recurring-task-extractor/clusters.json \
  --sessions /tmp/recurring-task-extractor/sessions.jsonl \
  --pick 1 \
  --out-dir /tmp/recurring-task-extractor/ai-briefs/

出力される:

  • brief.json: 代表セッション、既存スキル重複、主要ツール、作業場所
  • PROMPT.md: AIに渡す生成指示
  • generated/<skill-name>/SKILL.md: AIが書く対象ファイル

Claude/Codexは PROMPT.md を読み、必要なら代表セッションJSONLを数件読んでから、target_skill_md に SKILL.md を書く。

このAI生成では、汎用テンプレではなく、過去セッションから以下を抽出して書く:

  • 実際の起動文
  • 実際に使っていたツール
  • よく見る入力素材
  • 成功した作業手順
  • 出力の形
  • 既存スキルとの棲み分け
  • 失敗しやすい点

原則として、汎用的な「安全ルール」節は入れない。外部送信、投稿、財務・法務編集など実際に必要な場合だけ承認ゲートを短く入れる。

採用判定 → テンプレート生成(fallback)

AI-backed generationを使わずに素早く骨組みを出す場合:

python3 ~/.claude/skills/recurring-task-extractor/scripts/draft_skills.py \
  --in /tmp/recurring-task-extractor/clusters.json \
  --mode generate \
  --pick 1,3 \
  --out-dir /tmp/recurring-task-extractor/generated/

テンプレート生成されたスキルは /tmp/recurring-task-extractor/generated/<name>/SKILL.md に出力される。

生成される SKILL.md には以下が入る:

  • 起動条件
  • 目的
  • 入力確認項目
  • 先に確認する関連リソース
  • 実行手順
  • 詳細プレイブック
  • 出力フォーマット
  • 出力テンプレート
  • 主要ツール
  • 主な作業場所
  • PIIマスク済みのログサンプル
  • 品質ゲート
  • よくある失敗
  • 完了条件

draft モードは後方互換のため残っており、内部的には generate と同じ実用SKILL.mdを生成する。

明示的に安全ルール節も入れたい場合だけ --include-safety を付ける。

インストール

レビュー後、ユーザーが採用を明示した場合だけ ~/.claude/skills/ へコピーする:

python3 ~/.claude/skills/recurring-task-extractor/scripts/draft_skills.py \
  --in /tmp/recurring-task-extractor/clusters.json \
  --mode generate \
  --pick 1,3 \
  --out-dir /tmp/recurring-task-extractor/generated/ \
  --install

既存スキルを上書きする必要がある場合のみ --force を付ける。

重要ルール

  • 自動でSKILL.mdをインストールしない(低品質スキル乱立防止)
  • ユーザー承認後のみ ~/.claude/skills/ へ実ファイル化
  • 既存スキルと重複してないか必ず確認(ls ~/.claude/skills/)
  • セマンティックモードのコストはユーザーに事前告知("$1〜$3 かかります、いいですか?")
  • ログ由来サンプルは個人情報、メールアドレス、電話番号、URL、トークン、Xハンドルをマスクしてから出す

トラブルシュート

  • セッション数が少ない(< 100)→ keyword モードで十分
  • セマンティックでサブエージェントが timeout → --chunk-size を小さくして --max-chunks 増やす
  • ストップワードが効いてない → cluster_tasks.py の STOP_* セットを編集

配布性メモ

このスキル本体はポータブル。公開・共有する場合は、ログ由来サンプルに含まれる固有名詞、ローカルパス、連絡先、URL、トークンを必ずマスクすること。

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Report a problem with this skill