v0.10.0
Highlights
Architecture
- Pure kernel refactor. Core is now a frontend-agnostic kernel — EventBus, ContextManager, HandlerRegistry, Compositor only. Agent backend, LLM client, TUI rendering, and all other features are extensions.
- Shell-history-shaped conversation memory with advisable handlers; agents can install custom compaction strategies via
conversation:compact. - Eager nucleation. Every turn is compressed to a one-line summary and appended to
~/.agent-sh/history, flowing across restarts like zsh history. - Custom agent backends. Extensions register alternative backends via
agent:register-backend;-enow accepts relative paths. - Deferred LLM config. agent-backend resolves provider config at
core:extensions-loaded, so runtime-registered providers work.
Features
- Peer-to-peer messaging.
peer_send/peer_inboxtools in the peer-mesh extension; received messages schedule a synthetic user turn. - Compositor introspection.
DefaultCompositoremitscompositor:write { stream, text }so extensions can mirror output without intercepting stdout. - Deferred-lookup tool mode. Tools load on demand with their full schema instead of being enumerated up front.
- AGENTS.md cross-session memory.
~/.agent-sh/AGENTS.mdloads into the system prompt. banner:collectpipe. Extensions contribute labeled sections to the startup banner.- Round-scoped read-only tool cache (avoids redundant
read_file/grephits inside a single tool loop). disabledExtensionssetting for opting out of user extensions at startup.registerInstructionAPI for extensions to add system-prompt guidance.- Two-tier compaction. Slim recent turns by dropping read-only results and truncating large outputs.
- /model and /backend selections persist as defaults.
- ctrl-a/e/k/u are line-aware in multiline input.
Fixes
- Retry loop no longer exhausts on unrelated errors.
isContextOverflowwas matching bare "token"/"context" substrings; now matches specific provider codes (context_length_exceeded) and unambiguous phrases. Bails when compaction is a no-op so the real error surfaces. - Glob vs grep disambiguation. Tool descriptions tightened; grep emits a redirect hint when a filename-shaped pattern yields zero matches. Grep no longer swallows ripgrep errors for glob-shaped patterns.
- ash-acp-bridge emits
core:extensions-loadedbeforeactivateBackend()so deferred LLM init works over ACP. - Executor no longer SIGKILLs after a clean exit.
- UI: CJK rendering, prompt leaks, Ctrl-C freeze, cursor positioning for wrapped/multiline input, autocomplete cursor tracking.
edit_file$&corruption bug in recall search.- Normalize tool-call arguments JSON to
"{}"when empty/invalid (strict providers reject""on replay). - Input history / nuclear history are now separate — InputHandler no longer clobbers agent memory.
- Read-only tool results filtered from history file writes; startup history filter bumped to 100 entries.
shortenPathguarded against undefined; required tool args validated.- Spinner stays alive during diff rendering.
ui:infosilenced on auto-compaction.- PTY exec collapses newlines to prevent garbled shell output.
- Tool display path shortening uses shell cwd.
- highlight.js warnings for unsupported langs suppressed.
Performance
- History, skills, and conversation state optimizations.
- System prompt cached across tool-loop iterations.
- Myers O(ND) diff replaces O(m×n) LCS.
edit_filepermission diffs skip file reads.- Per-turn prompt cost reduced; API-grounded token counts for compaction.
Refactors & Cleanup
- terminal-buffer extracted from built-in extensions to
examples/extensions/terminal-buffer.ts; xterm is no longer a core dependency. - user-shell moved out of built-ins (it's a user preference).
- display tool removed; claude-code-bridge user_shell tool replaced with diff display for Edit/Write.
- Myers diff replaced with the
diffnpm package. - Skills inlined in prompt,
_extensionNamehack removed. - System prompt points at
docs/instead of raw source; ash-shaped framing dropped from core. - DECSC/DECRC used for cursor save/restore where appropriate.
tui:render-diffhandler powers permission diff rendering.- Default diff display shows all; expand-diff feature removed.
- Default to stay in agent mode after dispatch.
instanceIdshortened from 16 → 6 hex.- subagents inherit nuclear memory entries.
Docs
- README demo gif.
- Audited docs for stale references; added
compositor:writeto tui-composition guide. - Pre-merge audit fixes; removed stale
display/user_shellrefs.
Contributors
Thanks to @firslov for a substantial batch of fixes and features (custom agent backends + relative -e paths, SIGKILL executor fix, history/skills/conversation-state perf, UI polish for CJK / prompt leaks / Ctrl-C, round-scoped tool cache).