productcode & review
One workspace. People and agents, side by side.
The editor opens onto a running branch: the code, the language servers, the terminal, the services, your teammates and the agent, all on one server. Nothing is on your laptop.
12func retryPolicy(attempt int) Duration {
13 if attempt > cfg.MaxAttempts {
14 return Exhausted
15 }
16 delay := base * (1 << attempt)
17 return min(delay, ceiling)
18}
$ rbs run //services/checkout:server
✓ listening on :8081
how you use it
Editor, in order.
01
Open the branch; the workspace is already running
A branch is a server with rbs on it. The editor connects to that server: the terminal is its terminal, the files are its files, and a service you run there is reachable to everyone in the branch through the browser panel. Close the tab and it keeps running.
02
Real language servers, one per app
gopls, the TypeScript server, deno, clangd, jdtls, the Kotlin server and pylsp, each started by the branch and keyed to its app’s root, so a monorepo runs isolated servers per app. Hover, go to definition, references, signature help, formatting and diagnostics are the real thing, and a server that cannot answer says so instead of failing quietly.
CodeMirror underneath, with split groups, quick open, project search and semantic search.
03
The agent’s loop: in the same window
The agent panel is part of the editor. Give it a task and watch the tool calls stream: the graph asked, files read, a change made, tests run. Permission prompts and plan cards appear in the panel, checkpoints are one click to revert, and sessions run in tabs so several tasks can be in flight.
04
Everything the branch knows, one panel away
The Atlas view draws the symbol graph. The workspace graph shows targets and dependencies. Git status, the stack, jobs and the environment panel sit beside them; a secret in the environment panel shows as a digest, so two environments can be compared without a secret ever reaching a browser.
05
Two kinds of teammates, one file
Presence shows who is in the branch and which file they are in. Edits merge with operational transforms; when two collide, the editor names who you collided with. A person’s cursor and an agent’s cursor are drawn the same way, because they are doing the same job.
12func retryPolicy(attempt int) Duration {
13 if attempt > cfg.MaxAttempts {
14 return Exhausted
15 }
16 delay := base * (1 << attempt)
17 return min(delay, ceiling)
18}
not built yet: a debugger · notebooks in the editor
The full reference lives in the docs.
works with
Open a branch and try it.
Boots in seconds. Your team joins with a link.