summaryrefslogtreecommitdiff
path: root/docs/proposals/feature-task-templates.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/proposals/feature-task-templates.md')
-rw-r--r--docs/proposals/feature-task-templates.md602
1 files changed, 602 insertions, 0 deletions
diff --git a/docs/proposals/feature-task-templates.md b/docs/proposals/feature-task-templates.md
new file mode 100644
index 0000000..98abde9
--- /dev/null
+++ b/docs/proposals/feature-task-templates.md
@@ -0,0 +1,602 @@
+# Feature Proposal: Reusable Task Templates & Meta-Commands
+
+> **Priority:** Medium
+> **Complexity:** Medium
+> **Estimated Effort:** 8-12 days
+> **Status:** Proposal
+> **Date:** 2026-02-09
+> **Dependencies:** None (standalone, but complements [Workflow Presets](feature-workflow-presets.md))
+> **Related:** [Overview Analysis](compound-engineering-analysis.md) · [Workflow Presets](feature-workflow-presets.md) · [Multi-Agent Review](feature-multi-agent-review.md)
+
+---
+
+## Problem Statement
+
+Makima tasks are created with **ad-hoc plans** every time:
+
+- **No plan reuse** — even when spawning the same type of task (e.g., "add API endpoint"), the plan is written from scratch
+- **No standardization** — different supervisors produce different quality plans for the same task type
+- **No best practices encoding** — hard-won knowledge about how to structure certain tasks isn't captured
+- **No variable substitution** — plans can't be parameterized for reuse
+- **No validation** — there's no way to verify a plan includes required steps before execution
+- **No meta-creation** — the system cannot create its own task templates or improve its own capabilities
+
+The compound engineering plugin addresses this with meta-commands (`/create-agent-skill`, `/heal-skill`) that allow the system to create and repair its own specialized capabilities.
+
+---
+
+## How Compound Engineering Solves This
+
+### `/create-agent-skill`
+
+Creates new specialized agents and skills on demand:
+
+```bash
+/create-agent-skill "database migration reviewer"
+```
+
+This generates:
+1. An agent definition file with specialized prompts
+2. A skill file that exposes the agent as a command
+3. Registration in the agent/skill registry
+
+### `/heal-skill`
+
+When a skill breaks (e.g., after a dependency change), this meta-command:
+1. Analyzes the error
+2. Identifies the root cause
+3. Patches the skill definition
+4. Tests the fix
+
+The key insight: **the system should be able to improve and extend itself**.
+
+---
+
+## Proposed Makima Implementation
+
+### 1. Task Recipe Format
+
+Task recipes are parameterized plan templates with validation and metadata:
+
+```yaml
+# .makima/recipes/api-endpoint.yaml
+name: api-endpoint
+description: "Create a new REST API endpoint"
+version: 1
+author: "team"
+tags: [api, backend, rest]
+
+# Input variables
+variables:
+ endpoint_name:
+ required: true
+ description: "Name of the endpoint (e.g., 'users', 'orders')"
+ validation: "^[a-z][a-z0-9-]*$"
+
+ http_method:
+ required: true
+ description: "HTTP method"
+ enum: [GET, POST, PUT, PATCH, DELETE]
+ default: GET
+
+ resource_name:
+ required: true
+ description: "Name of the resource/model"
+
+ requires_auth:
+ required: false
+ default: true
+ description: "Whether the endpoint requires authentication"
+
+ database_table:
+ required: false
+ description: "Database table name (if applicable)"
+
+# Plan template with variable substitution
+plan: |
+ ## Task: Create {{ http_method }} /api/{{ endpoint_name }} Endpoint
+
+ ### Step 1: Define Route
+ Add the `{{ http_method }} /api/{{ endpoint_name }}` route to the router.
+ {% if requires_auth %}
+ Apply authentication middleware to this route.
+ {% endif %}
+
+ ### Step 2: Create Handler
+ Create the handler function for {{ endpoint_name }}.
+ {% if database_table %}
+ The handler should query the `{{ database_table }}` table.
+ {% endif %}
+
+ ### Step 3: Request/Response Models
+ Define request and response types for the {{ resource_name }} resource.
+ Include validation for all input fields.
+
+ ### Step 4: Error Handling
+ Implement proper error responses:
+ - 400 for validation errors
+ - 401 for authentication failures
+ {% if requires_auth %}
+ - 403 for authorization failures
+ {% endif %}
+ - 404 for not found
+ - 500 for server errors
+
+ ### Step 5: Tests
+ Write tests covering:
+ - Happy path
+ - Input validation
+ {% if requires_auth %}
+ - Authentication required
+ - Authorization check
+ {% endif %}
+ - Error cases
+ - Edge cases
+
+ ### Step 6: Documentation
+ Update API documentation with:
+ - Endpoint URL and method
+ - Request/response schemas
+ - Example requests and responses
+ - Error codes
+
+# Validation rules — checks that must pass before execution
+validation:
+ - check: "file_exists"
+ path: "src/api/mod.rs"
+ message: "API module must exist"
+ - check: "grep"
+ pattern: "Router"
+ path: "src/api/mod.rs"
+ message: "Router must be defined in API module"
+
+# Expected outputs
+outputs:
+ files:
+ - "src/api/{{ endpoint_name }}.rs"
+ - "src/api/{{ endpoint_name }}_test.rs"
+ tests:
+ - "cargo test {{ endpoint_name }}"
+
+# Metadata for recipe discovery
+metadata:
+ estimated_time: "30-60 minutes"
+ difficulty: "easy"
+ example_usage: |
+ makima recipe run api-endpoint \
+ --var endpoint_name=users \
+ --var http_method=GET \
+ --var resource_name=User \
+ --var database_table=users
+```
+
+### 2. Recipe Registry
+
+Recipes are discovered from three sources (same hierarchy as workflow presets):
+
+| Level | Location | Scope |
+|-------|----------|-------|
+| Built-in | Shipped with makima | All users |
+| Repository | `.makima/recipes/` | All users of the repo |
+| User | `~/.makima/recipes/` | Single user |
+
+**Precedence**: User > Repository > Built-in (same name overrides)
+
+### 3. Supervisor Commands
+
+#### List Available Recipes
+
+```bash
+makima recipe list
+
+# Output:
+# NAME DESCRIPTION SOURCE TAGS
+# api-endpoint Create a new REST API endpoint built-in api, backend
+# db-migration Create a database migration built-in database
+# react-component Create a React component built-in frontend, react
+# unit-test Create unit tests for a module built-in testing
+# bug-fix Structured bug fix workflow built-in debugging
+# custom-validator Create input validation module repo validation
+```
+
+#### Run a Recipe
+
+```bash
+# Run with explicit variables
+makima recipe run api-endpoint \
+ --var endpoint_name=users \
+ --var http_method=GET \
+ --var resource_name=User \
+ --var database_table=users
+
+# Run with interactive variable input
+makima recipe run api-endpoint
+
+# Preview the generated plan (dry run)
+makima recipe preview api-endpoint \
+ --var endpoint_name=users \
+ --var http_method=GET
+```
+
+#### Create a Recipe
+
+```bash
+# Create recipe from scratch
+makima recipe create --name "my-recipe" --edit
+
+# Generate recipe from a completed task (meta-creation)
+makima recipe create --from-task <task-id> --name "my-recipe"
+
+# Generate recipe from a plan file
+makima recipe create --from-plan plan.md --name "my-recipe"
+```
+
+#### Validate a Recipe
+
+```bash
+# Validate recipe file
+makima recipe validate .makima/recipes/my-recipe.yaml
+
+# Validate recipe variables
+makima recipe validate api-endpoint \
+ --var endpoint_name=users \
+ --var http_method=GET
+```
+
+### 4. Meta-Commands: Self-Improving Templates
+
+The most powerful aspect of the compound engineering plugin is its ability to **create its own capabilities**. Makima can implement similar meta-commands:
+
+#### `makima recipe generate`
+
+The system analyzes completed tasks and suggests recipe templates:
+
+```bash
+# Analyze recent tasks and suggest recipes
+makima recipe generate --analyze-last 20
+
+# Output:
+# Detected patterns:
+# 1. "API endpoint creation" — 7 tasks followed similar pattern
+# Suggested recipe: api-endpoint (confidence: 0.89)
+# Variables: endpoint_name, http_method, resource_name
+#
+# 2. "Database migration" — 4 tasks followed similar pattern
+# Suggested recipe: db-migration (confidence: 0.76)
+# Variables: table_name, migration_type
+#
+# Generate these recipes? [y/N]
+```
+
+#### `makima recipe heal`
+
+When a recipe fails repeatedly, the system can analyze and fix it:
+
+```bash
+# Analyze recipe failures and suggest fixes
+makima recipe heal api-endpoint
+
+# Output:
+# Analyzed 3 recent failures of 'api-endpoint':
+# Root cause: Step 1 references 'src/api/mod.rs' but project uses 'src/routes/mod.rs'
+# Suggested fix: Change validation path and plan references
+# Apply fix? [y/N]
+```
+
+#### `makima recipe evolve`
+
+Improve recipes based on review findings:
+
+```bash
+# Check if review findings suggest recipe improvements
+makima recipe evolve api-endpoint --from-findings
+
+# Output:
+# Review findings from tasks using 'api-endpoint' recipe:
+# - SEC-001: "Missing rate limiting" (3 occurrences)
+# - PERF-001: "Missing pagination" (2 occurrences)
+#
+# Suggested additions to recipe:
+# 1. Add "Rate Limiting" step after Step 1
+# 2. Add pagination to Step 2 for GET endpoints
+# Apply improvements? [y/N]
+```
+
+### 5. Built-In Recipes
+
+#### `api-endpoint`
+
+Creates a REST API endpoint with handler, models, validation, tests, and docs.
+
+#### `db-migration`
+
+Creates a database migration with up/down scripts, validation, and rollback plan.
+
+```yaml
+name: db-migration
+variables:
+ table_name: { required: true }
+ migration_type: { required: true, enum: [create-table, alter-table, add-index, seed-data] }
+plan: |
+ ## Create Database Migration: {{ migration_type }} on {{ table_name }}
+ ### Step 1: Create migration file
+ ### Step 2: Write up migration
+ ### Step 3: Write down migration (rollback)
+ ### Step 4: Test migration on clean database
+ ### Step 5: Test rollback
+ ### Step 6: Document migration in changelog
+```
+
+#### `react-component`
+
+Creates a React component with props, state, styling, and tests.
+
+#### `unit-test`
+
+Generates unit tests for an existing module by analyzing its public API.
+
+#### `bug-fix`
+
+Structured bug fix workflow: reproduce → root cause → fix → test → document.
+
+```yaml
+name: bug-fix
+variables:
+ bug_description: { required: true }
+ reproduction_steps: { required: false }
+ affected_area: { required: false }
+plan: |
+ ## Bug Fix: {{ bug_description }}
+
+ ### Step 1: Reproduce
+ {% if reproduction_steps %}
+ Follow these reproduction steps: {{ reproduction_steps }}
+ {% else %}
+ Identify and document reproduction steps.
+ {% endif %}
+
+ ### Step 2: Root Cause Analysis
+ Trace the code path to identify the root cause.
+ {% if affected_area %}
+ Start in: {{ affected_area }}
+ {% endif %}
+
+ ### Step 3: Implement Fix
+ Fix the root cause, not just the symptom.
+
+ ### Step 4: Write Regression Test
+ Create a test that would have caught this bug.
+
+ ### Step 5: Verify Fix
+ Run the reproduction steps and confirm the bug is fixed.
+ Run the full test suite to check for regressions.
+
+ ### Step 6: Document
+ Document what caused the bug and how it was fixed.
+```
+
+---
+
+## Integration with Existing Makima Features
+
+### Supervisor Task Spawning
+
+Recipes generate plans that are passed to `spawn-task`:
+
+```rust
+// Recipe execution
+let plan = recipe.render_plan(&variables)?;
+let task = spawn_task(SpawnTaskRequest {
+ task_name: format!("{} ({})", recipe.name, variables.get("primary_var")),
+ plan,
+ // ... other params from context
+})?;
+```
+
+### Contract Files
+
+Recipe definitions can be stored as contract files for versioning:
+
+```rust
+File {
+ contract_id: None, // Global, not contract-specific
+ name: "Recipe: api-endpoint",
+ body: vec![
+ BodyElement::Code { language: Some("yaml"), content: recipe_yaml },
+ ],
+}
+```
+
+### Workflow Presets
+
+Recipes and presets are complementary:
+- **Presets** define the high-level workflow (which phases, what triggers)
+- **Recipes** define the low-level task plans (what each task does)
+
+A preset can reference recipes:
+
+```yaml
+# In a preset
+phases:
+ execute:
+ recipe: api-endpoint # Use the api-endpoint recipe for this phase's tasks
+ recipe_vars:
+ endpoint_name: "{{ task_description }}"
+```
+
+### Knowledge Accumulation
+
+Recipes can be **evolved** based on learnings:
+- When compound learning captures a pattern, check if it maps to an existing recipe
+- If so, suggest recipe improvements
+- If not, suggest creating a new recipe
+
+### Directive System
+
+For directive-based workflows, recipes can be used as task plan sources:
+
+```rust
+DirectiveStep {
+ name: "create-users-endpoint",
+ task_plan: recipe.render_plan(&variables)?, // Generated from recipe
+ // ...
+}
+```
+
+---
+
+## Implementation Plan
+
+### Phase 1: Core Recipe System (3-4 days)
+
+| Task | Effort | Description |
+|------|--------|-------------|
+| Recipe YAML schema | 0.5 days | Define format, validation rules |
+| YAML parser with Jinja-like templating | 1 day | Variable substitution, conditionals |
+| `recipe list` command | 0.5 days | Discover and list recipes |
+| `recipe run` command | 1 day | Parse, validate, render, spawn task |
+| `recipe preview` command | 0.5 days | Dry-run display |
+
+### Phase 2: Recipe Management (2-3 days)
+
+| Task | Effort | Description |
+|------|--------|-------------|
+| Multi-level discovery | 0.5 days | Built-in, repo, user resolution |
+| `recipe create` command | 1 day | Create from scratch or from task |
+| `recipe validate` command | 0.5 days | YAML validation, variable check |
+| Built-in recipe definitions | 1 day | Write 5 default recipes |
+
+### Phase 3: Meta-Commands (3-5 days)
+
+| Task | Effort | Description |
+|------|--------|-------------|
+| `recipe generate` | 1.5 days | Pattern detection from task history |
+| `recipe heal` | 1 day | Failure analysis and auto-fix |
+| `recipe evolve` | 1 day | Improve recipes from findings/learnings |
+| Recipe versioning | 0.5 days | Version tracking, deprecation |
+| Documentation | 0.5 days | User guide, recipe authoring guide |
+
+---
+
+## Configuration Examples
+
+### Running a Recipe
+
+```bash
+# Simple usage
+makima recipe run api-endpoint \
+ --var endpoint_name=orders \
+ --var http_method=POST \
+ --var resource_name=Order \
+ --var requires_auth=true \
+ --var database_table=orders
+
+# This spawns a task with the rendered plan:
+# "## Task: Create POST /api/orders Endpoint
+# ### Step 1: Define Route
+# Add the POST /api/orders route to the router.
+# Apply authentication middleware to this route.
+# ..."
+```
+
+### Creating a Recipe from a Completed Task
+
+```bash
+# After completing a successful task
+makima recipe create --from-task abc-123 --name "graphql-resolver"
+
+# Analyzes the task's plan and execution to generate:
+# .makima/recipes/graphql-resolver.yaml
+# with variables extracted from repeated patterns
+```
+
+### Recipe with Validation
+
+```yaml
+# .makima/recipes/react-component.yaml
+name: react-component
+variables:
+ component_name:
+ required: true
+ validation: "^[A-Z][a-zA-Z]*$" # PascalCase
+ use_typescript:
+ required: false
+ default: true
+ include_tests:
+ required: false
+ default: true
+ styling:
+ required: false
+ enum: [css-modules, styled-components, tailwind]
+ default: css-modules
+
+validation:
+ - check: "file_exists"
+ path: "src/components"
+ message: "Components directory must exist"
+ - check: "not_exists"
+ path: "src/components/{{ component_name }}"
+ message: "Component {{ component_name }} already exists"
+
+plan: |
+ ## Create React Component: {{ component_name }}
+
+ ### Step 1: Component File
+ Create `src/components/{{ component_name }}/{{ component_name }}.{{ 'tsx' if use_typescript else 'jsx' }}`
+ with the component skeleton.
+
+ ### Step 2: Styling
+ {% if styling == 'css-modules' %}
+ Create `{{ component_name }}.module.css` with base styles.
+ {% elif styling == 'styled-components' %}
+ Create styled components in the component file.
+ {% elif styling == 'tailwind' %}
+ Use Tailwind CSS classes directly in the component.
+ {% endif %}
+
+ {% if include_tests %}
+ ### Step 3: Tests
+ Create `{{ component_name }}.test.{{ 'tsx' if use_typescript else 'jsx' }}`
+ with tests for rendering, props, and user interactions.
+ {% endif %}
+
+ ### Step {{ '4' if include_tests else '3' }}: Export
+ Add {{ component_name }} to the components index file.
+
+outputs:
+ files:
+ - "src/components/{{ component_name }}/{{ component_name }}.{{ 'tsx' if use_typescript else 'jsx' }}"
+ - "src/components/{{ component_name }}/index.{{ 'ts' if use_typescript else 'js' }}"
+```
+
+---
+
+## Open Questions
+
+1. **Templating language**: Should we use a full Jinja2-like syntax or a simpler `{{ variable }}` substitution? Jinja adds power but complexity.
+2. **Recipe dependencies**: Can recipes depend on other recipes? (e.g., "api-endpoint requires db-migration to have run first")
+3. **Recipe testing**: How do you test that a recipe produces valid plans? Should recipes have test cases?
+4. **Recipe marketplace**: Should there be a community registry for sharing recipes?
+5. **Pattern detection**: How sophisticated should `recipe generate` be? Simple plan comparison, or full semantic analysis?
+6. **Recipe scope**: Should recipes generate just plans, or also pre-create file scaffolding (like code generators)?
+7. **Backwards compatibility**: When a recipe is updated, what happens to tasks that were created with the old version?
+
+---
+
+## Alternatives Considered
+
+| Alternative | Pros | Cons | Decision |
+|-------------|------|------|----------|
+| Plan library (copy-paste) | Simple | No variables, no validation | Rejected — not reusable enough |
+| Code generators (scaffolding) | Creates actual files | Over-prescriptive; doesn't handle logic | Complement — recipes can reference generators |
+| LLM-only planning | Maximum flexibility | Inconsistent; no standardization | Current state — recipes improve on this |
+| Cookiecutter-style templates | Familiar | Wrong level (project-level vs task-level) | Rejected — different abstraction |
+| Hardcoded task types | Fast | Not extensible; limited variety | Rejected — need flexibility |
+
+---
+
+## Priority & Complexity Assessment
+
+- **Priority: MEDIUM** — Task templates improve consistency and speed but aren't required for makima to function. They become increasingly valuable as the system is used more (patterns emerge).
+- **Complexity: MEDIUM** — YAML parsing and variable substitution are straightforward. Meta-commands (generate, heal, evolve) require sophisticated analysis of task history and are the main complexity drivers.
+- **Risk: LOW-MEDIUM** — Core recipe system is low risk. Meta-commands (auto-generation, healing) involve AI-driven analysis that may produce variable quality. Mitigated by requiring human approval before applying changes.