Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ breaking changes may land in a minor release.

### Added

- **Kilo adapter (`kilo` profile, `kilo-http` kind).** Kilo (`kilocode`, an OpenCode fork)
is driven over its local HTTP/SSE server exactly like `opencode-http` — one headless
`kilo serve` per session, **no tmux window** — via a `KiloHttpAdapter` that extends the
OpenCode HTTP adapter. The fork differs from OpenCode in exactly two facts the adapter
overrides: it reads `KILO_*` env vars (`KILO_SERVER_PASSWORD`,
`KILO_CONFIG_CONTENT`, `KILO_DISABLE_EXTERNAL_SKILLS`) rather than `OPENCODE_*`, and its
server basic-auth username is `kilo`, not `opencode`. Everything else — the HTTP/SSE API
surface, SSE event frames, and usage schema — is identical to OpenCode. Needs the same
`[opencode]` extra for httpx; auth once globally with `kilo auth login`; skills live in
`.claude/skills/`; set `model` as `provider/model`. `env_fault_patterns` are intentionally
unseeded pending a captured kilo outage line.

- **`repo_root` in run `state.json`** (#716). A run records the git root its code work happens in,
so an out-of-process reader — `bmad-loop resolve`'s re-arm — uses the tree the run measured
instead of re-deriving one. A `state.json` written before the field existed degrades to the
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ skill = "bmad-dev-auto" # the only supported value — the generic upstream d
# No settings-schema entry: edit it here, not in the TUI editor.

[adapter]
name = "claude" # CLI profile: claude | codex | gemini | copilot | antigravity | opencode-http (alias: opencode) | custom
name = "claude" # CLI profile: claude | codex | gemini | copilot | antigravity | opencode-http (alias: opencode) | kilo | custom
model = "" # empty = CLI default (opencode-http wants "provider/model")
cleanup_session_on_finish = true # kill the run's tmux session when it finishes (false keeps it for inspection)
# extra_args replaces the profile's default bypass flags when set:
Expand Down Expand Up @@ -646,6 +646,7 @@ One generic driver (`adapters/generic.py`) runs any coding CLI that fits the inj
| `copilot` | supported, E2E-verified | GitHub Copilot **CLI** (the `copilot` binary, GA ≥ 2026-02) — _not_ the VS Code extension. Launches with `-i` to stay interactive; turn-end is `agentStop` (per response turn); `--allow-all-tools` for unattended runs. `copilot-events` usage parser reads token totals from the trailing `session.shutdown` line, so the profile waits a short grace (`usage_grace_s = 8`) before tallying. **Pin a capable model** (see below). |
| `antigravity` | experimental — `isolation = "none"` only | Google **Antigravity CLI** (`agy` ≥ 1.1.3). Launches with `-i` to stay interactive; `Stop` is the turn-end event (agy has no SessionStart/SessionEnd hook). Skills and hooks live in `.agents/` (flat `Stop` handler in `.agents/hooks.json`, keyed by hook-group name). Hook payloads are protojson/camelCase. **Trust is exact-path**: `agy` blocks on a "trust this folder" dialog for any workspace not listed verbatim in `settings.json` `trustedWorkspaces`, and `--dangerously-skip-permissions` does not bypass it — so `isolation = "worktree"` hangs ([#169](https://github.com/bmad-code-org/bmad-loop/issues/169)). `usage_parser = "none"` is permanent, not pending: agy's transcript carries no usage data (tokens live only in an internal SQLite/protobuf store), so runs work but token columns stay empty. Verify against your build with `probe-adapter antigravity`. |
| `opencode` | supported, E2E-verified | **OpenCode** ≥ 1.18 (profile `opencode-http`), driven over HTTP/SSE — one headless `opencode serve` per session, **no tmux window**. Needs the extra: `pip install 'bmad-loop[opencode]'`. Auth once globally with `opencode auth login`; skills live in `.claude/skills/`; set `model` as `provider/model` (e.g. `anthropic/claude-haiku-4-5`). Watch sessions via `run_dir/logs/<task_id>.log` or the TUI Log tab; `resolve` is `--no-interactive` only; the Unity plugin's window guards are unsupported here. |
| `kilo` | supported | **Kilo** (`kilocode`, an OpenCode fork, profile `kilo`), driven over HTTP/SSE exactly like OpenCode via the `kilo-http` adapter — **no tmux window**. Needs the same extra: `pip install 'bmad-loop[opencode]'`. Auth once globally with `kilo auth login`; skills live in `.claude/skills/`; set `model` as `provider/model`. The fork reads `KILO_*` env vars and authenticates with the basic-auth username `kilo` (not `opencode`), which is all the `kilo-http` adapter changes from the OpenCode family. |

**Copilot — pin a capable model:** Copilot's free default (GPT-5 mini) is unreliable for the multi-step dev/review skills — it silently skips steps mid-workflow and fails the story. Set a capable model in policy, e.g. `[adapter] model = "claude-sonnet-4-6"` (passed through as `--model`), for end-to-end reliability. Because Copilot fires `agentStop` per response turn, a thorough multi-turn review needs more than one nudge to finish; the profile ships `stop_without_result_nudges = 5`, and you can tune it per stage (e.g. `[adapter.review] stop_without_result_nudges = …`). Both knobs are editable in the settings TUI under `[adapter]`.

Expand Down
Loading