Files
pebrel/docs/runtime-api-v1.schema.json
Kuddev bf2ed9af9b feat(mobile): integrate remote terminal, SSH and reader workflows (#343)
Integrate the Android client with native desktop pairing, remote terminal and SSH/SFTP sessions, keyboard controls, file reading and Agent conversations. Preserve authenticated connection ownership and per-device input permissions.

Validation: all ten required GitHub checks passed, including five native test platforms and both macOS release workspace checks.
2026-09-29 20:09:00 +08:00

3193 lines
68 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/Kuddev/nebula/docs/runtime-api-v1.schema.json",
"title": "Nebula Runtime API v1 frames",
"description": "JSON Lines request, response, and event frames for the authenticated local runtime control plane.",
"type": "object",
"properties": {
"protocol": {
"const": "nebula.runtime"
},
"version": {
"const": 1
}
},
"required": [
"protocol",
"version"
],
"oneOf": [
{
"$ref": "#/$defs/request"
},
{
"$ref": "#/$defs/response"
},
{
"$ref": "#/$defs/event"
}
],
"$defs": {
"request": {
"type": "object",
"required": [
"protocol",
"version",
"id",
"token",
"method",
"params"
],
"properties": {
"protocol": {
"const": "nebula.runtime"
},
"version": {
"const": 1
},
"id": {
"type": "string",
"minLength": 1
},
"token": {
"type": "string",
"minLength": 1
},
"method": {
"enum": [
"runtime.describe",
"runtime.snapshot",
"runtime.orchestrate",
"events.subscribe",
"agents.list",
"agent.start",
"agent.fork",
"agent.get",
"agent.delegate",
"agent.prompt",
"agent.paste",
"agent.read",
"agent.wait",
"window.create",
"window.close",
"window.focus",
"tab.new",
"tab.close",
"tab.rename",
"tab.move",
"pane.split",
"pane.close",
"pane.zoom",
"pane.resize",
"pane.prompt",
"pane.paste",
"pane.read",
"pane.procs",
"pane.send_key",
"pane.run",
"pane.exec",
"pane.wait",
"git.status",
"git.diff",
"git.history",
"git.stage",
"git.unstage",
"git.commit",
"git.fetch",
"git.pull",
"git.push",
"tab.focus",
"tab.open",
"tab.read",
"conversation.read",
"conversation.send",
"conversation.choose",
"conversation.key"
]
},
"params": {
"type": "object"
}
},
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"method": {
"enum": [
"runtime.describe",
"runtime.snapshot",
"window.create"
]
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/empty_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "runtime.orchestrate"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/orchestrate_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "events.subscribe"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/subscribe_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agents.list"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/window_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.start"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_start_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.fork"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_fork_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.get"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_target_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.prompt"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_prompt_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.delegate"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_delegate_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.paste"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_paste_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.read"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_read_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "agent.wait"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/agent_wait_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "window.focus"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/focus_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "window.close"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/window_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.new"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_new_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.close"
}
}
},
"then": {
"properties": {
"params": {
"oneOf": [
{
"$ref": "#/$defs/tab_target_params"
},
{
"$ref": "#/$defs/tab_identity_params"
}
]
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.rename"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_rename_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.move"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_move_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.split"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/split_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.zoom"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/pane_zoom_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.resize"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/pane_resize_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.prompt"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/prompt_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.paste"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/paste_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.read"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/read_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"enum": [
"pane.close",
"pane.procs"
]
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/pane_target_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.send_key"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/send_key_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.run"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/run_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.exec"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/exec_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "pane.wait"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/wait_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"enum": [
"git.status",
"git.diff",
"git.history",
"git.stage",
"git.unstage",
"git.commit",
"git.fetch",
"git.pull",
"git.push"
]
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/git_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"enum": [
"git.stage",
"git.unstage",
"git.commit",
"git.fetch",
"git.pull",
"git.push"
]
}
}
},
"then": {
"properties": {
"params": {
"required": [
"revision"
],
"properties": {
"revision": {
"type": "string",
"pattern": "^[0-9a-fA-F]{64}$"
}
}
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "git.commit"
}
}
},
"then": {
"properties": {
"params": {
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"pattern": "\\S"
}
}
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.focus"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_identity_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.open"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_open_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "tab.read"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/tab_read_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "conversation.read"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/conversation_read_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "conversation.send"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/conversation_send_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "conversation.choose"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/conversation_choose_params"
}
}
}
},
{
"if": {
"properties": {
"method": {
"const": "conversation.key"
}
}
},
"then": {
"properties": {
"params": {
"$ref": "#/$defs/conversation_key_params"
}
}
}
}
]
},
"empty_params": {
"type": "object",
"maxProperties": 0
},
"nullable_window_id": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"window_params": {
"type": "object",
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"cwd": {
"type": [
"string",
"null"
]
},
"shell": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"subscribe_params": {
"type": "object",
"properties": {
"since_revision": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"additionalProperties": false
},
"orchestrate_params": {
"type": "object",
"required": [
"steps"
],
"properties": {
"steps": {
"type": "array",
"minItems": 1,
"maxItems": 32,
"items": {
"$ref": "#/$defs/orchestrate_step"
}
},
"on_error": {
"enum": [
"stop",
"continue"
],
"default": "stop"
}
},
"additionalProperties": false
},
"orchestrate_step": {
"oneOf": [
{
"$ref": "#/$defs/orchestrate_new_tab"
},
{
"$ref": "#/$defs/orchestrate_focus"
},
{
"$ref": "#/$defs/orchestrate_split"
},
{
"$ref": "#/$defs/orchestrate_prompt"
},
{
"$ref": "#/$defs/orchestrate_run"
},
{
"$ref": "#/$defs/orchestrate_agent_launch"
},
{
"$ref": "#/$defs/orchestrate_wait"
}
]
},
"orchestrate_step_id": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_-]{0,63}$"
},
"orchestrate_pane_target": {
"oneOf": [
{
"type": "object",
"required": [
"step",
"field"
],
"properties": {
"step": {
"$ref": "#/$defs/orchestrate_step_id"
},
"field": {
"const": "pane_id"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"pane_id"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
]
},
"orchestrate_new_tab": {
"type": "object",
"required": [
"id",
"op"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "new_tab"
},
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"cwd": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"orchestrate_focus": {
"type": "object",
"required": [
"id",
"op",
"target"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "focus"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
}
},
"additionalProperties": false
},
"orchestrate_split": {
"type": "object",
"required": [
"id",
"op",
"direction"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "split"
},
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
},
"direction": {
"enum": [
"left_right",
"top_bottom"
]
}
},
"additionalProperties": false
},
"orchestrate_prompt": {
"type": "object",
"required": [
"id",
"op",
"target",
"text"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "prompt"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"submit": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"orchestrate_run": {
"type": "object",
"required": [
"id",
"op",
"target",
"command"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "run"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
},
"command": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"wait": {
"type": "boolean",
"default": true
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000,
"default": 30000
},
"tail_lines": {
"type": "integer",
"minimum": 1,
"maximum": 2000
}
},
"additionalProperties": false
},
"orchestrate_agent_launch": {
"type": "object",
"required": [
"id",
"op",
"target",
"name",
"kind",
"initial_prompt"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "agent_launch"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"kind": {
"$ref": "#/$defs/launch_agent_kind"
},
"resume_session_id": {
"type": [
"string",
"null"
]
},
"initial_prompt": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"ready_timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000,
"default": 10000
}
},
"additionalProperties": false
},
"orchestrate_wait": {
"type": "object",
"required": [
"id",
"op",
"target",
"state"
],
"properties": {
"id": {
"$ref": "#/$defs/orchestrate_step_id"
},
"op": {
"const": "wait"
},
"target": {
"$ref": "#/$defs/orchestrate_pane_target"
},
"state": {
"$ref": "#/$defs/wait_state"
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000,
"default": 30000
},
"tail_lines": {
"type": "integer",
"minimum": 1,
"maximum": 2000
}
},
"additionalProperties": false
},
"agent_start_params": {
"type": "object",
"required": [
"name",
"kind"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"kind": {
"$ref": "#/$defs/launch_agent_kind"
},
"cwd": {
"type": [
"string",
"null"
]
},
"resume_session_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"agent_fork_params": {
"type": "object",
"required": [
"name",
"kind"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"source_pane_id": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"source_cwd": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"kind": {
"$ref": "#/$defs/launch_agent_kind"
},
"resume_session_id": {
"type": [
"string",
"null"
]
},
"branch": {
"type": [
"string",
"null"
]
},
"base": {
"type": [
"string",
"null"
]
},
"path": {
"type": [
"string",
"null"
]
},
"allow_dirty_source": {
"type": "boolean",
"default": false
}
},
"anyOf": [
{
"required": [
"source_pane_id"
],
"properties": {
"source_pane_id": {
"type": "integer"
}
}
},
{
"required": [
"source_cwd"
],
"properties": {
"source_cwd": {
"type": "string",
"minLength": 1
}
}
}
],
"additionalProperties": false
},
"launch_agent_kind": {
"enum": [
"claude",
"codex",
"opencode",
"cursor",
"pi",
"omp",
"kimi"
],
"description": "Agent kinds with an officially verified interactive cold-start command."
},
"agent_target_params": {
"type": "object",
"required": [
"agent"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": [
"integer",
"null"
],
"minimum": 1
}
},
"additionalProperties": false
},
"agent_prompt_params": {
"type": "object",
"required": [
"agent",
"text"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"submit": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"agent_delegate_params": {
"type": "object",
"required": [
"agent",
"text",
"origin_pane_id"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"origin_pane_id": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"agent_paste_params": {
"type": "object",
"required": [
"agent",
"text"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"submit": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"agent_read_params": {
"type": "object",
"required": [
"agent"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"lines": {
"type": "integer",
"minimum": 1,
"maximum": 2000,
"default": 120
}
},
"additionalProperties": false
},
"agent_wait_params": {
"type": "object",
"required": [
"agent",
"generation",
"state",
"timeout_ms"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"generation": {
"type": "integer",
"minimum": 1
},
"state": {
"$ref": "#/$defs/wait_state"
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000
},
"after_seq": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"additionalProperties": false
},
"focus_params": {
"type": "object",
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"additionalProperties": false
},
"tab_new_params": {
"type": "object",
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"cwd": {
"type": [
"string",
"null"
]
},
"shell": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"tab_target_params": {
"type": "object",
"required": [
"tab_index"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"tab_index": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"tab_rename_params": {
"type": "object",
"required": [
"tab_index",
"name"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"tab_index": {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string",
"maxLength": 256,
"pattern": "^[^\\u0000-\\u001F\\u007F]*$",
"description": "The server additionally enforces a 256-byte UTF-8 limit. Empty restores the generated title."
}
},
"additionalProperties": false
},
"tab_move_params": {
"type": "object",
"required": [
"tab_index",
"to_index"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"tab_index": {
"type": "integer",
"minimum": 0
},
"to_index": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"split_params": {
"type": "object",
"required": [
"direction"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"direction": {
"enum": [
"left_right",
"top_bottom"
]
}
},
"additionalProperties": false
},
"prompt_params": {
"type": "object",
"required": [
"pane_id",
"text"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"submit": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"paste_params": {
"type": "object",
"required": [
"pane_id",
"text"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"submit": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"read_params": {
"type": "object",
"required": [
"pane_id"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"lines": {
"type": "integer",
"minimum": 1,
"maximum": 2000,
"default": 120
},
"screen": {
"type": "boolean",
"default": false,
"description": "Include the live screen v1 color grid, independently of the text tail and desktop scrollback offset."
}
},
"additionalProperties": false
},
"pane_target_params": {
"type": "object",
"required": [
"pane_id"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"pane_zoom_params": {
"type": "object",
"required": [
"pane_id",
"zoomed"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"zoomed": {
"type": "boolean"
}
},
"additionalProperties": false
},
"pane_resize_params": {
"type": "object",
"required": [
"pane_id",
"ratio"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"ratio": {
"type": "number",
"minimum": 0.05,
"maximum": 0.95
}
},
"additionalProperties": false
},
"send_key_params": {
"type": "object",
"required": [
"pane_id",
"key"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"key": {
"enum": [
"escape",
"enter",
"tab",
"backspace",
"up",
"down",
"left",
"right",
"home",
"end",
"insert",
"delete",
"page_up",
"page_down",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"f10",
"f11",
"f12",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z"
]
},
"modifiers": {
"type": "object",
"properties": {
"shift": {
"type": "boolean",
"default": false
},
"alt": {
"type": "boolean",
"default": false
},
"control": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
},
"repeat": {
"type": "integer",
"minimum": 1,
"maximum": 64,
"default": 1
}
},
"additionalProperties": false
},
"run_params": {
"type": "object",
"required": [
"pane_id",
"command"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"command": {
"type": "string",
"minLength": 1,
"maxLength": 32768
},
"wait": {
"type": "boolean",
"default": true
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000,
"default": 30000
}
},
"additionalProperties": false
},
"exec_params": {
"type": "object",
"required": [
"pane_id",
"argv"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"argv": {
"type": "array",
"minItems": 1,
"maxItems": 256,
"items": {
"type": "string"
},
"description": "Direct program argv; no shell expansion is performed. The server enforces a 32768-byte aggregate limit."
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000,
"default": 30000
},
"max_output_bytes": {
"type": "integer",
"minimum": 1,
"maximum": 16777216,
"default": 1048576
}
},
"additionalProperties": false
},
"git_params": {
"type": "object",
"description": "Git runs on the explicitly selected computer pane. The server rechecks its current cwd, resolves the repository root and checks the supplied status revision before a write. Read-only mobile channels allow status, diff and history only. Requests have a 25-second total execution deadline and a 256-KiB stdout limit.",
"required": [
"window_id",
"pane_id",
"expected_cwd"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"pane_id": {
"type": "integer",
"minimum": 1
},
"expected_cwd": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"pattern": "^[^\\u0000]+$",
"description": "Exact cwd from the pane snapshot; at most 4096 UTF-8 bytes."
},
"path": {
"type": "string",
"maxLength": 4096,
"pattern": "^[^\\u0000]*$",
"default": "",
"description": "Exact repository-relative change path, at most 4096 UTF-8 bytes. Never interpreted as a shell command or glob."
},
"staged": {
"type": "boolean",
"default": false,
"description": "Select the index diff rather than the worktree diff."
},
"all": {
"type": "boolean",
"default": false,
"description": "Stage or unstage all changes in the repository, including when the pane cwd is a subdirectory."
},
"revision": {
"type": "string",
"default": "",
"description": "Opaque revision returned by git.status. Required for mutations; an outdated revision produces git_stale before execution."
},
"message": {
"type": "string",
"maxLength": 16384,
"pattern": "^[^\\u0000]*$",
"default": "",
"description": "Commit message, at most 16384 UTF-8 bytes. Only staged changes are committed."
},
"commit": {
"type": "string",
"pattern": "^(?:|[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$",
"default": "",
"description": "A full object ID selects the commit diff instead of a current change."
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 10000,
"default": 0,
"description": "History offset; each response returns at most 50 commits and has_more."
}
},
"additionalProperties": false
},
"wait_state": {
"enum": [
"idle",
"running",
"waiting_input",
"attention",
"finished",
"failed",
"settled"
]
},
"wait_params": {
"type": "object",
"required": [
"pane_id",
"state",
"timeout_ms"
],
"properties": {
"window_id": {
"$ref": "#/$defs/nullable_window_id"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"state": {
"$ref": "#/$defs/wait_state"
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 86400000
},
"after_seq": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"additionalProperties": false
},
"response": {
"type": "object",
"required": [
"protocol",
"version",
"id",
"ok"
],
"properties": {
"protocol": {
"const": "nebula.runtime"
},
"version": {
"const": 1
},
"id": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"result": {},
"error": {
"$ref": "#/$defs/error"
}
},
"additionalProperties": false
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"details": {}
},
"additionalProperties": false
},
"event": {
"type": "object",
"required": [
"protocol",
"version",
"event",
"revision",
"data"
],
"properties": {
"protocol": {
"const": "nebula.runtime"
},
"version": {
"const": 1
},
"event": {
"const": "runtime.snapshot"
},
"revision": {
"type": "integer",
"minimum": 1
},
"data": {
"$ref": "#/$defs/snapshot"
}
},
"additionalProperties": false
},
"snapshot": {
"type": "object",
"required": [
"revision",
"process_id",
"app_version",
"protocol_version",
"detached_windows",
"windows"
],
"properties": {
"revision": {
"type": "integer",
"minimum": 0
},
"process_id": {
"type": "integer",
"minimum": 1
},
"app_version": {
"type": "string"
},
"protocol_version": {
"const": 1
},
"detached_windows": {
"type": "integer",
"minimum": 0
},
"windows": {
"type": "array",
"items": {
"$ref": "#/$defs/window"
}
},
"pane_lifecycles": {
"type": "array",
"items": {
"$ref": "#/$defs/pane_lifecycle"
}
}
},
"additionalProperties": false
},
"window": {
"type": "object",
"required": [
"id",
"focused",
"session_exempt",
"active_tab",
"focused_pane_id",
"tabs"
],
"properties": {
"id": {
"type": "integer",
"minimum": 0
},
"focused": {
"type": "boolean"
},
"session_exempt": {
"type": "boolean"
},
"active_tab": {
"type": "integer",
"minimum": 0
},
"focused_pane_id": {
"type": [
"integer",
"null"
]
},
"tabs": {
"type": "array",
"items": {
"$ref": "#/$defs/tab"
}
}
},
"additionalProperties": false
},
"tab": {
"type": "object",
"required": [
"index",
"active",
"label",
"kind",
"bell",
"focused_pane_id",
"zoomed_pane_id",
"layout",
"panes"
],
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"active": {
"type": "boolean"
},
"label": {
"type": "string"
},
"kind": {
"enum": [
"shell",
"profile",
"ssh",
"document",
"image",
"code",
"settings"
]
},
"bell": {
"type": "boolean"
},
"focused_pane_id": {
"type": [
"integer",
"null"
]
},
"zoomed_pane_id": {
"type": [
"integer",
"null"
]
},
"layout": {
"oneOf": [
{
"$ref": "#/$defs/layout"
},
{
"type": "null"
}
]
},
"panes": {
"type": "array",
"items": {
"$ref": "#/$defs/pane"
}
},
"tab_id": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$",
"description": "Ephemeral identity, preserved by reorder and split. Absent on older runtimes."
},
"file": {
"$ref": "#/$defs/tab_file"
}
},
"additionalProperties": false
},
"layout": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"pane_id"
],
"properties": {
"type": {
"const": "pane"
},
"pane_id": {
"type": "integer"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"direction",
"ratio",
"first",
"second"
],
"properties": {
"type": {
"const": "split"
},
"direction": {
"enum": [
"left_right",
"top_bottom"
]
},
"ratio": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"first": {
"$ref": "#/$defs/layout"
},
"second": {
"$ref": "#/$defs/layout"
}
},
"additionalProperties": false
}
]
},
"pane": {
"type": "object",
"required": [
"id",
"active",
"title",
"cwd",
"branch",
"ssh_destination",
"running_program",
"task_state",
"state_change_seq"
],
"properties": {
"id": {
"type": "integer",
"minimum": 0
},
"active": {
"type": "boolean"
},
"title": {
"type": "string"
},
"cwd": {
"type": "string"
},
"branch": {
"type": "string"
},
"ssh_destination": {
"type": [
"string",
"null"
]
},
"running_program": {
"type": [
"string",
"null"
]
},
"agent": {
"$ref": "#/$defs/agent"
},
"task_state": {
"enum": [
"idle",
"running",
"waiting_input",
"attention",
"finished",
"failed"
]
},
"state_change_seq": {
"description": "Monotonic per-pane counter, bumped every time task_state changes. Capture it before sending work, then pass it as wait's after_seq so an unchanged pane cannot satisfy the wait.",
"type": "integer",
"minimum": 1
},
"active_run": {
"$ref": "#/$defs/pane_run"
},
"last_run": {
"$ref": "#/$defs/run_outcome"
}
},
"additionalProperties": false
},
"agent": {
"type": "object",
"required": [
"kind",
"display_name",
"session_id",
"state_source",
"hook_seen"
],
"properties": {
"agent_id": {
"type": "string",
"minLength": 1
},
"generation": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string",
"minLength": 1
},
"worktree": {
"$ref": "#/$defs/worktree"
},
"kind": {
"type": "string",
"minLength": 1
},
"display_name": {
"type": "string",
"minLength": 1
},
"session_id": {
"type": [
"string",
"null"
]
},
"state_source": {
"enum": [
"hook",
"screen",
"process"
]
},
"state_rule": {
"type": "string"
},
"hook_seen": {
"type": "boolean"
}
},
"additionalProperties": false
},
"worktree": {
"type": "object",
"required": [
"repo_root",
"source_root",
"path",
"branch",
"base_commit",
"created"
],
"properties": {
"repo_root": {
"type": "string",
"minLength": 1
},
"source_root": {
"type": "string",
"minLength": 1
},
"path": {
"type": "string",
"minLength": 1
},
"branch": {
"type": "string",
"minLength": 1
},
"base_commit": {
"type": "string",
"minLength": 1
},
"created": {
"const": true
}
},
"additionalProperties": false
},
"managed_agent": {
"type": "object",
"required": [
"agent_id",
"generation",
"name",
"kind",
"window_id",
"pane_id",
"active",
"observed"
],
"properties": {
"agent_id": {
"type": "string",
"minLength": 1
},
"generation": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"kind": {
"type": "string",
"minLength": 1
},
"window_id": {
"type": "integer",
"minimum": 0
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"session_id": {
"type": "string"
},
"worktree": {
"$ref": "#/$defs/worktree"
},
"active": {
"type": "boolean"
},
"observed": {
"type": "boolean"
},
"closed_reason": {
"type": "string"
}
},
"additionalProperties": false
},
"pane_lifecycle": {
"type": "object",
"required": [
"sequence",
"window_id",
"pane_id",
"event"
],
"properties": {
"sequence": {
"type": "integer",
"minimum": 1
},
"window_id": {
"type": "integer",
"minimum": 0
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"event": {
"enum": [
"closed",
"exited"
]
}
},
"additionalProperties": false
},
"pane_run": {
"type": "object",
"required": [
"run_id",
"phase"
],
"properties": {
"run_id": {
"type": "integer",
"minimum": 1
},
"phase": {
"enum": [
"submitted",
"started"
]
}
},
"additionalProperties": false
},
"run_outcome": {
"type": "object",
"required": [
"run_id",
"state",
"exit_code",
"exit_code_capability"
],
"properties": {
"run_id": {
"type": "integer",
"minimum": 1
},
"state": {
"enum": [
"finished",
"failed",
"unavailable"
]
},
"exit_code": {
"type": [
"integer",
"null"
]
},
"exit_code_capability": {
"enum": [
"supported",
"unavailable"
]
},
"unavailable_reason": {
"type": "string"
}
},
"additionalProperties": false
},
"agent_pane": {
"type": "object",
"required": [
"window_id",
"tab_index",
"tab_active",
"pane_id",
"pane_active",
"title",
"cwd",
"branch",
"ssh_destination",
"agent",
"task_state",
"state_change_seq"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 0
},
"tab_index": {
"type": "integer",
"minimum": 0
},
"tab_active": {
"type": "boolean"
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"pane_active": {
"type": "boolean"
},
"title": {
"type": "string"
},
"cwd": {
"type": "string"
},
"branch": {
"type": "string"
},
"ssh_destination": {
"type": [
"string",
"null"
]
},
"agent": {
"$ref": "#/$defs/agent"
},
"task_state": {
"enum": [
"idle",
"running",
"waiting_input",
"attention",
"finished",
"failed"
]
},
"state_change_seq": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"agents_result": {
"type": "object",
"required": [
"revision",
"agents"
],
"properties": {
"revision": {
"type": "integer",
"minimum": 1
},
"agents": {
"type": "array",
"items": {
"$ref": "#/$defs/agent_pane"
}
}
},
"additionalProperties": false
},
"pane_read": {
"type": "object",
"required": [
"window_id",
"pane_id",
"text",
"requested_lines",
"returned_lines",
"history_available",
"truncated",
"task_state",
"exited"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 0
},
"pane_id": {
"type": "integer",
"minimum": 0
},
"text": {
"type": "string"
},
"requested_lines": {
"type": "integer",
"minimum": 1,
"maximum": 2000
},
"returned_lines": {
"type": "integer",
"minimum": 0,
"maximum": 2000
},
"history_available": {
"type": "integer",
"minimum": 0
},
"truncated": {
"type": "boolean"
},
"task_state": {
"enum": [
"idle",
"running",
"waiting_input",
"attention",
"finished",
"failed"
]
},
"exited": {
"type": "boolean"
},
"exit_reason": {
"type": "string"
},
"screen": {
"$ref": "#/$defs/terminal_screen_v1"
}
},
"additionalProperties": false
},
"tab_identity_params": {
"type": "object",
"required": [
"window_id",
"tab_id"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"tab_id": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$"
}
},
"additionalProperties": false
},
"tab_read_params": {
"type": "object",
"required": [
"window_id",
"tab_id"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"tab_id": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$"
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 16777216
},
"limit": {
"type": "integer",
"minimum": 4,
"maximum": 65536
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"additionalProperties": false,
"allOf": [
{
"if": {
"required": [
"offset"
],
"properties": {
"offset": {
"minimum": 1
}
}
},
"then": {
"required": [
"revision"
]
}
}
]
},
"tab_open_params": {
"type": "object",
"required": [
"window_id",
"path"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Absolute path on the computer; only in-app readable files are accepted."
}
},
"additionalProperties": false
},
"tab_file": {
"type": "object",
"required": [
"path",
"remote",
"dirty",
"saving",
"ready"
],
"properties": {
"path": {
"type": "string"
},
"remote": {
"type": "boolean"
},
"dirty": {
"type": "boolean"
},
"saving": {
"type": "boolean"
},
"ready": {
"type": "boolean"
},
"revision": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"conversation_identity": {
"type": "object",
"required": [
"kind",
"session_id"
],
"properties": {
"kind": {
"enum": [
"codex",
"claude"
]
},
"session_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"epoch": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"additionalProperties": false
},
"conversation_read_params": {
"type": "object",
"required": [
"window_id",
"pane_id",
"identity"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"pane_id": {
"type": "integer",
"minimum": 1
},
"identity": {
"$ref": "#/$defs/conversation_identity"
},
"before": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"revision": {
"type": [
"string",
"null"
],
"maxLength": 128
}
},
"additionalProperties": false
},
"conversation_send_params": {
"type": "object",
"required": [
"window_id",
"pane_id",
"identity",
"text"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"pane_id": {
"type": "integer",
"minimum": 1
},
"identity": {
"allOf": [
{
"$ref": "#/$defs/conversation_identity"
},
{
"required": [
"epoch"
],
"properties": {
"epoch": {
"type": "integer",
"minimum": 0
}
}
}
]
},
"text": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"conversation_choose_params": {
"type": "object",
"required": [
"window_id",
"pane_id",
"identity",
"prompt_id",
"option"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"pane_id": {
"type": "integer",
"minimum": 1
},
"identity": {
"allOf": [
{
"$ref": "#/$defs/conversation_identity"
},
{
"required": [
"epoch"
],
"properties": {
"epoch": {
"type": "integer",
"minimum": 0
}
}
}
]
},
"prompt_id": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"option": {
"type": "integer",
"minimum": 0,
"maximum": 8
}
},
"additionalProperties": false
},
"conversation_key_params": {
"type": "object",
"required": [
"window_id",
"pane_id",
"identity",
"key"
],
"properties": {
"window_id": {
"type": "integer",
"minimum": 1
},
"pane_id": {
"type": "integer",
"minimum": 1
},
"identity": {
"allOf": [
{
"$ref": "#/$defs/conversation_identity"
},
{
"required": [
"epoch"
],
"properties": {
"epoch": {
"type": "integer",
"minimum": 0
}
}
}
]
},
"key": {
"type": "string",
"enum": [
"Ctrl+C",
"Esc",
"Tab",
"←",
"→",
"↑",
"↓"
]
}
},
"additionalProperties": false
},
"terminal_screen_v1": {
"type": "object",
"required": [
"version",
"columns",
"rows",
"palette",
"cursor"
],
"properties": {
"version": {
"const": 1
},
"columns": {
"type": "integer",
"minimum": 1,
"maximum": 400
},
"rows": {
"type": "array",
"minItems": 1,
"maxItems": 200,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 400,
"items": {
"type": "array",
"prefixItems": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "integer",
"minimum": 1,
"maximum": 2
},
{
"type": "integer",
"minimum": -269,
"maximum": 16777215
},
{
"type": "integer",
"minimum": -269,
"maximum": 16777215
},
{
"type": "integer",
"minimum": 0,
"maximum": 63
}
],
"minItems": 5,
"maxItems": 5
}
}
},
"palette": {
"type": "array",
"maxItems": 269,
"items": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"minimum": 0,
"maximum": 268
},
{
"type": "integer",
"minimum": 0,
"maximum": 16777215
}
],
"minItems": 2,
"maxItems": 2
}
},
"cursor": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"minimum": 0,
"maximum": 399
},
{
"type": "integer",
"minimum": 0
},
{
"type": "integer",
"minimum": 0,
"maximum": 1
}
],
"minItems": 3,
"maxItems": 3
},
"wrapped": {
"type": "array",
"minItems": 1,
"maxItems": 200,
"items": {
"type": "boolean"
},
"description": "Optional soft-wrap flag per physical row, preserving logical lines during phone-only reflow."
}
},
"additionalProperties": false,
"description": "At most 40000 cells and 128 KiB UTF-8 glyphs; each glyph <=256 UTF-8 bytes. Row widths must equal columns. Color <0 references -(palette index+1); otherwise RGB. Flags: bold=1, italic=2, underline=4, strike=8, dim=16, hidden=32. Cursor is [x,y,visible]. Oversized grids return screen_too_large, never a silently cropped frame."
}
}
}