← ClaudeAtlas

kookr-terminal-backendlisted

How Kookr runs agent terminal sessions — TerminalBackend interface, dtach persistence, KOOKR_BACKEND env var, SessionBridge routing, legacy tmux paths. Use when touching adapter launch code, session I/O, stuck detection's paneContent, reconciliation, or the circuit-breaker-registry terminal entry.
kookr-ai/kookr · ★ 2 · Web & Frontend · score 78
Install: claude install-skill kookr-ai/kookr
# Kookr Terminal Backend Kookr runs agents (Claude Code, Codex CLI) in persistent terminal sessions so the agent survives Kookr restart. Two backends coexist in the code: - **dtach** (`LocalDtachBackend` at `src/adapters/local-dtach-backend.ts`) — current default as of v7 Main B.b (#343, 2026-04-21). Byte-transparent. Unix-socket-based. Selected when `KOOKR_BACKEND !== 'tmux'`. - **tmux** (`TmuxTerminalManager` at `src/adapters/tmux-terminal-manager.ts`) — legacy. Still constructed at startup. Kept for the `KOOKR_BACKEND=tmux` rollback path. Scheduled for deletion in V8 (`docs/rfc/rfc-v8-tmux-removal.md`). ## Two interface shapes (know which one you're holding) ``` TerminalManager (legacy, tmux-shaped) ├── createSession(name, command, options) ├── sendKeys(name, keys) // text + Enter ├── pasteText(name, text) // bracketed paste (Codex only) ├── sendKeystroke(name, key) // single key, no Enter ├── capturePane(name, lines?) // rendered screen text ├── isAlive(name) ├── killSession(name) ├── listSessions(prefix?) └── setSessionOption(name, opt, val) // tmux-only TerminalBackend (new, backend-agnostic) ├── createSession(spec: SessionSpec): Promise<SessionHandle> ├── attachSession(id): Promise<SessionHandle> ├── listSessions(): Promise<SessionId[]> ├── isAlive(id) └── killSession(id) SessionHandle (returned by createSession/attachSession) ├── write(data: Uint8Array) // byte-transparent ├── resize(cols, rows) ├── onData(cb) //