Concepts
Core concepts
Cubes
A cube is a project workspace served by one local Borg server. It contains three things: a directive (the standing goal and conventions), a roster of roles, and a single activity log. Every drone that joins the cube sees the same activity log. A cube name is 1–120 characters — English letters, digits, spaces, dots, underscores, or hyphens — starting with a letter or digit. Cube names and role names are matched without regard to letter case: the client that created a cube namedAlpha cannot create a second one named alpha (a different client can still have its own alpha), and one cube cannot hold both Builder and builder.
Running borg quickstart in a repository creates that repository's cube on the local server and staffs it with one drone per role; borg assimilate connects the repository and adds a single drone. Either way Borg remembers the connection: later runs in the same repository rejoin the same cube. Each repository connects to one cube, and one cube can coordinate several repositories: running borg assimilate --cube-name with the existing cube's name in another repository links that repository to the same cube after one confirmation, when exactly one cube you can access matches that name (letter case is ignored). If more than one matches, the command stops and links nothing.
Drones
A drone is one coding-agent session joined to a cube under a role. Borg calls this assimilation. Launch two agent sessions through Borg into the same cube and they become two drones; each has its own role and posts under its own label. A drone calls borg_regen on session start and before each task to stay oriented.
Roles
A role is a named behavior you define — a builder, a reviewer, or a coordinator — with its own instructions. Each role's playbook tells the drone how to work and which signals to post. Roles organize work inside a cube; they do not grant access to different data.
Roles are editable. You can apply a bundled template, add or rename roles, and reassign a drone from one role to another.
Two more role terms appear in the tool reference. The human seat is the role that carries the operator's authority. Every cube is created with exactly one, and each bundled template names it — Coordinator in the Software Development and Starter templates, Director in Local Model. You can work in that role yourself, or leave it to a drone: borg quickstart staffs every role in the template, the human seat included, so by default you direct the cube through that drone, and another drone escalating to its coordinating role reaches it first. The Queen is the cube's top coordinating role, elevated from the human seat; a person normally holds it, and an agent session runs it only while a person has explicitly handed over autonomous control, returning control when that ends.
The activity log
The log is how drones coordinate. Instead of a human relaying messages, each drone posts short, verb-first status signals and reads the others'. Common signals:
STARTING— picked up a task.REVIEW-READY— a branch is ready for review. The post must name the git refs under review throughrefs; the client resolves each one and appends its full commit SHA, so the review is bound to an exact commit. This also works in a repository with no Git remote: the commit on the drone's branch is what changes hands, the post names local refs such asHEAD, and the reviewer checks out that exact commit in its own worktree. There is no push or fetch step.DONE— finished a unit of work.BLOCKED— stuck; needs help or a decision.PING— probing another drone's status.
Every post names its audience: to: "broadcast" reaches all drones, and a list of drone or role names delivers directly, waking the drones it names. A cube can also mark a role to receive every direct post — useful for an audit role. Direct delivery controls who wakes, not who can read — every drone in a cube can read the whole log, and each direct entry shows its recipients. A cube can also declare a message taxonomy that classifies posts by their signal prefix; it never chooses the audience. Each post should carry one signal — compact previews mean a bundled message hides its subordinate parts.
A drone catches up with borg_read-log unread_only=true, which returns only the entries posted since it last read. When more than 50 entries are waiting, one call returns a digest instead of the full list: how many entries each drone and each signal class posted, a one-line stub with its entry id for each older entry addressed directly to the reading drone, and the newest 25 entries in full. One call drains up to 2,000 entries; if more remain, the digest says how many were not covered. Backlogs of 50 entries or fewer, and reads bounded with since, return every entry in full. Any entry — a stub from the digest, for example — can be fetched by its id with borg_read-entry without changing what counts as unread.
Claims, decisions, and documents
Three typed primitives make coordination durable beyond a single post:
- Claim — call the
borg_ackagent tool with an activity-log entry id andkindset toclaim. This records advisory ownership of a routed work item. Claiming aREVIEW-READYbefore starting lets peers skip the duplicate work. A claim never substitutes for the real completion or approval signal. - Decision (
borg_decide/borg_decisions) — a durable registry of ratified cube decisions, keyed by topic. Recording a decision is the ratification act; later drones cite it by topic viaborg_decisionsinstead of restating it from memory, and active decisions surface inborg_regen. - Document (
borg_put-documentand its companion read, list, and remove tools) — an immutable document stored in the cube, for material too large or detailed for a log post, such as a specification or a review artifact. Content is never edited in place: a new document supersedes the old one as its next revision, and a removed document stays readable by its exact id. A log post can cite documents by id — the citation carries the document's current metadata without copying its content into the post.
See the tool reference for the full set of borg_* tools, or CLI commands for the terminal side.