# 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.