完成任务16:编写 04_长期发展/环境保护.md
This commit is contained in:
136
skills/self-improving-agent/README.md
Normal file
136
skills/self-improving-agent/README.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# Self-Improving Agent
|
||||
|
||||
A universal self-improvement system that learns from ALL skill experiences and continuously updates the codebase.
|
||||
|
||||
## Overview
|
||||
|
||||
This agent learns from **every skill interaction** to achieve true lifelong learning. It implements a complete feedback loop with multi-memory architecture, self-correction, and evolution markers.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Multi-Memory Architecture**: Semantic + Episodic + Working memory
|
||||
- **Universal Learning**: Learns from ALL skills, not just PRDs
|
||||
- **Pattern Extraction**: Converts experiences into reusable patterns
|
||||
- **Self-Correction**: Fixes skill guidance when errors occur
|
||||
- **Self-Validation**: Periodically verifies skill accuracy
|
||||
- **Automatic Updates**: Updates related skills based on learned patterns
|
||||
- **Confidence Tracking**: Measures pattern reliability over time
|
||||
- **Human-in-the-Loop**: Collects feedback to validate improvements
|
||||
|
||||
## Memory System
|
||||
|
||||
```
|
||||
~/.claude/memory/
|
||||
├── semantic/ # Patterns, rules, best practices
|
||||
├── episodic/ # Specific experiences and episodes
|
||||
└── working/ # Current session context
|
||||
```
|
||||
|
||||
## How It Works
|
||||
|
||||
```
|
||||
Any Skill Completes
|
||||
↓
|
||||
Extract Experience → Identify Patterns → Update Skills → Consolidate Memory
|
||||
↓ ↓ ↓ ↓
|
||||
What happened? What can we reuse? Which skills? Track metrics
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
ln -s ~/path/to/agent-playbook/skills/self-improving-agent ~/.claude/skills/self-improving-agent
|
||||
```
|
||||
|
||||
## Hooks (Optional)
|
||||
|
||||
Wire hooks to capture errors and session-end signals:
|
||||
|
||||
```json
|
||||
{
|
||||
"hooks": {
|
||||
"PreToolUse": [
|
||||
{
|
||||
"matcher": "Bash|Write|Edit",
|
||||
"hooks": [
|
||||
{ "type": "command", "command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/pre-tool.sh \"$TOOL_NAME\" \"$TOOL_INPUT\"" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"PostToolUse": [
|
||||
{
|
||||
"matcher": "Bash",
|
||||
"hooks": [
|
||||
{ "type": "command", "command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/post-bash.sh \"$TOOL_OUTPUT\" \"$EXIT_CODE\"" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"Stop": [
|
||||
{
|
||||
"matcher": "",
|
||||
"hooks": [
|
||||
{ "type": "command", "command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/session-end.sh" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Triggering
|
||||
|
||||
### Automatic
|
||||
After ANY skill completes:
|
||||
- prd-planner
|
||||
- code-reviewer
|
||||
- debugger
|
||||
- refactoring-specialist
|
||||
- etc.
|
||||
|
||||
### Manual
|
||||
```
|
||||
"自我进化"
|
||||
"self-improve"
|
||||
"分析今天的经验"
|
||||
"总结这次教训"
|
||||
```
|
||||
|
||||
## Example Learning
|
||||
|
||||
### Episode
|
||||
```yaml
|
||||
Skill: debugger
|
||||
Situation: Form submission doesn't refresh data
|
||||
Root Cause: Empty callback function
|
||||
Pattern: Always verify callbacks have implementations
|
||||
Confidence: 0.95 → Updates: debugger, prd-implementation-precheck
|
||||
```
|
||||
|
||||
### Skill Update
|
||||
```markdown
|
||||
## Auto-Update (2025-01-11)
|
||||
|
||||
### Pattern Added
|
||||
**Callback Verification**: Always verify that callback functions
|
||||
passed as props are not empty and actually execute logic.
|
||||
|
||||
**Source**: Episode ep-2025-01-11-003 (3 occurrences)
|
||||
**Action**: Added to debugger checklist
|
||||
```
|
||||
|
||||
## Research Basis
|
||||
|
||||
- [SimpleMem: Efficient Lifelong Memory](https://arxiv.org/html/2601.02553v1)
|
||||
- [ACM Memory Mechanisms Survey](https://dl.acm.org/doi/10.1145/3748302)
|
||||
- [Lifelong Learning of LLM Agents](https://arxiv.org/html/2501.07278v1)
|
||||
|
||||
## Templates
|
||||
|
||||
Reusable templates live in `skills/self-improving-agent/templates`:
|
||||
- `pattern-template.md`
|
||||
- `correction-template.md`
|
||||
- `validation-template.md`
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
408
skills/self-improving-agent/SKILL.md
Normal file
408
skills/self-improving-agent/SKILL.md
Normal file
@@ -0,0 +1,408 @@
|
||||
---
|
||||
name: self-improving-agent
|
||||
description: A universal self-improving agent that learns from ALL skill experiences. Uses multi-memory architecture (semantic + episodic + working) to continuously evolve the codebase. Auto-triggers on skill completion/error with hooks-based self-correction.
|
||||
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch
|
||||
metadata:
|
||||
hooks:
|
||||
before_start:
|
||||
- trigger: session-logger
|
||||
mode: auto
|
||||
context: "Start {skill_name}"
|
||||
after_complete:
|
||||
- trigger: create-pr
|
||||
mode: ask_first
|
||||
condition: skills_modified
|
||||
reason: "Submit improvements to repository"
|
||||
- trigger: session-logger
|
||||
mode: auto
|
||||
context: "Self-improvement cycle complete"
|
||||
# Note: on_error intentionally only logs to session to avoid infinite recursion
|
||||
# Self-correction is triggered by other skills (debugger, code-reviewer) completing their work
|
||||
on_error:
|
||||
- trigger: session-logger
|
||||
mode: auto
|
||||
context: "Error captured in {skill_name}"
|
||||
---
|
||||
|
||||
# Self-Improving Agent
|
||||
|
||||
> "An AI agent that learns from every interaction, accumulating patterns and insights to continuously improve its own capabilities." — Based on 2025 lifelong learning research
|
||||
|
||||
## Overview
|
||||
|
||||
This is a **universal self-improvement system** that learns from ALL skill experiences, not just PRDs. It implements a complete feedback loop with:
|
||||
|
||||
- **Multi-Memory Architecture**: Semantic + Episodic + Working memory
|
||||
- **Self-Correction**: Detects and fixes skill guidance errors
|
||||
- **Self-Validation**: Periodically verifies skill accuracy
|
||||
- **Hooks Integration**: Auto-triggers on skill events (before_start, after_complete, on_error)
|
||||
- **Evolution Markers**: Traceable changes with source attribution
|
||||
|
||||
## Research-Based Design
|
||||
|
||||
Based on 2025 research:
|
||||
|
||||
| Research | Key Insight | Application |
|
||||
|----------|-------------|-------------|
|
||||
| [SimpleMem](https://arxiv.org/html/2601.02553v1) | Efficient lifelong memory | Pattern accumulation system |
|
||||
| [Multi-Memory Survey](https://dl.acm.org/doi/10.1145/3748302) | Semantic + Episodic memory | World knowledge + experiences |
|
||||
| [Lifelong Learning](https://arxiv.org/html/2501.07278v1) | Continuous task stream learning | Learn from every skill use |
|
||||
| [Evo-Memory](https://shothota.medium.com/evo-memory-deepminds-new-benchmark) | Test-time lifelong learning | Real-time adaptation |
|
||||
|
||||
## The Self-Improvement Loop
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ UNIVERSAL SELF-IMPROVEMENT │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Skill Event → Extract Experience → Abstract Pattern → Update │
|
||||
│ │ │ │ │ │
|
||||
│ ▼ ▼ ▼ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ MULTI-MEMORY SYSTEM │ │
|
||||
│ ├─────────────────────────────────────────────────────┤ │
|
||||
│ │ Semantic Memory │ Episodic Memory │ Working Memory │ │
|
||||
│ │ (Patterns/Rules) │ (Experiences) │ (Current) │ │
|
||||
│ │ memory/semantic/ │ memory/episodic/ │ memory/working/│ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ FEEDBACK LOOP │ │
|
||||
│ │ User Feedback → Confidence Update → Pattern Adapt │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## When This Activates
|
||||
|
||||
### Automatic Triggers (via hooks)
|
||||
|
||||
| Event | Trigger | Action |
|
||||
|-------|---------|--------|
|
||||
| **before_start** | Any skill starts | Log session start |
|
||||
| **after_complete** | Any skill completes | Extract patterns, update skills |
|
||||
| **on_error** | Bash returns non-zero exit | Capture error context, trigger self-correction |
|
||||
|
||||
### Manual Triggers
|
||||
|
||||
- User says "自我进化", "self-improve", "从经验中学习"
|
||||
- User says "分析今天的经验", "总结教训"
|
||||
- User asks to improve a specific skill
|
||||
|
||||
## Evolution Priority Matrix
|
||||
|
||||
Trigger evolution when new reusable knowledge appears:
|
||||
|
||||
| Trigger | Target Skill | Priority | Action |
|
||||
|---------|--------------|----------|--------|
|
||||
| New PRD pattern discovered | prd-planner | High | Add to quality checklist |
|
||||
| Architecture tradeoff clarified | architecting-solutions | High | Add to decision patterns |
|
||||
| API design rule learned | api-designer | High | Update template |
|
||||
| Debugging fix discovered | debugger | High | Add to anti-patterns |
|
||||
| Review checklist gap | code-reviewer | High | Add checklist item |
|
||||
| Perf/security insight | performance-engineer, security-auditor | High | Add to patterns |
|
||||
| UI/UX spec issue | prd-planner, architecting-solutions | High | Add visual spec requirements |
|
||||
| React/state pattern | debugger, refactoring-specialist | Medium | Add to patterns |
|
||||
| Test strategy improvement | test-automator, qa-expert | Medium | Update approach |
|
||||
| CI/deploy fix | deployment-engineer | Medium | Add to troubleshooting |
|
||||
|
||||
## Multi-Memory Architecture
|
||||
|
||||
### 1. Semantic Memory (`memory/semantic-patterns.json`)
|
||||
|
||||
Stores **abstract patterns and rules** reusable across contexts:
|
||||
|
||||
```json
|
||||
{
|
||||
"patterns": {
|
||||
"pattern_id": {
|
||||
"id": "pat-2025-01-11-001",
|
||||
"name": "Pattern Name",
|
||||
"source": "user_feedback|implementation_review|retrospective",
|
||||
"confidence": 0.95,
|
||||
"applications": 5,
|
||||
"created": "2025-01-11",
|
||||
"category": "prd_structure|react_patterns|async_patterns|...",
|
||||
"pattern": "One-line summary",
|
||||
"problem": "What problem does this solve?",
|
||||
"solution": { ... },
|
||||
"quality_rules": [ ... ],
|
||||
"target_skills": [ ... ]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Episodic Memory (`memory/episodic/`)
|
||||
|
||||
Stores **specific experiences and what happened**:
|
||||
|
||||
```
|
||||
memory/episodic/
|
||||
├── 2025/
|
||||
│ ├── 2025-01-11-prd-creation.json
|
||||
│ ├── 2025-01-11-debug-session.json
|
||||
│ └── 2025-01-12-refactoring.json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "ep-2025-01-11-001",
|
||||
"timestamp": "2025-01-11T10:30:00Z",
|
||||
"skill": "debugger",
|
||||
"situation": "User reported data not refreshing after form submission",
|
||||
"root_cause": "Empty callback in onRefresh prop",
|
||||
"solution": "Implement actual refresh logic in callback",
|
||||
"lesson": "Always verify callbacks are not empty functions",
|
||||
"related_pattern": "callback_verification",
|
||||
"user_feedback": {
|
||||
"rating": 8,
|
||||
"comments": "This was exactly the issue"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Working Memory (`memory/working/`)
|
||||
|
||||
Stores **current session context**:
|
||||
|
||||
```
|
||||
memory/working/
|
||||
├── current_session.json # Active session data
|
||||
├── last_error.json # Error context for self-correction
|
||||
└── session_end.json # Session end marker
|
||||
```
|
||||
|
||||
## Self-Improvement Process
|
||||
|
||||
### Phase 1: Experience Extraction
|
||||
|
||||
After any skill completes, extract:
|
||||
|
||||
```yaml
|
||||
What happened:
|
||||
skill_used: {which skill}
|
||||
task: {what was being done}
|
||||
outcome: {success|partial|failure}
|
||||
|
||||
Key Insights:
|
||||
what_went_well: [what worked]
|
||||
what_went_wrong: [what didn't work]
|
||||
root_cause: {underlying issue if applicable}
|
||||
|
||||
User Feedback:
|
||||
rating: {1-10 if provided}
|
||||
comments: {specific feedback}
|
||||
```
|
||||
|
||||
### Phase 2: Pattern Abstraction
|
||||
|
||||
Convert experiences to reusable patterns:
|
||||
|
||||
| Concrete Experience | Abstract Pattern | Target Skill |
|
||||
|--------------------|------------------|--------------|
|
||||
| "User forgot to save PRD notes" | "Always persist thinking to files" | prd-planner |
|
||||
| "Code review missed SQL injection" | "Add security checklist item" | code-reviewer |
|
||||
| "Callback was empty, didn't work" | "Verify callback implementations" | debugger |
|
||||
| "Net APY position ambiguous" | "UI specs need exact relative positions" | prd-planner |
|
||||
|
||||
**Abstraction Rules:**
|
||||
|
||||
```yaml
|
||||
If experience_repeats 3+ times:
|
||||
pattern_level: critical
|
||||
action: Add to skill's "Critical Mistakes" section
|
||||
|
||||
If solution_was_effective:
|
||||
pattern_level: best_practice
|
||||
action: Add to skill's "Best Practices" section
|
||||
|
||||
If user_rating >= 7:
|
||||
pattern_level: strength
|
||||
action: Reinforce this approach
|
||||
|
||||
If user_rating <= 4:
|
||||
pattern_level: weakness
|
||||
action: Add to "What to Avoid" section
|
||||
```
|
||||
|
||||
### Phase 3: Skill Updates
|
||||
|
||||
Update the appropriate skill files with **evolution markers**:
|
||||
|
||||
```markdown
|
||||
<!-- Evolution: 2025-01-12 | source: ep-2025-01-12-001 | skill: debugger -->
|
||||
|
||||
## Pattern Added (2025-01-12)
|
||||
|
||||
**Pattern**: Always verify callbacks are not empty functions
|
||||
|
||||
**Source**: Episode ep-2025-01-12-001
|
||||
|
||||
**Confidence**: 0.95
|
||||
|
||||
### Updated Checklist
|
||||
- [ ] Verify all callbacks have implementations
|
||||
- [ ] Test callback execution paths
|
||||
```
|
||||
|
||||
**Correction Markers** (when fixing wrong guidance):
|
||||
|
||||
```markdown
|
||||
<!-- Correction: 2025-01-12 | was: "Use callback chain" | reason: caused stale refresh -->
|
||||
|
||||
## Corrected Guidance
|
||||
|
||||
Use direct state monitoring instead of callback chains:
|
||||
```typescript
|
||||
// ✅ Do: Direct state monitoring
|
||||
const prevPendingCount = usePrevious(pendingCount);
|
||||
```
|
||||
```
|
||||
|
||||
### Phase 4: Memory Consolidation
|
||||
|
||||
1. **Update semantic memory** (`memory/semantic-patterns.json`)
|
||||
2. **Store episodic memory** (`memory/episodic/YYYY-MM-DD-{skill}.json`)
|
||||
3. **Update pattern confidence** based on applications/feedback
|
||||
4. **Prune outdated patterns** (low confidence, no recent applications)
|
||||
|
||||
## Self-Correction (on_error hook)
|
||||
|
||||
Triggered when:
|
||||
- Bash command returns non-zero exit code
|
||||
- Tests fail after following skill guidance
|
||||
- User reports the guidance produced incorrect results
|
||||
|
||||
**Process:**
|
||||
|
||||
```markdown
|
||||
## Self-Correction Workflow
|
||||
|
||||
1. Detect Error
|
||||
- Capture error context from working/last_error.json
|
||||
- Identify which skill guidance was followed
|
||||
|
||||
2. Verify Root Cause
|
||||
- Was the skill guidance incorrect?
|
||||
- Was the guidance misinterpreted?
|
||||
- Was the guidance incomplete?
|
||||
|
||||
3. Apply Correction
|
||||
- Update skill file with corrected guidance
|
||||
- Add correction marker with reason
|
||||
- Update related patterns in semantic memory
|
||||
|
||||
4. Validate Fix
|
||||
- Test the corrected guidance
|
||||
- Ask user to verify
|
||||
```
|
||||
|
||||
**Example:**
|
||||
|
||||
```markdown
|
||||
<!-- Correction: 2025-01-12 | was: "useMemo for claimable ids" | reason: stale data at click time -->
|
||||
|
||||
## Self-Correction: Click-Time Computation
|
||||
|
||||
**Issue**: Using useMemo for claimable IDs caused stale data
|
||||
**Fix**: Compute at click time for always-fresh data
|
||||
**Pattern**: click_time_vs_open_time_computation
|
||||
```
|
||||
|
||||
## Self-Validation
|
||||
|
||||
Use the validation template in `references/appendix.md` when reviewing updates.
|
||||
|
||||
## Hooks Integration
|
||||
|
||||
### Wiring Hooks in Claude Code Settings
|
||||
|
||||
Add to Claude Code settings (`~/.claude/settings.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"hooks": {
|
||||
"PreToolUse": [
|
||||
{
|
||||
"matcher": "Bash|Write|Edit",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/pre-tool.sh \"$TOOL_NAME\" \"$TOOL_INPUT\""
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"PostToolUse": [
|
||||
{
|
||||
"matcher": "Bash",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/post-bash.sh \"$TOOL_OUTPUT\" \"$EXIT_CODE\""
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Stop": [
|
||||
{
|
||||
"matcher": "",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash ${SKILLS_DIR}/self-improving-agent/hooks/session-end.sh"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Replace `${SKILLS_DIR}` with your actual skills path.
|
||||
|
||||
## Additional References
|
||||
|
||||
See `references/appendix.md` for memory structure, workflow diagrams, metrics, feedback templates, and research links.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### DO
|
||||
|
||||
- ✅ Learn from EVERY skill interaction
|
||||
- ✅ Extract patterns at the right abstraction level
|
||||
- ✅ Update multiple related skills
|
||||
- ✅ Track confidence and apply counts
|
||||
- ✅ Ask for user feedback on improvements
|
||||
- ✅ Use evolution/correction markers for traceability
|
||||
- ✅ Validate guidance before applying broadly
|
||||
|
||||
### DON'T
|
||||
|
||||
- ❌ Over-generalize from single experiences
|
||||
- ❌ Update skills without confidence tracking
|
||||
- ❌ Ignore negative feedback
|
||||
- ❌ Make changes that break existing functionality
|
||||
- ❌ Create contradictory patterns
|
||||
- ❌ Update skills without understanding context
|
||||
|
||||
## Quick Start
|
||||
|
||||
After any skill completes, this agent automatically:
|
||||
|
||||
1. **Analyzes** what happened
|
||||
2. **Extracts** patterns and insights
|
||||
3. **Updates** relevant skill files
|
||||
4. **Logs** to memory for future reference
|
||||
5. **Reports** summary to user
|
||||
|
||||
## References
|
||||
|
||||
- [SimpleMem: Efficient Lifelong Memory for LLM Agents](https://arxiv.org/html/2601.02553v1)
|
||||
- [A Survey on the Memory Mechanism of Large Language Model Agents](https://dl.acm.org/doi/10.1145/3748302)
|
||||
- [Lifelong Learning of LLM based Agents](https://arxiv.org/html/2501.07278v1)
|
||||
- [Evo-Memory: DeepMind's Benchmark](https://shothota.medium.com/evo-memory-deepminds-new-benchmark)
|
||||
- [Let's Build a Self-Improving AI Agent](https://medium.com/@nomannayeem/lets-build-a-self-improving-ai-agent-that-learns-from-your-feedback-722d2ce9c2d9)
|
||||
3
skills/self-improving-agent/hooks/minimal-activate.sh
Executable file
3
skills/self-improving-agent/hooks/minimal-activate.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
# 激活极简回复模式
|
||||
echo "极简回复模式已激活"
|
||||
10
skills/self-improving-agent/hooks/post-bash.sh
Normal file
10
skills/self-improving-agent/hooks/post-bash.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
tool_output="${1:-}"
|
||||
exit_code="${2:-0}"
|
||||
|
||||
echo "[self-improving-agent] PostToolUse: exit=${exit_code}" >&2
|
||||
if [[ -n "${tool_output}" ]]; then
|
||||
echo "[self-improving-agent] Output: ${tool_output}" >&2
|
||||
fi
|
||||
10
skills/self-improving-agent/hooks/pre-tool.sh
Normal file
10
skills/self-improving-agent/hooks/pre-tool.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
tool_name="${1:-unknown}"
|
||||
tool_input="${2:-}"
|
||||
|
||||
echo "[self-improving-agent] PreToolUse: ${tool_name}" >&2
|
||||
if [[ -n "${tool_input}" ]]; then
|
||||
echo "[self-improving-agent] Input: ${tool_input}" >&2
|
||||
fi
|
||||
6
skills/self-improving-agent/hooks/session-end.sh
Normal file
6
skills/self-improving-agent/hooks/session-end.sh
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "[self-improving-agent] Session ended" >&2
|
||||
# 激活极简回复模式
|
||||
bash ${SKILLS_DIR}/self-improving-agent/hooks/minimal-activate.sh
|
||||
288
skills/self-improving-agent/memory/semantic-patterns.json
Normal file
288
skills/self-improving-agent/memory/semantic-patterns.json
Normal file
@@ -0,0 +1,288 @@
|
||||
{
|
||||
"patterns": {
|
||||
"prd_document_separation": {
|
||||
"id": "pat-2025-01-11-001",
|
||||
"name": "Document Separation for Complex PRDs",
|
||||
"source": "user_feedback",
|
||||
"confidence": 0.95,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "prd_structure",
|
||||
"pattern": "For non-trivial PRDs, split into 4 files with clear purposes",
|
||||
"problem": "Single large PRD file (~500 lines) with mixed product/technical content is hard to follow",
|
||||
"solution": {
|
||||
"files": [
|
||||
{
|
||||
"name": "{name}-notes.md",
|
||||
"purpose": "Thinking process, options analysis",
|
||||
"audience": "Self + future reviewers"
|
||||
},
|
||||
{
|
||||
"name": "{name}-task-plan.md",
|
||||
"purpose": "Project tracking, phases, progress",
|
||||
"audience": "PM + development lead"
|
||||
},
|
||||
{
|
||||
"name": "{name}-prd.md",
|
||||
"purpose": "Product requirements (what & why)",
|
||||
"audience": "PM + stakeholders + developers"
|
||||
},
|
||||
{
|
||||
"name": "{name}-tech.md",
|
||||
"purpose": "Technical design (how)",
|
||||
"audience": "Developers + architects"
|
||||
}
|
||||
]
|
||||
},
|
||||
"quality_rules": [
|
||||
"PRD focuses on problem, goals, scope, user flows",
|
||||
"Tech doc focuses on API, data flow, implementation",
|
||||
"Notes document architecture options with A/B/C analysis",
|
||||
"Task plan has checkboxes with timestamps",
|
||||
"PRD references tech doc, doesn't duplicate"
|
||||
],
|
||||
"target_skills": ["prd-planner", "architecting-solutions"]
|
||||
},
|
||||
"state_monitoring_over_callbacks": {
|
||||
"id": "pat-2025-01-11-002",
|
||||
"name": "Direct State Monitoring vs Callbacks",
|
||||
"source": "implementation_review",
|
||||
"confidence": 0.90,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "react_patterns",
|
||||
"pattern": "Prefer direct state monitoring over callback chains for side effects",
|
||||
"problem": "Callback chains passed through multiple layers are hard to trace and debug",
|
||||
"solution": {
|
||||
"anti_pattern": "useActionQueue({ onRefresh: () => { /* refresh logic */ } });",
|
||||
"pattern": "const pendingCount = requests.length;\nconst prevPendingCount = usePrevious(pendingCount);\nuseEffect(() => {\n if (pendingCount < prevPendingCount) {\n triggerDataRefresh({ reason: 'completed' });\n }\n}, [pendingCount, prevPendingCount]);"
|
||||
},
|
||||
"when_to_use": [
|
||||
"State changes need to trigger side effects",
|
||||
"Callback chain would be 3+ layers deep",
|
||||
"Multiple components need to react to same state change"
|
||||
],
|
||||
"quality_rules": [
|
||||
"Use usePrevious to detect state changes instead of callbacks when feasible",
|
||||
"Keep state monitoring close to where state is consumed",
|
||||
"Use callbacks only for cross-component boundaries"
|
||||
],
|
||||
"target_skills": ["debugger", "refactoring-specialist"]
|
||||
},
|
||||
"state_machine_over_booleans": {
|
||||
"id": "pat-2025-01-11-003",
|
||||
"name": "State Machine Over Boolean Flags",
|
||||
"source": "implementation_review",
|
||||
"confidence": 0.85,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "async_patterns",
|
||||
"pattern": "Use state machines for async operations with multiple phases",
|
||||
"problem": "Simple boolean flags can't represent 'waiting to run' vs 'currently running', causing race conditions",
|
||||
"solution": {
|
||||
"anti_pattern": "const inFlight = false;",
|
||||
"pattern": "enum EStatus {\n Idle = 'idle',\n Waiting = 'waiting', // Scheduled but not running yet\n Running = 'running',\n}"
|
||||
},
|
||||
"benefits": [
|
||||
"Prevents race conditions (can't schedule new request while running)",
|
||||
"Distinguishes 'waiting to run' from 'currently running'",
|
||||
"Easier to debug and log state transitions"
|
||||
],
|
||||
"quality_rules": [
|
||||
"Use state machine for async operations with multiple phases",
|
||||
"Prevent state transitions that don't make sense",
|
||||
"Log state transitions for debugging"
|
||||
],
|
||||
"target_skills": ["debugger", "api-designer"]
|
||||
},
|
||||
"measurable_success_criteria": {
|
||||
"id": "pat-2025-01-11-004",
|
||||
"name": "Measurable Success Criteria",
|
||||
"source": "user_feedback",
|
||||
"confidence": 0.90,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "prd_quality",
|
||||
"pattern": "Success criteria must include specific numbers/timings to enable verification",
|
||||
"problem": "Vague success criteria like 'data refreshes' don't enable testing or verification",
|
||||
"solution": {
|
||||
"bad_examples": [
|
||||
"Data refreshes after transaction",
|
||||
"Manual refresh works",
|
||||
"No performance regression"
|
||||
],
|
||||
"good_examples": [
|
||||
"Dashboard data refreshes within 3-5 seconds after a pending action completes",
|
||||
"Manual refresh button triggers full refresh and shows loading state",
|
||||
"API response time under 500ms for 95th percentile"
|
||||
]
|
||||
},
|
||||
"quality_rules": [
|
||||
"Success criteria include specific numbers/timings",
|
||||
"Each criterion is objectively verifiable",
|
||||
"Performance targets have percentiles (e.g., 95th, 99th)",
|
||||
"User-facing behavior has observable indicators"
|
||||
],
|
||||
"target_skills": ["prd-planner", "architecting-solutions"]
|
||||
},
|
||||
"non_goals_section": {
|
||||
"id": "pat-2025-01-11-005",
|
||||
"name": "Non-Goals Section",
|
||||
"source": "user_feedback",
|
||||
"confidence": 0.90,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "prd_structure",
|
||||
"pattern": "Explicitly state what won't be done to prevent scope creep",
|
||||
"problem": "Without explicit non-goals, scope creeps during implementation",
|
||||
"solution": {
|
||||
"structure": "## Goals\n- [Specific achievable outcomes]\n\n## Non-Goals\n- [Explicit exclusions - things that might seem related but aren't]"
|
||||
},
|
||||
"quality_rules": [
|
||||
"Goals section has 3-5 focused items",
|
||||
"Non-goals section explicitly excludes reasonable-but-out-of-scope items",
|
||||
"Each non-goal has a brief rationale if not obvious"
|
||||
],
|
||||
"target_skills": ["prd-planner", "architecting-solutions"]
|
||||
},
|
||||
"ui_ux_specification_granularity": {
|
||||
"id": "pat-2025-01-11-006",
|
||||
"name": "UI/UX Specification Granularity",
|
||||
"source": "retrospective",
|
||||
"confidence": 0.95,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "ui_patterns",
|
||||
"pattern": "UI/UX PRDs require explicit visual specifications to prevent rework",
|
||||
"problem": "Ambiguous UI specs (position, size, spacing) cause implementation rework",
|
||||
"solution": {
|
||||
"required_elements": {
|
||||
"layout_structure": ["Relative position: same row / next row / below / above", "Parent-child container relationships", "Spacing values (gap, padding, margin)"],
|
||||
"component_specs": ["Icon/Button sizes: iconSize=\"$4\" (24px)", "Text styles: size=\"$bodyMd\", color=\"$textSubdued\"", "Component variants: size=\"small\", variant=\"tertiary\""],
|
||||
"visual_comparison": "Before/After ASCII art showing layout change",
|
||||
"executable_criteria": "Checklist with exact prop values"
|
||||
},
|
||||
"examples": {
|
||||
"bad": "Refresh button next to amount",
|
||||
"good": "Refresh button in same XStack as amount with gap='$3'"
|
||||
}
|
||||
},
|
||||
"quality_rules": [
|
||||
"Relative position explicitly stated (same row/next row/below/above)",
|
||||
"Component sizes with exact values (iconSize prop or px)",
|
||||
"Spacing values defined (gap=\"$3\", mx=\"$2\")",
|
||||
"Before/After visual comparison included",
|
||||
"Success criteria are executable (verify by reading code)",
|
||||
"Mobile vs desktop differences explicitly called out"
|
||||
],
|
||||
"target_skills": ["prd-planner", "architecting-solutions"]
|
||||
},
|
||||
"reuse_existing_infrastructure": {
|
||||
"id": "pat-2025-01-11-007",
|
||||
"name": "Reuse Existing Infrastructure",
|
||||
"source": "comparison_analysis",
|
||||
"confidence": 0.90,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "architecture",
|
||||
"pattern": "Always check if Context/Provider already has the data before adding new fetching",
|
||||
"problem": "Adding duplicate data fetching creates redundant network calls and complexity",
|
||||
"solution": {
|
||||
"anti_pattern": "const { pendingRequests } = useActionQueue({ workspaceId, userId, client }); // Creates new polling loop!",
|
||||
"pattern": "const { pendingRequests } = useFeatureContext(); // Shared provider already updates this"
|
||||
},
|
||||
"quality_checklist": [
|
||||
"Check if Context/Provider already has the data",
|
||||
"Verify no duplicate polling/fetching",
|
||||
"Confirm single source of truth",
|
||||
"Only add new fetching when lifecycle is truly independent"
|
||||
],
|
||||
"benefits": ["Reduces network/background calls", "Better performance (no redundant work)", "Single source of truth", "Simpler code (fewer hooks to manage)"],
|
||||
"target_skills": ["architecting-solutions", "api-designer", "debugger"]
|
||||
},
|
||||
"click_time_vs_open_time_computation": {
|
||||
"id": "pat-2025-01-11-008",
|
||||
"name": "Click-Time vs Open-Time Computation",
|
||||
"source": "implementation_review",
|
||||
"confidence": 0.85,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "react_patterns",
|
||||
"pattern": "For mutable state, compute at action time, not at render/init time",
|
||||
"problem": "Open-time computation creates stale snapshots when state changes before user acts",
|
||||
"solution": {
|
||||
"anti_pattern": "const allIds = useMemo(() =>\n actionableItems.filter(i => !inFlightIds.includes(i.id)),\n [actionableItems, inFlightIds]\n); // Stale if inFlightIds changes before user clicks",
|
||||
"pattern": "onRunAll: (ids: string[]) => Promise<void> => {\n const freshIds = actionableItems\n .filter(i => !inFlightIds.includes(i.id))\n .map(i => i.id);\n return submitBatchAction(freshIds);\n}"
|
||||
},
|
||||
"decision_matrix": {
|
||||
"open_time": ["Immutable data", "Expensive computation"],
|
||||
"click_time": ["Mutable state", "User-dependent filters"]
|
||||
},
|
||||
"benefits": ["State is always fresh when user acts", "No stale data issues", "Simpler reasoning about state"],
|
||||
"target_skills": ["debugger", "api-designer"]
|
||||
},
|
||||
"search_before_creating_components": {
|
||||
"id": "pat-2025-01-11-009",
|
||||
"name": "Search Before Creating Components",
|
||||
"source": "prud_correction",
|
||||
"confidence": 0.90,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "development",
|
||||
"pattern": "ALWAYS search existing codebase before proposing new components/types",
|
||||
"problem": "Creating duplicate components creates maintenance burden and UI inconsistency",
|
||||
"solution": {
|
||||
"pre_prd_search": [
|
||||
"grep -r \"Alert\" packages/kit/src/views/ --include=\"*.tsx\"",
|
||||
"grep -r \"IAlert\\|Alert\" packages/shared/types/ --include=\"*.ts\"",
|
||||
"If found, read existing implementation"
|
||||
],
|
||||
"decision_matrix": {
|
||||
"existing_component_matches_ui": "Reuse",
|
||||
"existing_component_needs_small_tweak": "Extend or wrap",
|
||||
"existing_component_has_wrong_responsibilities": "Create new",
|
||||
"not_sure": "Reuse first"
|
||||
}
|
||||
},
|
||||
"impact": {
|
||||
"duplicate_component": "Over-engineering, UI inconsistency",
|
||||
"reuse": "Faster implementation, shared improvements"
|
||||
},
|
||||
"target_skills": ["prd-planner", "architecting-solutions", "api-designer"]
|
||||
},
|
||||
"spacing_and_divider_debugging": {
|
||||
"id": "pat-2025-01-11-010",
|
||||
"name": "Spacing and Divider Debugging",
|
||||
"source": "bug_analysis",
|
||||
"confidence": 0.85,
|
||||
"applications": 0,
|
||||
"created": "2025-01-11",
|
||||
"category": "debugging",
|
||||
"pattern": "When debugging spacing/divider issues, audit all spacing values systematically",
|
||||
"problem": "Component spacing (mt, mb, py, padding) can create unintended visual separators that appear as extra lines",
|
||||
"solution": {
|
||||
"debugging_steps": [
|
||||
"Search for spacing-related props in components",
|
||||
"Check for StyleSheet.hairlineWidth usage (may render differently per platform)",
|
||||
"Compare components that work vs components that have issues",
|
||||
"Draw component structure to identify spacing conflicts"
|
||||
],
|
||||
"audit_template": "| Element | Before | After | Unit | Notes |\\n|---------|--------|-------|------|-------|\\n| Trigger padding | `py=\"$3\"` | - | 12px | Accordion.Trigger |\\n| Header top margin | `mt=\"$3\"` | `mt=\"$0\"` | 12px → 0px | Remove this |"
|
||||
},
|
||||
"quality_rules": [
|
||||
"Include ASCII diagram showing component structure",
|
||||
"List exact spacing values with pixel conversions ($3 = 12px, $5 = 20px)",
|
||||
"Compare working vs broken components",
|
||||
"Note platform-specific behaviors (hairlineWidth varies)",
|
||||
"Verify fix on all platforms (iOS, Android, Desktop, Web)"
|
||||
],
|
||||
"target_skills": ["debugger"]
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"version": "1.0.0",
|
||||
"last_updated": "2025-01-12",
|
||||
"total_patterns": 10,
|
||||
"categories": ["prd_structure", "prd_quality", "react_patterns", "async_patterns", "ui_patterns", "architecture", "development", "debugging"]
|
||||
}
|
||||
}
|
||||
131
skills/self-improving-agent/references/appendix.md
Normal file
131
skills/self-improving-agent/references/appendix.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Appendix
|
||||
|
||||
## Self-Validation
|
||||
|
||||
### Validation Report Template
|
||||
|
||||
```markdown
|
||||
## Validation Report Template
|
||||
|
||||
**Date**: [YYYY-MM-DD]
|
||||
**Scope**: [skill(s) validated]
|
||||
|
||||
### Checks
|
||||
- [ ] Examples compile or run
|
||||
- [ ] Checklists match current repo conventions
|
||||
- [ ] External references still valid
|
||||
- [ ] No duplicated or conflicting guidance
|
||||
|
||||
### Findings
|
||||
- [Finding 1]
|
||||
- [Finding 2]
|
||||
|
||||
### Actions
|
||||
- [Action 1]
|
||||
- [Action 2]
|
||||
```
|
||||
|
||||
## Memory File Structure
|
||||
|
||||
```
|
||||
~/.claude/memory/
|
||||
├── semantic/
|
||||
│ └── patterns.json
|
||||
├── episodic/
|
||||
│ ├── 2025/
|
||||
│ │ ├── 2025-01-11-prd-creation.json
|
||||
│ │ └── 2025-01-11-debug-session.json
|
||||
│ └── episodes.json
|
||||
├── working/
|
||||
│ ├── current_session.json
|
||||
│ ├── last_error.json
|
||||
│ └── session_end.json
|
||||
└── index.json
|
||||
```
|
||||
|
||||
## Automatic Workflow Integration
|
||||
|
||||
```
|
||||
Any Skill Run
|
||||
-> workflow-orchestrator
|
||||
-> self-improving-agent (background)
|
||||
-> create-pr (ask_first)
|
||||
-> session-logger (auto)
|
||||
```
|
||||
|
||||
## Continuous Learning Metrics
|
||||
|
||||
```json
|
||||
{
|
||||
"metrics": {
|
||||
"patterns_learned": 47,
|
||||
"patterns_applied": 238,
|
||||
"skills_updated": 12,
|
||||
"avg_confidence": 0.87,
|
||||
"user_satisfaction_trend": "improving",
|
||||
"error_rate_reduction": "-35%",
|
||||
"self_corrections": 8
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Human-in-the-Loop
|
||||
|
||||
### Feedback Collection
|
||||
|
||||
```markdown
|
||||
## Self-Improvement Summary
|
||||
|
||||
I've learned from our session and updated:
|
||||
|
||||
### Updated Skills
|
||||
- `debugger`: Added callback verification pattern
|
||||
- `prd-planner`: Enhanced UI/UX specification requirements
|
||||
|
||||
### Patterns Extracted
|
||||
1. **state_monitoring_over_callbacks**: Use usePrevious for state-driven side effects
|
||||
2. **ui_ux_specification_granularity**: Explicit visual specs prevent rework
|
||||
|
||||
### Confidence Levels
|
||||
- New patterns: 0.85 (needs validation)
|
||||
- Reinforced patterns: 0.95 (well-established)
|
||||
|
||||
### Your Feedback
|
||||
Rate these improvements (1-10):
|
||||
- Were the updates helpful?
|
||||
- Should I apply this pattern more broadly?
|
||||
- Any corrections needed?
|
||||
```
|
||||
|
||||
### Feedback Integration
|
||||
|
||||
```yaml
|
||||
User Feedback:
|
||||
positive (rating >= 7):
|
||||
action: Increase pattern confidence
|
||||
scope: Expand to related skills
|
||||
|
||||
neutral (rating 4-6):
|
||||
action: Keep pattern, gather more data
|
||||
scope: Current skill only
|
||||
|
||||
negative (rating <= 3):
|
||||
action: Decrease confidence, revise pattern
|
||||
scope: Remove from active patterns
|
||||
```
|
||||
|
||||
## Templates
|
||||
|
||||
| Template | Purpose |
|
||||
|----------|---------|
|
||||
| `templates/pattern-template.md` | Adding new patterns |
|
||||
| `templates/correction-template.md` | Fixing incorrect guidance |
|
||||
| `templates/validation-template.md` | Validating skill accuracy |
|
||||
|
||||
## References
|
||||
|
||||
- [SimpleMem: Efficient Lifelong Memory for LLM Agents](https://arxiv.org/html/2601.02553v1)
|
||||
- [A Survey on the Memory Mechanism of Large Language Model Agents](https://dl.acm.org/doi/10.1145/3748302)
|
||||
- [Lifelong Learning of LLM based Agents](https://arxiv.org/html/2501.07278v1)
|
||||
- [Evo-Memory: DeepMind's Benchmark](https://shothota.medium.com/evo-memory-deepminds-new-benchmark)
|
||||
- [Let's Build a Self-Improving AI Agent](https://medium.com/@nomannayeem/lets-build-a-self-improving-ai-agent-that-learns-from-your-feedback-722d2ce9c2d9)
|
||||
11
skills/self-improving-agent/templates/correction-template.md
Normal file
11
skills/self-improving-agent/templates/correction-template.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Correction Template
|
||||
|
||||
## Issue Summary
|
||||
|
||||
## Previous Guidance
|
||||
|
||||
## Corrected Guidance
|
||||
|
||||
## Root Cause
|
||||
|
||||
## Follow-up Actions
|
||||
15
skills/self-improving-agent/templates/pattern-template.md
Normal file
15
skills/self-improving-agent/templates/pattern-template.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Pattern Template
|
||||
|
||||
## Pattern Name
|
||||
|
||||
## Context
|
||||
- Source skill:
|
||||
- Situation:
|
||||
|
||||
## Guidance
|
||||
|
||||
## Examples
|
||||
|
||||
## Confidence
|
||||
- Initial confidence:
|
||||
- Validation notes:
|
||||
14
skills/self-improving-agent/templates/validation-template.md
Normal file
14
skills/self-improving-agent/templates/validation-template.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Validation Template
|
||||
|
||||
## Date
|
||||
|
||||
## Scope
|
||||
|
||||
## Checks
|
||||
- [ ] Examples compile or run
|
||||
- [ ] Guidance matches current repo conventions
|
||||
- [ ] External references still valid
|
||||
|
||||
## Findings
|
||||
|
||||
## Actions
|
||||
Reference in New Issue
Block a user