| name | continuous-feedback |
| description | Identifies improvement targets from accumulated session learnings and proposes concrete skill/agent modifications. General-purpose pipeline for any Claude Code project. |
| user-invocable | true |
| argument-hint | <target-skill-or-path> [--sources <paths>] [--since <session-N>] |
| skills | ["subagent-prompting"] |
| allowed-tools | ["AskUserQuestion","Bash","Glob","Grep","Read","Skill","Task","Write"] |
| version | 1.0.0 |
| author | Ashay Kubal @ Qball Inc. |
Continuous Feedback
Analyzes accumulated session handoffs, memory files, and other learning sources to identify concrete improvement opportunities for skills and agents. Spawns a Collector, 1-3 specialized Analyzers (parallel), and a Proposer โ then validates and annotates proposals for user review.
When to Use This Skill
Load this skill when the user request matches ANY of these patterns:
| Trigger Pattern | Example User Request |
|---|
| Skill improvement | "What improvements can we make to test-audit?", "Evolve code-review" |
| Session learning harvest | "What have we learned across sessions?", "Harvest learnings" |
| Feedback loop | "Run continuous feedback on X", "Analyze our session learnings" |
| Retrospective | "What patterns have emerged?", "Review accumulated experience" |
DO NOT use for:
- Initial topic research (use
bulwark-research)
- Brainstorming new features (use
bulwark-brainstorm)
- Code review (use
code-review)
- Debugging (use
issue-debugging)
Dependencies
| Category | Files | Requirement | When to Load |
|---|
| Collect instructions | references/collect-instructions.md | REQUIRED | Include in Collector prompt |
| Specialization references | references/specialize-*.md | REQUIRED | Load matching specializations for Analyzers |
| Collect output template | templates/collect-output.md | REQUIRED | Include in Collector prompt |
| Proposal output template | templates/proposal-output.md | REQUIRED | Include in Proposer prompt |
| Diagnostic template | templates/diagnostic-output.yaml | REQUIRED | Use when writing diagnostics |
| Subagent prompting | subagent-prompting skill | REQUIRED | Load at Stage 0 for 4-part prompt template |
Fallback behavior:
- If a specialization reference is missing: Skip that specialization, always run general Analyzer, note in diagnostics
- If output template is missing: Use the schemas from this SKILL.md directly
Usage
/continuous-feedback <target-skill-or-path> [--sources <paths>] [--since <session-N>]
Arguments:
<target-skill-or-path> โ Target skill name (e.g., test-audit) or path to a skill directory. If a directory containing multiple skills, analyze all detected skill types.
--sources <paths> โ Custom input source paths (files or directories). Overrides default input sources.
--since <session-N> โ Only collect learnings from session N onwards. Default: last 10 sessions.
Examples:
/continuous-feedback test-audit โ Analyze learnings for the test-audit skill
/continuous-feedback test-audit --since session-50 โ Only learnings from session 50 onwards
/continuous-feedback skills/code-review/ --sources logs/research/ โ Custom input sources
/continuous-feedback .claude/skills/ โ Analyze all skills in the directory
Stages
Stage 0: Pre-Flight (Orchestrator)
Stage 0: Pre-Flight
โโโ Parse arguments (target, --sources, --since)
โโโ Resolve target: skill name โ skill directory path
โ โโโ Check skills/{name}/ first
โ โโโ Then .claude/skills/{name}/
โ โโโ If raw path provided, use directly
โโโ Verify Pre-Flight Gate (see below)
โโโ Resolve input sources (default or custom)
โโโ Determine specializations: read target's SKILL.md to detect skill type
โโโ Slugify target for output directory
โโโ Create output directory: logs/continuous-feedback/{run-slug}/
โโโ Load subagent-prompting skill
โโโ Load references/collect-instructions.md
โโโ Load matching references/specialize-*.md files
โโโ AskUserQuestion if target is ambiguous or inputs are unclear
โโโ Token budget check (warn if >30% consumed)
Pre-Flight Gate
MANDATORY โ These checks MUST pass before proceeding. Do NOT skip.
| Check | Condition | Failure Action |
|---|
| Session handoff threshold | โฅ5 session handoffs exist in the input scope | STOP: "Insufficient input data. Need at least 5 session handoffs. Found {N}." |
| Target path exists | Target path exists and contains readable files | STOP: "Target path does not exist: {path}" |
| Target is identifiable | Can determine what kind of skill/asset the target is | AskUserQuestion: "Could not determine target type. What kind of skill is {target}?" |
Default Input Sources
When --sources is NOT provided, use these defaults:
sessions/*.md โ Session handoff files (windowed by --since, default: last 10)
- Project MEMORY.md โ Always read in full (curated summary, not windowed)
.claude/agent-memory/*/MEMORY.md โ Agent memory files when available
Stage 1: Collect (Sonnet sub-agent, sequential)
Stage 1: Collect
โโโ Construct prompt using 4-part template (GOAL/CONSTRAINTS/CONTEXT/OUTPUT)
โ โโโ GOAL: Parse input sources and extract learning items with source
โ โ attribution and LLM-classified skill_relevance tags
โ โโโ CONSTRAINTS:
โ โ โโโ Use Grep to locate section headers, Read with offsets for targeted extraction
โ โ โโโ Preserve full learning content (pass-through, no lossy compression)
โ โ โโโ Assign skill_relevance via LLM classification (NOT keyword matching)
โ โ โโโ Each item MUST have: id, source, section, category, skill_relevance, content
โ โ โโโ Target 1000-2000 words depending on input volume
โ โโโ CONTEXT:
โ โ โโโ Input file paths (resolved session handoffs, memory files, custom paths)
โ โ โโโ Parsing rules from references/collect-instructions.md
โ โ โโโ Collect output template from templates/collect-output.md
โ โโโ OUTPUT: logs/continuous-feedback/{run-slug}/01-collect.md
โโโ Spawn general-purpose Sonnet agent
โโโ Read Collector output
โโโ Verify output is non-empty (see Error Handling)
โโโ Extract skill_types_detected from Collector YAML header
โโโ Token budget check
Pass-through schema: The Collector groups and tags learning items but preserves near-raw content. Each item includes:
- id: L001
source: "session_45_20260208.md"
section: "Learnings"
category: "defect-pattern"
skill_relevance: ["test-audit", "code-review"]
content: |
Full learning text preserved with surrounding context.
No lossy compression โ Analyzers handle interpretation.
Stage 2: Analyze (1-3 Sonnet sub-agents, parallel)
Stage 2: Analyze
โโโ Read Collector output (01-collect.md)
โโโ Determine Analyzer count from skill_types_detected:
โ โโโ If "test-audit" in detected types โ load specialize-test-audit.md
โ โโโ If "code-review" in detected types โ load specialize-code-review.md
โ โโโ ALWAYS spawn general Analyzer with specialize-general.md
โโโ For each Analyzer, construct prompt using 4-part template:
โ โโโ GOAL: Analyze collected learnings through {specialization} lens and
โ โ identify concrete improvements for the target skill
โ โโโ CONSTRAINTS:
โ โ โโโ Only analyze items matching your specialization (filtered by skill_relevance)
โ โ โโโ General Analyzer: also process items not fully covered by other Analyzers
โ โ โโโ Read the target skill's current files to avoid proposing existing content
โ โ โโโ For each improvement: what was learned, what it affects, proposed change, priority, evidence
โ โ โโโ Target 800-1200 words
โ โโโ CONTEXT:
โ โ โโโ Collector output (01-collect.md)
โ โ โโโ Specialization reference (references/specialize-{type}.md)
โ โ โโโ Target skill path for autonomous exploration
โ โโโ OUTPUT: logs/continuous-feedback/{run-slug}/02-analyze-{specialization}.md
โโโ Spawn all Analyzers in parallel (single message, multiple Task calls)
โโโ Read all Analyzer outputs
โโโ Token budget check (checkpoint if >55%)
CRITICAL: Spawn all Analyzers in a single message with N Task tool calls. Do NOT spawn sequentially.
Dynamic spawning: The number of Analyzers is data-driven (1-3). If collected learnings only match test-audit and general, only 2 Analyzers spawn. The general Analyzer ALWAYS runs.
Stage 3: Act/Propose (Sonnet sub-agent, sequential)
Stage 3: Act
โโโ Construct prompt using 4-part template:
โ โโโ GOAL: Synthesize all analyses into concrete, copy-paste-ready change
โ โ proposals for the target skill
โ โโโ CONSTRAINTS:
โ โ โโโ Every proposal MUST have all mandatory fields (see proposal template)
โ โ โโโ Proposed content MUST be copy-paste ready โ specific enough to apply
โ โ โ without interpretation
โ โ โโโ "Improve X" is a FAILURE. "Add the following pattern to {file} under
โ โ โ {section}: [specific content]" is SUCCESS
โ โ โโโ Read target skill's current files to avoid stale proposals
โ โ โโโ Skip proposals for content that already exists in the target
โ โ โโโ Deduplicate across analyses โ merge overlapping improvements
โ โ โโโ Target 1500-2500 words
โ โโโ CONTEXT:
โ โ โโโ All Analyzer outputs (02-analyze-*.md files)
โ โ โโโ Proposal output template from templates/proposal-output.md
โ โ โโโ Target skill path for autonomous exploration
โ โโโ OUTPUT: logs/continuous-feedback/{run-slug}/03-proposal.md
โโโ Spawn general-purpose Sonnet agent
โโโ Read Proposer output
โโโ Verify proposals have mandatory fields (see Error Handling)
โโโ Token budget check
Proposal mandatory fields (each proposed change):
| Field | Required | Description |
|---|
| Target | YES | Exact file path |
| Change type | YES | Add / Modify / Remove |
| Section | YES | Target section within file, or "New section" |
| Priority | YES | High / Medium / Low |
| Source learnings | YES | L-IDs and session/memory references |
| Proposed content | YES | Copy-paste ready text |
| Rationale | YES | Why this improves the skill, traced to learning items |
| Validation | YES | How to verify the change works |
Stage 4: Validate (Orchestrator, no sub-agent)
Stage 4: Validate
โโโ Read proposal document (03-proposal.md)
โโโ For each proposed change:
โ โโโ If targeting a skill asset (.md in skills/ or .claude/skills/):
โ โ โโโ Annotate: "Run /anthropic-validator on {target} after applying"
โ โโโ If targeting a code file (.ts, .js, .sh, etc.):
โ โ โโโ Annotate: "Run just typecheck && just lint && just test after applying"
โ โโโ If targeting configuration:
โ โโโ Annotate: "Verify configuration is valid and reload"
โโโ Write validation notes to logs/continuous-feedback/{run-slug}/04-validation.md
โโโ Present proposals to user with validation annotations
Design note: Stage 4 does NOT run validators on proposals (proposals are not applied yet). It annotates each proposal with the appropriate validation steps the user should run after applying.
Stage 5: Diagnostics (REQUIRED)
Stage 5: Diagnostics
โโโ Write diagnostic YAML to logs/diagnostics/continuous-feedback-{YYYYMMDD-HHMMSS}.yaml
โ โโโ Use templates/diagnostic-output.yaml schema
โโโ Verify completion checklist
Execution Flow (F# Pipeline)
// continuous-feedback pipeline
PreFlight(args, inputs) // Stage 0: Orchestrator
|> Collector(sessions, memory, custom) // Stage 1: Sonnet, sequential
|> [Analyzer(test-audit), Analyzer(code-review), Analyzer(general)] // Stage 2: Sonnet, parallel (dynamic 1-3)
|> Proposer(all_analyses, target_skills) // Stage 3: Sonnet, sequential
|> Validate(proposal) // Stage 4: Orchestrator, no sub-agent
Token Budget Management
| Checkpoint | Threshold | Action |
|---|
| After Pre-Flight | >30% consumed | Warn user: "Pipeline agents will consume significant context" |
| After Collector output read | Running tally | If approaching 45%, checkpoint with user |
| After all Analyzers complete | Running tally | If approaching 55%, checkpoint with user |
| After Proposer output read | Must be <65% | Leave room for validation + diagnostics |
| Pipeline complete at >65% | Immediate | Write diagnostics, do not start additional work |
If token budget is insufficient to complete the full pipeline, inform the user and suggest: "Collector + Analyzers this session, Proposer + validation next session."
Error Handling
| Scenario | Action |
|---|
| Collector returns empty output | Re-spawn once with reinforced extraction instructions. If still empty, STOP โ cannot proceed without collected learnings. |
| Collector returns truncated output | Accept as-is, note in diagnostics. |
| Analyzer returns empty output | Re-spawn once. If still empty, skip that specialization, document gap. |
| Proposer returns empty/vague output | Re-spawn once with reinforced specificity instructions. If still vague, document in diagnostics. |
| Proposer proposals missing mandatory fields | Re-spawn once with explicit field checklist. If still incomplete, document in diagnostics. |
| Token budget exceeded mid-pipeline | Stop spawning, write partial results, note incomplete in diagnostics. |
| No learnings match a specialization | Do not spawn that Analyzer. Document in diagnostics. |
| Fewer than 5 session handoffs | Pre-Flight Gate blocks. Inform user. |
| Target path does not exist | Pre-Flight Gate blocks. Inform user. |
Diagnostic Output (REQUIRED)
MANDATORY: You MUST write diagnostic output after every invocation. This is Stage 5 and cannot be skipped.
Write to: logs/diagnostics/continuous-feedback-{YYYYMMDD-HHMMSS}.yaml
Template: Use templates/diagnostic-output.yaml for the schema. Fill in actual values from the session.
Completion Checklist
IMPORTANT: Before returning to the user, verify ALL items are complete:
Do NOT return to user until all checkboxes can be marked complete.