日々のClaude Code会話から知識を自動抽出し、GitHubリポジトリに同期します。JSONL会話ログを分析し、価値ある知見(エラー解決、コーディングパターン、便利なコマンド、設計判断、ドメイン知識、運用)を特定し、70%類似度閾値で重複をチェックし、カテゴリ分類された知識ベースにコミットします。1日1回、Claude Code起動時または「おはよう」の挨拶時にトリガーされます。
Extracts valuable insights from daily Claude Code conversations and syncs them to a categorized knowledge repository.
npx claudepluginhub sk8metalme/ai-agent-setupThis skill inherits all available tools. When active, it can use any tool Claude has access to.
config/categories.yamlreferences/categories.mdreferences/coffee_beans.mdreferences/coffee_output_format.mdreferences/daily_summary_format.mdreferences/knowledge_format.mdscripts/categorize_knowledge.pyscripts/check_similarity.pyscripts/create_knowledge_files.pyscripts/extract_knowledge.pyscripts/manage_daily_trigger.pyClaude Codeの会話から自動的に知識を収集し、検索可能でカテゴリ分類された知識リポジトリを構築します。
このスキルは、前日のClaude Code会話ログ(~/.claude/projects/内のJSONLファイル)を分析し、価値ある知識項目を抽出し、カテゴリ分類し、重複をチェックし、GitHubリポジトリにコミットします。1日1回、最初のClaude Codeセッションで実行されます。
抽出される内容:
主な機能:
⚠️ 重要: このスキルは完全自律実行を前提としています。以下のガイドラインを厳守してください。
このスキル実行中は、原則としてユーザーへの質問・確認を一切行わないでください。ただし、Step 3の初回設定が未完了の場合のみ、ユーザーへの確認を許容します。
コーヒータイムから最終のコーヒー豆紹介まで、必ずすべてのステップを完了させてください。途中で停止しないでください。
スクリプト存在確認で誤判断を防ぐため、以下の基準を厳守してください:
SKILL_BASE の取得方法:
スクリプト確認の正しい方法:
ls でディレクトリを表示するだけでは不十分)✅/❌ を表示❌ があれば「スクリプトが見つからない」と判断よくある間違い:
ls "$SKILL_BASE/scripts/" の出力が空 → 「見つからない」と誤判断scripts/xxx.py で指定(相対パス)-f で個別確認 → 正確な判断フォールバック不要の原則:
このスキルは日常使用(毎朝自動実行)を想定しています。以下の出力ルールを厳守してください:
以下の出力は一切行わないでください:
echo "KNOWLEDGE_REPO_PATH: ...")✅ extract_knowledge.py などのリスト)git status の出力)7cde3f29-f6b4-4fc4-adca-9f8f5b7370ba.jsonl: 24 candidates など1342行)許可される出力:
バッチ処理の最終結果のみを簡潔に表示:
### 知識同期結果
✅ **処理完了**
- 対象日: YYYY-MM-DD
- 総候補数: N件
- 作成した知識ファイル: N件
- 採用: N件
- 拒否: N件
- 重複: N件
禁止される出力:
Progress: 100/3273 は内部のみ、ユーザーには非表示)head -n 100 /tmp/knowledge_candidates_...)Rejection reasons (first 100 samples): ...)Score distribution: ...)Rank 1: Score 30 ===)注意: Step 5 では Claude Code 自身がハイブリッド方式で評価を行います。 スクリプトを直接呼び出す必要はありません。
エラー発生時のみ、以下を簡潔に表示:
例:
❌ Step 5 でエラー: リポジトリへのアクセス権限がありません
→ ~/.gitconfig を確認してください
Step 0: コーヒー ☕
↓
(Step 1-4: 内部処理、出力なし)
↓
知識同期結果サマリー(Step 5 の最終結果のみ)
↓
日次まとめ(Step 11-1)
↓
本日のコーヒー豆(Step 11-2)
期待される効果:
複数のセッションログを参照する際は、サブエージェントを活用して効率化することを検討してください。
~/.claude/projects/ 配下に複数のプロジェクトディレクトリがある場合、Task ツールでサブエージェントを活用して並列に分析知識同期を始める前に、まずはコーヒーでも飲んでリラックスしましょう。
) )
( (
........
| |]
\ /
`----'
おはようございます!今日も素敵な1日になりますように。 コーヒーを片手に、昨日の会話から得られた知見を整理していきましょう。
準備ができたら、次のステップに進んでください。
⚠️ 重要: このステップは内部処理のみです。ユーザーへの出力は一切行わないでください。以下のコード例は確認のためのものであり、実際に実行しても結果は表示しないでください。
スキル実行前に、必要な設定を確認します。
echo "KNOWLEDGE_REPO_PATH: ${KNOWLEDGE_REPO_PATH:-未設定}"
echo "KNOWLEDGE_REPO_URL: ${KNOWLEDGE_REPO_URL:-未設定}"
このスキルのスクリプトは、Base directory からの相対パスで参照します。
SKILL_BASE の取得方法:
スキル読み込み時に表示される「Base directory for this skill」の値を そのまま 使用します:
# スキル読み込み時の表示:
# Base directory for this skill: /Users/.../skills/daily-knowledge-sync
SKILL_BASE="/Users/.../skills/daily-knowledge-sync" # ← この値をそのまま使用
重要: パスを推測・短縮しないでください。表示された値をそのままコピーしてください。
必須スクリプト5個を個別に確認します(ls でディレクトリを表示するだけでは不十分):
REQUIRED_SCRIPTS=(
"extract_knowledge.py"
"create_knowledge_files.py"
"categorize_knowledge.py"
"check_similarity.py"
"manage_daily_trigger.py"
)
echo "=== スクリプト確認 ==="
for script in "${REQUIRED_SCRIPTS[@]}"; do
if [ -f "$SKILL_BASE/scripts/$script" ]; then
echo "✅ $script"
else
echo "❌ $script"
fi
done
判断基準:
✅ → Step 2 へ進む❌ → エラーとして報告(フォールバック不要)REPO_PATH="${KNOWLEDGE_REPO_PATH:-$HOME/knowledge-base}"
if [ -d "$REPO_PATH" ]; then
echo "✅ リポジトリ存在: $REPO_PATH"
cd "$REPO_PATH" && git status
else
echo "❌ リポジトリ未設定 → Step 3 へ"
fi
まず、スキルを実行すべきか確認します(1日1回):
python "$SKILL_BASE/scripts/manage_daily_trigger.py" check
終了コードが0なら続行、1なら今日は既に実行済みです。
終了コードが1の場合(今日は既に実行済み):
注: このケースは「全ステップ必須」の例外として扱い、Step 11-2 のみ実行します。
強制再実行が必要な場合:
ユーザーに以下のコマンドを手動で実行するよう案内してください:
rm ~/.claude/daily_knowledge/last_run.txt
その後、再度このスキルを実行してください。
注意: 自律実行の原則に従い、AIエージェントが勝手にトリガーファイルを削除することは禁止です。
まだ設定していない場合、知識リポジトリをセットアップします:
オプションA: 既存のリポジトリを使用
知識リポジトリをローカルにクローン:
git clone <your-knowledge-repo-url> ~/knowledge-base
後で使用するためにリポジトリパスをメモしておく
オプションB: 新しいリポジトリを作成
新しいGitHubリポジトリを作成(例: my-knowledge-base)
ローカルにクローン:
git clone <repo-url> ~/knowledge-base
構造を初期化:
cd ~/knowledge-base
mkdir -p errors patterns commands design domain operations
git add .
git commit -m "docs: Initialize knowledge base structure"
git push origin main
設定変数(これらを覚えておいてください):
KNOWLEDGE_REPO_PATH: 知識リポジトリのローカルパス(例: ~/knowledge-base)KNOWLEDGE_REPO_URL: GitHubリポジトリのURL⚠️ 重要: このステップは内部処理のみです。スクリプトの出力(1342ファイルの候補リスト)はユーザーに表示しないでください。
前日のJSONLファイルから潜在的な知識項目を抽出:
# 昨日分を抽出(デフォルト)
python "$SKILL_BASE/scripts/extract_knowledge.py"
# または日付を指定
python "$SKILL_BASE/scripts/extract_knowledge.py" 2026-01-30
これは /tmp/knowledge_candidates_YYYY-MM-DD.json に出力されます。
候補をレビューして、何が抽出されたかを理解します。
日次まとめ用の記録: 以下の情報を記録してください(Step 11-1で使用):
project_path フィールドから取得)⚠️ 重要: このステップではサマリーのみを表示してください。候補内容の分析(JSON解析、スコア分布、高スコア候補の詳細)は一切出力しないでください。
v1.9.0以降では、候補数に応じて処理方法を最適化します。
抽出された候補(/tmp/knowledge_candidates_YYYY-MM-DD.json)を評価・処理します。
候補数に応じて最適な処理方法を選択してください:
| 候補数 | 処理方法 | 理由 |
|---|---|---|
| 0-50件 | 直接評価(5-2へスキップ) | サブエージェント不要、手動評価で十分 |
| 51-200件 | 1-2バッチのみサブエージェント | 効率と精度のバランス |
| 201-500件 | バッチサイズ150で並列処理 | 標準フロー(5-1 → 5-2) |
| 501件以上 | 事前フィルタリング → バッチ処理 | 大量候補を効率的に処理 |
対象: 201件以上の候補がある場合のみ実施
事前フィルタリング(501件以上の場合):
以下の基準で候補を絞り込みます。詳細はフィルタリング基準リファレンスを参照してください。
サブエージェント起動(Taskツール):
候補を150件ずつバッチに分割し、Taskツールで並列評価します。
# 候補を150件ずつ分割(v1.9.0: 50 → 150に拡大)
candidates = json.load(open(candidates_file))
batch_size = 150
batches = [candidates[i:i+batch_size] for i in range(0, len(candidates), batch_size)]
# 最大5並列で一次スクリーニング
for batch_id, batch in enumerate(batches[:5]): # 最大5バッチまで並列(750件まで)
Task(
subagent_type="general-purpose",
model="haiku", # コスト削減のためhaiku推奨
description=f"一次スクリーニング バッチ{batch_id+1}",
prompt=f"""
以下の知識候補を一次スクリーニングしてください。
## 判定基準
- **pass**: 詳細評価の価値あり(解決策、コード例、手順など)
- **reject**: 明らかに価値なし(断片的、意味不明)
## 候補データ
{json.dumps(batch, ensure_ascii=False, indent=2)}
## 出力形式
JSONで以下の形式で出力:
[
{{"index": 0, "decision": "pass"}},
{{"index": 1, "decision": "reject", "reason": "断片的"}}
]
"""
)
並列実行例(783件の場合):
結果集約: pass判定された候補のみを次ステップへ
対象:
Claude Code自身が詳細評価します。
評価プロセス:
| 項目 | 内容 |
|---|---|
| decision | "accept" / "reject" |
| category | "errors" / "ops" / "domain" |
| title | 知識タイトル(acceptの場合) |
| filename | ファイル名ベース(kebab-case、英語、50文字以内、日付・拡張子なし) |
| reason | 判定理由(20文字以内) |
filename 生成ルール:
採用基準(accept):
_should_excludeで自動チェック)拒否基準(reject):
カテゴリ判定基準:
/tmp/knowledge_evaluated_YYYY-MM-DD.json に保存評価結果からaccept判定のみを処理し、知識ファイルを作成します。
CANDIDATES_FILE="/tmp/knowledge_candidates_$(date -v-1d +%Y-%m-%d).json"
EVALUATION_FILE="/tmp/knowledge_evaluated_$(date -v-1d +%Y-%m-%d).json"
REPO_PATH="${KNOWLEDGE_REPO_PATH:-$HOME/knowledge-base}"
python "$SKILL_BASE/scripts/create_knowledge_files.py" \
"$CANDIDATES_FILE" \
"$EVALUATION_FILE" \
"$REPO_PATH" \
"$(date -v-1d +%Y-%m-%d)"
このスクリプトは以下を自動実行します:
処理結果の確認:
バッチ処理後、以下の簡潔なサマリーのみをユーザーに表示してください:
### 知識同期結果
✅ **処理完了**
- 対象日: 2026-01-31
- 総候補数: 150件
- 一次通過: 60件
- 作成した知識ファイル: 25件
- 採用: 25件
- 拒否: 35件
- 重複: 0件
重要: 1日の知識ファイル作成数は最大5件に制限します。
採用基準を厳格化し、以下をすべて満たす知識のみを作成してください:
| 項目 | 基準 |
|---|---|
| 文字数 | 200文字以上(_should_excludeで自動除外済み) |
| 価値キーワード | エラー、解決、手順、実装、設計などを含む |
| 汎用性 | プロジェクト固有の一時的なメモでない |
| 完全性 | 断片的でなく、完結した情報 |
5件を超える場合の優先順位:
実装方法:
accept判定された候補が5件を超える場合、以下の処理を行います:
# accept判定の候補をスコアリング(例: 文字数、キーワード出現回数)
scored_items = []
for item in accepted_items:
score = len(item["text"]) # 文字数
score += item["text"].count("エラー") * 10
score += item["text"].count("解決") * 10
score += item["text"].count("設計") * 5
scored_items.append((score, item))
# スコア降順でソート、上位5件のみ作成
top_5 = sorted(scored_items, key=lambda x: x[0], reverse=True)[:5]
日次まとめ用の記録: 以下の情報を記録してください(Step 11-1で使用):
v1.7.0以降、このステップは不要です。 Step 5のハイブリッド方式で自動的にカテゴリ分類されます。
参考: カテゴリ分類の詳細は references/categories.md を参照してください。
注意: v1.7.0以降、このステップはStep 5-3で自動実行されます。 以下はカスタマイズ時の参考情報として残しています。
新しい知識ファイルを作成する前に、重複をチェック:
from scripts.check_similarity import SimilarityChecker
checker = SimilarityChecker(threshold=0.7)
# カテゴリ内の既存ファイルと照合
category_dir = Path(KNOWLEDGE_REPO_PATH) / category
for existing_file in category_dir.glob("*.md"):
duplicates = checker.check_knowledge_file(
new_text=knowledge_content,
knowledge_file=existing_file
)
if duplicates:
# 重複を処理: スキップ、マージ、またはユーザーに確認
print(f"Found similar knowledge: {duplicates[0]['section']}")
重複処理のオプション:
日次まとめ用の記録: 以下の情報を記録してください(Step 11-1で使用):
注意: v1.7.0以降、このステップはStep 5-3で自動実行されます。 以下はカスタマイズ時の参考情報として残しています。
重複していない知識について:
from datetime import datetime
from scripts.categorize_knowledge import KnowledgeCategorizer
categorizer = KnowledgeCategorizer(KNOWLEDGE_REPO_PATH)
date = datetime.now().strftime("%Y-%m-%d")
filename = categorizer.generate_filename(
title=knowledge_title,
date=date
)
file_path = categorizer.create_knowledge_file(
category=category,
filename=filename,
title=knowledge_title,
content=knowledge_content,
tags=knowledge_tags,
metadata={
"date": date,
"source": "conversation",
}
)
print(f"Created: {file_path}")
形式の詳細は references/knowledge_format.md を参照してください。
日次まとめ用の記録: 以下の情報を記録してください(Step 11-1で使用):
すべての知識ファイルを作成した後:
cd $KNOWLEDGE_REPO_PATH
# 変更をステージング
git add errors/ patterns/ commands/ design/ domain/ operations/
# コミットメッセージ用のユーザー名を取得
USERNAME=$(git config user.name)
DATE=$(date +%Y-%m-%d)
# 標準形式でコミット
git commit -m "docs: $USERNAME $DATE
Daily knowledge sync from Claude Code conversations.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
# mainブランチにプッシュ
git push origin main
正常に完了した後、今日を処理済みとしてマーク:
python "$SKILL_BASE/scripts/manage_daily_trigger.py" mark
これにより、明日まで再実行されないようになります。
お疲れさまでした!知識同期が完了しました。
Step 4-8で記録した情報を使用して、日次まとめを出力してください。
参照: references/daily_summary_format.md のテンプレートとタスク推測ロジックを使用してください。
出力内容:
重要: ユーザーへの質問は禁止。Step 4-8の記録データのみから自律的に生成してください。
最後に、世界のコーヒーから今日の1杯をご紹介します。
参照: references/coffee_output_format.md の出力フォーマットを使用してください。
references/coffee_beans.md からランダムに1つ選んで紹介してください。
~/.bashrc または ~/.zshrc に設定できます:
export KNOWLEDGE_REPO_PATH="$HOME/knowledge-base"
export KNOWLEDGE_REPO_URL="https://github.com/username/knowledge-base"
export KNOWLEDGE_SIMILARITY_THRESHOLD="0.7" # デフォルト: 0.7
~/.claude/daily_knowledge/last_run.txt: 最終実行日を追跡knowledge-base/
├── errors/
│ ├── README.md
│ ├── 2026-01-31_fix_import_error.md
│ └── 2026-01-30_resolve_cors_issue.md
├── patterns/
│ ├── README.md
│ └── 2026-01-31_dependency_injection.md
├── commands/
│ ├── README.md
│ └── 2026-01-31_git_rebase_onto.md
├── design/
│ ├── README.md
│ └── 2026-01-30_microservices_design.md
├── domain/
│ ├── README.md
│ └── 2026-01-29_payment_workflow.md
└── operations/
├── README.md
└── 2026-01-31_docker_deployment.md
SimilarityCheckerを作成する際に閾値を編集:
# より厳格(検出される重複が少ない)
checker = SimilarityChecker(threshold=0.8)
# より寛容(検出される重複が多い)
checker = SimilarityChecker(threshold=0.6)
scripts/categorize_knowledge.py を編集してカスタムカテゴリを追加:
CATEGORY_KEYWORDS = {
# 既存のカテゴリ...
"security": ["security", "vulnerability", "auth", "encryption"],
"performance": ["performance", "optimization", "speed", "memory"],
}
その後、リポジトリにディレクトリを作成してください。
特定のプロジェクトを抽出から除外するには、extract_knowledge.py を変更:
def find_jsonl_files(self, target_date: str) -> list[Path]:
jsonl_files = []
# 特定のディレクトリをスキップ
exclude_dirs = ["test-project", "scratch"]
for jsonl_file in self.projects_dir.rglob("*.jsonl"):
if any(excl in str(jsonl_file) for excl in exclude_dirs):
continue
jsonl_files.append(jsonl_file)
return jsonl_files
トリガー状態を確認:
python "$SKILL_BASE/scripts/manage_daily_trigger.py" status
必要に応じてリセット:
rm ~/.claude/daily_knowledge/last_run.txt
JSONLファイルが存在することを確認:
ls -la ~/.claude/projects/*/
日付形式を確認:
python "$SKILL_BASE/scripts/extract_knowledge.py" 2026-01-31
scikit-learnがインストールされていない場合:
pip install scikit-learn
scikit-learnが利用できない場合、スクリプトは単純な単語ベースの類似度にフォールバックします。
認証されていることを確認:
gh auth status # GitHub CLI用
# またはSSHキーを設定
リモートに変更がある場合、プッシュ前にプル:
cd $KNOWLEDGE_REPO_PATH
git pull origin main --rebase
git push origin main
カテゴリはキーワードマッチングに基づいています。自動分類が失敗する場合:
categorize_knowledge.py にカスタムキーワードを追加このスキルは以下と相性が良いです:
詳細な形式仕様については、同梱のリファレンスファイルを参照してください:
v1.9.0 で追加: 事前フィルタリング(Step 5-1)の判断基準を明文化
| パターン | 例 | 理由 |
|---|---|---|
| スキル自身の実行ログ | Step 5の結果<br>知識同期結果<br>コーヒー豆<br>📊 日次知識まとめ | メタ的な内容、知識として価値なし |
| 完了報告のみ | ✅ 実装完了<br>処理完了しました<br>タスク完了 | 具体的な内容を含まない |
| システムメッセージ | <command-name><br>local-command-caveat<br>system-reminder | 会話制御用、知識として無意味 |
| 断片的な会話 | はい<br>ありがとうございます<br>確認しました | コンテキスト不足 |
| 短すぎるテキスト | 100文字未満 | 情報量が少なすぎる |
| パターン | 例 | 理由 |
|---|---|---|
| エラー解決手順 | 原因まとめ<br>解決方法<br>エラー: 〜 | 具体的な技術知識 |
| 改善計画 | 改善計画サマリー<br>方針:<br>設計判断 | 設計・意思決定の記録 |
| コード例 | ```python<br>実装例:<br>コード: | 実用的な知識 |
| 具体的な手順 | Step 1: 〜<br>手順:<br>コマンド: | 再現可能な知識 |
| 原因分析 | 問題の検出<br>根本原因<br>なぜ〜 | トラブルシューティング知見 |
注: この基準は Step 5-1 の事前フィルタリング専用です。Step 5-2 の精密評価では「迷ったら追加」を優先してください。
以下の優先順位で判断してください:
事前フィルタリングで迷った場合: 除外(精密評価で再判定できるため)
破壊的変更:
改善内容:
YYYY-MM-DD_snake_case.md)categorizer.generate_filename 使用で記号・絵文字を正しく処理期待効果:
改善内容:
期待効果:
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.