| name | skill-creator-from-logs |
| description | VS Code / GitHub Copilot Chat の「Chat: Export Chat...」で出力した JSON を解析し、繰り返しワークフロー(WHAT/HOW/FLOW)を発見して Agent Skills を自動生成する。"analyze my chat history", "find repetitive tasks", "create skills from logs", "Copilot Chat の履歴からスキルを作って", "VS Code Chat Export を分析して"などのリクエスト時に使用される。 |
GitHub Copilot Chat のエクスポート履歴からスキルを生成
このスキルは VS Code の公式機能(Chat: Export Chat...)で書き出した JSON を一次ソースとして扱い、
繰り返しタスクのパターンを抽出して新しい Agent Skills を自動生成します。
安全性とプライバシー
- エクスポート JSON には、ソースコード断片・ログ・秘密情報が含まれる可能性があります。生ログをそのままスキルに貼り付けない
- 読み取りを開始する前に、必ず「読み取るファイル(Export JSON のパス)」を明示し、ユーザーの明確な承認を得る
- スキル本文・使用例に、トークン/パスワード/APIキー/秘密のURL/個人情報/ユーザー固有の絶対パスを含めない
ワークフロー概要
以下の 6 フェーズを順番に実行します。
スキル生成進捗:
- [ ] Phase 1: データ収集(同意取得→Export JSON 縮約→Read)
- [ ] Phase 2: タスクパターン抽出(WHAT/HOW/FLOW の三軸抽出)
- [ ] Phase 3: スキル適性評価(スコアリング→ランク付け→候補提示)
- [ ] Phase 4: ユーザー選択(スキル化対象の決定→スコープ確認)
- [ ] Phase 5: スキル生成(SKILL.md + 補助ファイルの作成)
- [ ] Phase 6: 品質検証(チェックリスト確認)
Phase 1: データ収集
同意ゲート(必須)
読み取りを開始する前に、ユーザーに以下を伝えて承認を得ます。
- 対象: VS Code Chat Export JSON(単体ファイル or ディレクトリ)
- 分析スコープ: どのワークスペース/プロジェクトの履歴か(
--workspace の値)
- 時間範囲: 過去 N 日(
--days)
- 読み取るファイル: 具体的なパス(例:
exports/*.json)
収集と縮約(推奨)
Export JSON はサイズが大きくなりやすい(tool 実行結果やコード断片が大量に入ることがある)ため、
ファイル読み込みの制限を避ける目的で 縮約(フィルタ)→ JSONL 化 してから読みます。
-
ユーザーに、Export した JSON の場所を用意してもらう(例: exports/ に集約)
-
同梱スクリプトで縮約します:
python3 {skill-dir}/scripts/filter-vscode-chat-export.py \
--input "{export-path-or-dir}" \
--workspace "{project-path}" \
--days {N} \
--noise-filter \
> /tmp/vscode-chat-filtered.jsonl
- 出力が大きい場合は
--max-turns / --max-assistant-chars を下げて再実行する
- 失敗した場合は「どのファイルが大きいか」を特定し、対象セッションを絞って Export し直す
/tmp/vscode-chat-filtered.jsonl を Read して Phase 2 に渡す
データモデル(抽象)
縮約後は「1行=1 turn(概ね user/assistant のペア)」の JSONL として扱います。
最低限、以下が取れればよいです。
timestamp(あれば)
workspace(または推定できるプロジェクト識別子)
user_text
assistant_text
source_file(どの Export JSON 由来か)
フィールド名は Export 形式で揺れるため、スクリプト側で best-effort に正規化しています。
Phase 2: タスクパターン抽出
縮約した会話(user/assistant)から、具体的な繰り返しタスクパターンを抽出します。
三軸抽出(重要)
- WHAT: 何を達成したいか(例: 「PR レビュー指摘を一括で直す」)
- HOW: どう進めるか(例: 「差分だけ出す」「テスト駆動で修正する」「チェックリストで検証する」)
- FLOW: セッション内の作業連鎖(例: 「調査→修正→テスト→コミット」)
ルール: HOW を WHAT に丸めない。FLOW は複数ステップの連鎖として独立に抽出します。
ノイズ除外(推奨)
- 形式だけの相づち(例: 「OK」「ありがとう」)
- 変化が少ない繰り返し(例: 同じ質問の言い換えのみ)
- 大量の貼り付け(コード/ログ)が主体で、指示(WHAT/HOW)が読み取れない turn
FLOW 抽出
- session 相当(Export ファイル単位、または timestamp の近接で)で会話をまとめる
- そのまとまりごとに「作業の流れ」を 1 行で要約(矢印表現)
- 似た流れが 3 回以上出るものを FLOW パターンとして記録
詳細な粒度例は references/pattern-extraction-examples.md を参照してください。
Phase 3: スキル適性評価
ステップ 0: 既存スキルとの照合
ユーザー環境にインストール済みのスキルを列挙し、抽出パターンとの重複を確認します。
.github/skills/ 配下のスキルを Glob で列挙
- 各スキルの SKILL.md の
name / description を読み取り
- 抽出パターンを以下に分類:
- 完全カバー済み → 候補から除外
- 部分カバー → 未カバー部分のみ候補として残す
- 未カバー → そのまま候補
ステップ 1〜3: スコアリング→ランク付け→候補提示
内部的に「頻度」「一貫性」「自動化可能なステップ数」で優先度を付けます。
ただし 内部スコアの詳細はユーザーに見せません。
提示フォーマット:
スキル化推奨:
1. [パターン名] (N回) — [1行説明]
スキル化の価値あり:
2. [パターン名] (N回) — [1行説明]
Phase 4: ユーザー選択
- ユーザーにスキル化対象のパターンを選んでもらう(複数可)
- 選択パターンに該当する代表 turn(サニタイズ前提)を 2〜3 件提示してスコープを確認
- 以下を確定:
- スキルのスコープ(どこからどこまで)
- バリエーションの扱い(オプション化 or 別スキル)
- 配置先:
.github/skills/ 配下
- トリガーフレーズ
Phase 5: スキル生成
重要ルール
- 生の会話ログをそのまま貼り付けない
- シークレット/個人情報/絶対パスを含めない(必要ならテンプレート化)
- YAML フロントマターに山括弧文字を含めない
- GitHub Copilot のコンテキスト制限を考慮し、簡潔で明確な記述を心がける
生成物の構造
{skill-name}/
SKILL.md
scripts/
references/
SKILL.md の要件:
name(kebab-case)と description を含む
- 番号付きの実行手順(再現可能)
- よくあるエラーと対処
- 少なくとも 2 つの使用例(サニタイズ済み)
- 200〜300行を目標(必要に応じて400行まで許容)
Phase 6: 品質検証
- references/quality-checklist.md でチェックリストを確認
- 既存の skill-creator スキルの設計原則と照合
- 不合格項目があれば修正して再検証
よくある問題
Export JSON が用意できない
- このスキルは Export JSON のみを入力として扱います。VS Code 側で
Chat: Export Chat... を実行して JSON を用意してもらいます。
Export JSON が大きすぎる
- 必ず
scripts/filter-vscode-chat-export.py で縮約してから読み込みます
- それでも大きい場合は、対象セッションを絞って Export し直す(分析対象を減らす)
JSON パースエラー
- 対象ファイルを 1 つに絞り、縮約スクリプトを再実行
- それでも失敗する場合は、Export の再取得(別名で保存)を依頼