Nodes
A node is a session (one run of a coding agent) or an agent it started. Nodes form trees:
session claude-code:5f2c1e… depth 0, parent_id null
├─ agent claude-code:5f2c1e…/a3fd07… depth 1
│ └─ agent claude-code:5f2c1e…/b81c22… depth 2
└─ agent claude-code:5f2c1e…/c90d13… depth 1
Every node says where it sits: parent_id, root_id (the top of its tree, following sessions that started other sessions), session_id (the session it runs in) and depth.
State. A node’s state is one of:
| State | Meaning |
|---|---|
working | Doing something. |
input_required | Waiting on a person: a permission prompt, a question, a plan to approve. attention says what’s asked. |
idle | A session whose turn is over, alive and waiting for its next prompt. |
completed | Finished. |
failed | Finished with an error. |
canceled | Stopped before it finished. |
Waiting on another node isn’t a state: a node can be working and blocked at once. blocked says what it’s waiting on, directly (on_ids) and in all (how many nodes, how many open tasks among them), and whether the waits form a cycle that can never finish. A working node with no events for 30 minutes, and nothing it’s waiting on, is stale: it may have hung or crashed.
List nodes
Search nodes
Retrieve a node
ModelsExpand Collapse
Blocked { cycle, node_count, on_ids, 3 more } What stands between a node and carrying on.
What stands between a node and carrying on.
Every unfinished node it’s waiting on, directly or through others, with their children.
Those nodes. Present only when blocked.on is expanded.
Those nodes. Present only when blocked.on is expanded.
Node { id, agent_type, as_of_event_id, 39 more } A session or an agent, as it stood at as_of_event_id.
Fields ending _id or _ids are always present, as ids. The fields beside them without that ending (parent, root, …), and children, descendants, tasks, spawns, waits and messages, appear only when expanded.
A session or an agent, as it stood at as_of_event_id.
Fields ending _id or _ids are always present, as ids. The fields beside them without that ending (parent, root, …), and children, descendants, tasks, spawns, waits and messages, appear only when expanded.
For an agent, its type, as the tool names it (Explore, general-purpose, …).
Whether it was started in the background, so its requester carries on without waiting. null when unknown.
Helpers its tool ran on its own between turns (memory extraction, summaries, prompt suggestions). They report nothing about what they’re for, so they’re counted, not made nodes.
One line on what it’s doing now: summary, else the task in progress. Untrusted text.
session: one run of a coding agent (Claude Code, Codex, Cursor, …). agent: an agent started inside a session, by it or by another agent.
session: one run of a coding agent (Claude Code, Codex, Cursor, …). agent: an agent started inside a session, by it or by another agent.
link_method: "env" | "run" | "process" | "suggested" | nullFor a session started by another, how that was worked out: env (it inherited its parent’s identity), run (agent-graph run started it), process (its parent’s agent is among its processes) or suggested (it took a name its parent suggested).
For a session started by another, how that was worked out: env (it inherited its parent’s identity), run (agent-graph run started it), process (its parent’s agent is among its processes) or suggested (it took a name its parent suggested).
The node it sits under: the agent or session that started it. null for a root.
The id the agent tool gave it: <provider>:<session> for a session, <provider>:<session>/<agent> for an agent. Not an id in this API: use it to match the node to the tool’s own records.
The node whose spawn request started it, when known. Usually the parent; null for a session nothing started, or an agent no request was matched to.
The top of its tree: follow parent_id until it’s null. A session started by another session is in that session’s tree. A root’s root_id is its own id.
The session it runs in: itself, for a session; for an agent, the nearest session above it.
The tool call, in its requester’s session, that started it: matches a spawns[].call_id on requested_by.
working, waiting on nothing, and silent for 30 minutes: it may have hung or crashed. Measured against as_of, not now.
What a node is doing.
working: doing something.
input_required: waiting on a person (attention says what for).
idle: a session between turns, waiting for its next prompt.
completed, failed, canceled: finished.
What a node is doing.
working: doing something.input_required: waiting on a person (attentionsays what for).idle: a session between turns, waiting for its next prompt.completed,failed,canceled: finished.
The nodes directly under it, oldest first: the first 100, and a url for the rest. Present only when expanded.
Every node under it, at any depth, as one flat list in tree order: each parent before its children, siblings oldest first. The first 1,000, and a url for the rest. Present only when expanded.
Messages it has sent and received, oldest first. Present only when expanded.
Messages it has sent and received, oldest first. Present only when expanded.
The children it has asked for, oldest first. Present only when expanded.
The children it has asked for, oldest first. Present only when expanded.
Its task list, in the tool’s order. Present only when expanded.
Its task list, in the tool’s order. Present only when expanded.
Node { id, agent_type, as_of_event_id, 39 more } A session or an agent, as it stood at as_of_event_id.
Fields ending _id or _ids are always present, as ids. The fields beside them without that ending (parent, root, …), and children, descendants, tasks, spawns, waits and messages, appear only when expanded.
A session or an agent, as it stood at as_of_event_id.
Fields ending _id or _ids are always present, as ids. The fields beside them without that ending (parent, root, …), and children, descendants, tasks, spawns, waits and messages, appear only when expanded.
For an agent, its type, as the tool names it (Explore, general-purpose, …).
Whether it was started in the background, so its requester carries on without waiting. null when unknown.
Helpers its tool ran on its own between turns (memory extraction, summaries, prompt suggestions). They report nothing about what they’re for, so they’re counted, not made nodes.
One line on what it’s doing now: summary, else the task in progress. Untrusted text.
session: one run of a coding agent (Claude Code, Codex, Cursor, …). agent: an agent started inside a session, by it or by another agent.
session: one run of a coding agent (Claude Code, Codex, Cursor, …). agent: an agent started inside a session, by it or by another agent.
link_method: "env" | "run" | "process" | "suggested" | nullFor a session started by another, how that was worked out: env (it inherited its parent’s identity), run (agent-graph run started it), process (its parent’s agent is among its processes) or suggested (it took a name its parent suggested).
For a session started by another, how that was worked out: env (it inherited its parent’s identity), run (agent-graph run started it), process (its parent’s agent is among its processes) or suggested (it took a name its parent suggested).
The node it sits under: the agent or session that started it. null for a root.
The id the agent tool gave it: <provider>:<session> for a session, <provider>:<session>/<agent> for an agent. Not an id in this API: use it to match the node to the tool’s own records.
The node whose spawn request started it, when known. Usually the parent; null for a session nothing started, or an agent no request was matched to.
The top of its tree: follow parent_id until it’s null. A session started by another session is in that session’s tree. A root’s root_id is its own id.
The session it runs in: itself, for a session; for an agent, the nearest session above it.
The tool call, in its requester’s session, that started it: matches a spawns[].call_id on requested_by.
working, waiting on nothing, and silent for 30 minutes: it may have hung or crashed. Measured against as_of, not now.
What a node is doing.
working: doing something.
input_required: waiting on a person (attention says what for).
idle: a session between turns, waiting for its next prompt.
completed, failed, canceled: finished.
What a node is doing.
working: doing something.input_required: waiting on a person (attentionsays what for).idle: a session between turns, waiting for its next prompt.completed,failed,canceled: finished.
The nodes directly under it, oldest first: the first 100, and a url for the rest. Present only when expanded.
Every node under it, at any depth, as one flat list in tree order: each parent before its children, siblings oldest first. The first 1,000, and a url for the rest. Present only when expanded.
Messages it has sent and received, oldest first. Present only when expanded.
Messages it has sent and received, oldest first. Present only when expanded.
The children it has asked for, oldest first. Present only when expanded.
The children it has asked for, oldest first. Present only when expanded.
Its task list, in the tool’s order. Present only when expanded.
Its task list, in the tool’s order. Present only when expanded.
Spawn { agent_type, background, call_id, 7 more } A child a node asked for.
A child a node asked for.