Skip to content

Full Configuration Example

This page shows a complete, annotated configuration that uses all of Weave's customization mechanisms together. Use it as a reference when building your own config.

Complete Config

jsonc
{
  // ── Domain-Specific Configurations for Shuttle ─────────────────
  // Categories define named variants for different technical domains.
  // Loom dynamically learns about these and routes work accordingly.
  "categories": {
    "backend": {
      "description": "Python FastAPI backend",
      "model": "anthropic/claude-opus-4",
      "temperature": 0.1,
      "prompt_append": "Use async/await. Include docstrings."
    },
    "frontend": {
      "description": "React TypeScript UI",
      "model": "openai/gpt-5",
      "temperature": 0.2,
      "prompt_append": "Use React 18+ hooks. Test accessibility."
    }
  },

  // ── Per-Agent Customization ─────────────────────────────────────
  // Configure each agent independently. All fields are optional —
  // unset fields fall back to the agent's built-in defaults.
  "agents": {
    "loom": {
      "display_name": "Tech Lead",
      "model": "anthropic/claude-opus-4",
      "temperature": 0.1,
      "prompt_append": "When reviewing security-sensitive changes, delegate to BOTH Warp AND Security (GPT)."
    },
    "tapestry": {
      "temperature": 0.0,
      "prompt_append": "Format all todos: [N/M: task]. Use checkmarks for complete.",
      "skills": ["tdd"]
    },
    "shuttle": {
      "display_name": "Senior Dev",
      "skills": ["company-standards", "testing"],
      "prompt_append": "Always verify before marking complete."
    },
    "pattern": {
      "model": "anthropic/claude-opus-4",
      "skills": ["planning-guidelines"],
      "prompt_append": "Create detailed acceptance criteria."
    },
    "thread": {
      "model": "anthropic/claude-3-haiku"  // Cheaper model for read-only work
    }
  },

  // ── Custom Agents ───────────────────────────────────────────────
  // Define your own agents. They appear alongside built-ins in Loom's
  // delegation table and follow the same model resolution chain.
  "custom_agents": {
    "security-gpt": {
      "display_name": "Security (GPT)",
      "description": "Independent security review using a second model",
      "model": "openai/gpt-5",
      "category": "advisor",
      "cost": "EXPENSIVE",
      "prompt": "You are a security auditor. Review code for OWASP Top 10 vulnerabilities. Produce a clear APPROVE or REJECT verdict.",
      "tools": { "write": false, "edit": false, "bash": false },
      "triggers": [
        { "domain": "Security", "trigger": "Independent security review for cross-model coverage" }
      ]
    },
    "docs-writer": {
      "display_name": "Docs Writer",
      "description": "Technical documentation specialist",
      "model": "anthropic/claude-sonnet-4",
      "category": "utility",
      "cost": "CHEAP",
      "prompt_file": ".opencode/prompts/docs-writer.md",
      "skills": ["writing-style"],
      "triggers": [
        { "domain": "Documentation", "trigger": "README updates, API docs, user guides, changelog entries" }
      ]
    }
  },

  // ── Selective Disabling ─────────────────────────────────────────
  // Remove what you don't need. Arrays from user config and project
  // config are merged (union), so you can split across both files.
  "disabled_agents": [],
  "disabled_tools": [],
  "disabled_hooks": ["context-window-monitor"],
  "disabled_skills": [],

  // ── Continuation Behavior ────────────────────────────────────────
  // Keep post-compaction recovery on, but keep generic idle nudges off.
  "continuation": {
    "recovery": {
      "compaction": true
    },
    "idle": {
      "enabled": false,
      "work": false,
      "workflow": false,
      "todo_prompt": false
    }
  }
}

Key Architectural Notes

All Customization is Additive

prompt_append appends, skills prepend, categories layer on top. Base prompts are never modified — your customizations build on them. The only exception is agents.<name>.prompt, which fully replaces the base prompt.

Config is Layered

User-level defaults (~/.config/opencode/weave-opencode.jsonc) + project-level overrides (.opencode/weave-opencode.jsonc) merge gracefully. Nested objects deep-merge, arrays union, scalars favor the project config.

Tapestry Cannot Spawn Subagents

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

Skills are the Primary Extension Point

Skills are portable, reusable, and can be shared across teams or pulled from open-source repos. They're the recommended way to package domain knowledge for consistent reuse. See Skills.

Which Mechanism for Which Use Case

Use CaseMechanism
Add instructions to a specific agentprompt_append on agents.<name>
Inject reusable domain knowledgeSkills (.opencode/skills/)
Optimize models per domainCategories
Change which LLM an agent usesagents.<name>.model
Rename an agent in the UIagents.<name>.display_name
Restrict what tools an agent can useagents.<name>.tools
Replace an agent's entire promptagents.<name>.prompt (use sparingly)
Add a new specialist agentcustom_agents
Add a parallel reviewer with a different modelcustom_agents + Loom prompt_append
Remove an agent from the systemdisabled_agents or agents.<name>.disable
Turn off a governance hookdisabled_hooks
Disable session analyticsdisabled_hooks: ["analytics"]
Tune recovery vs idle continuation behaviorcontinuation
Exclude a specific skilldisabled_skills
Reshape the entire workflowWorkflow Customization

Released under the MIT License.