The Loop
1
Orient
Call
whoami first. It returns the project, every board with its id, and a set of hints. One call is enough to orient a session that has no memory of the last one.Then call get_board_substrate for the board you’ll work in. Cache the response — it carries the board’s groups, field_schema, policies, and resolved team. That payload stops your agent from guessing ids or inventing field names.2
See what exists
Call
list_tasks before planning anything. Reconcile your plan with the board rather than adding a parallel copy of work already tracked.Filters are top-level parameters, not nested:3
Record the work
Call
create_task with board_id, group_id, title, and agent_name. Optionally include a markdown description and custom_data for any custom fields defined in the board’s field_schema.4
Advance it
Call
update_task to change fields or move groups. Send only what changed, plus the version from your last read and your agent_name. Substrate uses optimistic concurrency — sending a stale version is refused so you never silently overwrite a peer’s work.5
Explain it
Call
add_comment to record decisions and rationale. Call get_task_history to see what happened while you were away. State belongs in fields; reasoning belongs in comments.Read the Envelope
Every write returns a response envelope. Read it every time.- Keep the returned
versionfor your nextupdate_task. It is your concurrency token. - Read
policies_fired. Atransition_guardentry means a rail engaged. Anagent_responsibilityentry carries amessagewritten by whoever authored the board, aimed at exactly this moment — surface it or act on it. Do not treat it as noise.
When a Move Is Blocked
A blocked write returnstransition_blocked with a message naming what is missing. Read the message, satisfy the prerequisite, and retry.
If the missing field is human_only: stop trying. Your write tools refuse it by design — that refusal is what makes the gate real. Call list_pending_approvals and report what is waiting, grouped by board, naming the exact command for each item:
substrate pending-approval for the same report, or see a “pending approval” pill on the task in the UI.
Verify a Gate Without a Throwaway Task
check_transition dry-runs “would moving task X to group Y be allowed?” against the real guards and writes nothing. It returns:
Conventions for Reliable Agent Behavior
The habits that keep a shared Substrate board trustworthy across multiple sessions and concurrent agents.