Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2ba4a34
refactor(subagents): separate provider instances from drivers
Waishnav Oct 3, 2026
55cd9ae
docs(subagents): document provider instances
Waishnav Oct 3, 2026
b246d4e
fix(deps): pin koffi for package installs
Waishnav Oct 3, 2026
6944735
fix(subagents): keep profile instructions when a profile shares its p…
Waishnav Oct 25, 2026
3a15397
build(opencode): add v2 client
Waishnav Oct 3, 2026
a84c48c
refactor(opencode): add runtime generation foundation
Waishnav Oct 3, 2026
11aff46
feat(opencode): support v2 runtime
Waishnav Oct 3, 2026
33b0f32
docs(opencode): document runtime version routing
Waishnav Oct 3, 2026
be77f88
fix(opencode): probe the executable version on every runtime creation
Waishnav Oct 25, 2026
28679a7
fix(opencode): report a failed v2 turn instead of a missing assistant…
Waishnav Oct 25, 2026
3df63b0
feat(subagents): add capabilities and turn cancellation
Waishnav Oct 3, 2026
b0b2d3a
feat(subagents): expose agent stop command
Waishnav Oct 3, 2026
2889608
fix(subagents): make stop bounded and never start work after a stop
Waishnav Oct 25, 2026
bafce8b
refactor(subagents): make driver runtime policy declarative
Waishnav Oct 3, 2026
801d0ae
test(subagents): assert runtime independence without counting runtimes
Waishnav Oct 25, 2026
2eb50b7
fix(subagents): apply a continuation profile only for its provider in…
Waishnav Oct 26, 2026
3991199
Merge branch 'refactor/subagent-provider-instances' into feat/opencod…
Waishnav Oct 26, 2026
c12954f
Merge branch 'feat/opencode-v1-v2' into refactor/subagent-driver-regi…
Waishnav Oct 26, 2026
30dd94a
Merge branch 'refactor/subagent-driver-registry' into feat/subagent-c…
Waishnav Oct 26, 2026
a6b66ff
fix(opencode): ignore stale assistant messages and drain probe output
Waishnav Oct 26, 2026
a2af679
Merge remote-tracking branch 'origin/feat/opencode-v1-v2' into feat/s…
Waishnav Oct 26, 2026
ddbcad7
fix(acp): scope ACP runtimes to one agent
Waishnav Oct 26, 2026
a0767cd
fix(opencode): report stopped only after OpenCode confirms the interrupt
Waishnav Oct 26, 2026
b9c9736
Merge remote-tracking branch 'origin/feat/opencode-v1-v2' into refact…
Waishnav Oct 26, 2026
6d901c2
Merge remote-tracking branch 'origin/refactor/subagent-driver-registr…
Waishnav Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions docs/agent-profile-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ model can choose the right profile.

### `provider`

Required built-in provider id:
Required provider instance id. The default instance ids are:

```yaml
provider: codex
Expand All @@ -76,22 +76,26 @@ provider: copilot
provider: grok
```

Unsupported or custom providers are rejected. DevSpace maps providers to their
native integration:
Profiles may also reference named provider instances configured under
`subagents.providers`, such as `provider: codex-work`. Provider instances map
to one of these built-in driver integrations:

- `codex`: the host-installed `codex app-server` command
- `claude`: Claude Code SDK
- `opencode`: OpenCode SDK
- `opencode`: the host-installed OpenCode CLI; DevSpace probes its major version
and uses the matching 1.x or 2.x protocol internally
- `pi`: the installed Pi coding-agent SDK, one in-process session per DevSpace agent
- `cursor`: ACP
- `copilot`: ACP
- `grok`: Grok Build ACP (`grok agent stdio`)

Codex is resolved from the user's environment rather than bundled with
DevSpace. Run `codex login` normally before using it; set `CODEX_COMMAND` when
the executable is not on the normal PATH. OpenCode, Cursor, and Copilot
runtimes are started and reused by the daemon internally, while Pi is embedded
through its Node SDK.
Codex and OpenCode are resolved from the user's environment rather than bundled
as executables. Run their normal login/setup flows before using them; set
`CODEX_COMMAND` when Codex is not on the normal PATH. OpenCode is discovered as
`opencode`, and DevSpace automatically routes OpenCode 1.x and 2.x to their
matching runtime implementations. OpenCode, Cursor, and Copilot runtimes are
started and reused by the daemon internally, while Pi is embedded through its
Node SDK.

### `model`

Expand Down
25 changes: 25 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,26 @@ Subagent providers are explicit. Omitted providers are disabled:
}
```

`id` is the provider instance id used by profiles and `devspace agents run`.
For the default built-in instance ids, `driver` is optional and defaults to the
same value. Named instances declare the driver explicitly, which allows
multiple independently configured instances of one integration:

```jsonc
{
"id": "codex-work",
"driver": "codex",
"enabled": true,
"env": {
"CODEX_HOME": "/home/alice/.codex-work",
},
}
```

Profiles can then select that instance with `provider: codex-work`. The driver
is the implementation (`codex`, `claude`, `opencode`, `pi`, `cursor`,
`copilot`, or `grok`); provider-native session ids remain internal to DevSpace.

`subagents.instructions` controls when ChatGPT receives the managed workflow:

| Value | Behavior |
Expand All @@ -173,6 +193,11 @@ environment, then overlays the provider's `env` without mutating the daemon's
process environment. OpenCode receives that environment on its managed server
process; embedded Pi scopes it to its provider requests and command execution.

The `opencode` driver runs `opencode --version` before creating its first
runtime and automatically selects the OpenCode 1.x or 2.x protocol. Both major
versions use the same provider instance and profile configuration; `opencode2`
is not a separate driver.

Codex, Claude, Cursor, Copilot, and Grok also accept `command`. OpenCode and Pi
do not expose a command override. For providers that support it, an explicit
`command` wins over both the inherited command override and a command override
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
"@modelcontextprotocol/sdk": "^1.29.0",
"@modelcontextprotocol/server": "^2.0.0",
"@opencode-ai/sdk": "1.17.13",
"@opencode/client": "2.0.18",
"@pierre/diffs": "^1.3.6",
"better-result": "^2.10.0",
"better-sqlite3": "^12.10.0",
Expand All @@ -66,7 +67,7 @@
"drizzle-orm": "^0.45.2",
"express": "^5.2.1",
"jsonc-parser": "^3.3.1",
"koffi": "^3.1.2",
"koffi": "3.2.1",
"lucide": "^1.24.0",
"react": "^19.2.6",
"react-dom": "^19.2.6",
Expand Down
140 changes: 139 additions & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ allowBuilds:
better-sqlite3: true
esbuild: true
koffi: true
msgpackr-extract: false
node-pty: true
protobufjs: false
Loading
Loading