The phone grows a third tab — Desk (preview)
- new Desk mode (preview) — a third tab alongside Solo and Linked. Named agents run as host processes on your Mac, each pinned to its own workspace and persistent browser profile, gated by a three-tier approval flow (workspace pin · exec policy · phone petition). The phone is the messaging UI; the Mac is the compute.
- new Approval flow — any AppleScript or privileged tool call pauses the agent and renders an approval card on the phone. Approve, deny, or check always allow to whitelist the specific script + target.
- new Agent config from files — each agent is a directory (
soul.md, instructions.md, agent.md, memory.md, history.jsonl) under ~/.aricode/desk/agents/. Version-controllable. Hand-editable. Four seeded templates: research, inbox, calendar, shopper.
- new Capability-gated UI — the Desk tab only appears on the phone when the paired desktop advertises
capabilities.desk: true. Older desktops stay on two tabs.
- improved Scene-phase resync — iOS suspends WebSockets when the app backgrounds, so AriCore now refreshes agent state and re-opens the active chat on every foreground. The relay-client also fires a parallel
onDeskStatus hook so the desk store can resync on the closed→open edge without fighting session status.
- fixed Streaming-delta rendering — the first few tokens of a reply occasionally didn't re-render the bubble until the chat was closed and re-opened. Replaced the compound subscript mutation on
streamingTails with an explicit read-modify-write so @Observable always sees the write.
The reliability & performance pass
- fixed No more chat hangs during tool use — the brief beachball / spinning cursor that appeared each time the agent ran a tool is gone. Git status now runs asynchronously instead of blocking the UI, and the file tree no longer reloads on every sub-turn during multi-step tool runs.
- improved Faster opening of large repos — the file tree caps absurdly large directories (5000 nodes total, 500 per directory) with a clear "… N more entries" marker, so monorepos with
node_modules-shaped subtrees open instantly instead of stalling.
- improved Smoother streaming — message bubbles are now memoized so unrelated activity (a new tool result landing, status changes) doesn't force every prior message to re-render. Long conversations stay responsive.
- fixed "Loading…" no longer flashes on every message — the session list refreshes silently in the background. Mid-conversation refreshes update in place.
- improved Auto-retry on dropped connections — when an upstream provider closes the connection mid-stream (the
terminated / UND_ERR_SOCKET errors), aricode now classifies it as transient and retries automatically with backoff instead of failing the whole turn.
- fixed File edits preserve CRLF, BOM, and trailing newlines — Windows-style line endings, UTF-8 BOM, and missing-or-present trailing newlines all survive the edit pipeline now. No more silent diff churn from line-ending normalization.
- fixed Multi-hunk edits are all-or-nothing — if any hunk in a batch can't be located, the entire edit is rejected instead of leaving the file half-applied. Same for overlapping hunks. The fuzzy-match safety threshold was also raised so the agent won't accidentally land an edit on a sibling function with similar shape.
- fixed Detect concurrent file changes — if a file is modified externally (your editor, another tool) between when aricode read it and when it tries to write, the write is rejected with a clear "file changed since you read it" message instead of silently overwriting.
- improved Atomic session saves — session state writes via tmp+rename so the sidebar list and the saved file can never be observed mid-write. A crash mid-save can't corrupt the session file.
- improved Stream idle watchdog — if a provider sends the initial response then stops sending data, aricode detects it within 60 seconds and surfaces a clear timeout error instead of hanging indefinitely.
- new Diagnostic bundle export (Aridesk) — one click in the Diagnostics tab produces a single
.json with recent events, redacted config, and the active session — the artifact you'd attach to a bug report. API keys and OAuth tokens are stripped before bundling.
- new Live diagnostics tab (Aridesk) — see model calls, tool calls, MCP errors, edit conflicts, and crashes as they happen. Recent errors get their own column so you can scan for problems at a glance.
- new Token meter (Aridesk) — tiny gauge in the top bar showing context-window fill projection from the latest model response. Goes amber at 70%, red at 90%, so you see compaction coming.
- improved Tighter chat formatting — paragraph, list, and code-block spacing reduced; lists no longer compound margins on every item. Long replies fit more on screen without scrolling.
- fixed Secrets stay out of error messages — API keys, GitHub tokens, JWTs, and Bearer tokens are stripped from any error text before it reaches the UI or the structured event log.
- improved Crash handlers — uncaught exceptions and unhandled promise rejections are now captured to the event log so a bug report has the failure context attached, instead of just "the app crashed."
Aricode Desktop & session persistence
- new Aricode Desktop — a full Electron desktop app with three-panel layout, file tree with git diff badges, streaming conversation, integrated terminal, knowledge graph visualization, and slash command palette.
- new Session persistence — conversations automatically save to disk and resume on restart. Browse and switch between past sessions from the sidebar.
- new Provider management — add, edit, switch, and delete model providers from the desktop settings panel. First-launch onboarding wizard walks you through connecting to a backend.
- new Golden Thread rebrand — new warm amber/gold color palette, labyrinth-wall ASCII art logo, diamond spinner, and redesigned REPL with streaming text in the transcript.
- improved Streaming display — model output now streams live into the conversation transcript instead of only showing in the status bar. SpinnerMode state machine shows distinct phases (thinking, responding, tool-use).
- improved Dream mode abort —
/dream can now be cleanly interrupted with Ctrl+C or the Stop button. The abort signal propagates through all phase runners.
- new Conversation search — Cmd+F opens a search bar to find text across all messages with match navigation.
- new Conversation export — export your conversation as Markdown or JSON via File → Export.
- new Git panel — view branch, changed files, recent commits, and quick-commit from the detail panel.
- new Inline diff viewer — colored unified diffs with line numbers and per-file revert.
The section-mode feature release
- new Section Mode: practical by default —
/sectmode now reliably dispatches real work, with retry behavior when planner output is malformed and safer fallbacks when dispatch blocks are incomplete.
- improved Section id + alias matching — planner output can resolve canonical ids, normalized ids, and slugified section labels so section routing succeeds more often in real projects.
- improved Faster section orchestration — master, section, and verifier turn budgets were lowered so typical feature work stays focused instead of over-orchestrating.
- improved Transcript-first REPL flow — the terminal UI now keeps scrollback and copy behavior stable while section-mode runs stream naturally.
The dreaming release
- new Autonomous dreaming — phased codebase exploration (Survey, Triage, Deep Dive, Futures, Synthesis) with dream journal output
- new Node SDK —
createAricode() factory, async iterator event stream, defineTool() and createToolRegistry() for custom tools
- new Behavioral compilation — test witness extraction from TAP/pytest/unittest, root cause analysis, progress tracking across fix iterations
- improved Knowledge graph — concept nodes, semantic edges, fact card generation, incremental re-indexing via content hashing
- new Hooks system — six lifecycle events (post-edit, post-write, pre-command, post-command, session-start, session-end)
- improved Edit intelligence — convention extraction, blast radius reporting with dependency graph traversal
- breaking Package renamed from
ariadne to aricode. Legacy ARIADNE_* env vars still supported
The memory release
- new Persistent knowledge graph — file nodes, symbol nodes, structural edges (imports, calls, owns, inherit), JSON storage under
.ariadne/graph/
- new Subagent orchestration — task-specific agents with isolated conversations and read-only tool access
- new Session memory —
/memory and /forget commands for persistent per-workspace state
- improved Context management —
/ctxsize override, automatic summarization for long conversations
- fixed Tool calls no longer silently fail when model returns malformed JSON
The safety release
- new Edit intelligence — post-edit linting pipeline with ESLint, Pyright, clippy integration
- new Three-tier command policy — readonly (auto), mutating (consent), privileged (opt-in), with blocked commands
- new Environment sanitization — API keys, tokens, and secrets stripped from subprocess environments
- improved Hunk-based editing — smarter diff application with conflict detection and recovery
- fixed Streaming responses no longer truncate on slow model backends
The tools release
- new Interactive REPL — persistent session with slash commands, history, and tab completion
- new Tool calling — read_file, write_file, edit_file, run_command, search_files, glob with structured results
- new Multi-model support — Ollama, OpenAI, Anthropic, DeepSeek, and any OpenAI-compatible endpoint
- new Profile system — saved backend configurations with
/profile switching
- improved Streaming output with real-time token rendering
Initial release
- new CLI agent — single-shot and interactive modes for code generation and editing
- new Ollama integration — native local model support with automatic endpoint discovery
- new File operations — read, write, and search with workspace-scoped safety
- new Themed terminal output with configurable color schemes