--- name: ade-harnesses description: Use this skill when you need to run a chat, a CLI session, or a subagent on a specific setup — any model you pay for inside any harness (e.g. OpenCode Go's DeepSeek inside Claude Code), a saved Custom provider (a "harness preset" internally), one of this machine's provider accounts, or one stored API key — instead of whatever ADE would pick by default. Covers listing what is reachable (`ade harness routes`, `ade chat models`, `ade providers accounts list`), launching with `--via`, `--preset`, `--credential`, or `--instance`, checking a pairing (`ade harness test`), and running one in a plain terminal (`ade harness env`). --- # ADE harnesses: picking what a session runs on ADE separates the **harness** (which agent runs: Claude Code, Codex, Droid, OpenCode, …) from the **model provider** (where it gets its intelligence: a native sign-in, a provider signed in to OpenCode — OpenCode Go, Zen, or any provider connected there — a stored API key, or a subscription borrowed through ADE's proxy). Any routable harness can run any model its sources serve: ADE points the harness straight at the source when they speak the same API, and translates through its local proxy when they do not. A **harness preset** — shown in the app as **Custom** (Settings › Providers › Custom) — is one saved pairing of the two, with the model, the thinking level and the subagent pins attached. It has an id, and that id is the only thing a launch needs. The permission tier is not part of a preset: it is chosen at launch, the same way it is for every other provider. ## See what this machine can run ```bash ade chat models --text # every model, grouped by provider ade chat models --provider claude --text ade providers accounts list --text # Claude/Codex accounts on this machine ade providers accounts list --provider codex --text ``` Presets and accounts also ride the AI status payload, which is the one call that answers what a session can run on without three round trips: ```bash ade actions run ai getStatus --text ``` Read `harnessPresets[]` (`{id, name, harness, model, source}`) and `providerAccounts[]` (`{id, provider, label, isDefault, signedIn}`). Neither carries a key or a config path — only the ids the flags below take. ## See what each harness can reach ```bash ade harness routes --harness claude --text # every model Claude Code can run, by source ade harness routes --text # the same for every routable harness ``` Rows tagged `via ADE proxy` are translated (the proxy starts on demand). Check one pairing with a one-token request before relying on it — the verdict is remembered, so later launches route around a protocol the model refused: ```bash ade harness test --harness claude --via opencode-go --model deepseek-v4.1-flash --text ``` ## Launch on a specific setup | you want | flag | |---|---| | any reachable model, no saved preset | `--provider --via --model ` | | a saved custom setup (harness preset) | `--preset ` | | one stored API key, no preset | `--credential ` | | a specific Claude/Codex account | `--instance ` | ```bash # A chat on a saved preset — model, effort and subagent pins all come from # the preset, so nothing else needs stating. ade chat create --lane --preset hp_opus_work # A tracked CLI terminal on the same preset. ade new chat --mode cli --lane --provider claude --preset hp_opus_work # A key saved on a provider page, with no preset around it. ade chat create --lane --provider claude --credential openrouter # A specific account, without a preset. ade chat create --lane --provider claude --instance work # OpenCode Go's DeepSeek inside Claude Code, chat or CLI, no preset. ade chat create --lane --provider claude --via opencode-go --model deepseek-v4.1-flash ade new chat --mode cli --lane --provider codex --via opencode-go --model glm-5.3 ``` `--via` takes `opencode-go`, `opencode` (Zen), `opencode:`, or `key:[:]`. Subagents follow the main model unless a preset pins them. ## Run a custom setup in your own terminal ```bash eval "$(ade harness env --text)" && claude --model ``` The output holds the provider token. It is printed for `eval` and never written anywhere; do not paste it into a chat or a file. `--preset` and `--credential` are mutually exclusive: each names a whole setup, and passing both would leave ADE guessing which one you meant. ## Run subagents on a different preset A subagent is a chat, so it takes the same flag. Spawn one on a cheaper or faster preset than the parent and keep working: ```bash ade chat create --lane --preset hp_haiku_cheap \ --type subagent --permission-mode full-auto \ --prompt "Find every caller of resolveLaunchBrain and report the list." ``` For a harness that takes one, you do not have to spawn a separate chat at all: a preset can name its subagents' model and thinking level (Settings › Providers › Custom › Subagents), which apply to every subagent the chat spawns natively, with no extra flag. Claude Code, Codex CLI, Grok and OpenCode take a subagent model; Claude Code and Codex CLI take a level too. Claude Code, Grok and OpenCode also let you pin individual named roles (Explore, Plan, general-purpose) under **Subagent naming**. A harness the preset's wizard says runs subagents on the main model takes neither. ## What does not take a preset Three CLIs read their identity from their own sign-in and accept no key or endpoint from the launch: **Cursor**, **Copilot**, **Kimi**. A preset on one of them in CLI mode is dropped and the native CLI starts — a working session on the harness's own account, with the reason recorded. (Grok used to be here; it now runs routed models from an ADE-owned `GROK_HOME`.) OpenCode's **free** Zen models only answer inside OpenCode itself, so they are never offered in another harness. Two more have no key path at all, in either mode: - **Pi** reads its endpoints and model ids from its own `models.json`. Add the provider in Pi; a preset key has nowhere to go. - **Cursor** holds one key at a time in its own store, so a per-preset key would change every other Cursor session on the machine. When a preset cannot be honoured, the chat says which capability was dropped and runs on the harness's own sign-in. It never fails the launch.