--- name: recommend-evolution description: Detect capability gaps and record standardized evolution recommendations. version: 1.0.0 model: sonnet invoked_by: both user_invocable: true tools: [Read, Write, Edit, Skill] error_handling: graceful streaming: supported verified: false lastVerifiedAt: 2026-02-19T05:29:09.098Z --- # Recommend Evolution ## Overview Recommend ecosystem evolution when repeated evidence indicates missing capability, and record the recommendation in a standard machine-readable format. ## When to Use - Reflection identifies recurring delivery failures with the same root cause - Router/analysis signals no suitable agent or skill for recurring requests - Repeated integration gaps imply missing artifact type or policy - User explicitly requests a new capability path ## The Iron Law ``` DO NOT SPAWN EVOLUTION-ORCHESTRATOR DIRECTLY FROM THIS SKILL. RECOMMEND AND RECORD ONLY. ``` Evolution recommendation skill for reflection/planning agents. - Trigger classification (`repeated_error`, `no_agent`, `integration_gap`, `user_request`, `rubric_regression`, `stale_skill`, `other`) - Recommendation-vs-integration decision branching - Dual recording mode: JSONL runtime queue + reflection report block ## Trigger Taxonomy Note `recommend-evolution` uses a **cause-oriented trigger taxonomy** (`repeated_error`, `no_agent`, `integration_gap`, `user_request`, `rubric_regression`, `stale_skill`, `other`). This intentionally differs from `skill-updater`, which uses a **caller-oriented trigger taxonomy** (`reflection`, `evolve`, `manual`, `stale_skill`) to describe who/what initiated the update path. ### Step 0: Validate Trigger Type Use these thresholds: - `repeated_error`: same class of failure in 5+ tasks - `rubric_regression`: repeated score drop below threshold for same class of task - `no_agent`: recurring need with no valid routing match - `integration_gap`: existing artifact integration missing (prefer artifact-integrator) - `user_request`: explicit request for capability not available - `stale_skill`: audit pipeline reports verified artifact older than 6 months or invalid `lastVerifiedAt` ### Step 1: Decide Recommendation Path - If gap is integration of existing artifact, prefer: `Skill({ skill: 'artifact-integrator' })` - If gap is stale/underperforming existing skill, prefer: `Skill({ skill: 'skill-updater' })` - If gap requires net-new capability/artifact, continue with evolution recommendation - If no artifact change needed, update memory only and exit ### Step 2: Create Standard Recommendation Payload Build one JSON object with required fields: ```json { "timestamp": "2026-02-14T00:00:00.000Z", "source": "reflection-agent", "trigger": "repeated_error", "evidence": "Same routing failure observed in 6 tasks over 2 days.", "suggestedArtifactType": "skill", "summary": "Create a new routing-context skill for reflection-time grounding.", "status": "proposed" } ``` Schema reference: `.claude/schemas/evolution-request.schema.json` ### Step 3: Record Recommendation 1. Append JSON line to: `.claude/context/runtime/evolution-requests.jsonl` 2. Add required report block: ```markdown ## Evolution Recommendation - Trigger: - Evidence: - Suggested Artifact Type: - Summary: <1-2 sentences> - Queue Record: `.claude/context/runtime/evolution-requests.jsonl` ``` ### Step 3: Output Return recommendation summary and what was recorded. **Example Invocations**: ```javascript // Repeated failure pattern -> recommend skill creation Skill({ skill: 'recommend-evolution', args: '--trigger repeated_error --suggestedArtifactType skill', }); // Routing miss -> recommend new agent/workflow discussion Skill({ skill: 'recommend-evolution', args: '--trigger no_agent --suggestedArtifactType agent' }); ``` ## Memory Protocol (MANDATORY) **Before starting:** Read `.claude/context/memory/learnings.md` using `Read` or Node `fs.readFileSync` (cross-platform). **After completing:** - Recommendation pattern -> `.claude/context/memory/learnings.md` - Ambiguous trigger logic -> `.claude/context/memory/issues.md` - Evolution policy decision -> `.claude/context/memory/decisions.md` > ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.