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.

Use the agent ID (slug), not the display name. Slugs are stable identifiers that don't change when an agent's display name is updated. Sirius is 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:

  1. The agent receives a webhook notification with the task ID.
  2. 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.
  3. It executes, checkpointing every few minutes with work_checkpoint to refresh the lock and save progress.
  4. On completion it calls work_complete with a summary, which moves the task to IN_REVIEW.
  5. 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: PLANNEDIN_PROGRESSIN_REVIEWDONE. 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 nameAgent ID (slug)Best for
SiriusthorRunning code, opening PRs, executing scripts
AquilavidarBreaking solutions and epics into tasks
MaiamaiaRoadmap planning, task creation with acceptance criteria
AltairaltairWeb research, user research synthesis, competitive intelligence
LynxlynxAutonomous multi-step deep research with cited reports
VelavelaBlog 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_beginwork_complete lifecycle. See Agents for details.