agent-memory-skills について
タスク結果から学習しつつ、静的な設定ファイルを変更しないエージェント開発者向けのスキルです。ChromaDBによるメモリ、自己評価、性能追跡、保守のワークフローを説明します。
主な機能
- 01静的設定と動的メモリの分離
- 02ChromaDBへの改善知見の保存
- 03タスクに応じた知見の検索
- 04自己評価結果の記録
- 05性能追跡とメモリ保守
活用シーン
- 01過去のタスク知見の再利用
- 02エージェントのタスク結果の評価
- 03改善知見の効果の監視
MCP 対応
このスキルはMCPツールを介したChromaDBの利用を説明します。コレクション管理、ドキュメントの保存と検索、評価データへのアクセスが含まれます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kimasplund/ claude_cognitive_reasoning --skill agent-memory-skillsインストール後、Claude Code で/agent-memory-skillsを入力して読み込まれたか確認します。
詳細
エージェントのメモリと継続的な自己改善のスキル
目的: エージェントが経験から学び、継続的に自己評価を行い、静的な設定ファイルとは別の ChromaDB コレクションに改善点を保存できるようにします。
理念: 能力は静的な設定(.md)に、学習した経験は動的なメモリ(ChromaDB)に保存します。
アーキテクチャの概要
2 層モデル
┌──────────────────────────────────────────────────────────┐
│ Layer 1: Static Agent Configuration (.md files) │
│ - Core capabilities, workflows, prompt templates │
│ - Human-designed, expert-reviewed │
│ - Version controlled (Git) │
│ - Changes: Infrequent (weeks/months) │
└──────────────────────────────────────────────────────────┘
↓ loads at runtime
┌──────────────────────────────────────────────────────────┐
│ Layer 2: Dynamic Agent Memory (ChromaDB) │
│ - Learned improvements, preferences, patterns │
│ - Self-evaluation results, performance metrics │
│ - Agent-managed, auto-updated │
│ - Changes: Continuous (every task completion) │
└──────────────────────────────────────────────────────────┘
メモリコレクションの構成
各エージェントには、3 つの ChromaDB コレクションが用意されます。
agent_{name}_improvements: 学習したパターンと戦略agent_{name}_evaluations: 自己評価の結果agent_{name}_performance: 経時的な指標
コレクション 1: 改善点の保存
改善点を保存するタイミング
次の場合に保存します。
- ✅ 明確な学びを得てタスクを正常に完了した
- ✅ ユーザーからのフィードバックを受け取った(肯定的または否定的)
- ✅ 新しいパターンを発見した(静的な設定にはない)
- ✅ 信頼度スコアが 0.7 以上(信頼度の高い学習)
次の場合は保存しません。
- ❌ 明確な教訓がないままタスクに失敗した
- ❌ 既存のパターンに従う定型的な処理
- ❌ 信頼度の低い観察結果(0.5 未満)
改善点のスキーマ
const improvement = {
// Document (semantic search target)
document: `
When user asks for "latest" information, prioritize sources from 2025
over 2024. Use date filters: where: { year: { "$gte": 2025 } }
`,
// ID (unique, timestamp-based)
id: `improvement_research_${Date.now()}`,
// Metadata (for filtering)
metadata: {
agent_name: "research-specialist",
category: "search_strategy",
learned_from: "feedback_2025-11-18",
confidence: 0.85,
success_rate: null, // Will be updated with usage
usage_count: 0,
created_at: "2025-11-18T15:30:00Z",
last_used: null,
tags: ["recency", "date_filtering", "search"]
}
};
保存関数
async function storeImprovement(agentName, improvement) {
const collectionName = `agent_${agentName}_improvements`;
// Ensure collection exists
const collections = await mcp__chroma__list_collections();
if (!collections.includes(collectionName)) {
await mcp__chroma__create_collection({
collection_name: collectionName,
embedding_function_name: "default",
metadata: {
agent: agentName,
purpose: "learned_improvements",
created_at: new Date().toISOString()
}
});
}
// Store improvement
await mcp__chroma__add_documents({
collection_name: collectionName,
documents: [improvement.document],
ids: [improvement.id],
metadatas: [improvement.metadata]
});
console.log(`✅ Stored improvement for ${agentName}: ${improvement.category}`);
}
タスク実行前の取得
async function retrieveRelevantImprovements(agentName, taskDescription, limit = 5) {
const collectionName = `agent_${agentName}_improvements`;
try {
const results = await mcp__chroma__query_documents({
collection_name: collectionName,
query_texts: [taskDescription],
n_results: limit,
where: {
"$and": [
{ "confidence": { "$gte": 0.7 } }, // High confidence only
{ "success_rate": { "$gte": 0.6 } } // Or null (new, untested)
]
},
include: ["documents", "metadatas", "distances"]
});
// Filter by relevance (distance < 0.4)
const relevant = results.ids[0]
.map((id, idx) => ({
id: id,
improvement: results.documents[0][idx],
metadata: results.metadatas[0][idx],
relevance: 1 - results.distances[0][idx]
}))
.filter(item => item.relevance > 0.6);
return relevant;
} catch (error) {
console.log(`No improvements found for ${agentName} (collection may not exist yet)`);
return [];
}
}
コレクション 2: 自己評価の保存
継続的な自己評価のパターン
すべてのタスクの後に、エージェントは自己評価を実行します。
async function selfEvaluate(agentName, taskContext, taskResult) {
const evaluation = {
// What was the task?
task_description: taskContext.description,
task_type: taskContext.type, // "research", "code", "debug", etc.
// How did I perform?
success: taskResult.success, // true/false
quality_score: taskResult.quality, // 0-100
time_taken_ms: taskResult.duration,
tokens_used: taskResult.tokens,
// What went well?
strengths: identifyStrengths(taskResult),
// What went poorly?
weaknesses: identifyWeaknesses(taskResult),
// What did I learn?
insights: extractInsights(taskResult),
// Metadata
timestamp: new Date().toISOString(),
context: taskContext.additionalContext
};
// Store evaluation
await storeEvaluation(agentName, evaluation);
// If strong learning → store as improvement
if (evaluation.insights.length > 0 && evaluation.quality_score >= 70) {
for (const insight of evaluation.insights) {
await storeImprovement(agentName, {
document: insight.description,
id: `improvement_${agentName}_${Date.now()}`,
metadata: {
agent_name: agentName,
category: insight.category,
learned_from: `task_${evaluation.timestamp}`,
confidence: insight.confidence,
created_at: evaluation.timestamp
}
});
}
}
return evaluation;
}
function identifyStrengths(taskResult) {
const strengths = [];
if (taskResult.time_taken_ms < taskResult.expected_duration) {
strengths.push("Completed faster than expected");
}
if (taskResult.validation_passed) {
strengths.push("All validations passed");
}
if (taskResult.user_feedback?.positive) {
strengths.push(taskResult.user_feedback.comment);
}
return strengths;
}
function identifyWeaknesses(taskResult) {
const weaknesses = [];
if (taskResult.errors.length > 0) {
weaknesses.push(`Encountered ${taskResult.errors.length} errors`);
}
if (taskResult.retries > 0) {
weaknesses.push(`Required ${taskResult.retries} retries`);
}
if (taskResult.user_feedback?.negative) {
weaknesses.push(taskResult.user_feedback.comment);
}
return weaknesses;
}
function extractInsights(taskResult) {
const insights = [];
// Example: Learned a new error handling pattern
if (taskResult.errors.some(e => e.type === "ConnectionTimeout") && taskResult.success) {
insights.push({
description: "When encountering ConnectionTimeout, retry with exponential backoff (3 attempts)",
category: "error_handling",
confidence: 0.8
});
}
// Example: Discovered optimal parameter
if (taskResult.optimization_found) {
insights.push({
description: taskResult.optimization_found.description,
category: "optimization",
confidence: 0.9
});
}
return insights;
}
評価の保存
async function storeEvaluation(agentName, evaluation) {
const collectionName = `agent_${agentName}_evaluations`;
await mcp__chroma__add_documents({
collection_name: collectionName,
documents: [
`Task: ${evaluation.task_description}. Result: ${evaluation.success ? 'Success' : 'Failure'}. ` +
`Quality: ${evaluation.quality_score}/100. Insights: ${evaluation.insights.map(i => i.description).join('; ')}`
],
ids: [`eval_${Date.now()}`],
metadatas: [{
agent_name: agentName,
task_type: evaluation.task_type,
success: evaluation.success,
quality_score: evaluation.quality_score,
time_taken_ms: evaluation.time_taken_ms,
tokens_used: evaluation.tokens_used,
strengths_count: evaluation.strengths.length,
weaknesses_count: evaluation.weaknesses.length,
insights_count: evaluation.insights.length,
timestamp: evaluation.timestamp
}]
});
}
コレクション 3: パフォーマンス指標
パフォーマンスの集計と追跡
async function trackPerformanceMetrics(agentName) {
const collectionName = `agent_${agentName}_evaluations`;
// Retrieve last 100 evaluations
const recentEvals = await mcp__chroma__get_documents({
collection_name: collectionName,
limit: 100,
include: ["metadatas"],
where: {
"timestamp": { "$gte": thirtyDaysAgo() }
}
});
const metrics = {
agent_name: agentName,
period: "30_days",
// Success metrics
total_tasks: recentEvals.metadatas.length,
successful_tasks: recentEvals.metadatas.filter(m => m.success).length,
success_rate: 0,
// Quality metrics
avg_quality: average(recentEvals.metadatas.map(m => m.quality_score)),
quality_trend: calculateTrend(recentEvals.metadatas, 'quality_score'),
// Efficiency metrics
avg_time_ms: average(recentEvals.metadatas.map(m => m.time_taken_ms)),
avg_tokens: average(recentEvals.metadatas.map(m => m.tokens_used)),
// Learning metrics
total_insights: sum(recentEvals.metadatas.map(m => m.insights_count)),
improvements_stored: await countImprovements(agentName, thirtyDaysAgo()),
// Trend
improving: false, // Will calculate
timestamp: new Date().toISOString()
};
metrics.success_rate = metrics.successful_tasks / metrics.total_tasks;
// Is agent improving over time?
metrics.improving = metrics.quality_trend > 0 && metrics.success_rate > 0.7;
// Store aggregated metrics
const perfCollection = `agent_${agentName}_performance`;
await mcp__chroma__add_documents({
collection_name: perfCollection,
documents: [
`Performance snapshot: ${metrics.success_rate * 100}% success, ` +
`quality ${metrics.avg_quality}/100, ${metrics.improvements_stored} improvements`
],
ids: [`perf_${Date.now()}`],
metadatas: [metrics]
});
return metrics;
}
function calculateTrend(evaluations, metric) {
if (evaluations.length < 2) return 0;
const recent = evaluations.slice(0, Math.floor(evaluations.length / 2));
const older = evaluations.slice(Math.floor(evaluations.length / 2));
const recentAvg = average(recent.map(e => e[metric]));
const olderAvg = average(older.map(e => e[metric]));
return recentAvg - olderAvg; // Positive = improving
}
完全なワークフロー: メモリを持つエージェント
エージェントの初期化時
async function initializeAgentMemory(agentName) {
// Load static configuration from .md file
const staticConfig = await loadAgentConfig(`/agents/${agentName}.md`);
// Load dynamic improvements from ChromaDB
const improvements = await retrieveAllImprovements(agentName);
// Combine static + dynamic
return {
...staticConfig,
learned_improvements: improvements,
memory_enabled: true
};
}
タスク実行前
async function executeTaskWithMemory(agentName, task) {
// Step 1: Retrieve relevant past learnings
const relevantImprovements = await retrieveRelevantImprovements(
agentName,
task.description,
5 // top 5 improvements
);
console.log(`📚 Retrieved ${relevantImprovements.length} relevant improvements`);
// Step 2: Execute task with improvements as context
const taskResult = await executeTask(task, {
improvements: relevantImprovements.map(i => i.improvement)
});
// Step 3: Self-evaluate
const evaluation = await selfEvaluate(agentName, task, taskResult);
// Step 4: Update improvement usage stats
for (const improvement of relevantImprovements) {
await updateImprovementUsage(agentName, improvement.id, taskResult.success);
}
// Step 5: Track performance (daily)
if (shouldRunDailyMetrics()) {
await trackPerformanceMetrics(agentName);
}
return taskResult;
}
改善点の統計を更新
async function updateImprovementUsage(agentName, improvementId, wasSuccessful) {
const collectionName = `agent_${agentName}_improvements`;
// Get current improvement
const current = await mcp__chroma__get_documents({
collection_name: collectionName,
ids: [improvementId]
});
const metadata = current.metadatas[0];
// Update statistics
const newUsageCount = (metadata.usage_count || 0) + 1;
const successCount = (metadata.success_count || 0) + (wasSuccessful ? 1 : 0);
const newSuccessRate = successCount / newUsageCount;
// Update metadata
await mcp__chroma__update_documents({
collection_name: collectionName,
ids: [improvementId],
metadatas: [{
...metadata,
usage_count: newUsageCount,
success_count: successCount,
success_rate: newSuccessRate,
last_used: new Date().toISOString()
}]
});
// If improvement consistently fails (< 40% success after 10+ uses), mark as deprecated
if (newUsageCount >= 10 && newSuccessRate < 0.4) {
console.log(`⚠️ Improvement ${improvementId} has low success rate (${newSuccessRate}), marking deprecated`);
await mcp__chroma__update_documents({
collection_name: collectionName,
ids: [improvementId],
metadatas: [{
...metadata,
deprecated: true,
deprecated_reason: "Low success rate after extensive usage"
}]
});
}
}
継続的な評価スケジュール
評価の頻度
- すべてのタスクの後: 評価を保存します(軽量)
- 毎日: パフォーマンス指標を計算します(集計)
- 毎週: 改善点の上位/下位を確認し、傾向を特定します
- 毎月: 古い評価をアーカイブし、非推奨の改善点を整理します
定期メンテナンス
async function dailyAgentMaintenance(agentName) {
console.log(`🔧 Running daily maintenance for ${agentName}...`);
// 1. Track performance metrics
const metrics = await trackPerformanceMetrics(agentName);
// 2. Identify underperforming improvements
const deprecatedCount = await deprecateFailingImprovements(agentName);
// 3. Promote high-performing improvements (boost confidence)
const promotedCount = await promoteSuccessfulImprovements(agentName);
console.log(`
Metrics: ${metrics.success_rate * 100}% success, quality ${metrics.avg_quality}/100
Deprecated: ${deprecatedCount} low-performing improvements
Promoted: ${promotedCount} high-performing improvements
`);
}
async function deprecateFailingImprovements(agentName) {
const collectionName = `agent_${agentName}_improvements`;
const allImprovements = await mcp__chroma__get_documents({
collection_name: collectionName,
where: {
"$and": [
{ "usage_count": { "$gte": 10 } },
{ "success_rate": { "$lt": 0.4 } },
{ "deprecated": { "$ne": true } }
]
}
});
for (const id of allImprovements.ids) {
await mcp__chroma__update_documents({
collection_name: collectionName,
ids: [id],
metadatas: [{
...allImprovements.metadatas[id],
deprecated: true
}]
});
}
return allImprovements.ids.length;
}
async function promoteSuccessfulImprovements(agentName) {
const collectionName = `agent_${agentName}_improvements`;
const highPerformers = await mcp__chroma__get_documents({
collection_name: collectionName,
where: {
"$and": [
{ "usage_count": { "$gte": 20 } },
{ "success_rate": { "$gte": 0.85 } }
]
}
});
for (const [idx, id] of highPerformers.ids.entries()) {
const metadata = highPerformers.metadatas[idx];
await mcp__chroma__update_documents({
collection_name: collectionName,
ids: [id],
metadatas: [{
...metadata,
confidence: Math.min(0.95, metadata.confidence + 0.05), // Boost confidence (max 0.95)
promoted: true
}]
});
}
return highPerformers.ids.length;
}
エージェントメモリのダッシュボード
パフォーマンスの概要
async function getAgentMemoryDashboard(agentName) {
const dashboard = {
agent: agentName,
timestamp: new Date().toISOString(),
// Improvements
total_improvements: await countDocuments(`agent_${agentName}_improvements`),
active_improvements: await countDocuments(`agent_${agentName}_improvements`, {
"deprecated": { "$ne": true }
}),
deprecated_improvements: await countDocuments(`agent_${agentName}_improvements`, {
"deprecated": true
}),
// Evaluations
total_evaluations: await countDocuments(`agent_${agentName}_evaluations`),
recent_success_rate: await calculateRecentSuccessRate(agentName, 30), // Last 30 days
// Performance
latest_metrics: await getLatestMetrics(agentName),
// Top improvements (by success rate)
top_improvements: await getTopImprovements(agentName, 5),
// Learning rate
improvements_last_7_days: await countDocuments(`agent_${agentName}_improvements`, {
"created_at": { "$gte": sevenDaysAgo() }
})
};
return dashboard;
}
グローバルとプロジェクトのメモリスコープ
2 つのスコープを持つアーキテクチャ
┌─────────────────────────────────────────────────────────┐
│ Global Memory (~/.claude/chroma_data) │
│ - Cross-project patterns that apply everywhere │
│ - Reusable learnings (search strategies, code quality) │
│ - Collections: agent_{name}_improvements │
│ - Persists: Forever (user's institutional knowledge) │
└─────────────────────────────────────────────────────────┘
↓ query both
┌─────────────────────────────────────────────────────────┐
│ Project Memory (.claude/chroma_data) │
│ - Project-specific patterns (this codebase's style) │
│ - Domain knowledge (this API, this architecture) │
│ - Collections: agent_{name}_project_{hash}_improvements │
│ - Persists: Project lifetime │
└─────────────────────────────────────────────────────────┘
メモリスコープの選択
function selectMemoryScope(insight) {
// Global: Universal patterns
if (insight.category in ['search_strategy', 'error_handling', 'code_quality',
'testing_patterns', 'documentation_style']) {
return 'global';
}
// Project: Codebase-specific patterns
if (insight.category in ['naming_conventions', 'architecture_patterns',
'api_usage', 'domain_terminology']) {
return 'project';
}
// Default: Store in both if uncertain
return 'both';
}
async function storeWithScope(agentName, improvement, scope = 'global') {
const globalCollection = `agent_${agentName}_improvements`;
const projectCollection = `agent_${agentName}_project_${getProjectHash()}_improvements`;
if (scope === 'global' || scope === 'both') {
await storeImprovement(globalCollection, improvement);
}
if (scope === 'project' || scope === 'both') {
await storeImprovement(projectCollection, improvement);
}
}
async function retrieveWithScope(agentName, taskDescription) {
const globalResults = await retrieveRelevantImprovements(
`agent_${agentName}_improvements`, taskDescription, 3
);
const projectResults = await retrieveRelevantImprovements(
`agent_${agentName}_project_${getProjectHash()}_improvements`, taskDescription, 3
);
// Merge and deduplicate, project-specific takes priority
return mergeImprovements(projectResults, globalResults);
}
スリムなエージェント統合テンプレート
エージェントはメモリコードを重複させずに、このスキルを参照してください。
## Memory Configuration (uses agent-memory-skills)
**Collections**:
- Global: `agent_{name}_improvements`, `agent_{name}_evaluations`, `agent_{name}_performance`
- Project: `agent_{name}_project_{hash}_improvements` (if project-specific learning)
**Quality Criteria** (agent-specific):
- [criterion_1]: weight X%
- [criterion_2]: weight Y%
- [criterion_3]: weight Z%
**Insight Categories** (agent-specific):
- [category_1]: Description of when this applies
- [category_2]: Description of when this applies
**Memory Workflow**:
1. **Phase 0.5 (Before Task)**: Retrieve relevant improvements
- Call: `retrieveWithScope(agentName, taskDescription)`
- Apply retrieved patterns to current task
2. **Phase N.5 (After Task)**: Self-evaluate and store
- Assess quality using agent-specific criteria
- Extract insights with agent-specific categories
- Store improvements if quality ≥ 70
- Update usage statistics for retrieved improvements
例: スリムな Code-Finder のメモリセクション
## Memory Configuration (uses agent-memory-skills)
**Collections**: `agent_code_finder_improvements`, `agent_code_finder_evaluations`
**Quality Criteria**:
- Result accuracy: 30%
- Search confidence: 25%
- Strategy completeness: 20%
- Search efficiency: 15%
- Coverage assessment: 10%
**Insight Categories**:
- `search_strategy`: Effective search patterns for code types
- `file_patterns`: File naming/location patterns that work
- `naming_conventions`: Casing and naming variants that help
- `query_optimization`: Query formulations that improve results
**Memory Workflow**:
- Phase 0.5: Retrieve search strategy improvements before search
- Phase 4.5: Evaluate search quality, store effective patterns
メモリ統合との連携
個々のエージェントのメモリは、memory-consolidation-agent によって定期的に統合すると効果的です。このセクションでは、エージェントが統合システムとどのように連携するかを説明します。
統合に対応したメタデータ
改善点を保存する際は、統合を可能にするメタデータを含めてください。
const improvementMetadata = {
// Standard fields
agent_name: agentName,
category: insight.category,
confidence: insight.confidence,
created_at: timestamp,
usage_count: 0,
success_rate: null,
// Consolidation-ready fields
cross_validated: false, // Set true when validated across agents
source: 'self', // 'self' | 'system_principles' | 'transferred'
original_id: null, // If transferred from another agent
consolidation_eligible: true, // Can be used for schema formation
context_tags: ['domain', 'tech'], // Help consolidation group related patterns
deprecated: false,
deprecated_reason: null
};
転送された知識の受け取り
エージェントは統合システムから改善点を受け取る場合があります。適切に処理してください。
async function retrieveWithTransfers(agentName, taskDescription) {
const results = await mcp__chroma__query_documents({
collection_name: `agent_${agentName}_improvements`,
query_texts: [taskDescription],
n_results: 10,
where: { "deprecated": { "$ne": true } }
});
// Prioritize cross-validated and transferred improvements
return results.ids[0]
.map((id, idx) => ({
id: id,
improvement: results.documents[0][idx],
metadata: results.metadatas[0][idx],
relevance: 1 - results.distances[0][idx],
// Boost score for cross-validated patterns
priority: results.metadatas[0][idx].cross_validated ? 1.2 : 1.0
}))
.filter(item => item.relevance > 0.6)
.sort((a, b) => (b.relevance * b.priority) - (a.relevance * a.priority));
}
統合フック
エージェントは、統合システム向けに次のフックを公開してください。
// Hook: Get all improvements for consolidation analysis
async function getConsolidatableImprovements(agentName) {
return await mcp__chroma__get_documents({
collection_name: `agent_${agentName}_improvements`,
where: { "consolidation_eligible": true, "deprecated": { "$ne": true } },
include: ["documents", "metadatas"]
});
}
// Hook: Mark improvement as cross-validated
async function markCrossValidated(agentName, improvementId, validatingAgents) {
const current = await mcp__chroma__get_documents({
collection_name: `agent_${agentName}_improvements`,
ids: [improvementId]
});
await mcp__chroma__update_documents({
collection_name: `agent_${agentName}_improvements`,
ids: [improvementId],
metadatas: [{
...current.metadatas[0],
cross_validated: true,
validating_agents: validatingAgents.join(','),
cross_validated_at: new Date().toISOString()
}]
});
}
// Hook: Receive transferred principle from consolidation
async function receiveTransferredPrinciple(agentName, principle, sourceMetadata) {
await mcp__chroma__add_documents({
collection_name: `agent_${agentName}_improvements`,
documents: [principle],
ids: [`transferred_${sourceMetadata.original_id}_${Date.now()}`],
metadatas: [{
agent_name: agentName,
category: sourceMetadata.category,
confidence: sourceMetadata.confidence * 0.9, // Discount for transfer
source: 'system_principles',
original_id: sourceMetadata.original_id,
cross_validated: true,
transferred_at: new Date().toISOString(),
usage_count: 0,
success_rate: null,
consolidation_eligible: false // Don't re-consolidate transferred items
}]
});
}
統合スケジュール
| 頻度 | 実行内容 | エージェントへの影響 |
|---|---|---|
| 毎日 | 競合のスキャン、異常の検出 | フラグが付いた競合の確認が必要になる場合があります |
| 毎週 | スキーマの形成、知識の転送 | 転送された新しい原則を受け取る場合があります |
| 毎月 | 全体の最適化、整理 | 古い改善点がアーカイブされる場合があります |
成功基準
次の条件を満たす場合、エージェントのメモリシステムは正常に機能しています。
- ✅ 改善点の保存: エージェントが各タスクから学習している(週 10 件以上の改善点)
- ✅ 関連性の高い取得: 取得した改善点が現在のタスクに合致している(関連度 80% 超)
- ✅ 成功率の追跡: 改善点の使用統計が正しく更新される
- ✅ パフォーマンスの向上: 30 日間で品質の傾向が上向いている
- ✅ 自己評価: タスク完了後に毎回実行される
- ✅ 非推奨化の機能: パフォーマンスの低い改善点に非推奨のマークが付く
- ✅ 昇格の機能: パフォーマンスの高い改善点が強化される
- ✅ .md ファイルを変更しない: 静的な設定は変更せず、メモリは ChromaDB に保存される
比較:.md と ChromaDB
| 要件 | .md ファイルの変更 | ChromaDB メモリ |
|---|---|---|
| 学習内容の保存 | ❌ 手動編集 | ✅ 自動 |
| 同時アクセス | ❌ 競合状態 | ✅ 安全 |
| セマンティック検索 | ❌ キーワードのみ | ✅ ベクトル類似度 |
| 成功の追跡 | ❌ 手動 | ✅ 統計を自動取得 |
| ロールバック | ⚠️ Git 履歴 | ✅ タイムスタンプでクエリ |
| A/B テスト | ❌ 破壊的 | ✅ コレクションを複製 |
| 人によるレビュー | ✅ Git の差分 | ⚠️ エクスポートが必要 |
| バージョン管理 | ✅ 標準機能 | ⚠️ 手動 |
推奨:動的メモリには ChromaDB、静的設定には .md を使用してください。
バージョン:1.0 作成日:2025-11-18 目的:ChromaDB メモリを使用して、エージェントの継続的な自己改善を可能にします 依存関係:chromadb-integration-skills 適用対象:すべてのエージェント(調査、開発、トレーディング、法務など)