OpenRig

MCP tools

Generated from the MCP server of OpenRig 0.7.10 (commit a226b1b6): rig mcp serve over stdio, MCP tools/list. No tool was called. 37 tools, in the server's order.

This is the full list a local caller sees. A caller over rig mcp serve --http with a grant that is not an owner grant is offered fewer: its work tools, and the workspace tools only with --workspace.

Required inputs are marked below. JSON schemas are kept in full for nested constraints.

rig_up

Launch a rig from a rig spec (.yaml), a .rigbundle or a .rigtopology, or restore an existing rig by its name from its latest snapshot

Input Type Required Description
sourceRef "string" yes An absolute path to a rig spec (.yaml), .rigbundle or .rigtopology, or the name of an existing rig to restore. The daemon reads the path, so a relative one resolves against the daemon's directory.
plan "boolean" no Plan mode — preview without executing
autoApprove "boolean" no Auto-approve trusted actions
targetRoot "string" no Target root directory for package installation
cwd "string" no Working directory for a new launch's agents. It must be absolute: this server has no caller directory to resolve a relative one against.
env "object" no Environment variables for a new launch from one rig spec or bundle, not saved with the rig (as rig up --env NAME=value). A .rigtopology or a restore by name doesn't use them.
rigName "string" no A new launch's rig name instead of the spec's (as rig up --name)
fresh "array" no When restoring an existing rig: the seats (logical ids, e.g. dev.impl) to start fresh instead of resuming (as rig up --fresh)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "sourceRef": {
      "type": "string",
      "description": "An absolute path to a rig spec (.yaml), .rigbundle or .rigtopology, or the name of an existing rig to restore. The daemon reads the path, so a relative one resolves against the daemon's directory."
    },
    "plan": {
      "description": "Plan mode — preview without executing",
      "type": "boolean"
    },
    "autoApprove": {
      "description": "Auto-approve trusted actions",
      "type": "boolean"
    },
    "targetRoot": {
      "description": "Target root directory for package installation",
      "type": "string"
    },
    "cwd": {
      "description": "Working directory for a new launch's agents. It must be absolute: this server has no caller directory to resolve a relative one against.",
      "type": "string"
    },
    "env": {
      "description": "Environment variables for a new launch from one rig spec or bundle, not saved with the rig (as rig up --env NAME=value). A .rigtopology or a restore by name doesn't use them.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Z_][A-Z0-9_]*$"
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    },
    "rigName": {
      "description": "A new launch's rig name instead of the spec's (as rig up --name)",
      "type": "string",
      "minLength": 1
    },
    "fresh": {
      "description": "When restoring an existing rig: the seats (logical ids, e.g. dev.impl) to start fresh instead of resuming (as rig up --fresh)",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "sourceRef"
  ]
}

rig_down

Tear down a rig

Input Type Required Description
rigId "string" yes Rig name or identifier to tear down
delete "boolean" no Delete rig record after stopping
force "boolean" no Kill sessions immediately
snapshot "boolean" no Take snapshot before teardown
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier to tear down"
    },
    "delete": {
      "description": "Delete rig record after stopping",
      "type": "boolean"
    },
    "force": {
      "description": "Kill sessions immediately",
      "type": "boolean"
    },
    "snapshot": {
      "description": "Take snapshot before teardown",
      "type": "boolean"
    }
  },
  "required": [
    "rigId"
  ]
}

rig_ps

List rigs and their status

No inputs.

{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}

rig_status

Check daemon health

No inputs.

{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}

rig_snapshot_create

Create a snapshot for a rig

Input Type Required Description
rigId "string" yes Rig name or identifier
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    }
  },
  "required": [
    "rigId"
  ]
}

rig_snapshot_list

List snapshots for a rig

Input Type Required Description
rigId "string" yes Rig name or identifier
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    }
  },
  "required": [
    "rigId"
  ]
}

rig_restore

Start restoring a rig from a snapshot. It answers at once with an attemptId while the restore runs in the background; follow the attempt with rig_restore_status.

Input Type Required Description
rigId "string" yes Rig name or identifier
snapshotId "string" yes Snapshot identifier
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    },
    "snapshotId": {
      "type": "string",
      "description": "Snapshot identifier"
    }
  },
  "required": [
    "rigId",
    "snapshotId"
  ]
}

rig_restore_status

Read where a restore attempt stands: the receipt for the attemptId rig_restore returned. An attempt with no completion yet (still running, or stopped before it finished) answers attempt_incomplete; it isn't a receipt.

Input Type Required Description
rigId "string" yes Rig name or identifier
attemptId "integer" yes The attemptId rig_restore returned
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    },
    "attemptId": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The attemptId rig_restore returned"
    }
  },
  "required": [
    "rigId",
    "attemptId"
  ]
}

rig_discover

Scan for tmux sessions to discover

No inputs.

{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}

rig_bind

Bind a discovered session to an existing node or create a new node in a pod

Input Type Required Description
discoveryId "string" yes Discovery session identifier
rigId "string" yes Target rig name or identifier
logicalId "string" no Existing node logical ID (mode: bind to existing)
podNamespace "string" no Pod namespace to create node in (mode: create in pod)
memberName "string" no Member name for new node (required with podNamespace)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "discoveryId": {
      "type": "string",
      "description": "Discovery session identifier"
    },
    "rigId": {
      "type": "string",
      "description": "Target rig name or identifier"
    },
    "logicalId": {
      "description": "Existing node logical ID (mode: bind to existing)",
      "type": "string"
    },
    "podNamespace": {
      "description": "Pod namespace to create node in (mode: create in pod)",
      "type": "string"
    },
    "memberName": {
      "description": "Member name for new node (required with podNamespace)",
      "type": "string"
    }
  },
  "required": [
    "discoveryId",
    "rigId"
  ]
}

rig_bundle_inspect

Inspect a .rigbundle file

Input Type Required Description
bundlePath "string" yes Path to .rigbundle file
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "bundlePath": {
      "type": "string",
      "description": "Path to .rigbundle file"
    }
  },
  "required": [
    "bundlePath"
  ]
}

rig_agent_validate

Validate an AgentSpec (agent.yaml) from YAML text

Input Type Required Description
yaml "string" yes YAML text of the agent spec
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "yaml": {
      "type": "string",
      "description": "YAML text of the agent spec"
    }
  },
  "required": [
    "yaml"
  ]
}

rig_rig_validate

Validate a RigSpec (rig.yaml) from YAML text

Input Type Required Description
yaml "string" yes YAML text of the rig spec
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "yaml": {
      "type": "string",
      "description": "YAML text of the rig spec"
    }
  },
  "required": [
    "yaml"
  ]
}

rig_rig_nodes

Get node inventory for a rig — session names, status, attach commands, resume commands

Input Type Required Description
rigId "string" yes Rig name or identifier
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    }
  },
  "required": [
    "rigId"
  ]
}

rig_send

Send a message to an agent's terminal using reliable two-step send

Input Type Required Description
session "string" yes Target session name (e.g. dev-impl@my-rig)
text "string" yes Message text to send
verify "boolean" no Verify delivery by checking pane content
force "boolean" no Send even if target appears mid-task
waitForIdleSeconds "number" no Wait until explicit idle evidence before sending. If the seat is still busy or its activity is unknown when the wait ends, nothing is sent and nothing is kept; separate work belongs in a queue row
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "session": {
      "type": "string",
      "description": "Target session name (e.g. dev-impl@my-rig)"
    },
    "text": {
      "type": "string",
      "description": "Message text to send"
    },
    "verify": {
      "description": "Verify delivery by checking pane content",
      "type": "boolean"
    },
    "force": {
      "description": "Send even if target appears mid-task",
      "type": "boolean"
    },
    "waitForIdleSeconds": {
      "description": "Wait until explicit idle evidence before sending. If the seat is still busy or its activity is unknown when the wait ends, nothing is sent and nothing is kept; separate work belongs in a queue row",
      "type": "number",
      "exclusiveMinimum": 0
    }
  },
  "required": [
    "session",
    "text"
  ]
}

rig_capture

Capture terminal output from an agent session

Input Type Required Description
session "string" no Session name (omit for multi-target with rig/pod)
rig "string" no Capture all sessions in a rig
pod "string" no Capture all sessions in a pod
lines "number" no Number of lines to capture (default: 20)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "session": {
      "description": "Session name (omit for multi-target with rig/pod)",
      "type": "string"
    },
    "rig": {
      "description": "Capture all sessions in a rig",
      "type": "string"
    },
    "pod": {
      "description": "Capture all sessions in a pod",
      "type": "string"
    },
    "lines": {
      "description": "Number of lines to capture (default: 20)",
      "type": "number"
    }
  }
}

rig_chatroom_send

Send a message to a rig's chatroom as this server's seat

Input Type Required Description
rigName "string" yes Rig name or identifier
body "string" yes Message body
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigName": {
      "type": "string",
      "description": "Rig name or identifier"
    },
    "body": {
      "type": "string",
      "description": "Message body"
    }
  },
  "required": [
    "rigName",
    "body"
  ]
}

rig_chatroom_watch

Read a rig's recent chatroom messages: the most recent ones (default 20), oldest first, optionally one topic's or one sender's. It returns what is there now and doesn't wait for new messages.

Input Type Required Description
rigName "string" yes Rig name or identifier
topic "string" no Only messages in this topic
sender "string" no Only messages from this seat
limit "integer" no How many recent messages (default 20)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigName": {
      "type": "string",
      "description": "Rig name or identifier"
    },
    "topic": {
      "description": "Only messages in this topic",
      "type": "string"
    },
    "sender": {
      "description": "Only messages from this seat",
      "type": "string"
    },
    "limit": {
      "description": "How many recent messages (default 20)",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "rigName"
  ]
}

rig_add

Add a single member to an existing pod in a running rig (the add_member converge op). Identity-migration-free: mints a fresh seat, nothing existing re-keys.

Input Type Required Description
rigId "string" yes Target rig name or identifier
podNamespace "string" yes Namespace of the existing pod to add the member to
member "object" yes Member fragment with spec snake_case fields: id, runtime, agent_ref, profile, cwd (and optional model, codex_config_profile, restore_policy, label)
edges "array" no Optional pod-local edges (from/to are member ids within the pod; resolved against the new member + existing pod-mates)
rigRoot "string" no Root directory for agent resolution
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Target rig name or identifier"
    },
    "podNamespace": {
      "type": "string",
      "description": "Namespace of the existing pod to add the member to"
    },
    "member": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "Member fragment with spec snake_case fields: id, runtime, agent_ref, profile, cwd (and optional model, codex_config_profile, restore_policy, label)"
    },
    "edges": {
      "description": "Optional pod-local edges (from/to are member ids within the pod; resolved against the new member + existing pod-mates)",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          }
        },
        "required": [
          "from",
          "to",
          "kind"
        ]
      }
    },
    "rigRoot": {
      "description": "Root directory for agent resolution",
      "type": "string"
    }
  },
  "required": [
    "rigId",
    "podNamespace",
    "member"
  ]
}

rig_queue_create

Hand a task to another seat as a durable queue item. Returns its qitemId: read the answer later with rig_queue_show. If the call times out, check rig_queue_show with the same qitemId before retrying; never retry with a new id. To ask for a revision of earlier work, name it in revises: the new item opens with 'Revision of <id>' and records it in its chainOfRecord.

Input Type Required Description
destination "string" yes Destination seat (e.g. dev-impl@my-rig)
body "string" yes The task: what to do and what to return
summary "string" no One-line summary
tags "array" no Tags, e.g. mission:<name>
priority "string" no Priority (as rig queue create --priority)
tier "string" no Tier (as rig queue create --tier)
qitemId "string" no Request id to reuse when retrying the same create (default: a new id)
revises "string" no The qitemId of the work this asks to revise
alert "boolean" no For an ask to a person that's urgent: something only they can do, or an approval whose wait costs now (as rig queue create --alert). It stands out in Slack. Without it the ask still posts to Slack unless the person's Slack subscription is urgent-only, in which case it waits on Steering and the TUI
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Destination seat (e.g. dev-impl@my-rig)"
    },
    "body": {
      "type": "string",
      "description": "The task: what to do and what to return"
    },
    "summary": {
      "description": "One-line summary",
      "type": "string"
    },
    "tags": {
      "description": "Tags, e.g. mission:<name>",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "priority": {
      "description": "Priority (as rig queue create --priority)",
      "type": "string"
    },
    "tier": {
      "description": "Tier (as rig queue create --tier)",
      "type": "string"
    },
    "qitemId": {
      "description": "Request id to reuse when retrying the same create (default: a new id)",
      "type": "string"
    },
    "revises": {
      "description": "The qitemId of the work this asks to revise",
      "type": "string"
    },
    "alert": {
      "description": "For an ask to a person that's urgent: something only they can do, or an approval whose wait costs now (as rig queue create --alert). It stands out in Slack. Without it the ask still posts to Slack unless the person's Slack subscription is urgent-only, in which case it waits on Steering and the TUI",
      "type": "boolean"
    }
  },
  "required": [
    "destination",
    "body"
  ]
}

rig_queue_show

Read one queue item and its transitions. For a task you handed off, this is where its answer is: the state, the closure reason and target, the notes the assignee recorded, and evidenceRef when it names an artifact (read it with rig_artifact_read). When the item was handed on, successor names the next item (on another host: its id and host); follow it with rig_queue_show. null means none was found. A revision names the work it revises in chainOfRecord.

Input Type Required Description
qitemId "string" yes The qitemId returned by rig_queue_create (or any queue item)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "The qitemId returned by rig_queue_create (or any queue item)"
    }
  },
  "required": [
    "qitemId"
  ]
}

rig_queue_list

List queue items. owned: assigned to this seat. mine: this seat is the source or the destination. Without a scope, this seat's rig. Without state, open items only (all adds closed ones); a state filter returns exactly those states, closed ones included. since finds work updated after a time; handedOffFrom finds where a handed-off item went.

Input Type Required Description
owned "boolean" no Only items assigned to this seat: its whole inbox (overrides destination)
mine "boolean" no Items this seat sent or owns
destination "string" no Filter by destination seat
source "string" no Filter by source seat
state "string" no Only these states, comma-separated; closed states included when named
all "boolean" no Without state: include closed items
since "string" no Only items updated at or after this ISO-8601 time, e.g. done work since Monday: state done, since 2026-10-19
handedOffFrom "string" no The items handed on from this qitemId, in any state and any rig
limit "integer" no Result limit (default 100)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "owned": {
      "description": "Only items assigned to this seat: its whole inbox (overrides destination)",
      "type": "boolean"
    },
    "mine": {
      "description": "Items this seat sent or owns",
      "type": "boolean"
    },
    "destination": {
      "description": "Filter by destination seat",
      "type": "string"
    },
    "source": {
      "description": "Filter by source seat",
      "type": "string"
    },
    "state": {
      "description": "Only these states, comma-separated; closed states included when named",
      "type": "string"
    },
    "all": {
      "description": "Without state: include closed items",
      "type": "boolean"
    },
    "since": {
      "description": "Only items updated at or after this ISO-8601 time, e.g. done work since Monday: state done, since 2026-10-19",
      "type": "string"
    },
    "handedOffFrom": {
      "description": "The items handed on from this qitemId, in any state and any rig",
      "type": "string"
    },
    "limit": {
      "description": "Result limit (default 100)",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  }
}

rig_queue_claim

Claim a queue item assigned to this seat before working on it.

Input Type Required Description
qitemId "string" yes The queue item to claim
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "The queue item to claim"
    }
  },
  "required": [
    "qitemId"
  ]
}

rig_queue_update

Update a queue item: add a note, block it, close it, or reopen a closed one. To answer a task, close it with state done, a closure reason and the answer in resolution, which the item keeps; note records why this transition happened.

Input Type Required Description
qitemId "string" yes The queue item to update
state "string" no New state (e.g. in-progress, blocked, done)
closureReason "string" no Why it closed: no-follow-on for finished work, or handed_off_to, denied, canceled, escalation or superseded (as rig queue update --closure-reason)
closureTarget "string" no Closure target, when the reason needs one
note "string" no Transition note: progress, or why this transition happened (required to reopen)
resolution "string" no The outcome the item keeps, stored only by the update that closes an open item (as rig queue update --resolution)
reopen "boolean" no Reopen a closed item: give an active state (pending, in-progress or blocked) and a note (as rig queue update --reopen)
summary "string" no Replace the one-line summary
evidenceRef "string" no Pointer to the durable artifact, stored on the item when closing with state done or parking on a human seat; other updates refuse it
blockedOn "string" no What it waits on, when blocking: another qitemId (this item returns to pending when that one closes), or the address of the person this item came from, not a shared channel (they're asked with this item's summary, and their answer returns it to you in progress)
wakeAfterSeconds "integer" no Wake this seat after this many seconds, when blocking. Delivered only to a seat with a terminal: an attached app can't receive it today, so the item just waits until it is checked.
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "The queue item to update"
    },
    "state": {
      "description": "New state (e.g. in-progress, blocked, done)",
      "type": "string"
    },
    "closureReason": {
      "description": "Why it closed: no-follow-on for finished work, or handed_off_to, denied, canceled, escalation or superseded (as rig queue update --closure-reason)",
      "type": "string"
    },
    "closureTarget": {
      "description": "Closure target, when the reason needs one",
      "type": "string"
    },
    "note": {
      "description": "Transition note: progress, or why this transition happened (required to reopen)",
      "type": "string"
    },
    "resolution": {
      "description": "The outcome the item keeps, stored only by the update that closes an open item (as rig queue update --resolution)",
      "type": "string"
    },
    "reopen": {
      "description": "Reopen a closed item: give an active state (pending, in-progress or blocked) and a note (as rig queue update --reopen)",
      "type": "boolean"
    },
    "summary": {
      "description": "Replace the one-line summary",
      "type": "string"
    },
    "evidenceRef": {
      "description": "Pointer to the durable artifact, stored on the item when closing with state done or parking on a human seat; other updates refuse it",
      "type": "string"
    },
    "blockedOn": {
      "description": "What it waits on, when blocking: another qitemId (this item returns to pending when that one closes), or the address of the person this item came from, not a shared channel (they're asked with this item's summary, and their answer returns it to you in progress)",
      "type": "string"
    },
    "wakeAfterSeconds": {
      "description": "Wake this seat after this many seconds, when blocking. Delivered only to a seat with a terminal: an attached app can't receive it today, so the item just waits until it is checked.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "qitemId"
  ]
}

rig_environment_export

Transfer a bound worker's actual JSON artifact to the host, verify its bytes/schema/context and append a durable receipt to its existing work. Does not close work, stop compute or restore native history. Requires an authenticated HTTP work connection.

Part of rig environment, the OpenShell worker. Its cleanup still fails against OpenShell 0.1.6, so recreate and restore can't run; see What's new.

Input Type Required Description
bindingId "string" yes
operationId "string" yes
taskId "string" yes
generation "string" yes
path "string" yes
sha256 "string" yes
bytes "integer" yes
schema "object" yes
context "object" yes
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "bindingId": {
      "type": "string"
    },
    "operationId": {
      "type": "string"
    },
    "taskId": {
      "type": "string"
    },
    "generation": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "sha256": {
      "type": "string"
    },
    "bytes": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1048576
    },
    "schema": {
      "type": "object",
      "properties": {
        "format": {
          "type": "string",
          "const": "json-object/v1"
        },
        "fields": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string",
            "enum": [
              "string",
              "number",
              "boolean"
            ]
          }
        },
        "required": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "format",
        "fields",
        "required"
      ]
    },
    "context": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": [
          "string",
          "number",
          "boolean"
        ]
      }
    }
  },
  "required": [
    "bindingId",
    "operationId",
    "taskId",
    "generation",
    "path",
    "sha256",
    "bytes",
    "schema",
    "context"
  ]
}

rig_telemetry_events

Read one bounded page of event metadata: seq, rig, node, type and time, never payloads. Without a cursor it starts at the newest event and returns no rows; start retained reads the retained past instead. Continue with page.nextCursor and the same filters. coverage.gaps names any history it could not read, including a daemon restart, after which the old cursor can't continue.

Input Type Required Description
cursor "string" no page.nextCursor from the previous page; not with start
start "string" no Without a cursor: latest (default) or retained
rigId "string" no Rig name or identifier; events with no rig are left out
nodeId "string" no Node identifier
limit "integer" no Source rows to scan (default and maximum 128); a filter can return fewer
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cursor": {
      "description": "page.nextCursor from the previous page; not with start",
      "type": "string"
    },
    "start": {
      "description": "Without a cursor: latest (default) or retained",
      "type": "string",
      "enum": [
        "latest",
        "retained"
      ]
    },
    "rigId": {
      "description": "Rig name or identifier; events with no rig are left out",
      "type": "string"
    },
    "nodeId": {
      "description": "Node identifier",
      "type": "string"
    },
    "limit": {
      "description": "Source rows to scan (default and maximum 128); a filter can return fewer",
      "type": "integer",
      "minimum": 1,
      "maximum": 128
    }
  }
}

rig_whoami

Show which OpenRig seat this server acts as: its rig, pod, peers and edges, and caller: authenticated (a validated HTTP credential, with its principal) or declared (OPENRIG_SESSION_NAME where the server was configured, which nothing verifies).

No inputs.

{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}

rig_team

Show a rig's team: its lead, the rig's one delegates_to root (the seat that delegates to others and that nothing delegates to: the seat to delegate to), and each seat's pod, role, runtime, delegation (reportsTo, delegatesTo) and activity as the daemon reports it. Activity the daemon doesn't know reads unknown, never idle. hostedMembers are the rig's members that live outside a terminal (roster entries marked hosted): their authored capabilities and limits, with no pane and activity unknown.

Input Type Required Description
rigId "string" yes Rig name or identifier
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "rigId": {
      "type": "string",
      "description": "Rig name or identifier"
    }
  },
  "required": [
    "rigId"
  ]
}

rig_slices

List the work tree's slices, most recently active first: name, mission, status, description and how many queue items name it. Paths and readiness detail are left out.

Input Type Required Description
missionId "string" no Only this mission's slices
filter "string" no Only slices with this status (default all)
limit "integer" no Most slices to return (default 50)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "missionId": {
      "description": "Only this mission's slices",
      "type": "string"
    },
    "filter": {
      "description": "Only slices with this status (default all)",
      "type": "string",
      "enum": [
        "all",
        "active",
        "done",
        "blocked"
      ]
    },
    "limit": {
      "description": "Most slices to return (default 50)",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    }
  }
}

rig_mission

Read one mission: its status and its slices as summaries.

Input Type Required Description
missionId "string" yes The mission's id (its folder name)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "missionId": {
      "type": "string",
      "description": "The mission's id (its folder name)"
    }
  },
  "required": [
    "missionId"
  ]
}

rig_context_pack

Show one context pack: its purpose and the files it declares (path, role, summary, estimated tokens), so a file can be read with rig_context_get as <pack>/<file>.

Input Type Required Description
ref "string" yes The pack's ref, as rig context list shows it (e.g. project-world)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "ref": {
      "type": "string",
      "description": "The pack's ref, as rig context list shows it (e.g. project-world)"
    }
  },
  "required": [
    "ref"
  ]
}

rig_context_get

Read one context file or one section of it, as rig context get does: <pack>/<file>, or <pack>/<file>#<h2-slug>[/<h3-slug>]. Text over 48000 characters is cut (truncated: true); address a section to read the rest.

Input Type Required Description
address "string" yes <pack>/<file>[#<h2-slug>[/<h3-slug>]]
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "address": {
      "type": "string",
      "description": "<pack>/<file>[#<h2-slug>[/<h3-slug>]]"
    }
  },
  "required": [
    "address"
  ]
}

rig_artifact_read

Read a finished item's artifact (its evidenceRef), or a named file, through the daemon's shared roots (OPENRIG_FILES_ALLOWLIST), as text: at most 48000 characters from offset; nextOffset reads on. An artifact outside every shared root, a link, or an item with no evidenceRef comes back as available: false with the reason and the shared roots' names; nothing outside those roots is read.

Input Type Required Description
qitemId "string" no Read this item's evidenceRef
root "string" no A shared root's name: with path, the file to read; with qitemId, the root a relative evidenceRef is under
path "string" no With root: the file's path inside that root
offset "integer" no The character to start from (default 0)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "description": "Read this item's evidenceRef",
      "type": "string"
    },
    "root": {
      "description": "A shared root's name: with path, the file to read; with qitemId, the root a relative evidenceRef is under",
      "type": "string"
    },
    "path": {
      "description": "With root: the file's path inside that root",
      "type": "string"
    },
    "offset": {
      "description": "The character to start from (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  }
}

rig_human_decision_room

Before deciding a question you asked a person: the decision room of the mode they have on, in their own words (what the team may decide for them meanwhile, and what it may not), or none, with why. You judge whether your decision falls inside it; with none, the question stays theirs to answer.

Input Type Required Description
qitemId "string" yes Your pending ask to the person (a queue item addressed to <person>@external)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "Your pending ask to the person (a queue item addressed to <person>@external)"
    }
  },
  "required": [
    "qitemId"
  ]
}

rig_queue_decide

Record a decision you made on a person's behalf, on your own pending ask to them, inside the decision room of the mode they have on: read it first with rig_human_decision_room and pass its applicationId. It's recorded beside their answers, never as one, and the ask closes. The daemon refuses it when they have no room, their mode changed since you read it, the ask is a permission prompt or an approval gate, they've started answering, or another seat asked. This server never answers as the person.

Input Type Required Description
qitemId "string" yes Your pending ask to the person
applicationId "string" yes decisionRoom.applicationId from rig_human_decision_room: the room you judged against
choices "array" yes One choice per structured question; for an ask without questions, one choice without questionId
reason "string" yes Why this choice
reversible "boolean" yes Whether the decision can be undone
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "Your pending ask to the person"
    },
    "applicationId": {
      "type": "string",
      "description": "decisionRoom.applicationId from rig_human_decision_room: the room you judged against"
    },
    "choices": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "questionId": {
            "description": "The question's id, when the ask has structured questions",
            "type": "string"
          },
          "chosen": {
            "type": "string",
            "description": "The option's id; for an ask without questions, the choice in words"
          }
        },
        "required": [
          "chosen"
        ]
      },
      "description": "One choice per structured question; for an ask without questions, one choice without questionId"
    },
    "reason": {
      "type": "string",
      "description": "Why this choice"
    },
    "reversible": {
      "type": "boolean",
      "description": "Whether the decision can be undone"
    }
  },
  "required": [
    "qitemId",
    "applicationId",
    "choices",
    "reason",
    "reversible"
  ]
}

rig_queue_handoff

Pass a queue item this seat holds on to the next seat in one step: the item closes as handed off and a new item opens for that seat, carrying the work's lineage in chainOfRecord, so whoever follows the work reaches the new item from rig_queue_show. Without body the new item keeps the task's text. If the call times out, check rig_queue_show on this qitemId before retrying: when it reads handed off, its successor is the new item, so don't hand it off again.

Input Type Required Description
qitemId "string" yes The queue item to pass on
to "string" yes The next seat (e.g. qa@my-rig)
body "string" no The task as the next seat should read it (default: the item's own text)
note "string" no Transition note on the item passed on: why it goes there
summary "string" no One-line summary for the new item
tags "array" no Tags for the new item (default: the item's own)
priority "string" no Priority for the new item (default: the item's own)
evidenceRef "string" no Pointer to the durable artifact, which a new item for a person needs
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "The queue item to pass on"
    },
    "to": {
      "type": "string",
      "description": "The next seat (e.g. qa@my-rig)"
    },
    "body": {
      "description": "The task as the next seat should read it (default: the item's own text)",
      "type": "string"
    },
    "note": {
      "description": "Transition note on the item passed on: why it goes there",
      "type": "string"
    },
    "summary": {
      "description": "One-line summary for the new item",
      "type": "string"
    },
    "tags": {
      "description": "Tags for the new item (default: the item's own)",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "priority": {
      "description": "Priority for the new item (default: the item's own)",
      "type": "string"
    },
    "evidenceRef": {
      "description": "Pointer to the durable artifact, which a new item for a person needs",
      "type": "string"
    }
  },
  "required": [
    "qitemId",
    "to"
  ]
}

rig_queue_unclaim

Put back a queue item this seat claimed and won't finish: it returns to pending for its destination seat, ready to be claimed again, and the transition records why. Only a claimed (in-progress) item can be put back. To pass the work to another seat instead, use rig_queue_handoff.

Input Type Required Description
qitemId "string" yes The claimed queue item to put back
reason "string" no Why it's put back, recorded as 'unclaimed: <reason>' (default: manual)
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qitemId": {
      "type": "string",
      "description": "The claimed queue item to put back"
    },
    "reason": {
      "description": "Why it's put back, recorded as 'unclaimed: <reason>' (default: manual)",
      "type": "string"
    }
  },
  "required": [
    "qitemId"
  ]
}