Releases: spacedriveapp/spacebot
v0.4.0
What's Changed
- fix: add missing libxkbcommon0 to Docker runtime deps by @l33t0 in #426
- feat: desktop app sidecar, connection screen, and 3D orb by @jamiepine in #452
- feat: working memory system — temporal awareness for channels by @jamiepine in #454
- fix: keep setup mode usable when provider credentials are unavailable by @jamiepine in #422
- feat: worker orchestration screen by @jamiepine in #457
- fix: add provider prefix to zai-coding-plan default model by @tomasmach in #456
- fix: skill install 500 error and chart dimension warnings by @vsumner in #447
- feat: Add Mattermost channel support by @unverbraucht in #428
- fix: graceful browser shutdown and network error retries by @vsumner in #463
- fix: preserve nested task metadata updates by @jamiepine in #462
- Fix imap-proto build issues and update Nix dependencies by @vsumner in #465
- feat(deps): upgrade rig-core to v0.33 by @vsumner in #480
- fix(embed): use Array.isArray guard for agent data in OpenCode embed by @eibrahimov in #482
- fix: worker cancellation sets status to 'cancelled' instead of 'failed' by @l33t0 in #399
- fix: skip unresolvable channel bindings instead of crashing on startup by @l33t0 in #412
- fix(card): handle Card footer deserialization errors by @vsumner in #479
- feat(messaging): add signal configuration to web app by @ibhagwan in #392
- fix: add libxfixes3 to Docker runtime dependencies by @frizikk in #427
- fix: prevent unwanted scrollbars in Windows/Tauri desktop app by @TheDarkSkyXD in #471
- fix: prevent chat page layout shift hiding top navbar on Windows by @TheDarkSkyXD in #473
- fix: skip listen-only mode filtering for DMs in Slack by @ciaranashton in #484
- feat: elevate task system to instance-level global scope by @jamiepine in #468
- feat(card): add thumbnail, image, author, timestamp, footer icon_url by @vsumner in #467
- feat: OpenAPI Migration with Generated TypeScript Types by @jamiepine in #486
- feat: portal system, streaming, conversation & channel settings by @jamiepine in #506
- Add persisted webchat conversations and extract initial API client package by @jamiepine in #487
- fix(cron): persist scheduler state and delivery outcomes by @vsumner in #509
- feat: add complete Azure OpenAI provider support by @aspotton in #523
- fix: scope active channels by (agent_id, conversation_id) to prevent cron output leakage by @jamiepine in #526
- feat: add configurable tool-use enforcement by @jamiepine in #505
- Upgrade slack-morphism to 2.19 by @chandima in #516
New Contributors
- @unverbraucht made their first contribution in #428
- @eibrahimov made their first contribution in #482
- @frizikk made their first contribution in #427
- @TheDarkSkyXD made their first contribution in #471
- @aspotton made their first contribution in #523
- @chandima made their first contribution in #516
Full Changelog: v0.3.3...v0.4.0
v0.3.3
What's Changed
- cortex: phase2/3 health supervision and detached lifecycle hardening by @vsumner in #307
- fix: race condition losing opencode worker port in database by @jamiepine in #384
- feat(messaging): add Signal adapter via signal-cli JSON-RPC daemon by @ibhagwan in #347
- fix: harden GPT/Codex tool linkage, follow-up outcomes, and memory persistence contracts by @tomasmach in #386
- feat(llm): add GitHub Copilot as a first-class LLM provider by @ibhagwan in #394
- fix(slack): normalize conversation ID to prevent thread splits by @jamiepine in #406
- fix: preserve reasoning in assistant tool-call conversion by @skulldogged in #393
- fix: use byte slice in loop_guard to avoid UTF-8 panic on multibyte content by @Dakai666 in #389
- fix: prevent deletion of instance-level skills via agent API by @l33t0 in #400
- fix: UTF-8 safe string truncation in browser tool and debug logging by @l33t0 in #398
- fix(config): override host when deployed to docker by @DeJayDev in #403
- fix: harden Discord poll handling and refresh docs by @vsumner in #407
- Desktop app by @jamiepine in #387
- fix: preserve whitespace-only content segments in streaming responses by @jamiepine in #413
New Contributors
- @ibhagwan made their first contribution in #347
- @Dakai666 made their first contribution in #389
- @DeJayDev made their first contribution in #403
Full Changelog: v0.3.2...v0.3.3
v0.3.2
v0.3.2 tightens channel reliability and release ergonomics without changing the core architecture. Hosted deployments can now manage the SSH daemon through a dedicated API, and operators get stronger visibility through prompt inspection snapshots and richer live status context.
This patch also closes several turn-handling edge cases that could cause surprising behavior in busy channels. require_mention works, skip terminates the channel turn immediately (including error paths), and history backfill is treated as read-only archival context in the system prompt so older transcript text is not actioned as fresh instructions.
What's Changed
- Add SSH daemon management API by @jamiepine in #369
- fix: terminate channel turn immediately after skip tool call by @jamiepine in #373
- feat: system config self-awareness, prompt inspect API, release version check by @jamiepine in #374
- fix: require_mention falls through to default agent instead of dropping message by @jamiepine in #376
- fix: move backfill history from chat history to system prompt by @jamiepine in #377
Full Changelog: v0.3.1...v0.3.2
v0.3.1
What's Changed
- Fix Docker release, 0.3.0 docker was skipped, added gate to ensure docker builds succeed before publishing release
- Enable metrics in Docker build, add comprehensive Prometheus instrumentation by @l33t0 in #274
Full Changelog: v0.3.0...v0.3.1
v0.3.0
Agents now understand the codebases they work in. Projects bring repo discovery, worktree tracking, disk usage reporting, and automatic sandbox allowlist injection — so agents have spatial awareness of what they're operating on.
Browser tools were rewritten from scratch: 12 focused tools built on CDP's Accessibility API replacing DOM extraction, with persistent sessions that survive worker restarts. OpenCode is embedded directly in the worker detail view via Shadow DOM, with idle worker persistence and automatic reconnection on restart.
The cortex is now a real supervisor. It monitors worker health, detects stalls, manages detached worker lifecycles, and gained self-awareness through embedded docs and live config diagnostics. Workers got an outcome gate that prevents text-only exits without signaling completion, context injection for receiving relevant conversation history, and duplicate spawn prevention.
The Agent Factory adds a preset system and cortex-driven creation flow for spinning up new agents with dedicated identity files (SOUL.md, IDENTITY.md, ROLE.md) and scoped tool access. Native OpenAI SSE streaming and token-by-token webchat delivery landed alongside a full config.rs refactor into focused submodules with proper hot-reload.
Other additions: listen-only mode with cross-platform invoke handling, channel attachment persistence with recall, temporal filtering for channel_recall, wall-clock cron support, theme switcher, shell/exec tool consolidation, and MCP auth header fixes with rmcp 1.1.
What's Changed
- fix: send BranchResult on failure to prevent channel orphaning by @l33t0 in #279
- fix: surface upstream provider details in proxy API errors by @l33t0 in #278
- fix: resolve test isolation failures in config tests by @vsumner in #293
- fix: skip workspace path enforcement on file/send_file when sandbox is disabled by @jamiepine in #295
- fix: stop worker secret scans from killing internal work by @jamiepine in #297
- Fix ProcessType routing for Cortex and Compactor by @artlu99 in #290
- api: support channel archiving and channel list filters by @txchen in #291
- fix: block bracketed fallback and bare skip output by @jamiepine in #303
- fix: hot-reload opencode settings in active agents by @jamiepine in #302
- fix: warn on unrecognised top-level config keys (closes #221) by @l33t0 in #277
- Fix OpenRouter app attribution: send X-Title header by @l33t0 in #275
- Fix UTF-8 boundary panic in cortex_chat and discord reply truncation by @l33t0 in #276
- refactor: extract config.rs into focused submodules by @jamiepine in #306
- fix: harden OpenAI-compatible parsing for OpenRouter responses by @jamiepine in #304
- feat: rig 0.31 upgrade, tool nudging, and invariant harness by @vsumner in #292
- feat(cortex): add self-awareness docs and config diagnostics by @jamiepine in #311
- fix(llm): implement native OpenAI-compatible SSE streaming by @jamiepine in #313
- fix(prompts): send generated files as attachments by @jamiepine in #321
- fix(interface): replace crypto.randomUUID with secure-context-safe IDs by @jamiepine in #322
- fix(docker): add missing files for self_awareness.rs embeds by @toanalien in #316
- feat: temporal filtering for channel_recall + self-channel recall by @jamiepine in #284
- feat: persistent browser sessions with configurable close policy by @jamiepine in #309
- fix: let workers/branches continue when secrets detected in tool output by @jamiepine in #323
- fix: bump rmcp to 0.17 to fix 401 on MCP SSE streams by @islerfab in #300
- feat(interface): add theme switcher to settings by @toanalien in #317
- fix: support plaintext IMAP/SMTP for local mail bridges by @spacebot-fcc in #299
- feat: listen-only mode toggle + cross-platform invoke handling by @deanfluencebot in #288
- feat(cortex): Implement Phase 1 ("The Tick Loop") by @vsumner in #301
- cortex: implement phase 2 health supervision by @vsumner in #305
- fix(worker): gate text-only exits on explicit outcome signal by @jamiepine in #327
- fix(channel): use worker_handles as guard for WorkerComplete events by @ciaranashton in #331
- fix(cortex): use idle time instead of lifetime for worker timeout by @jamiepine in #332
- docs: sync rig usage/design docs with implementation by @vsumner in #329
- fix(channel): stop re-summarising worker results that were already relayed by @jamiepine in #333
- feat: embed OpenCode web UI in worker detail view by @jamiepine in #314
- fix: persist transcripts on idle + reconnect idle workers on restart by @jamiepine in #334
- fix: prevent long text overflow in agent chat message bubbles by @toanalien in #336
- Embed OpenCode UI via Shadow DOM and improve worker interactivity by @jamiepine in #343
- misc: UI improvements and docs updates by @jamiepine in #345
- test: harden tool_nudge assertions after UBS scan by @vsumner in #328
- fix: browser session persistence across workers and restarts by @jamiepine in #348
- feat: persist channel attachments to disk with recall tool by @jamiepine in #350
- feat: Projects — workspace layout awareness for agents by @jamiepine in #346
- refactor: rewrite browser tools — 12 flat tools, CDP accessibility API, secure credential entry by @jamiepine in #352
- fix: browser context management — dedup snapshots, consecutive loop guard, overflow resilience by @jamiepine in #359
- refactor: merge exec tool into shell, add per-command env vars by @jamiepine in #360
- fix: fork before keychain access to prevent SIGBUS on macOS daemon start by @chanyeinthaw in #353
- feat: wall-clock cron support in UI, anchor interval crons to last execution on restart by @jamiepine in #361
- feat: support single-repo projects and enhance skills UI by @jamiepine in #362
- feat: worker context injection and duplicate worker spawn prevention by @jamiepine in #358
- fix(mcp): fix auth header handling and bump rmcp to 1.1 for stateless HTTP support by @ciaranashton in #330
- feat: Agent Factory — preset system, factory tools, and cortex integration by @jamiepine in #315
New Contributors
- @artlu99 made their first contribution in #290
- @txchen made their first contribution in #291
- @toanalien made their first contribution in #316
- @islerfab made their first contribution in #300
- @spacebot-fcc made their first contribution in #299
- @deanfluencebot made their first contribution in #288
- @ciaranashton made their first contribution in #331
- @chanyeinthaw made their first contribution in #353
Full Changelog: v0.2.2...v0.3.0
v0.2.2
What's Changed
- fix: infer default routing from configured provider by @jamiepine in #266
- Sandbox hardening: dynamic mode, env sanitization, leak detection by @jamiepine in #259
- Secret store: credential isolation, encryption at rest, output scrubbing by @jamiepine in #260
- feat: auto-download Chrome via fetcher, unify Docker image, fix singleton lock by @jamiepine in #268
- fix: preserve conversation history and improve worker retrigger reliability by @jamiepine in #270
- Add interface CI workflow by @marijnvdwerf in #267
- Split channel.rs and standardize adapter metadata keys by @jamiepine in #271
- fix: allow trustd mach service in macOS sandbox for TLS cert verification by @jamiepine in #272
- feat: add OpenRouter app attribution headers by @l33t0 in #264
- feat: implement link channels as task delegation (v3) by @jamiepine in #255
Full Changelog: v0.2.1...v0.2.2
v0.2.1
What's Changed
- Improve task UI overflow handling and docker update rollback by @fyzz-dev in #237
- fix Anthropic empty text blocks in retrigger flow by @jamiepine in #243
- Fix: Cleanup twitch_token.json when disconnecting Twitch platform by @Nebhay in #212
- feat: add email messaging adapter and setup docs by @jamiepine in #244
- fix: match installed skills by source repo, not just name by @mwmdev in #205
- chore: add delivery gates and repo-local pr-gates skill by @vsumner in #238
- feat(channel): add deterministic temporal context by @vsumner in #239
- feat: add IMAP email_search tool for branch read-back by @jamiepine in #246
- feat(cron): add strict wall-clock schedule support by @jamiepine in #247
- feat: named messaging adapter instances by @jamiepine in #249
- fix: log cross-channel messages to destination channel history by @jamiepine in #252
- add DeepWiki badge to README by @devabdultech in #251
- fix(cortex): harden startup warmup and bulletin coordination by @vsumner in #248
- feat: Download images as bytes for interpretation in Slack/Discord etc and fix Slack file ingestion by @egenvall in #159
- fix: make Ollama provider testable from settings UI by @jamiepine in #253
New Contributors
- @fyzz-dev made their first contribution in #237
- @devabdultech made their first contribution in #251
Full Changelog: v0.2.0...v0.2.1
v0.2.0
v0.2.0 is the biggest Spacebot release yet.
The agent is no longer a single-channel chatbot, it's a multi-agent system with real orchestration primitives.
Agents coordinate through a spec-driven task system with a full kanban board in the UI. Tasks are structured markdown documents with requirements, constraints, and acceptance criteria. The cortex background loop picks up ready tasks, spawns workers, and handles completion or re-queuing on failure. Agents see the shared task board through the bulletin system, so delegation happens through specs, not conversation.
Workers got a complete visibility overhaul. Full transcript persistence with gzip compression, live SSE streaming of tool calls as they happen, and a new worker_inspect tool so branches can verify what a worker actually did instead of trusting a one-line summary.
On the security front, the old string-based command filtering (215+ lines of whack-a-mole regex) has been replaced with kernel-enforced filesystem sandboxing via bubblewrap on Linux and sandbox-exec on macOS. The LLM can't write outside the workspace because the OS won't let it.
This release also brings OpenAI and Anthropic subscription auth support, better channel history preservation with deterministic retrigger handling, structured text payload blocking to keep raw JSON/XML out of user-facing messages, self-hosted update controls in the settings UI, new provider support (Kilo Gateway, OpenCode Go), prebuilt Linux binaries for amd64/arm64, a Nix flake, and a pile of fixes across cron scheduling, OAuth, model routing, and more.
What's Changed
- feat(nix): add Nix flake for building and deploying Spacebot by @skulldogged in #47
- Fix chatgpt oauth by @marijnvdwerf in #187
- Multi-agent communication graph by @jamiepine in #150
- Process sandbox: kernel-enforced filesystem containment for shell/exec by @jamiepine in #188
- Workers tab: full transcript viewer, live SSE streaming, introspection tool by @jamiepine in #192
- add settings update controls and harden self-hosted update flow by @jamiepine in #207
- feat(web): ui/ux cleanup by @skulldogged in #143
- feat(ci): publish binaries for linux/amd64 and linux/arm64 on release by @morgaesis in #94
- block structured text payloads from user replies by @jamiepine in #209
- Fix Z.AI Coding Plan model routing by @jamiepine in #210
- fix: use Bearer auth when key comes from ANTHROPIC_AUTH_TOKEN by @worldofgeese in #196
- fix: use Bearer auth for ANTHROPIC_AUTH_TOKEN and add ANTHROPIC_MODEL by @worldofgeese in #197
- Task tracking system with kanban UI and spec-driven delegation by @jamiepine in #227
- fix: make background result retriggers deterministic by @jamiepine in #231
- fix: guide users to enable device code login for ChatGPT OAuth by @mwmdev in #214
- fix(cron): make cron scheduler reliable under load and in containers by @mmmeff in #186
- Fix Z.AI coding-plan model remap for GLM-5 by @vsumner in #223
- fix: Default cron delivery target to current conversation by @jaaneh in #213
- feat(llm): add Kilo Gateway and OpenCode Go provider support by @skulldogged in #225
New Contributors
- @morgaesis made their first contribution in #94
- @worldofgeese made their first contribution in #196
- @mwmdev made their first contribution in #214
- @mmmeff made their first contribution in #186
- @jaaneh made their first contribution in #213
Full Changelog: v0.1.15...v0.2.0
v0.1.15
What's Changed
- fix: resolve pre-existing CI failures (clippy, fmt, test) by @Marenz in #174
- fix: wire up ollama_base_url shorthand in config by @Marenz in #175
- fix: return synthetic empty text on Anthropic empty content response by @Marenz in #171
- fix: accept string values for timeout_seconds from LLMs by @Marenz in #169
- feat(telegram): use send_audio for audio MIME types by @Marenz in #170
- feat(skills): workers discover skills on demand via read_skill tool by @Marenz in #172
- fix: avoid panic on multibyte char boundary in log message truncation by @Marenz in #176
- ChatGPT OAuth browser flow + provider split by @marijnvdwerf in #157
- Fix worker completion results not reaching users by @jamiepine in #182
- Default MiniMax to M2.5 and enable reasoning by @hotzen in #180
- fix: register groq/together/xai/mistral/deepseek providers from shorthand config keys by @Marenz in #179
- Bugfix: Update dependencies for Slack TLS by @egenvall in #165
- Add warmup readiness contract and dispatch safeguards by @vsumner in #181
- fix(slack): Slack channel fixes, DM filtering, emoji sanitization, and restore TLS on websocket by @sra in #148
New Contributors
Full Changelog: v0.1.14...v0.1.15
v0.1.14
What's Changed
- feat(mcp): add retry/backoff and CRUD API by @l33t0 in #109
- feat(ux): add drag-and-drop sorting for agents in sidebar by @MakerDZ in #113
- fix(channel): roll back history on PromptCancelled to prevent poisoned turns by @Marenz in #114
- Fix CI failures: rustfmt, clippy, and flaky test by @Marenz in #116
- fix(channel): prevent bot spamming from retrigger cascades by @PyRo1121 in #115
- feat(security): add auth middleware, SSRF protection, shell hardening, and encrypted secrets by @PyRo1121 in #117
- remove obsolete plan document from #58 by @hotzen in #142
- fix(build): restore compile after security middleware + URL validation changes by @bilawalriaz in #125
- fix(telegram): render markdown as Telegram HTML with safe, telegram-only fallbacks by @bilawalriaz in #126
- Fix Fireworks by @Nebhay in #91
- fix: harden 13 security vulnerabilities (phase 2) by @PyRo1121 in #119
- fix: replace .expect()/.unwrap() with proper error propagation in production code by @PyRo1121 in #122
- feat(twitch): Add Twitch token refresh by @Nebhay in #144
- feat: add minimax-cn provider for CN users by @shuuul in #140
- feat(telemetry): complete metrics instrumentation with cost tracking and per-agent context by @l33t0 in #102
- feat: support ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN and SPACEBOT_MODEL env vars by @adryserage in #135
- Fix cron timezone resolution and delete drift by @jamiepine in #149
- feat: update Gemini model support with latest Google models by @adryserage in #134
- feat(web): add favicon files and update HTML to include them by @the-snesler in #154
- fix: add API body size limits and memory content validation by @PyRo1121 in #123
New Contributors
- @PyRo1121 made their first contribution in #115
- @hotzen made their first contribution in #142
- @bilawalriaz made their first contribution in #125
- @shuuul made their first contribution in #140
- @adryserage made their first contribution in #135
- @the-snesler made their first contribution in #154
Full Changelog: v0.1.13...v0.1.14