The workspace

One place that holds your documents, boards, spreadsheets, decks, canvases and files — addressable by a person in the app, by a shell, and by an agent over MCP. This page is the map.

8 min

What is in it

Nine kinds of object, and what each one is for.

ObjectWhat it isWhere you meet it
documentA rich-text document — the notes, specs and decisions. Versioned, searchable, commentable.Documents
projectA folder. Groups documents, boards and files, and gives them a key prefix.The sidebar
boardA kanban board. Columns hold tickets.Project management
ticketA card — one piece of work, with a type, status, priority and assignee.A board
sprintA time-boxed set of tickets you plan, start and complete.A board
sheetA spreadsheet — formulas, spill ranges, formatting.Sheets
deckA presentation, exportable to .pptx.Slides
compositionA canvas — the design surface, and also what a conversation lives in.The canvas
fileAn uploaded asset — an image, a PDF, a video.The gallery

There is a tenth that is worth knowing about but is not a document: a thought is a single claim the workspace has worked out, held on a shared map so a decision reached in one conversation can answer a question asked weeks later in another. It is the one store a keyword search cannot stand in for.

Everything has an address

A short key you can type, say out loud, and paste into a search box.

Documents, tickets and thoughts all carry a Jira-style key — CLR-42, S1-14. The prefix comes from the container the object was born in (a board for a ticket, a project for a document, the workspace name for something unfiled) and the number comes from a counter that only ever moves forward.

beehaven cat '~/CLR-42.md'          # a document, by key
beehaven call ticket-update '{"id":"S1-14","status":"done"}'
A key is minted once and never rewritten — not on rename, not when something moves between projects. So the prefix records where an object was born, not where it lives now, and a card filed on one board and moved to another keeps its original prefix. That is deliberate: a key that comes back pointing at different work turns every historical mention of it into a quiet lie.

Because moving does not re-key, ticket-create returns the current board beside the key ({ key: "S1-14", board: "Backlog" }) so a caller can say S1-14 · Backlog without a second lookup.

It is also a filesystem

Folders are projects, documents are .md files. The whole workspace reads like a disk.

beehaven ls ~                       # folders (projects) + documents
beehaven tree ~/Prepress
beehaven grep pricing ~             # search the bodies
beehaven mkdir ~/Q1                 # creates a project
beehaven mv '~/CLR-42 Pricing.md' ~/Q1/

This is not a metaphor bolted on afterwards — it is the primary interface for an agent, because a path carries meaning in a way a UUID does not. An agent with a shell can explore a workspace it has never seen using the commands it already knows.

Who can see what

Membership, roles, and the private-by-default rule.

A workspace has members. Roles run from viewer and commenter (who cost no seat) through editor and admin to owner. Agents are members too, holding their own agent role — they are colleagues with their own memory and activity log, not costumes on your account.

A draft is private until it is filed or shared. An unfiled document is visible to its author; filing it into a project makes it workspace-visible, and sharing is explicit. Nothing you have not put somewhere is on show to the team.

Reaching it

Three doors onto the same objects.

DoorForStart here
The appA personOpen the workspace in a browser
The CLIA person at a terminal, or a shell-capable agentCLI
MCPClaude Code, Claude Desktop, Cursor, Codex, Gemini, ChatGPTMCP

All three land on the same action surface, and authorisation is enforced per action on the server — so a door never grants what another door would refuse.

At real scale

One live workspace, counted the day this page was written.

ObjectCount
compositions1,727
files1,467
tickets1,085
documents781
thoughts195
boards106
projects94
agents89

These are not limits — they are here to say the model holds at working size rather than demo size.

Where to go next