Files
kilocode/packages/opencode
Igor Šćekić aa22680fee refactor(cli): shared-process remote sessions with safe per-session exit (#12327)
* refactor(cli): run remote sessions in one process with safe per-session exit

Consolidate remote session handling into a single CLI process instead of
spawning one process per remote-created session (addresses the PR review):

- restore in-process create_session (accepts an absent sessionId and targets
  the connection directory); remove the session spawner, the
  KILO_REMOTE_ATTACH_SESSION attach-on-boot path, the child-advertisement gate,
  and their tests
- retain instance advertisement and fire one immediate out-of-band heartbeat on
  (re)connect when advertising, so a headless `kilo remote` host is discoverable
  without delay

Make /exit (wire command exit_cli, unchanged for compatibility) detach only the
target session instead of terminating the CLI:

- AttachedState.detach with a presence-suppression tombstone; detach also clears
  the target's SessionStatus so the negative-containment heartbeat fence resolves
  deterministically for busy/retry/offline sessions
- exit_cli handler verifies ownership, cancels the active prompt, detaches and
  awaits the detach heartbeat, then ACKs; the interactive RemoteExit callback is
  invoked only after the ACK when the last owned session exits; a headless
  `kilo remote` host stays alive and advertising at zero sessions
- add an optional canExitSession boolean to the list_commands v1 catalog
  (always true, independent of exitAvailable) so clients can detect safe
  session-exit semantics

History and stored sessions are preserved on exit.

* fix(cli): break module-load cycle in remote session prompt-cancel

The K1 in-process exit_cli seam added a static `import { SessionPrompt }`
to kilo-sessions.ts. @/session/prompt evaluates KiloSessionPrompt at module
load, so the new static edge raced that init and left the namespace in TDZ,
crashing unrelated test files with 'undefined is not an object (evaluating
KiloSessionPrompt.shouldAskPlanFollowup)'. Defer to a dynamic import at the
single call site, mirroring remote-command.ts.

* fix(cli): correct AttachedState announce/detach concurrency and rollback

Address review findings on the shared-process session lifecycle:

- announce/detach no longer join the OPPOSITE in-flight operation. Joining
  detach's negative-containment fence made announce resolve success for a
  detached id (and vice versa: detach joined announce and resolved success
  while still attached, which exit_cli treats as license to ACK/close). Each
  path now joins only a same-kind in-flight op and, when the opposite op is
  in flight, awaits it to settle and then performs the real work.
- Failed-detach rollback now releases the suppression tombstone, so a
  still-attached session is not dropped by the next setPresence (the tombstone
  loop would otherwise remove the still-present id and never clear).
- Both catch/rollback branches now honor the lifecycle generation guard
  (mirroring the success path); a stale in-flight op that rejects after
  reset() no longer mutates the new lifecycle's presence/pending/suppressed
  sets (reset clears the same Set instances).

Adds regression tests for each fix, plus AC6f covering the remote-ws
detachSessionId negative-containment waiter.
2026-07-24 09:39:07 +02:00
..
2026-07-13 18:00:35 +02:00
2026-07-07 18:11:20 +02:00
2026-07-22 09:21:25 +00:00

Kilo Code CLI

The AI coding agent built for the terminal. Generate code from natural language, automate tasks, and run terminal commands -- powered by 500+ AI models.

Kilo CLI showing code edits in a terminal

Kilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent.

Website · Install · IDE · CLI · Docs · Models · Gateway · Pricing · Kilo Pass

500+ models. One open source agent in VS Code, JetBrains, CLI, Slack, and Cloud.

Install

npm install -g @kilocode/cli

Or run directly with npx:

npx --package @kilocode/cli kilo

Getting Started

Run kilo in any project directory to launch the interactive TUI:

kilo

Run a one-off task:

kilo run "add input validation to the signup form"

Features

  • Code generation -- describe what you want in natural language
  • Terminal commands -- the agent can run shell commands on your behalf
  • 500+ AI models -- use models from OpenAI, Anthropic, Google, and more
  • MCP servers -- extend agent capabilities with the Model Context Protocol
  • Multiple modes -- Plan with Architect, code with Coder, debug with Debugger, or create your own
  • Sessions -- resume previous conversations and export transcripts
  • API keys optional -- bring your own keys or use Kilo credits

Commands

Command Description
kilo Launch interactive TUI
kilo run "<task>" Run a one-off task
kilo auth Manage authentication
kilo models List available models
kilo mcp Manage MCP servers
kilo session list List sessions
kilo session delete Delete a session
kilo export Export session transcripts

Run kilo --help for the full list.

Alternative Installation

Homebrew (macOS/Linux)

brew install Kilo-Org/tap/kilo

GitHub Releases

Download pre-built binaries from the Releases page.

Documentation

License

MIT