Autonomous skill extraction from debugging discoveries. Activates when agents find non-obvious solutions through investigation, experimentation, or trial-and-error. Captures these discoveries as reusable skills for future sessions.
The Continuous Learning Skill enables agents to autonomously extract reusable patterns from debugging discoveries. Rather than losing hard-won knowledge at session end, this skill captures high-value insights as structured documents that inform future work.
This implementation draws from established agent learning research:
Agents routinely discover non-obvious solutions through debugging, but this knowledge is lost when:
The Continuous Learning Skill transforms ephemeral discoveries into persistent, retrievable knowledge.
The skill activates when ANY of these conditions are detected:
Agent completed debugging where the solution wasn't immediately apparent from the error message or documentation.
Signals:
Agent found a workaround through trial-and-error or systematic investigation rather than known solution.
Signals:
Agent resolved an error where the root cause wasn't clear from initial symptoms.
Signals:
Agent learned patterns specific to this codebase through experimentation.
Signals:
| Zone | Access | Usage |
|------|--------|-------|
| System Zone (.claude/) | READ | Load skill definition, protocol |
| State Zone (grimoires/loa/) | READ/WRITE | Write extracted skills, trajectory logs |
| App Zone (src/, etc.) | READ | Analyze code for extraction context |
CRITICAL: Extracted skills MUST write to State Zone only:
grimoires/loa/skills-pending/{skill-name}/SKILL.mdgrimoires/loa/skills/grimoires/loa/skills-archived/Cross-reference extracted skills with NOTES.md to prevent duplicates:
## Learnings section## Learnings entry pointing to skillNOTES.md Entry Format:
## Learnings
- [NATS JetStream] Use durable consumers for persistent state → See `skills/nats-jetstream-consumer-durable`
Each extracted skill must include the extracting agent:
loa-agent: implementing-tasks # or reviewing-code, auditing-security, etc.
This enables filtering skills by agent context for more relevant retrieval.
All four gates must PASS before skill extraction proceeds. See .claude/protocols/continuous-learning.md for detailed criteria.
Question: Did the agent actually discover something through investigation?
| Signal | PASS | FAIL | |--------|------|------| | Investigation steps | Multiple steps, hypothesis changes | Direct solution from docs | | Time investment | Significant debugging effort | Quick lookup | | Learning curve | Non-obvious solution | Obvious in hindsight |
Question: Will this help future sessions with similar problems?
| Signal | PASS | FAIL | |--------|------|------| | Generalizability | Applies to common patterns | One-off edge case | | Trigger clarity | Clear when to apply | Vague conditions | | Solution portability | Works across contexts | Hyper-specific |
Question: Can the skill be reliably retrieved when needed?
| Signal | PASS | FAIL | |--------|------|------| | Symptom specificity | Clear error messages/patterns | Generic symptoms | | Context definition | Defined technology/environment | Unclear scope | | False positive risk | Low false matches | High noise potential |
Question: Is the solution proven to work?
| Signal | PASS | FAIL | |--------|------|------| | Testing evidence | Verified in this session | Theoretical only | | Reproduction steps | Clear verification commands | Missing validation | | Edge cases | Known limitations documented | Unknown failure modes |
During /implement, /review-sprint, /audit-sprint, /deploy-production, or /ride:
skills-pending/At session end or milestone:
skills-pending/Use the template at resources/skill-template.md for all extracted skills.
See resources/examples/nats-jetstream-consumer-durable.md for a complete example.
| Phase | Active | Rationale |
|-------|--------|-----------|
| /implement sprint-N | YES | Primary discovery context |
| /review-sprint sprint-N | YES | Review insights valuable |
| /audit-sprint sprint-N | YES | Security patterns valuable |
| /deploy-production | YES | Infrastructure discoveries |
| /ride | YES | Codebase analysis discoveries |
| /plan-and-analyze | NO | Requirements, not implementation |
| /architect | NO | Design decisions, not debugging |
| /sprint-plan | NO | Planning, not implementation |
[Discovery] → [Extraction] → [Pending] → [Active] → [Archived]
↓
[Rejected]
| State | Location | Description |
|-------|----------|-------------|
| Pending | grimoires/loa/skills-pending/ | Awaiting human approval |
| Active | grimoires/loa/skills/ | Available for retrieval |
| Archived | grimoires/loa/skills-archived/ | Deprecated or superseded |
/skill-audit --approve {skill-name}/skill-audit --reject {skill-name}/skill-audit --prune (age + no matches)In .loa.config.yaml:
continuous_learning:
enabled: true # Master toggle
auto_extract: false # Require user confirmation (recommended)
quality_gate_threshold: 4 # All 4 gates must pass
prune_after_days: 90 # Archive unused skills after N days
min_match_count: 0 # Minimum retrievals to avoid pruning
trajectory_logging: true # Log extraction events
All skill extraction events are logged to trajectory:
Location: grimoires/loa/a2a/trajectory/continuous-learning-{date}.jsonl
Event Types:
extraction: Skill extracted to pendingapproval: Skill approved to activerejection: Skill rejected to archivedprune: Skill pruned due to age/non-usematch: Skill retrieved for a problemExample Entry:
{
"timestamp": "2026-01-18T10:30:00Z",
"event": "extraction",
"skill": "nats-jetstream-consumer-durable",
"agent": "implementing-tasks",
"gates": {"depth": true, "reusability": true, "trigger": true, "verification": true},
"source": "sprint-7-task-3"
}
High-value project learnings can be proposed for upstream contribution to the Loa framework. This enables proven patterns to benefit all Loa users.
┌──────────────────────────────────────────────────────────────────┐
│ Upstream Learning Flow │
├──────────────────────────────────────────────────────────────────┤
│ │
│ 1. Learning Discovery (existing /retrospective workflow) │
│ └─→ Extract learnings to grimoires/loa/a2a/compound/ │
│ │
│ 2. Effectiveness Tracking │
│ └─→ Track applications and success rates over time │
│ │
│ 3. Upstream Detection (automatic) │
│ └─→ post-retrospective-hook.sh evaluates eligibility │
│ └─→ Silent unless learning meets thresholds │
│ │
│ 4. User Opt-In │
│ └─→ User decides whether to propose │
│ └─→ /propose-learning <ID> [--dry-run] │
│ │
│ 5. Anonymization & Submission │
│ └─→ PII automatically redacted │
│ └─→ GitHub Issue created with learning-proposal label │
│ │
│ 6. Maintainer Review │
│ └─→ Accept: merged to framework learnings │
│ └─→ Reject: 90-day cooldown before resubmit │
│ │
└──────────────────────────────────────────────────────────────────┘
A learning qualifies for upstream proposal when:
| Criterion | Threshold | Configurable |
|-----------|-----------|--------------|
| Upstream Score | ≥ 70 | .upstream_detection.min_upstream_score |
| Applications | ≥ 3 | .upstream_detection.min_occurrences |
| Success Rate | ≥ 80% | .upstream_detection.min_success_rate |
The upstream score is a weighted combination of four components:
| Component | Weight | Source | |-----------|--------|--------| | Quality Gates | 25% | Discovery depth, reusability, trigger clarity, verification | | Effectiveness | 30% | Application count and success rate | | Novelty | 25% | Jaccard similarity vs existing framework learnings | | Generality | 20% | Domain-agnostic characteristics |
Script: .claude/scripts/upstream-score-calculator.sh
# Preview proposal (recommended first step)
/propose-learning L-0001 --dry-run
# Submit proposal
/propose-learning L-0001
# Force submission (skip eligibility check)
/propose-learning L-0001 --force
Before submission, the following PII is automatically redacted:
| Type | Pattern | Replacement |
|------|---------|-------------|
| API Keys | sk-*, ghp_*, AKIA* | [REDACTED_API_KEY] |
| File Paths | /home/user/*, /Users/* | [REDACTED_PATH] |
| Domains | Project-specific domains | [REDACTED_DOMAIN] |
| Usernames | @mentions, git authors | [REDACTED_USER] |
| Emails | *@*.com | [REDACTED_EMAIL] |
| IP Addresses | 192.168.*.* | [REDACTED_IP] |
Script: .claude/scripts/anonymize-proposal.sh
| Status | Description |
|--------|-------------|
| none | No proposal attempted |
| draft | Created but not submitted |
| submitted | GitHub Issue created, awaiting review |
| under_review | Maintainer is reviewing |
| accepted | Merged into framework learnings |
| rejected | Not accepted (90-day cooldown applies) |
# Check specific proposal
.claude/scripts/check-proposal-status.sh --learning L-0001
# Check all submitted proposals and sync
.claude/scripts/check-proposal-status.sh --all --sync
When a proposal is rejected:
rejection.reason captured from maintainer feedbackrejection.reason_code categorized (duplicate, too_specific, etc.)rejection.resubmit_blocked_until set to 90 days from rejection# .loa.config.yaml
upstream_detection:
enabled: true
min_occurrences: 3
min_success_rate: 0.8
min_upstream_score: 70
novelty_threshold: 0.7
upstream_proposals:
target_repo: "0xHoneyJar/loa"
label: "learning-proposal"
anonymization:
enabled: true
rejection_cooldown_days: 90
| Command | Description |
|---------|-------------|
| /retrospective | Extract learnings (auto-triggers upstream detection) |
| /propose-learning | Submit learning as upstream proposal |
| /compound | Cross-session learning synthesis |
See .claude/protocols/continuous-learning.md for:
See grimoires/loa/prd.md (Upstream Learning Flow v1.1.0) for:
npx skills add 0xHoneyJar/continuous-learning下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer