Tool tree
gradeNot graded
get_sessionAnswer
Read the live state of the Airlock coding session this page supervises: the task, the active model and provider, whether the session is running or blocked and why (rate_limit or context_overflow), context size against the active model's window, and the last checkpoint. Call this first.
View tool JSON
{
"name": "get_session",
"kind": "answer",
"impl": "imperative",
"description": "Read the live state of the Airlock coding session this page supervises: the task, the active model and provider, whether the session is running or blocked and why (rate_limit or context_overflow), context size against the active model's window, and the last checkpoint. Call this first.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}get_eventsAnswer
Read the router's recent runtime events in order: requests, rate limits, cooldowns, failover attempts, and handoff activity. Use since_id to read only what is new. Summaries can contain text relayed from upstream providers.
View tool JSON
{
"name": "get_events",
"kind": "answer",
"impl": "imperative",
"description": "Read the router's recent runtime events in order: requests, rate limits, cooldowns, failover attempts, and handoff activity. Use since_id to read only what is new. Summaries can contain text relayed from upstream providers.",
"inputSchema": {
"type": "object",
"properties": {
"since_id": {
"type": "number",
"description": "Return only events with an id greater than this."
},
"limit": {
"type": "number",
"description": "Maximum events to return, up to 40. Defaults to 40."
},
"kinds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional list of event kinds to keep, for example rate_limit_chain_exhausted."
}
},
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}get_routesAnswer
List every model route Airlock can hand this session to, with provider, capability tier, context window, whether it fits the session's context, plan headroom for its provider, whether it is ready or on cooldown, and whether using it spends metered extra usage. The message line names the routes that are ready, fit, and are not metered.
View tool JSON
{
"name": "get_routes",
"kind": "answer",
"impl": "imperative",
"description": "List every model route Airlock can hand this session to, with provider, capability tier, context window, whether it fits the session's context, plan headroom for its provider, whether it is ready or on cooldown, and whether using it spends metered extra usage. The message line names the routes that are ready, fit, and are not metered.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}prepare_handoffAction
Propose moving the blocked session to another route. This does not switch anything: it creates a proposal the human reviews, may edit, and must approve in the page. Refused when the route is on cooldown, when its context window is smaller than the session, or when it is metered and allow_metered is not true; each refusal lists alternatives. Returns the proposal id to poll with get_handoff.
View tool JSON
{
"name": "prepare_handoff",
"kind": "act",
"impl": "imperative",
"description": "Propose moving the blocked session to another route. This does not switch anything: it creates a proposal the human reviews, may edit, and must approve in the page. Refused when the route is on cooldown, when its context window is smaller than the session, or when it is metered and allow_metered is not true; each refusal lists alternatives. Returns the proposal id to poll with get_handoff.",
"inputSchema": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "Route id from get_routes, for example gpt-5.6-sol."
},
"reason": {
"type": "string",
"minLength": 8,
"maxLength": 400,
"description": "One or two sentences the human will read: why this route, what is preserved."
},
"allow_metered": {
"type": "boolean",
"description": "Set true only if the human said metered extra usage is acceptable. Defaults to false."
},
"preserve_checkpoint": {
"type": "boolean",
"description": "Resume from the last checkpoint. Defaults to true."
},
"preserve_worktree": {
"type": "boolean",
"description": "Keep the current git worktree. Defaults to true."
},
"preserve_task": {
"type": "boolean",
"description": "Carry the task description over. Defaults to true."
}
},
"required": [
"target",
"reason"
],
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}get_handoffAnswer
Read the current handoff proposal: status, revision, target, what the human changed since it was proposed, and, once approved, the approval_token needed by execute_handoff. Re-read this before executing; the human may have edited the proposal.
View tool JSON
{
"name": "get_handoff",
"kind": "answer",
"impl": "imperative",
"description": "Read the current handoff proposal: status, revision, target, what the human changed since it was proposed, and, once approved, the approval_token needed by execute_handoff. Re-read this before executing; the human may have edited the proposal.",
"inputSchema": {
"type": "object",
"properties": {
"handoff_id": {
"type": "string",
"description": "Optional. Defaults to the current proposal."
}
},
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}execute_handoffAction
Carry out an approved handoff so the session resumes on the new route from its checkpoint. Call it after get_handoff reports status approved and pass the approval_token it returned. Without a valid token it fails with APPROVAL_REQUIRED (not yet approved) or STALE_APPROVAL (the human edited the proposal after approving). Safe to retry: a second call returns the same result.
View tool JSON
{
"name": "execute_handoff",
"kind": "act",
"impl": "imperative",
"description": "Carry out an approved handoff so the session resumes on the new route from its checkpoint. Call it after get_handoff reports status approved and pass the approval_token it returned. Without a valid token it fails with APPROVAL_REQUIRED (not yet approved) or STALE_APPROVAL (the human edited the proposal after approving). Safe to retry: a second call returns the same result.",
"inputSchema": {
"type": "object",
"properties": {
"handoff_id": {
"type": "string",
"description": "The proposal id, for example H-229."
},
"approval_token": {
"type": "string",
"description": "Token returned by get_handoff once the human approved. Required for execution; omitting it only reports whether approval exists."
}
},
"required": [
"handoff_id"
],
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}get_replayAnswer
Read the attributed timeline of this session: what the runtime did, every tool the agent called, and every edit or approval the human made in the page, in order. Use it to explain to the human what happened.
View tool JSON
{
"name": "get_replay",
"kind": "answer",
"impl": "imperative",
"description": "Read the attributed timeline of this session: what the runtime did, every tool the agent called, and every edit or approval the human made in the page, in order. Use it to explain to the human what happened.",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum entries, up to 60."
}
},
"additionalProperties": false
},
"page": "/airlock-relay/app/"
}