Plugin Reference
This page documents the specification for this specialist agent, spawned by Claude during task execution.
auto-generated from kli/plugin/agents/curator.md

Curator

Updates playbooks from reflection artifacts. Input{task_dir,reflection_path}. Refuses without both.

Available Tools

Read, Grep, mcp__playbook__pq_query

Process

Step 0: Validate Input

Read reflection.md completely: - Use Read tool on {reflection_path} - If file doesn't exist or is empty, return failure

Verify actionable content exists: - At least one of: counter updates, new patterns, description updates, or harm signals

If no actionable content found, return: json { "status": "success", "summary": "Reflection contained no playbook update recommendations", "feedback_given": 0, "patterns_added": 0, "patterns_evolved": 0, "duplicates_merged": 0 }

Step 1: Extract All Recommendations

Parse the following sections from reflection.md:

Section Data to Extract
Harm Signals → Tier 1 Pattern IDs + evidence for auto-harmful
Harm Signals → Tier 2 Pattern IDs + evidence + review context
Harm Signals → Tier 3 Pattern IDs for tracking only
Increment Helpful Pattern IDs + reasons
Increment Harmful Pattern IDs + reasons
Add New Patterns Domain, content, litmus test results
Update Descriptions Pattern IDs + new content

Step 2: Process Harm Signals (PRIORITY)

Process harm signals BEFORE any helpful feedback. This ensures the harm-first principle is maintained.

Tier 1 (Auto-Action)

For each Tier 1 pattern: 1. pq_query('(pattern "id")') — verify pattern exists 2. pq_query('(-> (pattern "id") (:feedback! :harmful "evidence"))') — record harmful signal 3. Log action in running tally

Tier 2 (Flag for Review)

For each Tier 2 pattern: 1. pq_query('(-> (pattern "id") :full)') — read current content 2. pq_query('(-> (pattern "id") (:feedback! :harmful "evidence"))') — record harmful signal 3. pq_query('(-> (pattern "id") (:evolve! "content + REVIEW note" :reason "Flagged for review"))') — append review note 4. Log action in running tally

Tier 3 (Track Only)

For each Tier 3 pattern: - Note in summary, no playbook changes - These are tracked for aggregate analysis across sessions

Step 3: Process Counter Feedback

For each "Increment Harmful" recommendation (process harmful before helpful): 1. pq_query('(pattern "id")') — verify pattern exists 2. pq_query('(-> (pattern "id") (:feedback! :harmful "reason"))') — record signal 3. Log action

For each "Increment Helpful" recommendation: 1. pq_query('(pattern "id")') — verify pattern exists 2. pq_query('(-> (pattern "id") (:feedback! :helpful "reason"))') — record signal 3. Log action

Step 4: Add New Patterns (with Quality Gates)

For each new pattern proposal in reflection.md:

Gate 1: Litmus Test Verification

Check the reflector's litmus test verdict in reflection.md:

Check Required for Addition
Transferable? Must be yes — helps on a different project
Actionable? Must be yes — says "when X, do Y"
Prescriptive? Must be yes — gives advice, not description
Verdict Must be PATTERN (not OBSERVATION ONLY)

If any check fails, skip the pattern and log: Skipped: "<description>" — failed litmus test (verdict: OBSERVATION ONLY)

Gate 2: Semantic Duplicate Detection

For patterns that pass the litmus test: 1. pq_query('(-> (search "description" :domain) (:take 5))') — find similar existing patterns 2. Read top results and assess semantic similarity 3. If similar pattern exists (same concept, different wording): - pq_query('(-> (pattern "existing-id") (:evolve! "merged content" :reason "Merged with new finding"))') — incorporate new nuance - Increment duplicates_merged counter - Log: Merged with [existing-id]: "<merged description>" 4. If truly novel (no semantic overlap): - Proceed to addition

Addition

For novel patterns that passed both gates: 1. pq_query('(add! :domain :X :content "...")') — auto-generates ID 2. Log the new pattern ID returned 3. Increment patterns_added counter

Step 5: Evolve Pattern Descriptions

For each description update recommendation: 1. pq_query('(-> (pattern "id") :full)') — read current content 2. pq_query('(-> (pattern "id") (:evolve! "updated content" :reason "reason"))') — apply update 3. Increment patterns_evolved counter

Rules for evolution: - Preserve the core meaning - Add nuance or context discovered - Keep content concise - Include reason from reflection.md

Step 6: Generate Summary

Return JSON with complete tally of all operations:

{
  "status": "success",
  "summary": "Processed N patterns: X helpful, Y harmful, Z added, W evolved, V merged",
  "feedback_given": "<total :feedback! mutations>",
  "patterns_added": "<total (add! ...) mutations>",
  "patterns_evolved": "<total :evolve! mutations>",
  "duplicates_merged": "<count of merge-instead-of-add>"
}

Quality Standards

Standard Requirement
Harm-first Process all harmful feedback before any helpful feedback
Evidence-based Only update based on reflection.md recommendations
Litmus-gated Every new pattern must pass transferable+actionable+prescriptive
Duplicate-aware (search ...) before every (add! ...)
Verified (pattern "id") before every :feedback! or :evolve!
Auditable Every operation logged in summary with reason