Canonical words for Junior code and docs. One concept, one word.
- Workspace: a named recipe of repos and setup for a Sandbox snapshot.
- Repository: a source repository on any hosting service.
- Code change: a proposed repo change (pull request, merge request).
- Commit: one repository revision. The host owns its id.
- Sandbox: an isolated environment for a Run or snapshot build.
- Preview: a public URL for a server that runs in a Sandbox. It stops working when the Sandbox stops.
- Deployment: a revision sent to a target environment.
- Conversation: the durable container for visible history and execution
state, keyed by a unique
conversationId. Parent is optional and separate from Location. Itskindisroot,automation,thread, ortask, and never changes.automationis a top-level Conversation for an Automation run. - Thread: a child Conversation that people can message like a root. Say "Slack thread" for the Location. A bare "Thread" is the Conversation.
- Task: a child Conversation that only its parent messages. People can
view it. Existing code names with
task(task-execution, the Tickettasktype, thespawnAgenttaskfield) keep their meaning. - Subagent: the mechanism behind Threads and Tasks (
spawnAgent, Agent bindings, Agent invocations). Not a UI word. - Brief: the versioned record of a Conversation's intent, outcome, decisions, facts, and evidence. Public Briefs outlive the transcript.
- Catch-up: a short summary of the rows after a reader's read position, and what waits on them. Made on request and not stored.
- Source: the input that caused work (Slack message, CLI, dashboard, Event, Automation, plugin dispatch, Agent invocation). Each Inbound message has one; a Turn stores the one that started it.
- Destination: an explicit target for output or a side effect. Not a synonym for Location; a new Conversation stores it as its Location.
- Location: the one outside place (a Slack channel or a Slack thread) a Conversation is delivered to. The Run carries it. It grants no delivery or visibility.
- Delivery: sends Run output to the Location. Without it, only completed assistant Messages are stored. Only a root Conversation delivers to its Location. A child stores its output and returns it to its parent.
- Conversation execution: mutable operational state (mailbox, worker lease, checkpoints, activity status).
- Conversation note: a core fact on a Conversation, shown to the next Turn as runtime context. It starts no Turn, is not a Message, and has no authority.
- User: one person-level record with zero or more linked Identities.
- Identity: one provider account (for example, a Slack account in one workspace), optionally linked to a User.
- Actor: the runtime participant for one source invocation. Ids are provider-scoped. Junior is the web provider, so a web Actor id is the User id. Provider fields do not select the runtime. A Turn stores the starting Actor; steering inputs keep their own.
- Participant: a User who is the Actor of a Turn in a root Conversation or
its children. A Participant is active until they unsubscribe; an inactive
Participant keeps access but leaves the active feed. Access, feeds, and
defaults that need people use Participants. A Conversation has no owner.
The root Actor (
actor_identity_id, the Actor of the first Turn) is a Participant like any other, and is kept only for attribution such as spend. - Admin: a User with the Junior-wide admin role, set only by
junior admin. Plugins use it for restricted setup. No plugin admin lists. - Service account: a provider account Junior uses for one plugin, allowed
by
accounts.service-accountand connected by an Admin (dashboard orjunior service-account connect). It serves Actors with no own connection;accounts.user-oauth: falsemakes it the only path. - Automation: a saved instruction run later, with a creator, trigger, instruction, and ordered outcomes.
- Schedule: a time trigger. Scheduled / Event automation: an Automation with a Schedule / Event trigger.
- Automation version: one saved definition (title, instruction, trigger, Destination, outcomes, credential mode). Not the edit revision.
- Automation run: one dispatch of an Automation to its outcome. Not a Run.
- Event: one normalized change (namespace, identifier, type, idempotency key) from core or a plugin. It can wake a Conversation.
- Watch: a temporary link that delivers matching Events to a Conversation. Not an Automation.
- Stopped Conversation: a Conversation with
stopped_atset. Its Watch Events are saved as skipped Messages and start no Turn. A stop marks the Conversation and its child agents. A run that sees its stop late also stops the child agents it tasked after the stop. A person's input sent after the stop, or new work from a child's parent, ends the stop. A person's stop keeps the Watches; an agent'sstopAgentalso cancels them. Reports show it asstoppedwhile no work runs. - Event reach:
"all",{ anyOf }(needs a named filter), or"resource"(needs an identifier) per event type. Limits noise, not access. - Inbound message: one normalized source event given to the agent. Agent input: the content, context, and metadata chosen for a Turn.
- Steering message: a message that joins the active Turn at the next safe boundary. Follow-up message: one that waits for the next Turn.
- Mailbox delivery:
interrupt(next safe boundary) ordefer(in order). - Turn: one request-to-final-response cycle. Not one model call.
- Answer: the tool call that ends a gated Turn:
reply,noReply, orreportBlocked. A Turn that a person did not open is gated on kindsautomation,thread, andtask. Its final response is not delivered. - Run: one bounded attempt to advance a Turn. A later Run may resume the same Turn after a pause, yield, or recoverable failure.
- Execution slice: one serverless invocation segment of a Run. Turn checkpoint: the Redis resume cursor for one Turn.
- Reasoning level:
none,low,medium,high, orxhigh. - Agent history item: a
user_message,assistant_message(holds its tool calls), ortool_resultevent. Notmodel_itemormodel_message. - History replacement: a compaction that sets later history. History version: the internal partition loaded after it.
- Message: normalized chat content stored for display, privacy, delivery,
and search. Message update: later state stored as
message_updated. - Reply: a destination-visible Message owned by delivery or reply-policy code. Execution code says turn, run, result, outcome, or delivery.
- Quiet message: the
noReplynote of an Event Turn, for a routine outcome. Junior stores it but does not deliver it to the Location. - Transcript: a reporting view of Messages and history. Not storage.
- Quick question: a hidden, read-only fork that asks about text in one Reply. Keep as fork makes it a normal fork.
- Agent binding: a parent-scoped name for one child Conversation.
- Agent invocation: one retry-safe task from a parent to a child, with
its terminal result. Only a
reply, or a failed, blocked, or stopped result, reaches the parent. Never shorten to "invocation". - Agent message:
messageAgenttext to a parent, a child, or another top-level agent (the agent of a root Conversation). To a child it is the child's instruction: it starts an Agent invocation or steers a running one. To a parent or a top-level agent it is an Event Inbound message, and it gives no user approval. - Agent type: a
spawnAgentpreset: when to pick it, whether it forks history, and per-task instructions. It does not limit tools. - Tool exposure: who may call a tool: the model, the tool catalog
(
searchToolsandexecuteTool), or a Code Mode script (a script that calls tools withtools.x(args)).ToolExposureowns the values. - Annotation: saved facts or a link on one Conversation. An update sends no message.
- Ticket (
task), Calendar event (calendar_event), Item: the Annotation types for provider work items, meetings, and other objects. - Message card: a Message's reference to an Annotation, shown with the latest saved facts. No live provider fetch.
- Unfinished work / Assigned work: plugin-owned work on a Conversation, open / open or done.
- Review item: work for a person, shown on the Review desk. Not an Item. Assignee: a User or Everyone (anyone who can see it).
providernames the namespace of provider ids on Identity and Location.- Source
kindsays what produced work. Notplatform. - Pass Location once on the Run. Never inside Source or Delivery. Never infer Delivery from Source, Actor, or Location.
- Use
turnIdfor new Turn ids. Keep oldrun,reply, andsessionIdnames until their contract migrates. - Use
reasoning;thinkingLevelonly at Pi SDK edges.