Skip to content

Agent Configuration

Every Weave agent can be individually configured under agents.<name> in your config. You can override the model, adjust temperature, inject skills, append to the prompt, restrict tools, and more.

Configuration Fields

FieldTypeDescription
modelstringOverride the LLM used (e.g., "anthropic/claude-opus-4")
fallback_modelsstring[]Fallback model chain if primary is unavailable
temperaturenumber (0–2)Creativity/determinism dial. Lower = more deterministic
top_pnumber (0–1)Nucleus sampling parameter
variantstringSelect an alternate prompt variant for this agent
categorystringAssign a category for model resolution
skillsstring[]Skills to inject into the agent's prompt
promptstringFull replacement of the agent's base prompt
prompt_appendstringAppend text to the agent's base prompt
toolsobjectPer-tool enable/disable toggles
display_namestringOverride the agent's display name in the UI
disablebooleanRemove this agent from the system entirely
modestringUI selection mode: primary, subagent, or all — see Agent Mode
maxTokensnumberCap the agent's output token length

prompt vs. prompt_append

prompt completely replaces the agent's built-in prompt — the agent's core behavior is gone. Use prompt_append instead unless you have a strong reason to take full control. See Prompt Append.

Agent Mode

The mode field controls how an agent appears in OpenCode's interface:

ModeBehavior
primaryAgent appears in the main agent selector in OpenCode's UI. Users can select it directly. It does not appear in the delegation table for other agents to call.
subagentAgent is only available via delegation from other agents (e.g., Loom delegates to it). It does not appear in the agent selector — users can't select it directly.
allAgent appears in both the agent selector AND the delegation table. Users can select it directly, and other agents can also delegate to it.

Built-in defaults: Loom and Tapestry are primary. Shuttle is all. Pattern, Thread, Spindle, Weft, and Warp are subagent.

TIP

For custom agents, mode defaults to "subagent" — meaning Loom can delegate to them but users don't see them in the selector. Set mode: "all" if you want users to also be able to select the agent directly.

Available Agents

Config KeyRole
loomMain orchestrator — plans, delegates, and supervises all work
tapestryExecution orchestrator — drives plan execution step by step
shuttleDomain specialist — handles delegated coding and analysis tasks
patternStrategic planner — produces .weave/plans/ files
threadCodebase explorer — fast, read-only analysis and search
spindleExternal researcher — web fetching and research
weftQuality reviewer and auditor
warpSecurity auditor

Model Resolution Chain

When an agent needs to pick a model, it resolves through this priority chain:

  1. Config overrideagents.<name>.model (highest priority)
  2. UI-selected model — user's current selection in primary/all modes
  3. Category model — if the agent has a category assigned with a model
  4. Agent's fallback chain — built-in fallback: Anthropic → OpenAI → Google
  5. System default — lowest priority

This means you can set agents.loom.model in your user config as a global default, and projects can override it selectively.

Examples

Set models per agent:

jsonc
{
  "agents": {
    "loom": {
      "model": "anthropic/claude-opus-4",
      "temperature": 0.1
    },
    "thread": {
      "model": "anthropic/claude-3-haiku"  // Cheaper for read-only analysis
    },
    "weft": {
      "model": "openai/gpt-5"
    }
  }
}

Inject skills and append instructions:

jsonc
{
  "agents": {
    "shuttle": {
      "skills": ["company-standards", "testing"],
      "prompt_append": "Always run `npm test` before marking any task complete."
    },
    "pattern": {
      "skills": ["planning-guidelines"],
      "prompt_append": "Every plan must have at least 3 acceptance criteria per task."
    }
  }
}

Configure fallback models:

jsonc
{
  "agents": {
    "loom": {
      "model": "anthropic/claude-opus-4",
      "fallback_models": ["openai/gpt-5", "google/gemini-2.0-pro"]
    }
  }
}

Rename agents with display names:

jsonc
{
  "agents": {
    "loom": { "display_name": "Coordinator" },
    "thread": { "display_name": "Scout" }
  }
}

Disable an agent:

jsonc
{
  "agents": {
    "warp": {
      "disable": true
    }
  }
}

Tapestry Constraints

Tapestry has one locked constraint that cannot be overridden via config: it cannot spawn subagents (task and call_weave_agent tools are always disabled). This is by design — Tapestry executes plans directly rather than re-delegating.

Display Names

Every built-in agent can be given a custom display name via the display_name field. The display name appears in the UI header, agent responses, and prompt routing — while the config key (loom, thread, etc.) stays the same for all configuration purposes.

This is useful for:

  • Localization — name agents in your native language
  • Personalization — give agents names that match your team's vocabulary
  • Theming — create a consistent naming theme across your setup

Japanese Localization

jsonc
{
  "agents": {
    "loom": { "display_name": "織機 (メインオーケストレーター)" },
    "thread": { "display_name": "糸 (コード探索)" },
    "pattern": { "display_name": "型紙 (設計プランナー)" },
    "shuttle": { "display_name": "杼 (ドメイン専門家)" },
    "spindle": { "display_name": "紡錘 (外部リサーチ)" },
    "weft": { "display_name": "横糸 (レビュアー)" },
    "warp": { "display_name": "経糸 (セキュリティ)" }
  }
}

Team Role Names

jsonc
{
  "agents": {
    "loom": { "display_name": "Tech Lead" },
    "pattern": { "display_name": "Architect" },
    "shuttle": { "display_name": "Senior Dev" },
    "thread": { "display_name": "Analyst" },
    "weft": { "display_name": "QA Lead" },
    "warp": { "display_name": "SecOps" }
  }
}

Config Key vs Display Name

The config key (e.g., loom, thread) is always used in configuration files, CLI commands, and internal routing. The display_name only affects what you see in the UI. You can rename agents without breaking any config references, skills, or delegation rules.

Custom Agents

Beyond configuring the built-in agents, you can define entirely new agents via the custom_agents config block. Custom agents support all the same model resolution, skills, and tool permissions — plus additional fields like display_name, category, cost, and delegation triggers.

jsonc
{
  "custom_agents": {
    "docs-writer": {
      "display_name": "Docs Writer",
      "description": "Technical documentation specialist",
      "model": "anthropic/claude-sonnet-4",
      "prompt": "You are a technical documentation expert.",
      "mode": "subagent"
    }
  }
}

Custom agents appear alongside built-ins in the delegation table — Loom can route tasks to them automatically based on their triggers.

Full Guide

See Custom Agents for the complete reference, including naming rules, prompt sources, tool permissions, and practical examples.

Released under the MIT License.