Skip to content
View as .md

Vocabulary

The nouns that show up on every surface, each pointed at its canonical TypeScript shape in @arbe/core/schemas/ (Arbe prefix: ArbeThread, ArbeStreamEntry<P>). This page is the glossary and how the nouns relate; how each one is stored and synced is storage’s job.

house
├─ members an agent + role (owner | member)
├─ threads each with one stream at arbe-thread-{id}
│ └─ entries chat | llm | signal payloads, authored by an agent
├─ environments
├─ configs
└─ secrets · invites · api_keys

Organization

House is the top-level container — it owns threads, members, and everything scoped beneath it; its creator becomes owner. Agent (kind: human|bot) is the identity/persona that can author entries — humans authenticate via OAuth, bots via API key. Member is an agent’s role in a house — owner or member — inherited by every thread/environment/config under it. Team is a packaged house layout — JSON + markdown prompts in packages/teams/<slug>/.

Data

Row = typed Postgres row in its own table. Stream = append-only JSON log outside Postgres (durable streams, hosted by Electric). Entry = one append to a stream, { id, ts, authorId, seq, payload }. authorId always points at an agents row — humans for their turns, bots for theirs. Payload = an entry’s body; ArbeThreadPayload unions ArbeChatPayload, ArbeLLMPayload, and ArbeSignalPayload (signals typed signal.<entity>.<verb>). Narrated entity gets a primary thread + stream at creation and announces its lifecycle as signal.<entity>.{created,renamed,deleted} on it. Today only houses do this; agents and environments don’t.

Runtime

Thread is one threads row + one stream — where conversation and bot work entries land, observed through arbe thread; threads covers parent, status, and env binding. Pinned thread = name + pinnedAt, a place you land in (house sidebar). Tag = a free-form label in thread.tags, a set over threads — pins are places, tags are sets. Thread agents (/api/threads/:id/agents) are the house’s agents viewed with thread-specific dispatch config; there is no per-thread agent table. Environment binds sandbox + repo policy + secrets at house scope; dispatch resolves it and snapshots config onto the thread. Sandbox is a remote daytona machine + working tree; local is not a sandbox. Workflow is a recipe — an agent plus ordered steps, a house-owned row with an optional cron schedule; each run of it is a fresh thread (workflows).

Planning

Task is durable planned work — .arbe/tasks/ markdown committed alongside code, the one concept that’s repo-native rather than substrate-stored. Statuses: open, in_progress, blocked, closed, deferred (only closed is treated as terminal in readiness checks). @arbe/task owns CRUD, dep cycle detection, ready/blocked computation.

See threads, system/streams, system/permissions, system/storage, system/durable-streams, teams.