Skip to content

BySpace v0.21.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 10:53
· 328 commits to main since this release

0.21.0 - 2026-10-27

Changed

  • The daemon is now one self-contained binary instead of a Node process with a bundled install tree, so it starts faster, uses less memory, and no longer needs a matching Node runtime on the host
  • Windows hosts run the same daemon as macOS and Linux; the daemon was previously unable to start there
  • byspace itself is the daemon: serve, relay, web and every other subcommand live in the one binary, and the published npm package ships a prebuilt binary per platform instead of JavaScript
  • The provider catalog is served from memory and rebuilt in the background, so opening a new workspace no longer waits on a provider probe
  • A workspace's status is derived from the agents and terminals inside it, so a workspace with a running agent, a pending permission, or a failed turn no longer shows as done
  • The signed-out relay connects at a dialable address, and a pairing link carries the endpoint the other device can actually reach

Added

  • Directory sync: the daemon sequences projects, workspaces and agents, so a client that keeps a copy asks for what changed instead of refetching everything, and is told when a row is deleted
  • Choosing which agent homes the orchestration skills install into: ~/.agents/skills and ~/.claude/skills can now be selected independently, and turning a home off asks before removing the skills there
  • byspace daemon reload applies a config.json edit to a running daemon and reports which settings need a restart, and byspace daemon set-password enables password auth
  • byspace worktree archive and byspace daemon reload complete the CLI surface the Node CLI had

Fixed

  • Fixed a provider switch that did nothing: the daemon rejected {enabled: false} for a built-in provider, so every toggle snapped back on
  • Fixed switching one provider off deleting the other providers' saved settings, including custom providers and their model lists
  • Fixed provider overrides and skills being saved under a key only this daemon read, so a Node daemon sharing the same home never saw the change and the two showed different answers
  • Fixed the development-only "Mock Load Test" provider appearing in a release build
  • Fixed every CLI command that talks to the daemon failing with 401 once a password was set: project list, schedule list, run, pair. The daemon now mints a credential for its own CLI and accepts it where it accepts the password
  • Fixed the web app failing its WebSocket handshake against a password-protected daemon, because the daemon did not echo the bearer subprotocol back
  • Fixed byspace pair minting a link from config.json instead of asking the running daemon, so the link named the stable app and the hosted relay even for a beta or self-hosted daemon, and failed outright on a home where the relay had never been configured
  • Fixed byspace pair on a daemon with a password handing out a link to the prerelease app, and with no --home reading no config at all so a home configured for app.byspace.cc.cd got a link derived from the build's version
  • Fixed a pairing link failing with Invalid host:port (expected localhost:6777) when the relay endpoint carried no port
  • Fixed a relay configured with enabled: true and no endpoint staying connected to nothing: it now falls back to the hosted relay, and daemon status reports the address it actually dials
  • Fixed byspace daemon start timing out on a daemon that had in fact started: it listened on the development port while every other command looked on 6777, and a configured password made its readiness probe get 401 on /health
  • Fixed byspace daemon status reporting stopped for a daemon it had not started on the default port, and the failed-start message printing the previous daemon's periodic metrics instead of what the attempt itself wrote
  • Fixed a daemon never reaching its relay: the control channel counted a silent socket as dead and closed it every 30 seconds, so no device could pair through it
  • Fixed --relay-use-tls being ignored, and a relay endpoint written without a scheme being dialled over plaintext on port 80, which also put :80 and useTls:false into pairing offers
  • Fixed the composer dropping a queued message typed while a turn was being submitted: the daemon handled session messages one at a time, so a slow provider call delayed the frames behind it
  • Fixed an agent's first prompt not appearing until the provider echoed it, which left rewind unavailable and the row blank during a delayed echo
  • Fixed workspace archive leaving its worktree on disk, and fixed reopening an archived workspace creating a duplicate row instead of restoring the existing one
  • Fixed a new workspace whose project the daemon had not yet announced staying invisible in the sidebar until the next refetch
  • Fixed the Changes pane missing committed work: the checkout diff stat, the base ref, the ahead/behind counts and per-commit file lists now come from git instead of being reported empty
  • Fixed a provider entry defined in config.json being ignored: its models, additionalModels, extends and command now reach the picker, and a provider whose binary is missing reports unavailable instead of ready
  • Fixed a delayed timeline response scrolling a reader who had scrolled away — the viewport now stays where the reader put it
  • Fixed terminals ignoring the size a reconnecting client asked to restore, so splitting the pane left the PTY at the old row count
  • Fixed the terminal tab title being overwritten by the terminal name, and the activity indicator never clearing after a hook reported attention
  • Fixed workspace scripts not running in a terminal, so their output never appeared and stopping one left the process running
  • Fixed two skill selections saved at the same time leaving the earlier one installed, because the daemon ran them concurrently instead of in the order they arrived
  • Fixed an imported Claude session losing its transcript when the provider process restarted, which left the conversation blank until the next turn
  • Fixed the archive prompt not warning about a worktree whose branch has unpushed commits
  • Fixed the tunnel dropping open streams across a brief reconnect, and fixed the daemon not reconnecting the relay at all when configured with a plain host:port
  • Fixed a failed remote daemon update reporting no progress, so the host page kept its old button while the download ran
  • Fixed a schedule's archiveOnFinish and its edits being dropped on save, so the form never closed and the workspace was always archived
  • Fixed imported sessions: the daemon now reads real Claude and pi transcripts, reports agent_resumed, and refuses a session that is already imported
  • Fixed the sidebar losing a project row after archiving its only workspace
  • Fixed turning a workspace label off saving an empty list instead of no labels
  • Fixed git remote get-url being trusted for the forge URL, which a repository that rewrites insteadOf serves as a local mirror path
  • Fixed two settings the daemon wrote but never announced, so the composer kept the old model and the host page never showed an update

Security

  • Moved the pinned Node to 22.23.4 and refreshed the container's certificate bundle, because Mozilla dropped the eMudhra emSign G3/C1/C3 roots and the Comodo AAA root on 2026-10-20 after all eight intermediate CA private keys turned out to be generated from a 1-3 bit random value