<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LSP on Adur</title><link>https://adurrr.github.io/en/tags/lsp/</link><description>Recent content in LSP on Adur</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 02 May 2026 10:00:00 +0100</lastBuildDate><atom:link href="https://adurrr.github.io/en/tags/lsp/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenCode, Agent Orchestration and Subagent-Driven Development: A Complete Guide</title><link>https://adurrr.github.io/en/p/opencode-agent-orchestration-and-subagent-driven-development-a-complete-guide/</link><pubDate>Sat, 02 May 2026 10:00:00 +0100</pubDate><guid>https://adurrr.github.io/en/p/opencode-agent-orchestration-and-subagent-driven-development-a-complete-guide/</guid><description>&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;OpenCode is an open-source, terminal-native AI coding agent built in Go. Unlike cloud-based IDEs like Cursor or Claude Code, it is entirely provider-agnostic: you bring your own API keys, run models locally, or subscribe to managed plans, and OpenCode handles the orchestration. With support for 75+ LLM providers, native LSP integration, MCP extensibility, and a thriving plugin ecosystem, it has become a standard-bearer for agentic coding.&lt;/p&gt;
&lt;p&gt;This guide is structured to take you from installation to production workflows. We begin with core concepts — agents, subagents, LSP, and MCP — then introduce &lt;strong&gt;Subagent-Driven Development (SDD)&lt;/strong&gt;, the methodology that ties orchestration, planning, and execution into a coherent workflow. From there, we map SDD to real-world domains: full-stack development, sysadmin operations, and DevOps infrastructure, drawing on documented use cases from developers in the field.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-is-opencode"&gt;What is OpenCode?
&lt;/h2&gt;&lt;p&gt;OpenCode is an open-source AI coding agent (MIT license) designed to run in your terminal, desktop, or IDE. It treats agents as a runtime system, not loose prompts. Agents are defined in code or loaded from Markdown, merged into a shared registry, and executed through a unified prompt, permission, and session pipeline.&lt;/p&gt;
&lt;h3 id="key-features"&gt;Key Features
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provider-agnostic&lt;/strong&gt;: Claude, OpenAI, Google Gemini, Groq, Fireworks, Together AI, OpenRouter, Azure, AWS Bedrock, and local models via Ollama.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Native Terminal UI&lt;/strong&gt;: Built with Bubble Tea (Go) for a smooth TUI experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-session support&lt;/strong&gt;: Run multiple agents in parallel, each with its own context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LSP integration&lt;/strong&gt;: Automatically loads Language Server Protocol servers for code intelligence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP support&lt;/strong&gt;: Extend capabilities via the Model Context Protocol.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin system&lt;/strong&gt;: TypeScript/JavaScript plugins with 25+ lifecycle hooks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client/Server architecture&lt;/strong&gt;: Run the server headlessly and connect from multiple clients.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy-first&lt;/strong&gt;: Does not store your code or context data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation"&gt;Installation
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Via install script&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://opencode.ai/install &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Via npm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g opencode-ai
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Start OpenCode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On first launch, OpenCode detects your project structure, initializes a &lt;code&gt;.opencode/&lt;/code&gt; directory, and prompts you to configure a model provider.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="opencode-go-low-cost-model-access"&gt;OpenCode Go: Low-Cost Model Access
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;OpenCode Go&lt;/strong&gt; is a low-cost subscription ($5 for the first month, then $10/month) that provides reliable access to curated open-source coding models. It is designed for developers who want generous limits and stable global access without managing multiple API keys.&lt;/p&gt;
&lt;h3 id="what-you-get"&gt;What You Get
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Price&lt;/strong&gt;: $5 first month, then $10/month. Cancel anytime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Models included&lt;/strong&gt;: GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5, MiniMax M2.7, DeepSeek V4 Pro, DeepSeek V4 Flash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosting&lt;/strong&gt;: US, EU, and Singapore for stable global access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy&lt;/strong&gt;: Zero-retention policy; providers do not use your data for model training.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="usage-limits"&gt;Usage Limits
&lt;/h3&gt;&lt;p&gt;Limits are defined in dollar value rather than fixed request counts:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Window&lt;/th&gt;
 &lt;th&gt;Limit&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Per 5 hours&lt;/td&gt;
 &lt;td&gt;$12&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Per week&lt;/td&gt;
 &lt;td&gt;$30&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Per month&lt;/td&gt;
 &lt;td&gt;$60&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cheaper models stretch further. DeepSeek V4 Flash allows ~31,650 requests per 5 hours, while GLM-5.1 allows ~880.&lt;/p&gt;
&lt;h3 id="setup"&gt;Setup
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Subscribe at &lt;a class="link" href="https://opencode.ai/go" target="_blank" rel="noopener"
 &gt;opencode.ai/go&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Copy your API key.&lt;/li&gt;
&lt;li&gt;In the TUI, run &lt;code&gt;/connect&lt;/code&gt;, select &lt;strong&gt;OpenCode Go&lt;/strong&gt;, and paste your key.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;/models&lt;/code&gt; to see available models.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Model IDs use the format &lt;code&gt;opencode-go/&amp;lt;model-id&amp;gt;&lt;/code&gt;, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/kimi-k2.6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="core-concepts"&gt;Core Concepts
&lt;/h2&gt;&lt;p&gt;Before diving into workflows, it is essential to understand the building blocks of OpenCode: agents, subagents, LSP, MCP, and the project rules system.&lt;/p&gt;
&lt;h3 id="agents-and-subagents"&gt;Agents and Subagents
&lt;/h3&gt;&lt;p&gt;OpenCode has two types of agents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primary agents&lt;/strong&gt;: The main assistants you interact with directly. Cycle through them with the &lt;strong&gt;Tab&lt;/strong&gt; key. Built-in primary agents include &lt;strong&gt;Build&lt;/strong&gt; (full tools) and &lt;strong&gt;Plan&lt;/strong&gt; (read-only, cannot modify files).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagents&lt;/strong&gt;: Specialized assistants that primary agents invoke for specific tasks. You can also invoke them manually with &lt;code&gt;@mention&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Built-in subagents:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Subagent&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;th&gt;Tools&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Multi-step research and execution&lt;/td&gt;
 &lt;td&gt;Full access except todo&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Explore&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Fast, read-only codebase exploration&lt;/td&gt;
 &lt;td&gt;Read, search only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;When one agent delegates work, it does not simply append a prompt. It creates a &lt;strong&gt;child session&lt;/strong&gt; with fresh context, passes a scoped instruction, and receives a structured result back. This makes delegation session-based, resumable, and inspectable.&lt;/p&gt;
&lt;h3 id="lsp-language-server-protocol"&gt;LSP (Language Server Protocol)
&lt;/h3&gt;&lt;p&gt;LSP integration gives OpenCode deep code intelligence. The AI can see type information, function signatures, import paths, and diagnostics — not just raw text.&lt;/p&gt;
&lt;p&gt;Supported operations: &lt;code&gt;goToDefinition&lt;/code&gt;, &lt;code&gt;findReferences&lt;/code&gt;, &lt;code&gt;hover&lt;/code&gt;, &lt;code&gt;documentSymbol&lt;/code&gt;, &lt;code&gt;workspaceSymbol&lt;/code&gt;, &lt;code&gt;goToImplementation&lt;/code&gt;, &lt;code&gt;prepareCallHierarchy&lt;/code&gt;, &lt;code&gt;incomingCalls&lt;/code&gt;, &lt;code&gt;outgoingCalls&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;lsp&lt;/code&gt; tool is available when &lt;code&gt;OPENCODE_EXPERIMENTAL_LSP_TOOL=true&lt;/code&gt; is set. OpenCode includes pre-configured LSP servers for 30+ languages.&lt;/p&gt;
&lt;h3 id="mcp-model-context-protocol"&gt;MCP (Model Context Protocol)
&lt;/h3&gt;&lt;p&gt;MCP servers extend OpenCode with external tools and services. Built-in MCP-like tools include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;websearch&lt;/strong&gt;: Performs web searches via Exa AI (no API key required with OpenCode provider).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;webfetch&lt;/strong&gt;: Fetches and reads specific URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lsp&lt;/strong&gt;: Interacts with configured Language Servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Custom MCP servers are configured in &lt;code&gt;opencode.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;github&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;stdio&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@modelcontextprotocol/server-github&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;env&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;GITHUB_PERSONAL_ACCESS_TOKEN=ghp_...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Be selective: MCP servers add tool definitions to your context window. The GitHub MCP alone can consume significant tokens.&lt;/p&gt;
&lt;h3 id="agentsmd-and-project-rules"&gt;AGENTS.md and Project Rules
&lt;/h3&gt;&lt;p&gt;Run &lt;code&gt;/init&lt;/code&gt; to generate an &lt;code&gt;AGENTS.md&lt;/code&gt; file in your project root. This file teaches OpenCode about your project structure, conventions, and coding patterns. It is similar to Cursor&amp;rsquo;s rules and improves the quality of generated code.&lt;/p&gt;
&lt;p&gt;Example from a production TypeScript monorepo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# Project: Payment Processing API
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This is a TypeScript monorepo using Bun workspaces.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`packages/core/`&lt;/span&gt; - Shared business logic
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`packages/api/`&lt;/span&gt; - Express API handlers
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`packages/workers/`&lt;/span&gt; - Background job processors
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Conventions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Use Zod for all input validation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; All database queries go through the repository pattern
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Prefer composition over inheritance
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Test files live next to source files (*.test.ts)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`bun test`&lt;/span&gt; - Run all tests
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`bun run lint`&lt;/span&gt; - Run ESLint and Prettier
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`bun run build`&lt;/span&gt; - TypeScript compilation
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="permissions"&gt;Permissions
&lt;/h3&gt;&lt;p&gt;OpenCode filters tools before the model sees them, then checks permissions again at execution time. This makes orchestration bounded by policy, not trust.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;permission&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;edit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;write&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Values: &lt;code&gt;allow&lt;/code&gt;, &lt;code&gt;deny&lt;/code&gt;, &lt;code&gt;ask&lt;/code&gt;. For production or sensitive environments, set &lt;code&gt;bash&lt;/code&gt; and &lt;code&gt;edit&lt;/code&gt; to &lt;code&gt;ask&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="agent-orchestration-with-oh-my-opencode-slim"&gt;Agent Orchestration with oh-my-opencode-slim
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;oh-my-opencode-slim&lt;/strong&gt; is an agent orchestration plugin for OpenCode. Instead of forcing a single model to handle every task, it routes jobs to specialized subagents, balancing quality, speed, and cost.&lt;/p&gt;
&lt;h3 id="the-pantheon"&gt;The Pantheon
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Agent&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;th&gt;Default Model&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Orchestrator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Master delegator and strategic coordinator&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Explorer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Fast codebase search and pattern matching&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Librarian&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;External documentation and library research&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Oracle&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Strategic technical advisor, code reviewer, simplifier&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Designer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;UI/UX specialist for visual polish&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Fixer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Fast implementation specialist for bounded tasks&lt;/td&gt;
 &lt;td&gt;openai/gpt-5.4-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Observer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Read-only visual analysis (images, PDFs, diagrams)&lt;/td&gt;
 &lt;td&gt;Disabled by default&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="installation-1"&gt;Installation
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bunx oh-my-opencode-slim@latest install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The installer generates a default OpenAI configuration. Edit &lt;code&gt;~/.config/opencode/oh-my-opencode-slim.json&lt;/code&gt; to use Kimi, GitHub Copilot, or other providers. The configuration supports JSONC and includes an official JSON Schema for autocompletion.&lt;/p&gt;
&lt;h3 id="key-features-1"&gt;Key Features
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Council&lt;/strong&gt;: Run multiple models in parallel and synthesise a single answer with &lt;code&gt;@council&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplexer Integration&lt;/strong&gt;: Watch agents work live in Tmux or Zellij panes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session Management&lt;/strong&gt;: Reuse recent child-agent sessions with short aliases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-continue&lt;/strong&gt;: Automatically resume orchestrator sessions with cooldowns and safety checks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preset Switching&lt;/strong&gt;: Switch agent model presets at runtime with &lt;code&gt;/preset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cartography Skill&lt;/strong&gt;: Generate hierarchical codemaps to understand large codebases faster.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interview&lt;/strong&gt;: Turn rough ideas into structured markdown specs via a browser-based Q&amp;amp;A flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="subagent-driven-development-sdd"&gt;Subagent-Driven Development (SDD)
&lt;/h2&gt;&lt;p&gt;Subagent-Driven Development is the methodology that makes agent orchestration practical. It is not a single tool but a workflow pattern: decompose work into independent tasks, dispatch a fresh subagent for each task, and enforce review before completion. SDD prevents context pollution, controls costs, and maintains quality.&lt;/p&gt;
&lt;p&gt;There are two complementary interpretations of SDD in the OpenCode ecosystem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spec-Driven Development&lt;/strong&gt;: Requirements → Design → Tasks → Implementation. Specs are temporary scaffolding; code is the source of truth. Delete specs after implementation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagent-Driven Development&lt;/strong&gt;: Each independent task gets a fresh subagent with isolated context, followed by automatic two-stage review.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In practice, these merge: you write a spec, decompose it into tasks, and dispatch subagents for each task with review gates.&lt;/p&gt;
&lt;h3 id="when-to-use-sdd"&gt;When to Use SDD
&lt;/h3&gt;&lt;p&gt;Use SDD when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have a detailed implementation plan.&lt;/li&gt;
&lt;li&gt;Tasks are mostly independent with weak dependencies.&lt;/li&gt;
&lt;li&gt;You want to complete all tasks in one session without switching contexts.&lt;/li&gt;
&lt;li&gt;Quality gates (spec compliance + code review) are non-negotiable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoid SDD for tiny one-file changes where the overhead of subagent dispatch exceeds the benefit. In those cases, use a single Build agent directly.&lt;/p&gt;
&lt;h3 id="the-sdd-workflow"&gt;The SDD Workflow
&lt;/h3&gt;&lt;h4 id="phase-1-exploration-and-spec-writing"&gt;Phase 1: Exploration and Spec Writing
&lt;/h4&gt;&lt;p&gt;The Orchestrator or Planner agent analyses the request and creates a specification.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize SDD scaffolding (if using sdd-flow or Agent Teams Lite)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/sdd-init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Or manually: switch to Plan mode and ask for a spec&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;Plan a user authentication system with JWT tokens, refresh token rotation, and role-based access control. Write the spec to specs/auth.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="phase-2-task-decomposition"&gt;Phase 2: Task Decomposition
&lt;/h4&gt;&lt;p&gt;Break the spec into independent tasks. Each task should have a single, bounded scope.&lt;/p&gt;
&lt;p&gt;Example tasks for an auth system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Implement JWT token generation and validation utilities.&lt;/li&gt;
&lt;li&gt;Create login and refresh endpoints.&lt;/li&gt;
&lt;li&gt;Add middleware for role-based access control.&lt;/li&gt;
&lt;li&gt;Write unit tests for token utilities.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="phase-3-subagent-dispatch"&gt;Phase 3: Subagent Dispatch
&lt;/h4&gt;&lt;p&gt;For each task, the Orchestrator spawns a fresh subagent via the Task tool. Each subagent starts with &lt;strong&gt;zero context&lt;/strong&gt; from previous tasks, preventing pollution. The Orchestrator injects only the relevant spec section and project standards.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Orchestrator → Task(subagent=&amp;#34;sdd-apply&amp;#34;, prompt=&amp;#34;Implement task 1: JWT utilities. Read specs/auth.md section 3.1. Follow TDD. Run tests before returning.&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="phase-4-two-stage-review"&gt;Phase 4: Two-Stage Review
&lt;/h4&gt;&lt;p&gt;After a subagent completes its task, SDD enforces two review stages before marking the task complete:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spec Compliance Review&lt;/strong&gt;: A reviewer subagent checks whether the implementation matches the spec exactly. Did it implement what was asked? Are the interfaces correct?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Quality Review&lt;/strong&gt;: A second reviewer checks security, performance, maintainability, and test coverage.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If either review fails, the task is sent back to the implementer subagent with feedback. This creates automatic checkpoints.&lt;/p&gt;
&lt;h4 id="phase-5-integration-and-validation"&gt;Phase 5: Integration and Validation
&lt;/h4&gt;&lt;p&gt;Once all tasks pass review, the Orchestrator integrates the work, runs the full test suite, and validates end-to-end behaviour.&lt;/p&gt;
&lt;h3 id="sdd-tools-and-plugins"&gt;SDD Tools and Plugins
&lt;/h3&gt;&lt;p&gt;Several community projects implement SDD workflows for OpenCode:&lt;/p&gt;
&lt;h4 id="cc-sdd-spec-driven-development"&gt;cc-sdd (Spec-Driven Development)
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/gotalab/cc-sdd" target="_blank" rel="noopener"
 &gt;cc-sdd&lt;/a&gt; brings structured Spec-Driven Development to OpenCode with slash commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx cc-sdd@latest --opencode-skills
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Commands include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/kiro-spec-init&lt;/code&gt;: Start a new feature spec.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kiro-spec-requirements&lt;/code&gt;: Write requirements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kiro-spec-design&lt;/code&gt;: Create architecture design.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kiro-spec-tasks&lt;/code&gt;: Generate task checklist.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kiro-impl&lt;/code&gt;: Autonomous implementation with per-task subagents, TDD, and independent review.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each task gets a fresh implementer running TDD (RED → GREEN), an independent reviewer, and an auto-debug pass if blocked.&lt;/p&gt;
&lt;h4 id="sdd-flow"&gt;sdd-flow
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/Heldinhow/sdd-flow" target="_blank" rel="noopener"
 &gt;sdd-flow&lt;/a&gt; is a plugin that embeds SDD directly into your repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# One-time bootstrap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/sdd-init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch to the &amp;#34;Spec Driven&amp;#34; planning agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Describe your feature in natural language&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Approve each phase before it advances&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Execute the plan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/implement
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Assets are repo-local: &lt;code&gt;.opencode/skills/&lt;/code&gt;, &lt;code&gt;.specify/&lt;/code&gt;, &lt;code&gt;specs/&lt;/code&gt;, and &lt;code&gt;AGENTS.md&lt;/code&gt;. This means the workflow travels with the code, not just the developer&amp;rsquo;s local config.&lt;/p&gt;
&lt;h4 id="agent-teams-lite-gentleman-programming"&gt;Agent Teams Lite (Gentleman Programming)
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/Gentleman-Programming/agent-teams-lite" target="_blank" rel="noopener"
 &gt;Agent Teams Lite&lt;/a&gt; provides a complete SDD orchestrator with 10 specialised sub-agents and slash commands:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-init&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Initialise SDD context&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-explore&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Investigate an idea&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-new&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Start a new change&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-apply&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Implement tasks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-verify&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Validate implementation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/sdd-archive&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Archive completed change&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The system uses a skill registry: &lt;code&gt;.atl/skill-registry.md&lt;/code&gt; captures project conventions, and the orchestrator injects compact rules into each subagent prompt as &lt;code&gt;## Project Standards (auto-resolved)&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="sdd-profiles"&gt;SDD Profiles
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/Gentleman-Programming/gentle-ai" target="_blank" rel="noopener"
 &gt;OpenCode SDD Profiles&lt;/a&gt; allow you to create named model configurations and switch between them with &lt;strong&gt;Tab&lt;/strong&gt; inside OpenCode. Each profile generates its own orchestrator plus 10 sub-agents in &lt;code&gt;opencode.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gentle-ai sync &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --profile cheap:anthropic/claude-haiku-3.5-20241022 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --profile-phase cheap:sdd-apply:anthropic/claude-sonnet-4-20250514
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This creates a &amp;ldquo;cheap&amp;rdquo; profile where everything runs on Haiku except &lt;code&gt;sdd-apply&lt;/code&gt;, which uses Sonnet. Press &lt;strong&gt;Tab&lt;/strong&gt; to cycle between &lt;code&gt;sdd-orchestrator&lt;/code&gt;, &lt;code&gt;sdd-orchestrator-cheap&lt;/code&gt;, and &lt;code&gt;sdd-orchestrator-premium&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="subagent-to-subagent-delegation"&gt;Subagent-to-Subagent Delegation
&lt;/h3&gt;&lt;p&gt;OpenCode PR #7756 introduced subagent-to-subagent delegation with configurable &lt;code&gt;task_budget&lt;/code&gt; and depth limits to prevent infinite loops. By default, only primary agents can task subagents. To enable subagent delegation, set a budget:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sdd-apply&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;task_budget&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;permission&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sdd-debug&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This allows an implementer subagent to spawn a debugger subagent up to 3 times if it gets stuck.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="model-configuration-and-presets"&gt;Model Configuration and Presets
&lt;/h2&gt;&lt;h3 id="high-performance-setup"&gt;High-Performance Setup
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;$schema&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://opencode.ai/config.json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;coder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;anthropic/claude-sonnet-4-5-20250929&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;reasoningEffort&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;openai/gpt-4.1-mini&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;openai/gpt-4.1-mini&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="budget-setup-30month"&gt;Budget Setup (~$30/month)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;coder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/kimi-k2.6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/deepseek-v4-flash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;copilot/gpt-4o-mini&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="free-setup"&gt;Free Setup
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;api_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://localhost:11434/v1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode/minimax-m2.5-free&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;fast&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ollama/qwen3.6-35b-a3b&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="devops-focused-configuration"&gt;DevOps-Focused Configuration
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;$schema&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://opencode.ai/config.json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/qwen3.6-plus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;permission&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;edit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;write&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;devops-engineer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/glm-5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;instructions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;You are a DevOps specialist. Confirm before applying Kubernetes manifests. Prefer idempotent patterns.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;lsp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;yaml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yaml-language-server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;--stdio&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;terraform&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;terraform-ls&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;serve&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="model-variants-and-profiles"&gt;Model Variants and Profiles
&lt;/h3&gt;&lt;p&gt;Many models support reasoning variants. Use &lt;code&gt;variant_cycle&lt;/code&gt; to switch between &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, and &lt;code&gt;xhigh&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;anthropic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;models&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;claude-sonnet-4-5-20250929&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;options&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;thinking&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;budgetTokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Multi-provider fallbacks prevent session failure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;coder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;opencode-go/kimi-k2.6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;fallback_models&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;opencode-go/glm-5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;anthropic/claude-sonnet-4-5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="domain-specific-applications"&gt;Domain-Specific Applications
&lt;/h2&gt;&lt;p&gt;The following sections map the SDD methodology to real-world use cases documented by developers, sysadmins, and DevOps engineers.&lt;/p&gt;
&lt;h3 id="full-stack-development"&gt;Full-Stack Development
&lt;/h3&gt;&lt;h4 id="greenfield-application-with-sdd"&gt;Greenfield Application with SDD
&lt;/h4&gt;&lt;p&gt;In a project-based tutorial by &lt;a class="link" href="https://www.zbuild.io/resources/news/opencode-tutorial-2026" target="_blank" rel="noopener"
 &gt;ZBuild&lt;/a&gt;, a developer built a full-stack bookmark manager in ~30 minutes using OpenCode. The stack included Express.js/TypeScript, SQLite with FTS5, and a vanilla frontend.&lt;/p&gt;
&lt;p&gt;Mapped to SDD phases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spec&lt;/strong&gt;: Plan mode outlined the data model, API routes, and database schema. The spec was saved to &lt;code&gt;.opencode/plans/bookmark-manager.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tasks&lt;/strong&gt;: Decomposed into scaffolding, data model, API endpoints, search, tags, frontend, and tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch&lt;/strong&gt;: Build mode implemented each task sequentially, with the agent running &lt;code&gt;curl&lt;/code&gt; to verify API behaviour after each endpoint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review&lt;/strong&gt;: The agent ran the test suite and fixed failures before proceeding.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This Plan/Build cycle prevents the AI from making large structural decisions blindly.&lt;/p&gt;
&lt;h4 id="multi-agent-refactoring-with-orchestration"&gt;Multi-Agent Refactoring with Orchestration
&lt;/h4&gt;&lt;p&gt;A Vercel engineer documented using &lt;a class="link" href="https://vercel.com/kb/guide/how-i-use-opencode-with-vercel-ai-gateway-to-build-features-fast" target="_blank" rel="noopener"
 &gt;OpenCode with the Vercel AI Gateway&lt;/a&gt; to migrate an authentication module from session-based auth to JWT tokens using the &lt;code&gt;ulw&lt;/code&gt; (ultrawork) keyword.&lt;/p&gt;
&lt;p&gt;The SDD-style workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Orchestrator&lt;/strong&gt; (Claude Opus 4.6) received the request.&lt;/li&gt;
&lt;li&gt;It spawned two background subagents in parallel:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explore&lt;/strong&gt; (GPT-5 Mini): Mapped 12 files in the auth flow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Librarian&lt;/strong&gt; (Claude Sonnet 4.6): Found the framework&amp;rsquo;s recommended JWT pattern.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;After receiving findings, the Orchestrator delegated subtasks:
&lt;ul&gt;
&lt;li&gt;Cryptographic logic → GPT-5.4 worker.&lt;/li&gt;
&lt;li&gt;Middleware updates → Claude Haiku 4.5 worker.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent-browser&lt;/strong&gt; verified the login flow in a real browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Result: ~70% cost reduction compared to a single large model, with no manual model switching.&lt;/p&gt;
&lt;h4 id="multi-lens-code-review-as-sdd-verification"&gt;Multi-Lens Code Review as SDD Verification
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://jpcaparas.medium.com/one-reviewer-three-lenses-building-a-multi-agent-code-review-system-with-opencode-21ceb28dde10" target="_blank" rel="noopener"
 &gt;JP Caparas&lt;/a&gt; built a multi-agent review system that mirrors the SDD two-stage review pattern. A lead reviewer agent analyses the diff, then spawns specialist reviewers in parallel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;review-frontend&lt;/strong&gt;: &lt;code&gt;.tsx&lt;/code&gt;, &lt;code&gt;.jsx&lt;/code&gt;, &lt;code&gt;.vue&lt;/code&gt;, &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.scss&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;review-backend&lt;/strong&gt;: &lt;code&gt;.py&lt;/code&gt;, &lt;code&gt;.go&lt;/code&gt;, &lt;code&gt;.ts&lt;/code&gt; in &lt;code&gt;api/&lt;/code&gt; or &lt;code&gt;services/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;review-devops&lt;/strong&gt;: &lt;code&gt;Dockerfile&lt;/code&gt;, &lt;code&gt;*.yaml&lt;/code&gt;, &lt;code&gt;*.tf&lt;/code&gt;, &lt;code&gt;.github/workflows/*&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The lead agent synthesises findings into a unified report: &lt;strong&gt;LGTM&lt;/strong&gt;, &lt;strong&gt;NEEDS CHANGES&lt;/strong&gt;, or &lt;strong&gt;DISCUSS&lt;/strong&gt;. This is the verification stage of SDD applied to existing code rather than new implementation.&lt;/p&gt;
&lt;h4 id="e2b-sandbox-for-teams"&gt;E2B Sandbox for Teams
&lt;/h4&gt;&lt;p&gt;A &lt;a class="link" href="https://www.reddit.com/r/opencodeCLI/comments/1r85nve/running_opencode_in_e2b_cloud_sandboxes_so_my/" target="_blank" rel="noopener"
 &gt;Reddit user&lt;/a&gt; documented running OpenCode inside E2B cloud sandboxes for non-technical users. The workflow uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A tailored &lt;code&gt;AGENTS.md&lt;/code&gt; with persona rules and anti-hallucination guardrails.&lt;/li&gt;
&lt;li&gt;A three-file context system: &lt;code&gt;PROJECT.md&lt;/code&gt; (spec), &lt;code&gt;MEMORY.md&lt;/code&gt; (build notes), and a slim conversation log.&lt;/li&gt;
&lt;li&gt;Automated verification after each build (schema checks, API wiring validation).&lt;/li&gt;
&lt;li&gt;Auto-commit every 5 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This shows SDD principles applied in a managed environment: spec first, execution second, verification always.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="sysadmin-and-operations"&gt;SysAdmin and Operations
&lt;/h3&gt;&lt;h4 id="natural-language-remote-server-management"&gt;Natural-Language Remote Server Management
&lt;/h4&gt;&lt;p&gt;The &lt;a class="link" href="https://argv.cloud/blog/2025/ai-remote-ops/" target="_blank" rel="noopener"
 &gt;argv.cloud blog&lt;/a&gt; introduced &amp;ldquo;Agentic Sysadmin&amp;rdquo; using OpenCode with a custom &lt;code&gt;remote.ts&lt;/code&gt; tool that executes commands over SSH.&lt;/p&gt;
&lt;p&gt;Setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Standard &lt;code&gt;.ssh/config&lt;/code&gt; with host aliases.&lt;/li&gt;
&lt;li&gt;Custom tool wrapping &lt;code&gt;execa&lt;/code&gt; to run &lt;code&gt;ssh -o BatchMode=yes &amp;lt;host&amp;gt; &amp;lt;command&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Optional sudo via &lt;code&gt;OC_SSH&lt;/code&gt; env variable injected into stdin (the LLM never sees the password).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SDD mapping:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spec&lt;/strong&gt;: &amp;ldquo;Audit test-server with Lynis and generate a Markdown summary.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task&lt;/strong&gt;: Run Lynis quietly, then read the report.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch&lt;/strong&gt;: The agent runs the command remotely and fetches the report.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review&lt;/strong&gt;: The agent synthesises the raw output into structured Markdown locally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example prompts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencode ask &lt;span class="s2"&gt;&amp;#34;Update system packages on server-33 and check for leftover services&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencode ask &lt;span class="s2"&gt;&amp;#34;Create a crontab on big-pc that runs Lynis weekly and saves the report to /var/log/lynis-weekly.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;There is no YAML, no Ansible playbook, and no Puppet manifest. The LLM reasons about the current state and generates appropriate commands on the fly.&lt;/p&gt;
&lt;h4 id="server-documentation-and-migration"&gt;Server Documentation and Migration
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://pserey.substack.com/p/using-opencode-as-a-sysadmin" target="_blank" rel="noopener"
 &gt;Pedro Serey&lt;/a&gt; mapped a &amp;ldquo;black box&amp;rdquo; server into structured documentation using the Explore agent. Discovery commands (&lt;code&gt;lsblk&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;systemctl list-units&lt;/code&gt;) were synthesised into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;storage.md&lt;/code&gt;: Drives, mount points, filesystems.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;services/README.md&lt;/code&gt;: Containers, Docker Compose files, environment variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;network.md&lt;/code&gt;: Interfaces, routes, firewall rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After mapping, the documentation served as the &lt;strong&gt;spec&lt;/strong&gt; for a Proxmox migration plan. The agent generated a disciplined backup routine with proper database dumps, preventing data corruption.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Critical lesson&lt;/strong&gt;: After the agent staged unintended &lt;code&gt;git&lt;/code&gt; commits during migration, the author pivoted to a &lt;strong&gt;human-in-the-loop&lt;/strong&gt; workflow: Plan agent proposes commands, human executes in &lt;code&gt;tmux&lt;/code&gt;, output is pasted back. This is Plan mode used as an SDD spec/review gate before execution.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="ai-powered-shell-command-generation"&gt;AI-Powered Shell Command Generation
&lt;/h4&gt;&lt;p&gt;The &lt;a class="link" href="https://github.com/andreacasarin/zsh-ask-opencode" target="_blank" rel="noopener"
 &gt;zsh-ask-opencode&lt;/a&gt; plugin integrates OpenCode into ZSH. Press &lt;code&gt;Ctrl+O&lt;/code&gt; to transform natural language into optimised shell commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ list all files modified in the last &lt;span class="m"&gt;24&lt;/span&gt; hours
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ^O generates: find . -mtime -1 -type f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ compress all jpg files in this directory to 50% size
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ^O generates: convert *.jpg -quality 50% compressed.jpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The plugin ranks three options by speed, safety, and reliability. You review before execution — a manual review gate for one-line tasks.&lt;/p&gt;
&lt;h4 id="interactive-pty-management"&gt;Interactive PTY Management
&lt;/h4&gt;&lt;p&gt;The &lt;a class="link" href="https://github.com/JosXa/opencode-pty" target="_blank" rel="noopener"
 &gt;opencode-pty&lt;/a&gt; plugin gives OpenCode control over pseudo-terminals. Unlike the synchronous &lt;code&gt;bash&lt;/code&gt; tool, &lt;code&gt;pty_spawn&lt;/code&gt; allows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background processes (e.g., &lt;code&gt;tail -f /var/log/syslog&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Interactive input (&lt;code&gt;Ctrl+C&lt;/code&gt;, arrow keys).&lt;/li&gt;
&lt;li&gt;Terminal snapshots without ANSI noise.&lt;/li&gt;
&lt;li&gt;Waiting until screen content matches a regex.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is essential for sysadmin tasks involving long-running processes, such as monitoring deployments or stepping through interactive installers.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="devops-and-infrastructure"&gt;DevOps and Infrastructure
&lt;/h3&gt;&lt;h4 id="infrastructure-as-code-generation"&gt;Infrastructure-as-Code Generation
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://computingforgeeks.com/ai-coding-agents-devops-terraform-ansible-kubernetes/" target="_blank" rel="noopener"
 &gt;ComputingForGeeks&lt;/a&gt; documented using OpenCode for DevOps workflows. The agent excels at generating boilerplate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terraform&lt;/strong&gt;: Variables, outputs, resource scaffolding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ansible&lt;/strong&gt;: Playbooks with SELinux awareness and handlers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt;: Deployment, Service, Ingress, HPA manifests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example prompt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencode run &lt;span class="s2"&gt;&amp;#34;Create Kubernetes manifests for a Python Flask app: a Deployment with 3 replicas, resource limits, health checks, and a non-root security context. Add a ClusterIP Service and an Ingress with TLS.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Honest assessment&lt;/strong&gt;: AI agents consistently get provider version pinning and complex state dependencies wrong. Treat AI-generated infrastructure like a pull request from a junior engineer: always run &lt;code&gt;terraform plan&lt;/code&gt; and test in staging.&lt;/p&gt;
&lt;p&gt;SDD mapping for IaC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spec&lt;/strong&gt;: &amp;ldquo;We need a three-tier AWS architecture with VPC, private subnets, RDS, and an EKS cluster.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tasks&lt;/strong&gt;: VPC module, subnet module, RDS module, EKS module, outputs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch&lt;/strong&gt;: Each module gets a subagent. Terraform LSP validates syntax.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review&lt;/strong&gt;: &lt;code&gt;terraform plan&lt;/code&gt; is the spec compliance check. A second reviewer checks for security anti-patterns (open security groups, hardcoded secrets).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="multi-agent-cicd-pipeline-creation"&gt;Multi-Agent CI/CD Pipeline Creation
&lt;/h4&gt;&lt;p&gt;Using &lt;code&gt;ultrawork&lt;/code&gt; mode:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencode run &lt;span class="s2"&gt;&amp;#34;@ultrawork Set up a complete CI/CD pipeline with GitHub Actions that builds a Docker image, pushes to ECR, runs Trivy security scan, deploys to EKS staging with Helm, runs integration tests, and promotes to production on approval.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The planner agent ensures cohesion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; references exact Helm values files.&lt;/li&gt;
&lt;li&gt;The Docker image tag propagates through every step.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/integration-test.sh&lt;/code&gt; hits the correct staging URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is SDD at scale: one spec becomes dozens of coordinated files, with the planner acting as the Orchestrator ensuring cross-file consistency.&lt;/p&gt;
&lt;h4 id="project-specific-devops-agents"&gt;Project-Specific DevOps Agents
&lt;/h4&gt;&lt;p&gt;The &lt;a class="link" href="https://github.com/jon23d/opencode-configs" target="_blank" rel="noopener"
 &gt;jon23d/opencode-configs&lt;/a&gt; repository demonstrates a mature agent hierarchy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dockerfile-best-practices/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deployment-planning/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubernetes-manifests/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pipeline models a full software delivery lifecycle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User request
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → build (clarify)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → architect (plan)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → build (review plan)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → backend/frontend engineers (implement)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → code-reviewer → security-reviewer → observability-reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → qa (E2E + OpenAPI)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → devops-engineer (infra change)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → developer-advocate (docs, docker-compose)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → build (report)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is SDD with specialised subagents for each review stage.&lt;/p&gt;
&lt;h4 id="kubernetes-native-agents-with-kubeopencode"&gt;Kubernetes-Native Agents with KubeOpenCode
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://kubeopencode.github.io/kubeopencode/" target="_blank" rel="noopener"
 &gt;KubeOpenCode&lt;/a&gt; runs OpenCode agents as Kubernetes CRDs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubeopencode.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Agent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dev-agent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Interactive development agent&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;workspaceDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/workspace&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2Gi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;standby&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;idleTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Attach from your terminal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeoc agent attach default -n kubeopencode-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is ideal for CI/CD pipelines and team-shared agents. It uses a two-container pattern: an init container copies the OpenCode binary, and the worker container executes tasks.&lt;/p&gt;
&lt;h4 id="docker-and-local-model-runners"&gt;Docker and Local Model Runners
&lt;/h4&gt;&lt;p&gt;Community projects provide ready-made Docker setups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/fluxbase-eu/opencode-docker" target="_blank" rel="noopener"
 &gt;nimbleflux/opencode-docker&lt;/a&gt;: Docker image, Compose, and Helm chart.&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/utek/opencode-docker" target="_blank" rel="noopener"
 &gt;utek/opencode-docker&lt;/a&gt;: Lightweight environment with Node.js, Python, Git, and GitHub CLI.&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.docker.com/guides/opencode-model-runner/" target="_blank" rel="noopener"
 &gt;Docker Model Runner&lt;/a&gt;: Connect OpenCode to locally served models.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="security-safety-and-best-practices"&gt;Security, Safety and Best Practices
&lt;/h2&gt;&lt;h3 id="default-permissions-are-permissive"&gt;Default Permissions Are Permissive
&lt;/h3&gt;&lt;p&gt;By default, OpenCode enables most tools without approval. A &lt;a class="link" href="https://www.reddit.com/r/LocalLLaMA/comments/1r8oehn/opencode_arbitrary_code_execution_major_security/" target="_blank" rel="noopener"
 &gt;Reddit PSA&lt;/a&gt; highlighted that the agent can generate a Python script and immediately execute it. Lock this down:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;permission&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;edit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;write&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="use-plan-mode-for-audits"&gt;Use Plan Mode for Audits
&lt;/h3&gt;&lt;p&gt;For sysadmins and SREs, Plan mode is essential for auditing scripts and infrastructure-as-code without accidentally running anything.&lt;/p&gt;
&lt;h3 id="human-in-the-loop-for-production"&gt;Human-in-the-Loop for Production
&lt;/h3&gt;&lt;p&gt;Even with good intentions, an agent with SSH access can stage unintended changes. The recommended workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agent proposes the command in Plan mode.&lt;/li&gt;
&lt;li&gt;Human reviews and executes manually (e.g., in a &lt;code&gt;tmux&lt;/code&gt; pane).&lt;/li&gt;
&lt;li&gt;Human pastes the output back to the agent.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="sandboxing"&gt;Sandboxing
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Containers/VMs&lt;/strong&gt;: Run OpenCode inside Docker or a VM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS-level sandboxing&lt;/strong&gt;: &lt;a class="link" href="https://github.com/always-further/nono" target="_blank" rel="noopener"
 &gt;nono&lt;/a&gt; uses Landlock (Linux) and Seatbelt (macOS) for default-deny access.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nono run --allow ./my_project_dir -- opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="context-window-management"&gt;Context Window Management
&lt;/h3&gt;&lt;p&gt;Developers have &lt;a class="link" href="https://www.reddit.com/r/opencodeCLI/comments/1rr5kkg/are_you_running_out_of_context_tokens/" target="_blank" rel="noopener"
 &gt;reported&lt;/a&gt; that context compaction can occur multiple times during large tasks. Mitigations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &lt;code&gt;autoCompact: true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Cartography&lt;/strong&gt; skill to generate codemaps.&lt;/li&gt;
&lt;li&gt;Break large tasks into smaller, scoped sessions.&lt;/li&gt;
&lt;li&gt;In SDD, fresh subagents per task naturally limit context sprawl.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="advanced-configuration"&gt;Advanced Configuration
&lt;/h2&gt;&lt;h3 id="custom-agents"&gt;Custom Agents
&lt;/h3&gt;&lt;p&gt;Create project-specific agents by adding markdown files to &lt;code&gt;.opencode/agents/&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;#34;Reviews code for best practices and potential issues&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mode: subagent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model: anthropic/claude-sonnet-4-20250514
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;permission:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; edit: deny
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You are a code reviewer. Focus on security, performance, and maintainability.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not make changes; only provide feedback.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="context-paths"&gt;Context Paths
&lt;/h3&gt;&lt;p&gt;Include additional context files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;contextPaths&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;.github/copilot-instructions.md&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;.cursorrules&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;opencode.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="auto-compact"&gt;Auto-Compact
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;autoCompact&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="session-management"&gt;Session Management
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;multi-session&lt;/strong&gt; to work on multiple features in parallel.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;/undo&lt;/code&gt; and &lt;code&gt;/redo&lt;/code&gt; to revert changes.&lt;/li&gt;
&lt;li&gt;Share session links with teammates.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;OpenCode represents a new paradigm in AI-assisted development: open-source, provider-agnostic, and deeply integrated into the tools developers already use. But the tool alone is not enough. &lt;strong&gt;Subagent-Driven Development&lt;/strong&gt; provides the methodology that makes agent orchestration coherent, safe, and scalable.&lt;/p&gt;
&lt;p&gt;The SDD workflow — explore, spec, decompose, dispatch, review, integrate — maps naturally to full-stack development, sysadmin operations, and DevOps infrastructure. Real-world practitioners have shown that this pattern scales from a 30-minute bookmark manager to multi-agent CI/CD pipelines, from natural-language server management to Kubernetes-native agent platforms.&lt;/p&gt;
&lt;p&gt;Key takeaways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start with a spec.&lt;/strong&gt; Use Plan mode, AGENTS.md, and the Cartography skill to build context before writing code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decompose into independent tasks.&lt;/strong&gt; Each task gets a fresh subagent with isolated context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enforce two-stage review.&lt;/strong&gt; Spec compliance first, code quality second. No task passes without both.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure permissions carefully.&lt;/strong&gt; Set &lt;code&gt;bash&lt;/code&gt; and &lt;code&gt;edit&lt;/code&gt; to &lt;code&gt;ask&lt;/code&gt; in production. Use sandboxes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage specialised agents.&lt;/strong&gt; Let the Orchestrator route work; do not force one model to do everything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use OpenCode Go&lt;/strong&gt; for reliable, low-cost access to curated open-source models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep a human in the loop&lt;/strong&gt; for production operations, especially when the agent has shell or SSH access.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Happy agentic coding!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://opencode.ai/" target="_blank" rel="noopener"
 &gt;OpenCode Official Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://open-code.ai/en/docs" target="_blank" rel="noopener"
 &gt;OpenCode Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://opencode.ai/go" target="_blank" rel="noopener"
 &gt;OpenCode Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/opencode-ai/opencode" target="_blank" rel="noopener"
 &gt;OpenCode GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://opencode.ai/docs/agents/" target="_blank" rel="noopener"
 &gt;OpenCode Agents Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.opencode.ai/docs/rules/" target="_blank" rel="noopener"
 &gt;OpenCode Rules Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/alvinunreal/oh-my-opencode-slim" target="_blank" rel="noopener"
 &gt;oh-my-opencode-slim GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://ohmyopencode.com/" target="_blank" rel="noopener"
 &gt;Oh My OpenCode (Original Plugin)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/gotalab/cc-sdd" target="_blank" rel="noopener"
 &gt;cc-sdd: Spec-Driven Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Heldinhow/sdd-flow" target="_blank" rel="noopener"
 &gt;sdd-flow: Spec-Driven Development for OpenCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Gentleman-Programming/agent-teams-lite" target="_blank" rel="noopener"
 &gt;Agent Teams Lite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Gentleman-Programming/gentle-ai" target="_blank" rel="noopener"
 &gt;Gentleman AI: SDD Profiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://lzw.me/docs/opencodedocs/obra/superpowers/advanced/subagent-development/index.html" target="_blank" rel="noopener"
 &gt;Subagent-Driven Development Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://agenticoding.ai/docs/practical-techniques/lesson-12-spec-driven-development" target="_blank" rel="noopener"
 &gt;Agentic Coding: Spec-Driven Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.to/gc-victor/agent-orchestration-in-opencode-3n4k" target="_blank" rel="noopener"
 &gt;DEV Community: Agent Orchestration in OpenCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://vercel.com/kb/guide/how-i-use-opencode-with-vercel-ai-gateway-to-build-features-fast" target="_blank" rel="noopener"
 &gt;Vercel KB: OpenCode with AI Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.zbuild.io/resources/news/opencode-tutorial-2026" target="_blank" rel="noopener"
 &gt;ZBuild: Full-Stack Bookmark Manager Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://jpcaparas.medium.com/one-reviewer-three-lenses-building-a-multi-agent-code-review-system-with-opencode-21ceb28dde10" target="_blank" rel="noopener"
 &gt;JP Caparas: Multi-Agent Code Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://graphwiz.ai/ai/opencode-guide" target="_blank" rel="noopener"
 &gt;Graphwiz: Vibe Coding with OpenCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aiforyou.life/use-cases/for-work/opencode-examples/" target="_blank" rel="noopener"
 &gt;AI for You: OpenCode Practical Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://argv.cloud/blog/2025/ai-remote-ops/" target="_blank" rel="noopener"
 &gt;argv.cloud: Agentic Sysadmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pserey.substack.com/p/using-opencode-as-a-sysadmin" target="_blank" rel="noopener"
 &gt;Pedro Serey: Using OpenCode as a SysAdmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/andreacasarin/zsh-ask-opencode" target="_blank" rel="noopener"
 &gt;zsh-ask-opencode GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/JosXa/opencode-pty" target="_blank" rel="noopener"
 &gt;opencode-pty GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://computingforgeeks.com/ai-coding-agents-devops-terraform-ansible-kubernetes/" target="_blank" rel="noopener"
 &gt;ComputingForGeeks: AI Agents for DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/jon23d/opencode-configs" target="_blank" rel="noopener"
 &gt;jon23d/opencode-configs GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kubeopencode.github.io/kubeopencode/" target="_blank" rel="noopener"
 &gt;KubeOpenCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.docker.com/guides/opencode-model-runner/" target="_blank" rel="noopener"
 &gt;Docker Docs: OpenCode with Docker Model Runner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/cesarandreslopez/sidekick-agent-hub" target="_blank" rel="noopener"
 &gt;Sidekick Agent Hub (VS Code Extension)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.reddit.com/r/opencodeCLI/comments/1r85nve/running_opencode_in_e2b_cloud_sandboxes_so_my/" target="_blank" rel="noopener"
 &gt;Reddit: E2B Cloud Sandboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.reddit.com/r/opencodeCLI/comments/1rr5kkg/are_you_running_out_of_context_tokens/" target="_blank" rel="noopener"
 &gt;Reddit: Context Window Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.reddit.com/r/LocalLLaMA/comments/1r8oehn/opencode_arbitrary_code_execution_major_security/" target="_blank" rel="noopener"
 &gt;Reddit: Security and Permissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>