nitm-opencode-starter 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,406 @@
1
+ # NITM Opencode Starter
2
+
3
+ This is an opinionated starter, not a general guide. It ships a working OpenCode setup tuned for mixed-skill teams: a curated 14-agent fleet, four presets (`default`, `balanced`, `high-cost`, `low-cost`), and a default model path that prefers **OpenCode Go with OpenCode models as the fallback**. You can be running in under ten minutes. Pick the path that fits:
4
+
5
+ - **LLM Setup**: copy-paste prompt for an AI assistant to do the work.
6
+ - **Quick Setup**: human-readable checklist, same steps.
7
+ - **Full Guide**: reference for every option and tradeoff.
8
+
9
+ # CLI
10
+
11
+ This starter ships an npm CLI so you can bootstrap any repo with one command. Run it from the root of the project you want to set up:
12
+
13
+ ```bash
14
+ npx nitm-opencode-starter install # copy config into this repo, then run the bootstrap patch flow
15
+ npx nitm-opencode-starter patch # re-run the bootstrap patch flow (ensure config + plugins)
16
+ npx nitm-opencode-starter upgrade # re-copy + merge latest config, then re-run plugin installs
17
+ npx nitm-opencode-starter doctor # checklist: verify tools and config are installed
18
+ ```
19
+
20
+ - `install`: copies `opencode.jsonc` and `oh-my-opencode-slim.jsonc` into the current repo (skips files that already exist unless `--force`), then runs `patch`.
21
+ - `patch`: ensures the config files are present and installs the two plugins (`bunx oh-my-opencode-slim@latest install` and `npm i -g @dietrichgebert/ponytail`; `bun` is installed first if missing).
22
+ - `upgrade`: merges the latest starter config into the current repo's config (your active `preset`, extra plugins, and custom presets/agents are preserved; originals are backed up to a temp directory), then re-runs the plugin installs. Asks for confirmation before overwriting; in non-interactive shells `--yes` is required to proceed (without it the upgrade is refused).
23
+ - `doctor`: prints a checklist of whether OpenCode, bun, ponytail, the oh-my-opencode-slim plugin, and the starter config files are present, with a fix line for anything missing. Exits non-zero if any check fails.
24
+
25
+ # LLM Setup
26
+
27
+ Copy-paste the block below into any LLM assistant (OpenCode itself, ChatGPT, Claude, etc.) to have it set up this starter for you. It assumes OpenCode Go as the default model provider and the [NITM AI-Assisted Development Toolkit](https://github.com/ninjasitm/ai-assisted-dev-toolkit/) as a prerequisite.
28
+
29
+ ```plaintext
30
+ You are an AI assistant that helps developers set up OpenCode with the NITM Opencode Starter. Follow these steps in order. Stop and ask the user if anything fails.
31
+
32
+ Prerequisites: The NITM AI-Assisted Development Toolkit must be installed in the project (https://github.com/ninjasitm/ai-assisted-dev-toolkit/). It ships .opencode/agents/*.md files that give the 14 custom agents their full prompts. Without it, those agents only get one-liner descriptions.
33
+
34
+ 1. Install OpenCode:
35
+ macOS/Linux: `curl -fsSL https://opencode.ai/install | bash`
36
+ Windows: WSL is recommended; native scoop/choco/npm also work.
37
+ Verify: `opencode --version` (must be >= 1.x).
38
+
39
+ 2. Install the two plugins:
40
+ `bunx oh-my-opencode-slim@latest install`
41
+ `npm i -g @dietrichgebert/ponytail`
42
+ Install bun first with `npm i -g bun` if needed.
43
+
44
+ 3. Copy the two config files (opencode.jsonc and oh-my-opencode-slim.jsonc) into the project root. They are the source of truth for plugins, presets, and the 14 custom agent prompts. Skip if the files already exist in this starter. If other config files exist, back them up first, then ask the user how to merge before overwriting.
45
+
46
+ 4. Subscribe to OpenCode Go at https://opencode.ai/go?ref=8N581SYDM0 and get an API key.
47
+
48
+ 5. Connect providers in the TUI:
49
+ - Run `opencode`, then `/connect`, pick "OpenCode Go", paste the key.
50
+ - Also run `/connect` and enable "OpenCode Zen" as a fallback.
51
+
52
+ 6. Verify the setup:
53
+ - Run `opencode` from the project directory.
54
+ - Run `/plugins` to confirm all four plugins load.
55
+ - Run `/preset` to confirm preset switching works.
56
+ - Run `ping all agents` to confirm the 14 custom agents respond.
57
+ ```
58
+
59
+ # Quick Setup
60
+
61
+ Five minutes to your first session, with OpenCode Go as the default model provider.
62
+
63
+ > **Prerequisite: set up the prompt-and-rules half first.** Install the [NITM AI-Assisted Development Toolkit](https://github.com/ninjasitm/ai-assisted-dev-toolkit/) in your project before continuing. It ships `.opencode/agents/*.md` thin wrappers (real OpenCode model IDs, full prompt bodies via `@.claude/agents-snippets/<name>.md`) for the 14 custom agents in this starter. OpenCode auto-discovers those files. The `.md` definitions provide the model + prompt body; the `oh-my-opencode-slim.jsonc` `orchestratorPrompt` routing hint layers on top. Without the toolkit, the 14 custom agents only get the one-liner descriptions from `oh-my-opencode-slim.jsonc`.
64
+
65
+ - [ ] **Install OpenCode**: macOS/Linux: `curl -fsSL https://opencode.ai/install | bash`. Windows: WSL is recommended; native scoop/choco/npm also work.
66
+ - [ ] **Install the two plugins**: `bunx oh-my-opencode-slim@latest install` and `npm i -g @dietrichgebert/ponytail`. Install `bun` first with `npm i -g bun` if you don't have it.
67
+ - [ ] **Copy the two config files** ([opencode.jsonc](./opencode.jsonc) and [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc)) into the root of your project. They are the source of truth for plugins, presets, and the 14 custom agent prompts. Skip this step if you are starting from this starter (the files are already there).
68
+ - [ ] **Subscribe to OpenCode Go**: $5 first month, then $10/month. Sign up at [opencode.ai/go?ref=8N581SYDM0](https://opencode.ai/go?ref=8N581SYDM0) and grab your API key.
69
+ - [ ] **Connect in the TUI**: `opencode`, then `/connect`, pick "OpenCode Go", paste your key. (Stored at `~/.local/share/opencode/auth.json`: never commit it.). You will also want to enabled `/connect` "OpenCode Zen" as well
70
+ - [ ] **Run from a project dir**: `cd` to your project, then `opencode`. The `default` preset routes most agents to `opencode-go/*` models, with broader Zen models as fallbacks.
71
+
72
+ # Full Guide
73
+
74
+ **This is an opinionated starter, not a general guide.** The recommended path for this repo:
75
+
76
+ 1. **Primary: OpenCode Go.** The $5 first-month / $10/month subscription unlocks the `opencode-go/*` model family on Zen (curated open-coding models with generous limits: 5h rolling $12, weekly $30, monthly $60). Most of the agents in the `default` preset point at Go models first.
77
+ 2. **Fallback: OpenCode models.** When Go is unavailable (rate limit, billing paused, model down), the agents fall through to the broader OpenCode model family: Zen pay-as-you-go and the free models on it.
78
+ 3. You may switch to `balanced` (mid-cost Go-leaning mix), `high-cost` (frontier-only), or `low-cost` (free-only) presets as your workload changes. Switching requires restarting Opencode (see the `/preset` bug note below).
79
+
80
+ The `default` preset in [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) is wired this way: Go primaries, broader OpenCode fallbacks. If you want a different tradeoff, switch presets with `OH_MY_OPENCODE_SLIM_PRESET` (see the `/preset` bug note): `balanced` is a Go-leaning mid-cost mix, `high-cost` is frontier-only, `low-cost` is free-only.
81
+
82
+ If you would rather not subscribe to Go, the starter still works with Zen or BYO providers: the table below spells out the trade-offs. The opinionated defaults here are tuned for Go; the other paths get the same agent fleet with different billing.
83
+
84
+ ## Pick your connection
85
+
86
+ **TL;DR**: this starter assumes **Go** (one bill, default model, broad coverage) with certain **Zen** models as fallbacks. Pick **Zen** if you will mix free and paid models and want to bypass Opencode Go. Pick **BYO** if you are privacy-first or air-gapped and willing to bring your own provider keys.
87
+
88
+ OpenCode is one tool; how you connect it to models is the real choice. Three paths:
89
+
90
+ | Connection | What it is | Model prefix | Best for |
91
+ | ------------------ | ------------------------------------------------------------------------------------------------------------ | -------------------------------- | ---------------------------------------------------------------------------------- |
92
+ | **OpenCode + Zen** | The curated pay-as-you-go gateway run by the OpenCode team. Free models included; recommended for new users. | `opencode/` | New users, mixed workloads, occasional frontier calls. |
93
+ | **OpenCode + Go** | The $5 first-month / $10/month subscription on Zen. Curated open-coding models with generous limits. | `opencode-go/` | Solo devs who want one bill and reliable model access. **This starter's default.** |
94
+ | **OpenCode + BYO** | Bring your own provider keys (Anthropic, OpenAI, Google, local models). OpenCode is provider-agnostic. | (whatever your provider exposes) | Privacy-first teams, air-gapped work, specific provider needs. |
95
+
96
+ The Go model catalog is public: `https://opencode.ai/zen/go/v1/models`.
97
+
98
+ ## Install OpenCode
99
+
100
+ | OS | Recommended | Alternative |
101
+ | ------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
102
+ | macOS | `curl -fsSL https://opencode.ai/install \| bash` | `brew install anomalyco/tap/opencode` (always up to date) |
103
+ | Linux | `curl -fsSL https://opencode.ai/install \| bash` | `brew install anomalyco/tap/opencode` (works on Linux too) or `npm i -g opencode-ai@latest` |
104
+ | Windows | **WSL is recommended.** Inside WSL, run the macOS/Linux curl line. | Native: `scoop install opencode`, `choco install opencode`, or `npm i -g opencode-ai@latest` |
105
+
106
+ > **Heads-up**: `curl | bash` is the official path. If you are cautious, run `curl -fsSL https://opencode.ai/install | less` first, then pipe it to `bash`.
107
+
108
+ Verify:
109
+
110
+ ```bash
111
+ opencode --version
112
+ ```
113
+
114
+ Anything ≥ `1.x` is supported.
115
+
116
+ ## Install the plugins
117
+
118
+ Two plugins need to be installed before OpenCode will read the repo's config.
119
+
120
+ ```bash
121
+ # oh-my-opencode-slim: the preset / agent layer
122
+ bunx oh-my-opencode-slim@latest install
123
+
124
+ # @dietrichgebert/ponytail: lazy-senior-dev mode (npm package, not vendored)
125
+ npm i -g @dietrichgebert/ponytail
126
+ ```
127
+
128
+ Re-running `bunx oh-my-opencode-slim@latest install` is the upgrade path. If you do not have `bun` yet, install it with `npm i -g bun` first.
129
+
130
+ ## Authenticate
131
+
132
+ OpenCode is provider-agnostic. The canonical way to authenticate is the `/connect` slash command in the TUI:
133
+
134
+ ```bash
135
+ opencode
136
+ > /connect
137
+ # pick a provider, follow the prompts
138
+ ```
139
+
140
+ For OpenCode Go: sign in at [opencode.ai](https://opencode.ai), subscribe to Go at [opencode.ai/go?ref=8N581SYDM0](https://opencode.ai/go?ref=8N581SYDM0), then `/connect` and pick "OpenCode". Your key is stored at `~/.local/share/opencode/auth.json`: never paste it into a chat or commit it.
141
+
142
+ ### Configure your account
143
+
144
+ After subscribing to Go, configure your OpenCode account at [opencode.ai](https://opencode.ai) to avoid surprise charges:
145
+
146
+ 1. **Use available balance**: in the Go config, enable "Use your available balance after reaching the usage limits". This lets you continue using Go models when you hit the rolling limits, drawing from your account balance instead of failing.
147
+ 2. **Enable Billing**: in your OpenCode account Billing settings, turn on Billing. This is required for pay-as-you-go usage beyond the Go subscription.
148
+ 3. **Auto Reload**: in Billing settings, enable Auto Reload so your balance tops up automatically when it runs low.
149
+ 4. **Monthly Limit**: in Billing settings, set a Monthly Limit to cap your maximum spend. This is the hard stop that prevents runaway costs. Recommended $40 to start which brings you to $50 total with the Go subscription.
150
+
151
+ ## Where your config lives
152
+
153
+ OpenCode looks for config in many places; the project file walks up to the nearest `.git`. For this starter, the two files that matter are the project-root [opencode.jsonc](./opencode.jsonc) and [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc).
154
+
155
+ OpenCode also auto-discovers agent definitions from any `.opencode/agent/*.md` or `.opencode/agents/*.md` file under a `.opencode/` directory in the project tree. The [NITM AI-Assisted Development Toolkit](https://github.com/ninjasitm/ai-assisted-dev-toolkit/) (see the Quick setup prerequisite) ships 14 such files: one per custom agent in this starter.
156
+
157
+ | OS | Global config | Auth | Project file |
158
+ | ------- | --------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------ |
159
+ | macOS | `~/.config/opencode/opencode.json` | `~/.local/share/opencode/auth.json` | [./opencode.jsonc](./opencode.jsonc) |
160
+ | Linux | `~/.config/opencode/opencode.json` (or `$XDG_CONFIG_HOME/opencode/opencode.json`) | `~/.local/share/opencode/auth.json` | [./opencode.jsonc](./opencode.jsonc) |
161
+ | Windows | `%USERPROFILE%\.config\opencode\opencode.json` | `%USERPROFILE%\.local\share\opencode\auth.json` | [./opencode.jsonc](./opencode.jsonc) |
162
+
163
+ If you are inside a project with an `opencode.json` / `opencode.jsonc`, that takes precedence. Otherwise, OpenCode falls back to the global file. The full config-resolution order is in [opencode.ai/docs/config](https://opencode.ai/docs/config).
164
+
165
+ ## Minimal config files
166
+
167
+ The repo ships two config files. If you are using this starter as a template, the full files are the source of truth and can be copied verbatim into your project root.
168
+
169
+ ### `opencode.jsonc`
170
+
171
+ ```jsonc
172
+ {
173
+ "$schema": "https://opencode.ai/config.json",
174
+ "lsp": true,
175
+ "share": "disabled",
176
+ "plugin": [
177
+ "@tarquinen/opencode-dcp@latest",
178
+ "opencode-mem",
179
+ "@dietrichgebert/ponytail",
180
+ "oh-my-opencode-slim",
181
+ ],
182
+ "agent": {
183
+ "build": { "disable": true },
184
+ "general": { "disable": true },
185
+ },
186
+ }
187
+ ```
188
+
189
+ This disables OpenCode's built-in `build` and `general` agents so they do not fight with the slim fleet.
190
+
191
+ ### `oh-my-opencode-slim.jsonc`
192
+
193
+ See [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) for the full contents: all four presets (`default`, `balanced`, `high-cost`, `low-cost`) with every agent's model array, temperature, and variant settings. The file is self-contained; copy it into your project root.
194
+
195
+ > **Note on `reasoningEffort`**: set it per-model inside the model array, not at the agent level. Setting it on the agent applies it to every model in the fallback chain, including free/flash models where "max" reasoning effort mostly just burns quota for no quality gain.
196
+
197
+ The `fallback` block is what slim uses when an agent has no model list of its own. 15 seconds is the timeout before it gives up and asks the user.
198
+
199
+ ## Switch presets
200
+
201
+ Two ways:
202
+
203
+ **Environment variable** (recommended: the working path today):
204
+
205
+ ```bash
206
+ OH_MY_OPENCODE_SLIM_PRESET=balanced opencode
207
+ ```
208
+
209
+ Useful for CI or for testing a preset without changing the saved config. The env var takes precedence over the config file's `preset` field.
210
+
211
+ **Slash command** (inside the OpenCode TUI):
212
+
213
+ ```
214
+ /preset <name>
215
+ ```
216
+
217
+ Picks from `default`, `balanced`, `high-cost`, `low-cost`.
218
+
219
+ ## Cost snapshot by preset
220
+
221
+ Rough monthly shape, assuming a single active developer. These are directional, not billed guarantees: actual spend depends on usage volume.
222
+
223
+ | Preset | Shape |
224
+ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
225
+ | `default` | ~$10/mo flat (Go subscription) + occasional Zen pay-as-you-go overage when Go falls back. |
226
+ | `balanced` | Go flat fee + a mid-cost mix of Zen models (some frontier calls for hard tasks, some free/flash for routine work). Expect ~$10–30/mo under steady use. |
227
+ | `high-cost` | Go flat fee **plus** metered frontier calls (Claude Opus/Sonnet, GPT-5.x, Gemini Pro) on Zen: expect this to be the most expensive preset by a wide margin under heavy use. |
228
+ | `low-cost` | $0 beyond the Go subscription itself: every agent is pinned to a free model. Trade-off is slower iteration and weaker output on hard tasks. |
229
+
230
+ # Meet the agent fleet
231
+
232
+ 22 agents run per preset: 8 built-in (orchestrator, oracle, designer, fixer, explorer, librarian, observer, council) plus 14 custom. The 14 custom agents have static `orchestratorPrompt` routing hints in [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc). When the NITM AI-Assisted Development Toolkit is installed (see the Quick setup prerequisite), each custom agent's full prompt body and model come from the toolkit's `.opencode/agents/<name>.md` and override the JSON. The per-preset built-in agent rosters and model assignments are below; the custom agent roles are stable across presets.
233
+
234
+ Built-in agent rosters by preset:
235
+
236
+ | Preset | Built-in roster |
237
+ | ----------- | --------------------------------------------------------------------------------- |
238
+ | `default` | orchestrator, oracle, designer, fixer, explorer, librarian (6) |
239
+ | `balanced` | orchestrator, oracle, designer, fixer, explorer, librarian, observer, council (8) |
240
+ | `high-cost` | orchestrator, oracle, designer, fixer, explorer, librarian, observer (7) |
241
+ | `low-cost` | orchestrator, oracle, designer, fixer, explorer, librarian, observer, council (8) |
242
+
243
+ ## The Presets
244
+
245
+ ### `default` Preset
246
+
247
+ | Agent | Primary | Fallback 1 | Fallback 2 |
248
+ | -------------- | --------------------------------- | --------------------------------- | -------------------------------------- |
249
+ | `orchestrator` | `opencode-go/minimax-m3` | `opencode/deepseek-v4-pro` | `opencode/mimo-v2.5-pro` |
250
+ | `oracle` | `opencode/mimo-v2.5-pro` | `opencode/minimax-m3` | `opencode/deepseek-v4-pro` |
251
+ | `designer` | `opencode/glm-5.2` | `opencode/kimi-k2.7-code` | `opencode/minimax-m3` |
252
+ | `fixer` | `opencode/deepseek-v4-flash-free` | `opencode-go/deepseek-v4-pro` | `opencode/qwen3.7-plus` (variant: max) |
253
+ | `explorer` | `opencode/mimo-v2.5-free` | `opencode/deepseek-v4-flash-free` | `opencode-go/deepseek-v4-flash` |
254
+ | `librarian` | `opencode/mimo-v2.5-free` | `opencode-go/minimax-m3` | `opencode/deepseek-v4-flash-free` |
255
+
256
+ ### `balanced` Preset
257
+
258
+ Mid-cost Go-leaning mix. All 8 built-in agents are active.
259
+
260
+ | Agent | Primary | Fallback 1 | Fallback 2 |
261
+ | -------------- | -------------------------------------------- | ---------------------------------------- | ------------------------------------------ |
262
+ | `orchestrator` | `opencode-go/minimax-m3` (variant: high) | `opencode/claude-sonnet-5` (medium) | `opencode-go/mimo-v2.5-pro` (variant: max) |
263
+ | `oracle` | `opencode-go/glm-5.2` (variant: max) | `opencode-go/mimo-v2.5-pro` (high) | `opencode/gpt-5.5` (medium) |
264
+ | `designer` | `opencode/claude-sonnet-5` (medium) | `opencode-go/glm-5.2` (medium) | `opencode-go/minimax-m3` (high) |
265
+ | `fixer` | `opencode/deepseek-v4-flash-free` (high) | `opencode-go/deepseek-v4-pro` (high) | `opencode/qwen3.7-plus` (high) |
266
+ | `explorer` | `opencode/mimo-v2.5-free` (high) | `opencode/deepseek-v4-flash-free` (high) | `opencode-go/deepseek-v4-flash` (high) |
267
+ | `librarian` | `opencode/mimo-v2.5-free` (high) | `opencode/deepseek-v4-flash-free` (high) | `opencode-go/minimax-m3` (high) |
268
+ | `observer` | `opencode/mimo-v2.5-free` (high) | `opencode/deepseek-v4-flash-free` (high) | `opencode-go/minimax-m3` (high) |
269
+ | `council` | `opencode-go/deepseek-v4-pro` (variant: max) | `opencode-go/kimi-k2.7-code` (max) | `opencode-go/glm-5.2` (max) |
270
+
271
+ ### `high-cost` Preset
272
+
273
+ Frontier models: costs scale with usage; expect this preset to be materially more expensive than `default`, since every fallback is a metered frontier model with no free tier to land on.
274
+
275
+ | Agent | Primary | Fallback 1 | Fallback 2 |
276
+ | -------------- | ----------------------------------- | --------------------------------- | -------------------------------------- |
277
+ | `orchestrator` | `opencode/claude-sonnet-5` (medium) | `opencode/gpt-5.4` | `opencode-go/glm-5.2` |
278
+ | `oracle` | `opencode/claude-opus-4-8` (high) | `opencode/gpt-5.5` (high) | `opencode-go/glm-5.2` |
279
+ | `designer` | `opencode/claude-sonnet-5` (low) | `opencode/gemini-3.1-pro` | `opencode-go/kimi-k2.7-code` |
280
+ | `fixer` | `opencode/claude-sonnet-5` | `opencode/gpt-5.4` | `opencode/qwen3.7-plus` (variant: max) |
281
+ | `explorer` | `opencode/gpt-5.4-mini` | `opencode/deepseek-v4-flash-free` | `opencode-go/deepseek-v4-flash` |
282
+ | `librarian` | `opencode/gpt-5.4-mini` | `opencode/deepseek-v4-flash-free` | `opencode-go/deepseek-v4-flash` |
283
+ | `observer` | `opencode/gpt-5.4-mini` | `opencode/gemini-3.5-flash` | `opencode-go/minimax-m3` |
284
+
285
+ `observer` is the 7th agent unique to this preset: not part of the base 6.
286
+
287
+ ### `low-cost` Preset
288
+
289
+ Every preset agent in `low-cost` is pinned to a single model, at zero marginal cost beyond the Go subscription.
290
+
291
+ | Agent(s) | Model | Notes |
292
+ | ---------------------------------------- | --------------------------------- | ------------------------------------------- |
293
+ | `orchestrator`, `designer` | `opencode-go/minimax-m3` | |
294
+ | `oracle`, `council`, `fixer`, `observer` | `opencode/mimo-v2.5-free` | `fixer` and `observer` run at variant `max` |
295
+ | `explorer`, `librarian` | `opencode/deepseek-v4-flash-free` | variant `high` |
296
+
297
+ `council` is unique to this preset: it stands in for a dedicated `oracle` when running fully free, and is not documented elsewhere in this README beyond this table. If you are relying on `council` for anything oracle-shaped, confirm its actual behavior against the tracked [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) rather than assuming parity with `oracle`.
298
+
299
+ ## The Custom Agents
300
+
301
+ Grouped by lane. Lane assignments and one-liners are derived from the agent names in the tracked [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc). The full `orchestratorPrompt` for each (sourced from [ninjasitm/ai-assisted-dev-toolkit](https://github.com/ninjasitm/ai-assisted-dev-toolkit/)'s `src/repo/.claude/agents/<name>.agent.md`) is in the JSON under `agents.<name>.orchestratorPrompt`; the one-liners below are the scan-friendly summaries. **The full prompt body and model for each agent come from `.opencode/agents/<name>.md`** (which `@`-references the matching `.claude/agents-snippets/<name>.md`); OMO slim only adds the `orchestratorPrompt` routing hint on top.
302
+
303
+ ### Codegen
304
+
305
+ | Agent | When to call it |
306
+ | --------------------- | ----------------------------------------------------------------------------- |
307
+ | `@green` | Greenfield scaffolding. New repo, blank slate, want a working starting point. |
308
+ | `@frontend-developer` | Frontend implementation. React, Vue, CSS, accessibility. |
309
+ | `@backend-architect` | Backend system design. Service boundaries, data flow, contracts. |
310
+ | `@feature-builder` | End-to-end feature factory. Cross-stack change with no special expertise. |
311
+ | `@tdd` | Red-green-refactor. Strict test-first. |
312
+ | `@refactor` | Tech-debt cleanup. Behavior-preserving. |
313
+ | `@implementer` | General-purpose fallback. When nothing else fits. |
314
+
315
+ ### Review
316
+
317
+ | Agent | When to call it |
318
+ | ----------- | ------------------------------------------------- |
319
+ | `@red` | Red-team / critique. Steelman, then attack. |
320
+ | `@reviewer` | Code review. Style, correctness, security, tests. |
321
+
322
+ ### Ops
323
+
324
+ | Agent | When to call it |
325
+ | --------------- | ---------------------------------------------------- |
326
+ | `@admin-portal` | Admin UIs and dashboards. Forms, tables, role gates. |
327
+
328
+ ### Research / docs
329
+
330
+ | Agent | When to call it |
331
+ | ----------------- | ------------------------------------------------------------------------------- |
332
+ | `@api-specialist` | API design and OpenAPI specs. |
333
+ | `@planner` | Task decomposition. Turn a vague goal into a sequenced plan. |
334
+ | `@researcher` | Tech research. Compare libraries, read docs, summarize. |
335
+ | `@documenter` | Docs, READMEs, runbooks. The person you call to write the thing you just wrote. |
336
+
337
+ # Bonus Commands
338
+
339
+ ## ponytail
340
+
341
+ `@dietrichgebert/ponytail` ships with these slash commands:
342
+
343
+ - `/ponytail [lite | full | ultra | off]`: set the intensity. Default is `full`.
344
+ - `/ponytail-review`: review the current diff for over-engineering.
345
+ - `/ponytail-audit`: audit the whole repo.
346
+ - `/ponytail-debt`: list deferred shortcuts.
347
+ - `/ponytail-gain`: show measured impact scoreboard.
348
+ - `/ponytail-help`: quick reference.
349
+
350
+ Set the default for every new session with the `PONYTAIL_DEFAULT_MODE` env var (or a `defaultMode` field in `~/.config/ponytail/config.json`). See [the ponytail README](https://github.com/DietrichGebert/ponytail) for the philosophy.
351
+
352
+ # Telemetry
353
+
354
+ `oh-my-opencode-slim` sends anonymous usage telemetry. Opt out with:
355
+
356
+ ```bash
357
+ export OMO_SEND_ANONYMOUS_TELEMETRY=0
358
+ ```
359
+
360
+ Or `OMO_DISABLE_POSTHOG=1`: both work. Drop one in your `~/.zshrc` / `~/.bashrc` / shell profile of choice.
361
+
362
+ # Edge cases
363
+
364
+ - **No Node?** The curl installer is the only path that does not need Node first. Install Node LTS, then come back.
365
+ - **Behind a corporate proxy?** OpenCode respects `HTTPS_PROXY` / `HTTP_PROXY`. Set them like any other CLI tool.
366
+ - **Running outside a project dir?** OpenCode walks up to the nearest `.git` looking for `opencode.json`, then falls back to `~/.config/opencode/opencode.json`. If neither is found, it uses the defaults.
367
+
368
+ # Validating
369
+
370
+ A quick smoke test:
371
+
372
+ ```bash
373
+ # 1. Confirm OpenCode runs
374
+ opencode --version
375
+
376
+ # 2. Confirm the four plugins load
377
+ opencode
378
+ > /plugins # should list all four
379
+ > exit
380
+
381
+ # 3. Confirm preset switching works (env-var path, since /preset has a bug)
382
+ OH_MY_OPENCODE_SLIM_PRESET=low-cost opencode
383
+ > /preset # may show "low-cost" as active, or fail: see the known bug
384
+ > exit
385
+ ```
386
+
387
+ For ongoing maintenance, this README is checked by:
388
+
389
+ - **`markdownlint`** with a custom config (100-col soft wrap, allow `<details>`).
390
+ - **`lychee`** for external link checks.
391
+ - **A JSON-parse snippet check** that extracts every fenced ` ```jsonc ` block, strips `//` comments, and asserts the result is valid.
392
+ - **A preset-table cross-check** that reads [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) and asserts: (a) all four presets are present, (b) every preset defines the same 22-agent roster, (c) every `model` array is non-empty, (d) the `orchestratorPrompt` for each of the 14 custom agents is a non-empty string. The check should diff agent-by-agent, not just count rows. Cross-check against `.opencode/agents/*.md` when present in the same repo (i.e. if the NITM AI-Assisted Development Toolkit is vendored here): the 14 custom agents' `name`, `model`, `mode`, and `permission` keys should be consistent across both sources. [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) is the fallback when `.opencode/agents/` is absent.
393
+
394
+ # Related
395
+
396
+ - [OpenCode docs](https://opencode.ai/docs)
397
+ - [OpenCode Go subscription](https://opencode.ai/go?ref=8N581SYDM0)
398
+ - [OpenCode config reference](https://opencode.ai/docs/config)
399
+ - [Go model catalog (JSON)](https://opencode.ai/zen/go/v1/models)
400
+ - [oh-my-opencode-slim on GitHub](https://github.com/alvinunreal/oh-my-opencode-slim)
401
+ - [oh-my-opencode-slim schema](https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json)
402
+ - [ponytail on npm](https://www.npmjs.com/package/@dietrichgebert/ponytail)
403
+ - [ponytail on GitHub](https://github.com/DietrichGebert/ponytail)
404
+ - **[NITM AI-Assisted Development Toolkit](https://github.com/ninjasitm/ai-assisted-dev-toolkit/)**: Cursor rules, GitHub Copilot instructions, `AGENTS.md` templates, and bundled skills (TDD, debugging, etc.). Use it for the prompt-and-rules half of the stack; this repo is the OpenCode-runtime half.
405
+ - [opencode.jsonc](./opencode.jsonc) (in this repo): full project config
406
+ - [oh-my-opencode-slim.jsonc](./oh-my-opencode-slim.jsonc) (in this repo): full preset + agent config