Categories
Categories let you define named, domain-specific configurations for Shuttle (Weave's specialist worker). Each category generates a shuttle-{name} agent descriptor that inherits from the base shuttle agent with category-specific overrides. Adapters decide how those descriptors are materialised in a concrete harness.
Use categories when you have distinct technical domains in your project that benefit from different models or settings. For example, a monorepo with separate frontend (React) and backend (Python) workstreams.
Defining Categories
Add category blocks to your .weave/config.weave:
category backend {
description "Python FastAPI backend"
models ["anthropic/claude-opus-4"]
temperature 0.1
patterns ["src/api/**", "src/server/**", "src/db/**", "**/*.py"]
prompt_append "Use async/await. Include docstrings. Follow PEP 8."
}
category frontend {
description "React TypeScript UI"
models ["openai/gpt-5"]
temperature 0.2
patterns ["src/components/**", "src/pages/**", "**/*.tsx", "**/*.css"]
prompt_append "Use React 18+ hooks. Test accessibility. Use Tailwind CSS."
}Each category supports:
| Field | Description |
|---|---|
description | Human-readable description of what this category covers |
models | Ordered model preference list for this category's shuttle agent |
patterns | Glob patterns for file-based routing |
temperature | Temperature hint for this category's shuttle agent |
prompt_append | Instructions appended to Shuttle's prompt for this category |
prompt_append_file | File path appended to Shuttle's prompt for this category |
tool_policy | Tool policy overrides for this category's shuttle agent |
Generated Agents
Each category block generates a shuttle-{category-name} agent descriptor. For example:
category backendgeneratesshuttle-backendcategory frontendgeneratesshuttle-frontend
These descriptors carry the category's model list, temperature, appended prompt, and tool policy. Adapters receive these descriptors through the same spawnSubagent path as all other agents.
How Categories Work with Routing
When patterns are configured, adapters that support file-pattern routing can use them to route file-specific work to the appropriate category shuttle. Categories without patterns are still available as domain-specific specialists but are not auto-routed from file matches.
Adapters that support delegation routing (such as the OpenCode adapter) include category shuttle agents in Loom's delegation table. Loom can then delegate to shuttle-backend or shuttle-frontend based on the task domain. The routing metadata comes from the category descriptors generated by the engine; how adapters surface this routing to Loom is adapter-owned.
INFO
Categories are relevant to Shuttle and Shuttle-derived category routing. Other agents (Loom, Tapestry, Pattern, etc.) are configured directly via their own agent blocks, not through categories.
Example: Full-Stack Project
category backend {
description "Python FastAPI backend services"
models ["anthropic/claude-opus-4"]
temperature 0.1
patterns ["src/api/**", "src/server/**", "src/db/**", "**/*.py"]
prompt_append "Use async/await throughout. Add type hints to all functions. Include docstrings for public APIs. Follow PEP 8."
}
category frontend {
description "React TypeScript UI components"
models ["openai/gpt-5"]
temperature 0.2
patterns ["src/components/**", "src/pages/**", "**/*.tsx", "**/*.css"]
prompt_append "Use React 18+ hooks only (no class components). Use Tailwind CSS for styling. Test with React Testing Library. Ensure WCAG 2.1 AA accessibility."
}
category infra {
description "Terraform and Docker infrastructure"
models ["anthropic/claude-opus-4"]
temperature 0.0
patterns ["infra/**", "**/*.tf", "**/Dockerfile"]
prompt_append "Use Terraform 1.9+. Follow the principle of least privilege for IAM. Add comments to all non-obvious resource configurations."
}With this config, the engine generates shuttle-backend, shuttle-frontend, and shuttle-infra descriptors. Adapters that support delegation routing expose these to Loom, which can then prefer the right specialist for each task.
Combining with Skills
Categories and skills work well together. You can assign skills to specific agents that are commonly invoked for a category's workload.
