Skip to content

Categories

Categories let you define named, domain-specific configurations for Shuttle (Weave's coding specialist). When Loom delegates work to Shuttle with a category, Shuttle picks up that category's model, temperature, and custom instructions automatically.

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 a top-level categories object in your config:

jsonc
{
  "categories": {
    "backend": {
      "description": "Python FastAPI backend",
      "model": "anthropic/claude-opus-4",
      "temperature": 0.1,
      "prompt_append": "Use async/await. Include docstrings. Follow PEP 8."
    },
    "frontend": {
      "description": "React TypeScript UI",
      "model": "openai/gpt-5",
      "temperature": 0.2,
      "prompt_append": "Use React 18+ hooks. Test accessibility. Use Tailwind CSS."
    }
  }
}

Each category supports:

FieldDescription
descriptionHuman-readable description of what this category covers
modelLLM to use for tasks in this category
temperatureCreativity dial for this category (lower = more deterministic)
prompt_appendInstructions appended to Shuttle's prompt for this category

How Loom Uses Categories

Loom's prompt is dynamically generated based on the categories defined in your config. When you add a new category, Loom automatically learns how to use it — no manual wiring required.

Loom's dynamic prompt builder produces:

  • A delegation table (which agent for which task)
  • A category and skills guide (how to invoke Shuttle per domain)
  • Tool selection guidance

When Loom decides a task belongs to your backend category, it delegates to Shuttle with that category set. Shuttle then runs with the backend model, temperature, and prompt_append — a fully tailored specialist for that domain.

INFO

Categories are primarily relevant to Shuttle. Other agents (Loom, Tapestry, Pattern, etc.) are configured directly via agents.<name> in your config, not through categories.

Example: Full-Stack Project

jsonc
{
  "categories": {
    "backend": {
      "description": "Python FastAPI backend services",
      "model": "anthropic/claude-opus-4",
      "temperature": 0.1,
      "prompt_append": "Use async/await throughout. Add type hints to all functions. Include docstrings for public APIs. Follow PEP 8."
    },
    "frontend": {
      "description": "React TypeScript UI components",
      "model": "openai/gpt-5",
      "temperature": 0.2,
      "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."
    },
    "infra": {
      "description": "Terraform and Docker infrastructure",
      "model": "anthropic/claude-opus-4",
      "temperature": 0.0,
      "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, Loom will automatically route backend tasks to the backend category (low temperature, Python-focused instructions), frontend tasks to frontend, and infrastructure work to infra — each with the most appropriate model and settings.

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. For example, assign your python-typing and fastapi-patterns skills to Shuttle, and they'll be available when working in the backend category.

Released under the MIT License.