How it works

One window is a claim.
One bus is how.

Everything the app can do is one of 244 named commands. Your click and the agent’s tool call reach the same one, pass the same check, and land in the same journal.

VectorBrain with the command palette open, searched for “fs.”: 12 of 244 commands. fs.browse, fs.dirs, fs.discard, fs.edit, fs.import, fs.list, fs.move, fs.open and fs.preview, each with its one-line summary and an effect badge: read, write, destructive or exec.

VectorBrain’s real command palette (Ctrl+K), drawn straight from the registry and searched for “fs.”. The project around it is example data.

01

The same command, whoever calls it.

Row 61323 is you saving the launch post. Row 61322 is an agent writing the same file with the same command, fs.write. Every call is a row with its exact input, refused ones included, and undo is an ordinary command off a row, so it still works after a restart.

What undo covers
The Activity journal. media.discard by an agent, parked with “needs your approval before it can run”; fs.write by an agent to notes/travel.md, refused because a run that has read the web may only make something new; the web.fetch that caused it; a journal.undo by the user; the user’s fs.write to copy/launch-post.md with an Undo button; and an agent’s fs.write to the same file, marked “undone by 61324”.
02

It stops and asks. You approve the exact call.

A delete the agent wants parks as a card holding its exact input. Allow replays that input verbatim, so you approve what happens, not a summary of it. Nothing is held open while it waits, so the card survives a restart.

Approvals, in full

Clear out the hero drafts we did not use.

A conversation where the agent found three unused hero drafts and asked to delete them. An approval card for media.discard, marked destructive, shows the exact JSON it will run, three file paths, with Allow, Refuse and “Stop asking for media.discard until the app restarts”.
03

A page it reads cannot make it act.

Once a run reads something from outside, such as a web page, it can still read, answer and make something new: a Canvas document, or a new .md, .txt or .csv file under the project’s web/ folder. It may not change what already exists, delete or run anything for the rest of that run. Here the timetable came back and the save over the existing note was refused, with the reason written into the journal.

The long version

Put the Saturday crossings in notes/travel.md.

A conversation marked “external”. Its tool list shows web.fetch succeeded and fs.write failed: “this run has read external data from the web, so it may only make something new”. The agent gives the ferry times and says it could not change the note that was already there.
04

One chat. Nothing to pick before you type.

A playbook, design, code or sheet, loads when you type its slash, when the app sees a sure sign such as a code project, or when the judge reads the request as one, and it stays for the rest of the conversation. It changes what is loaded, never what is allowed, so no request can load its way into more power. Your trust dial decides what asks.

What the code playbook brings
A new, empty conversation: Nat in the ring, “What are we making today?”, and one hint, “type / to load design, code or sheet”. There is no mode to pick. The composer below carries the model, then the effort, permissions and spending dials.
What a prompt cannot change

Each of these is enforced in code at the bus and never asked for in a prompt, because a limit a model is asked to respect is a limit it can be talked out of. Trust level, dollar ceiling and approvals are yours alone: the agent is refused those commands outright.

At a glance

The runtime, in numbers.

Commands
244 named, typed commands, each with an input schema, an effect level and a one-line summary the person and the model both read.crates/*/src (CommandSpec)
Front door
The window has one route into the core: a single dispatch call. Anything it needs belongs on the bus.ui/src/bus.ts
Effect levels
read, write, destructive, exec.ui/src/bus.ts
Provenance
first party, project, foreign. Only foreign taints a run.vb-core/src/permission.rs
Journal callers
“user”, “agent:<run>”, “script:<run>”, “companion:<program>”.vb-core/src/permission.rs
Your conversations
One role for every conversation you start: ceiling exec, 150 steps as a backstop. Your trust level decides what of that asks; the spending ceiling is the real bound.vb-agent/src/role.rs · PERSON_CEILING, PERSON_STEPS
Playbooks
design, code and sheet. Loaded by slash, by a sure signal, by the model, or by the judge at 0.7 or above. Sticky and append-only, and never a change to what is allowed.vb-agent/src/role.rs; vb-agent/src/judge.rs · PLAYBOOK_BAR
Helper roles
Report (read, 14 steps), Librarian (write, 6), Organize Taste (write, 12), Build pages (write, 16), Member (write, 20). Fixed ceilings, and none can stop to ask. Not pickable.vb-agent/src/role.rs
Trust levels
Always ask, Normal, God mode. Per conversation, set only by you.ui/src/levels.ts
Hard caps
12 browser tabs, 8 crew members.vb-cmd-pane/src/lib.rs, vb-agent/src/crew.rs

The details,
for the careful.

Is the VectorBrain agent using the same features I am, or a reduced API?

The same. A capability is defined once, as a command with its input schema, effect level, undo and summary. The palette, a button and the agent’s tool call are three callers of that one definition, so a feature cannot exist for you and not for the agent without someone deciding that on purpose. The whole list

What happens when the agent tries something I did not want?

Your trust level decides what stops, and only you can set it. At Normal, a delete or a program parks as an approval card and does not run until you allow it. A helper runs under a fixed, lower ceiling, and a command above it is not offered at all, so there is nothing to talk it into. What did run can be undone from its journal row.

Can a web page or a document talk the agent into doing something?

It can say anything, but it cannot change what you have. A run that reads foreign content may still read, think, answer and write what it found as something new: a Canvas document, or a new .md, .txt or .csv file under web/, marked as from the web. It may not change anything that already exists, delete or run a program for the rest of that run. Nothing the page says can lift that. How taint works

If I close VectorBrain mid-run, what survives?

The journal, and everything that hangs off it: the rows of what ran, parked approvals with their stored input, and the ability to undo. They are rows in a local database, not state in a process.

Are refused commands journalled?

Yes. Every dispatch lands in the journal, including the ones refused by the taint rule and the ones parked for approval, so “the agent picked the wrong command” is something you can look at rather than suspect.

What does undo cover?

Commands that declare an inverse, such as a file write, whose undo puts the earlier contents back. A message sent to a model provider or a form submitted on the web has no inverse and cannot be undone.

What does God mode switch off?

The waiting. Nothing stops to ask, but the sandbox, the rule that commit and push are yours, and the taint rule still stand. God mode is set per conversation, only by you.

Can I load a playbook halfway through a conversation?

Yes. Type its slash, or let the judge or the model load it when the work turns that way. A load is added to the end of the conversation and stays for the rest of it; nothing is unloaded or rewritten, because changing the start of a request throws away the provider’s cache. It brings know-how and tools, never permission.

One bus.
Nothing off the record.

What you click and what the agent calls are the same commands, checked the same way and written down in the same place.