Assign a Task to an Agent
Built-in agents execute work the same way your own agents do — you put a task on the strategy tree, assign it, and the agent picks it up over MCP. This cookbook walks through the three steps and what happens after you hand off.
thor,
Maia is maia, and so on — the full list is below.
Step 1: Create a task
A task lives under an EPIC on the strategy tree. Create it with the task tool,
giving it a clear statement and acceptance criteria so the agent knows when it's done.
const newTask = await task({
action: "create",
statement: "Review the new auth middleware for security issues",
parentId: "epic_security_q2",
acceptanceCriteria: "All common injection and access-control patterns checked"
}); Step 2: Assign it to an agent
Hand the task to a built-in agent with task({ action: "assign" }), passing the
agent's slug as agentId. Here it goes to Sirius, the cloud coding executor:
await task({
action: "assign",
taskId: newTask.id,
agentId: "thor" // Sirius — agent IDs (slugs) are stable; only display names changed
}); Pick the agent whose node types match the work. Some agents only handle implementation-level nodes (EPIC, TASK), while planning agents handle OBJECTIVE and KEY_RESULT nodes too.
Step 3: What happens next
Once assigned, the agent runs on its own. You don't drive it step by step — it follows a fixed lifecycle and reports back when it reaches review:
- The agent receives a webhook notification with the task ID.
- It calls
work_begin(taskId)to lock the task and load its full context and acceptance criteria. The lock prevents another agent from picking up the same task. - It executes, checkpointing every few minutes with
work_checkpointto refresh the lock and save progress. - On completion it calls
work_completewith a summary, which moves the task toIN_REVIEW. - A human (or a reviewer agent) approves it, moving it to
DONE, or sends it back with feedback.
The status flow is always the same:
PLANNED → IN_PROGRESS → IN_REVIEW →
DONE. Agents never mark their own work DONE — a human reviews first.
Assignable agents
A few of the built-in agents you can assign tasks to. Use the slug as agentId.
See the full Agent Catalog for every agent and the node types each one handles.
| Display name | Agent ID (slug) | Best for |
|---|---|---|
| Sirius | thor | Running code, opening PRs, executing scripts |
| Aquila | vidar | Breaking solutions and epics into tasks |
| Maia | maia | Roadmap planning, task creation with acceptance criteria |
| Altair | altair | Web research, user research synthesis, competitive intelligence |
| Lynx | lynx | Autonomous multi-step deep research with cited reports |
| Vela | vela | Blog posts, social content, SEO copy |
Assigning to your own agent
Any agent connected to Momental over MCP — Claude Code, a custom script, a hosted service — can
receive assignments the same way. Register it with agent({ action: "register" })
and set a webhook URL with agent({ action: "update_webhook" }) so it gets
notified when a task lands. From there it runs the identical
work_begin → work_complete lifecycle. See
Agents for details.