runpane 2.4.199 → 2.4.201
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/agentTasks.js +1 -0
- package/dist/agentTasks.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +4 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +13 -1
- package/dist/commands.js.map +1 -1
- package/dist/docs-index.json +1 -1
- package/dist/generated/contract.d.ts +570 -11
- package/dist/generated/contract.d.ts.map +1 -1
- package/dist/generated/contract.js +1166 -30
- package/dist/generated/contract.js.map +1 -1
- package/dist/localControl.d.ts +5 -0
- package/dist/localControl.d.ts.map +1 -1
- package/dist/localControl.js +286 -0
- package/dist/localControl.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +2 -3
- package/dist/update.js.map +1 -1
- package/dist/updateOperation.d.ts +3 -0
- package/dist/updateOperation.d.ts.map +1 -1
- package/dist/updateOperation.js +8 -2
- package/dist/updateOperation.js.map +1 -1
- package/package.json +1 -1
|
@@ -813,6 +813,67 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
813
813
|
readonly toolsets: readonly ["agents"];
|
|
814
814
|
readonly jsonSchemas: readonly ["prWatchResult"];
|
|
815
815
|
readonly localControl: true;
|
|
816
|
+
}, {
|
|
817
|
+
readonly name: "loops list";
|
|
818
|
+
readonly summary: "List loops (scheduled tasks) with their schedule, next run, and recent runs.";
|
|
819
|
+
readonly usage: readonly ["runpane loops list [--json] [--pane-dir <path>]"];
|
|
820
|
+
readonly toolsets: readonly ["loops"];
|
|
821
|
+
readonly jsonSchemas: readonly ["loopListResult"];
|
|
822
|
+
readonly localControl: true;
|
|
823
|
+
}, {
|
|
824
|
+
readonly name: "loops create";
|
|
825
|
+
readonly summary: "Create a loop: a cron schedule that starts a new Pane in a fresh worktree for each run, or sends a prompt to a Session's agent. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.";
|
|
826
|
+
readonly usage: readonly ["runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--paused] [--dry-run] --yes [--json] [--pane-dir <path>]"];
|
|
827
|
+
readonly mutates: true;
|
|
828
|
+
readonly additive: true;
|
|
829
|
+
readonly toolsets: readonly ["loops"];
|
|
830
|
+
readonly jsonSchemas: readonly ["loopInput", "loopResult", "loopDryRunResult"];
|
|
831
|
+
readonly localControl: true;
|
|
832
|
+
}, {
|
|
833
|
+
readonly name: "loops update";
|
|
834
|
+
readonly summary: "Change a loop's repo or Session, name, schedule, agent or command, prompt, or worktree template. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.";
|
|
835
|
+
readonly usage: readonly ["runpane loops update --loop <id> [--repo <selector>|--session <id|name|new>] [--name <name>] [--cron <expr>] [--agent <claude|codex|cursor>|--tool-command <command>] [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--dry-run] --yes [--json] [--pane-dir <path>]"];
|
|
836
|
+
readonly mutates: true;
|
|
837
|
+
readonly idempotent: true;
|
|
838
|
+
readonly toolsets: readonly ["loops"];
|
|
839
|
+
readonly jsonSchemas: readonly ["loopInput", "loopResult", "loopDryRunResult"];
|
|
840
|
+
readonly localControl: true;
|
|
841
|
+
}, {
|
|
842
|
+
readonly name: "loops run";
|
|
843
|
+
readonly summary: "Start a run of a loop now. The schedule stays the same.";
|
|
844
|
+
readonly usage: readonly ["runpane loops run --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
845
|
+
readonly mutates: true;
|
|
846
|
+
readonly additive: true;
|
|
847
|
+
readonly toolsets: readonly ["loops"];
|
|
848
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
849
|
+
readonly localControl: true;
|
|
850
|
+
}, {
|
|
851
|
+
readonly name: "loops pause";
|
|
852
|
+
readonly summary: "Pause a loop: it starts no scheduled runs until resumed.";
|
|
853
|
+
readonly usage: readonly ["runpane loops pause --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
854
|
+
readonly mutates: true;
|
|
855
|
+
readonly idempotent: true;
|
|
856
|
+
readonly toolsets: readonly ["loops"];
|
|
857
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
858
|
+
readonly localControl: true;
|
|
859
|
+
}, {
|
|
860
|
+
readonly name: "loops resume";
|
|
861
|
+
readonly summary: "Resume a paused loop from its next scheduled time.";
|
|
862
|
+
readonly usage: readonly ["runpane loops resume --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
863
|
+
readonly mutates: true;
|
|
864
|
+
readonly idempotent: true;
|
|
865
|
+
readonly toolsets: readonly ["loops"];
|
|
866
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
867
|
+
readonly localControl: true;
|
|
868
|
+
}, {
|
|
869
|
+
readonly name: "loops delete";
|
|
870
|
+
readonly summary: "Delete a loop. It starts no more runs.";
|
|
871
|
+
readonly usage: readonly ["runpane loops delete --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
872
|
+
readonly mutates: true;
|
|
873
|
+
readonly idempotent: true;
|
|
874
|
+
readonly toolsets: readonly ["loops"];
|
|
875
|
+
readonly jsonSchemas: readonly ["loopDeleteResult"];
|
|
876
|
+
readonly localControl: true;
|
|
816
877
|
}];
|
|
817
878
|
readonly flags: {
|
|
818
879
|
readonly wrapper: readonly [{
|
|
@@ -901,11 +962,11 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
901
962
|
}, {
|
|
902
963
|
readonly name: "--name";
|
|
903
964
|
readonly value: "<name>";
|
|
904
|
-
readonly description: "Name for the registered repository, created/renamed pane session,
|
|
965
|
+
readonly description: "Name for the registered repository, created/renamed pane session, named lock, or loop.";
|
|
905
966
|
}, {
|
|
906
967
|
readonly name: "--worktree-name";
|
|
907
968
|
readonly value: "<name>";
|
|
908
|
-
readonly description: "Worktree name to request. Defaults to --name.";
|
|
969
|
+
readonly description: "Worktree name to request. Defaults to --name. For a loop, the worktree and branch name template; defaults to loop-<name>.";
|
|
909
970
|
}, {
|
|
910
971
|
readonly name: "--branch";
|
|
911
972
|
readonly value: "<name>";
|
|
@@ -1077,6 +1138,14 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1077
1138
|
readonly name: "--note";
|
|
1078
1139
|
readonly value: "<text>";
|
|
1079
1140
|
readonly description: "What a named lock is for. Outside a Pane terminal it also names the owner, so pass the same note to release it.";
|
|
1141
|
+
}, {
|
|
1142
|
+
readonly name: "--loop";
|
|
1143
|
+
readonly value: "<id>";
|
|
1144
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
1145
|
+
}, {
|
|
1146
|
+
readonly name: "--cron";
|
|
1147
|
+
readonly value: "<expr>";
|
|
1148
|
+
readonly description: "Five-field cron schedule in this machine's local time zone, such as \"0 3 * * *\". Runs must be at least 60 minutes apart.";
|
|
1080
1149
|
}, {
|
|
1081
1150
|
readonly name: "--message";
|
|
1082
1151
|
readonly value: "<message>";
|
|
@@ -1239,11 +1308,14 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1239
1308
|
}, {
|
|
1240
1309
|
readonly name: "--all";
|
|
1241
1310
|
readonly description: "inbox ack only: clear every item of the --session.";
|
|
1311
|
+
}, {
|
|
1312
|
+
readonly name: "--paused";
|
|
1313
|
+
readonly description: "loops create only: create the loop paused.";
|
|
1242
1314
|
}];
|
|
1243
1315
|
};
|
|
1244
1316
|
readonly help: {
|
|
1245
1317
|
readonly npm: {
|
|
1246
|
-
readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane doctor --report --body-file <path|->", " runpane daemon repair [--pane-dir <path>] [--yes] [--json]", " runpane agent-context [--json]", " runpane mcp [--toolsets <name,...>] [--read-only]", " runpane agents doctor --agent <codex|claude|cursor> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane sessions list [--json] [--pane-dir <path>]", " runpane sessions create --from-json <path|-> [--json] [--pane-dir <path>]", " runpane sessions get --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions update --session <id|name> --from-json <path|-> [--json] [--pane-dir <path>]", " runpane sessions pin --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions unpin --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions set-agent --session <id|name> --agent <codex|claude|cursor> [--json] [--pane-dir <path>]", " runpane sessions associate --session <id|name> --pane <pane-id> [--json] [--pane-dir <path>]", " runpane sessions detach --session <id|name> [--pane <pane-id>] [--json] [--pane-dir <path>]", " runpane sessions overview --session <id|name> [--json] [--pane-dir <path>]", " runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes cost [--repo <selector>] [--pane <pane-id>] [--json]", " runpane workspace state [--repo <selector>] [--json]", " runpane workspace list [--json]", " runpane workspace <machine> read|write|exec|<command>", " runpane watch --follow", " runpane watch --until-event", " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--base-branch <branch>] [--source user|agent] [--focus|--no-focus] [--wait-ready]", " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--remove-worktree] [--dry-run] --yes", " runpane panes archive --session <id|name> --merged [--remove-worktree] [--dry-run] --yes", " runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> (--text <text>|--keys <name,...>|--input-file <path|->) --yes [--json]", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", " runpane panels submit-composer --panel <panel-id> [--strategy auto|codex-ctrl-enter|enter|tab] --yes [--json]", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--json]", " runpane panels resume (--panel <panel-id>|--session <id|name>|--all-stopped) [--wait-ready] --yes [--json]", " runpane panels last-message --panel <panel-id> [--limit <count>] [--json]", " runpane panes git-status --pane <pane-id> [--json] [--pane-dir <path>]", " runpane panes commit --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes push --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes pull --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes rebase-main --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes restore --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane links create --pane <pane-id> [--panel <panel-id>] [--json]", " runpane links open --url <pane-url> --yes [--json] [--pane-dir <path>]", " runpane docs search --query <text> [--limit <count>] [--json]", " runpane docs read --doc <path> [--json]", " runpane agents start (--pane <pane-id> | --repo <selector> --name <name> [--base-branch <branch>]) (--agent <codex|claude|cursor>|--tool-command <command>) --prompt <task> --yes [--json] [--pane-dir <path>]", " runpane agents status (--pane <pane-id>|--panel <panel-id>) [--limit <count>] [--json] [--pane-dir <path>]", " runpane agents send (--pane <pane-id>|--panel <panel-id>) --text <message> --yes [--json] [--pane-dir <path>]", " runpane report --state <ready|blocked|failed|done> [--pr <number>] [--head <sha>] [--summary-file <path|->] [--question <text>] [--json]", " runpane inbox [--session <id|name>] [--json]", " runpane inbox ack <item-id>... [--session <id|name>] [--json]", " runpane panes squash-rebase --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes stash --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stash-pop --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes soft-reset --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes fetch --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes run-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stop-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes move --pane <pane-id> --folder <folder-id> --yes [--json] [--pane-dir <path>]", " runpane folders list --repo <repo-id> [--json] [--pane-dir <path>]", " runpane folders create --repo <repo-id> --name <name> --yes [--json] [--pane-dir <path>]", " runpane help [command]", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup", "", "Advanced examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest", "", "Common commands:", " runpane help", " runpane setup", " runpane install", " runpane doctor", "", "Agent discovery:", " runpane doctor --json", " runpane agent-context --json", " runpane agent-context --command \"<command>\" --json", "", "Run \"runpane help panes create\" for pane orchestration options."];
|
|
1318
|
+
readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane doctor --report --body-file <path|->", " runpane daemon repair [--pane-dir <path>] [--yes] [--json]", " runpane agent-context [--json]", " runpane mcp [--toolsets <name,...>] [--read-only]", " runpane agents doctor --agent <codex|claude|cursor> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane sessions list [--json] [--pane-dir <path>]", " runpane sessions create --from-json <path|-> [--json] [--pane-dir <path>]", " runpane sessions get --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions update --session <id|name> --from-json <path|-> [--json] [--pane-dir <path>]", " runpane sessions pin --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions unpin --session <id|name> [--json] [--pane-dir <path>]", " runpane sessions set-agent --session <id|name> --agent <codex|claude|cursor> [--json] [--pane-dir <path>]", " runpane sessions associate --session <id|name> --pane <pane-id> [--json] [--pane-dir <path>]", " runpane sessions detach --session <id|name> [--pane <pane-id>] [--json] [--pane-dir <path>]", " runpane sessions overview --session <id|name> [--json] [--pane-dir <path>]", " runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", " runpane loops list [--json]", " runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>] --yes", " runpane loops update|run|pause|resume|delete --loop <id> --yes", " runpane panes list [--repo <selector>] [--json]", " runpane panes cost [--repo <selector>] [--pane <pane-id>] [--json]", " runpane workspace state [--repo <selector>] [--json]", " runpane workspace list [--json]", " runpane workspace <machine> read|write|exec|<command>", " runpane watch --follow", " runpane watch --until-event", " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--base-branch <branch>] [--source user|agent] [--focus|--no-focus] [--wait-ready]", " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--remove-worktree] [--dry-run] --yes", " runpane panes archive --session <id|name> --merged [--remove-worktree] [--dry-run] --yes", " runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> (--text <text>|--keys <name,...>|--input-file <path|->) --yes [--json]", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", " runpane panels submit-composer --panel <panel-id> [--strategy auto|codex-ctrl-enter|enter|tab] --yes [--json]", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--json]", " runpane panels resume (--panel <panel-id>|--session <id|name>|--all-stopped) [--wait-ready] --yes [--json]", " runpane panels last-message --panel <panel-id> [--limit <count>] [--json]", " runpane panes git-status --pane <pane-id> [--json] [--pane-dir <path>]", " runpane panes commit --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes push --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes pull --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes rebase-main --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes restore --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane links create --pane <pane-id> [--panel <panel-id>] [--json]", " runpane links open --url <pane-url> --yes [--json] [--pane-dir <path>]", " runpane docs search --query <text> [--limit <count>] [--json]", " runpane docs read --doc <path> [--json]", " runpane agents start (--pane <pane-id> | --repo <selector> --name <name> [--base-branch <branch>]) (--agent <codex|claude|cursor>|--tool-command <command>) --prompt <task> --yes [--json] [--pane-dir <path>]", " runpane agents status (--pane <pane-id>|--panel <panel-id>) [--limit <count>] [--json] [--pane-dir <path>]", " runpane agents send (--pane <pane-id>|--panel <panel-id>) --text <message> --yes [--json] [--pane-dir <path>]", " runpane report --state <ready|blocked|failed|done> [--pr <number>] [--head <sha>] [--summary-file <path|->] [--question <text>] [--json]", " runpane inbox [--session <id|name>] [--json]", " runpane inbox ack <item-id>... [--session <id|name>] [--json]", " runpane panes squash-rebase --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes stash --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stash-pop --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes soft-reset --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes fetch --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes run-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stop-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes move --pane <pane-id> --folder <folder-id> --yes [--json] [--pane-dir <path>]", " runpane folders list --repo <repo-id> [--json] [--pane-dir <path>]", " runpane folders create --repo <repo-id> --name <name> --yes [--json] [--pane-dir <path>]", " runpane help [command]", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup", "", "Advanced examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest", "", "Common commands:", " runpane help", " runpane setup", " runpane install", " runpane doctor", "", "Agent discovery:", " runpane doctor --json", " runpane agent-context --json", " runpane agent-context --command \"<command>\" --json", "", "Run \"runpane help panes create\" for pane orchestration options."];
|
|
1247
1319
|
readonly install: readonly ["Usage:", " runpane install [client|daemon] [options]", "", "Examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"", "", "Wrapper options:", " --version <latest|vX.Y.Z> Pane release to install", " --format <auto|appimage|deb|dmg|zip|exe>", " --download-dir <path>", " --pane-path <path> Use an existing Pane executable", " --dry-run Print the plan without downloading", " --yes Skip interactive prompts where possible", " --verbose", "", "Daemon passthrough options:", " --label <name>", " --prefer-tunnel <tailscale|ssh|manual|auto>", " --channel <stable|nightly>", " --base-url <url>", " --pane-dir <path>", " --listen-port <port> / --port <port>", " --auto-listen-port", " --interactive-tailscale-setup", " --no-install-service", " --no-tailscale-serve", " --print-only", " --repo-ref <ref>"];
|
|
1248
1320
|
readonly setup: readonly ["Usage:", " runpane setup", "", "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup"];
|
|
1249
1321
|
readonly update: readonly ["Usage:", " runpane update [--pane-only | --cli-only] [--version <latest|vX.Y.Z>] [--pane-dir <path>] [--dry-run] [--wait] [--json]", " runpane update --status <operation-id> [--wait] [--pane-dir <path>] [--json]", "", "Updates both Pane and the invoked supported CLI by default, on this machine.", "Preflight identifies the host and installation owner before downtime. The independent helper stages an app, CLI, and standalone Node runtime before stopping Pane.", "Status distinguishes acceptance, installed components, host health, and per-panel restoration. No prompts or uncertain actions are replayed.", "CLI-only updates do not restart Pane; a managed CLI pin survives later Pane startup.", "Use workspace <machine> exec -- runpane update for an explicit remote machine."];
|
|
@@ -1317,6 +1389,14 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1317
1389
|
readonly "lock acquire": readonly ["Usage:", "runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1318
1390
|
readonly "lock release": readonly ["Usage:", "runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1319
1391
|
readonly "lock list": readonly ["Usage:", "runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1392
|
+
readonly loops: readonly ["Usage:", " runpane loops <list|create|update|run|pause|resume|delete> [options]", "", "Loops (scheduled tasks) start a new Pane in a fresh worktree on a cron schedule.", "A Session loop instead sends its prompt to a Session's agent each run.", "Loops are for large recurring jobs and run at most once an hour.", "For short waits, use your agent harness's own sleep and wake.", "Runs start only while Pane is running, in this machine's local time zone.", "", "Commands:", " runpane loops list [--json] [--pane-dir <path>]", " runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--paused] [--dry-run] --yes [--json] [--pane-dir <path>]", " runpane loops update --loop <id> [--repo <selector>|--session <id|name|new>] [--name <name>] [--cron <expr>] [--agent <claude|codex|cursor>|--tool-command <command>] [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--dry-run] --yes [--json] [--pane-dir <path>]", " runpane loops run --loop <id> --yes [--json] [--pane-dir <path>]", " runpane loops pause --loop <id> --yes [--json] [--pane-dir <path>]", " runpane loops resume --loop <id> --yes [--json] [--pane-dir <path>]", " runpane loops delete --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
1393
|
+
readonly "loops list": readonly ["Usage:", "runpane loops list [--json] [--pane-dir <path>]", "", "List loops (scheduled tasks) with their schedule, next run, and recent runs.", "", "Options:", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1394
|
+
readonly "loops create": readonly ["Usage:", "runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--paused] [--dry-run] --yes [--json] [--pane-dir <path>]", "", "Create a loop: a cron schedule that starts a new Pane in a fresh worktree for each run, or sends a prompt to a Session's agent. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.", "With --repo, each run is a new Pane in a fresh worktree from the repo's default base branch.", "A Session loop sends its prompt to that Session's agent each run instead of creating a new Pane.", "", "Options:", " --repo <selector> Repository: active, id, exact path, or saved name.", " --session <id|name|new> Session whose agent gets the prompt each run, instead of", " a new Pane; `new` creates a Session named after the loop.", " That agent then skips permission prompts for every message", " it gets, not only loop runs.", " --name <name> Loop name.", " --cron <expr> Five-field cron in local time, such as \"0 3 * * *\"; at least 1 hour apart.", " --agent <claude|codex|cursor> Agent each run starts; for a Session loop, the Session's agent.", " Runs skip permission prompts.", " --tool-command <command> Command each run starts instead of an agent, such as", " ./scripts/nightly-report.sh. Project loops only. On Windows it runs", " in Pane's terminal shell, Git Bash by default, so write bash or", " `cmd //c`: \"cmd //c echo hi > loop.txt\" works, \"cmd /c ...\" hangs.", " --prompt <text> Text typed into the agent or command after it starts; for a", " Session loop, the message sent to the Session's agent each run.", " --prompt-file <path|-> Read the prompt from a file or stdin.", " --worktree-name <template> Worktree and branch name; defaults to loop-<name>. Project loops only.", " --paused Create the loop paused.", " --dry-run Check the schedule and print what would be saved.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1395
|
+
readonly "loops update": readonly ["Usage:", "runpane loops update --loop <id> [--repo <selector>|--session <id|name|new>] [--name <name>] [--cron <expr>] [--agent <claude|codex|cursor>|--tool-command <command>] [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--dry-run] --yes [--json] [--pane-dir <path>]", "", "Change a loop's repo or Session, name, schedule, agent or command, prompt, or worktree template. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.", "With --repo, each run is a new Pane in a fresh worktree from the repo's default base branch.", "A Session loop sends its prompt to that Session's agent each run instead of creating a new Pane.", "", "Options:", " --loop <id> Loop to change; other flags replace its values.", " --repo <selector> Repository: active, id, exact path, or saved name.", " --session <id|name|new> Session whose agent gets the prompt each run, instead of", " a new Pane; `new` creates a Session named after the loop.", " That agent then skips permission prompts for every message", " it gets, not only loop runs.", " --name <name> Loop name.", " --cron <expr> Five-field cron in local time, such as \"0 3 * * *\"; at least 1 hour apart.", " --agent <claude|codex|cursor> Agent each run starts; for a Session loop, the Session's agent.", " Runs skip permission prompts.", " --tool-command <command> Command each run starts instead of an agent, such as", " ./scripts/nightly-report.sh. Project loops only. On Windows it runs", " in Pane's terminal shell, Git Bash by default, so write bash or", " `cmd //c`: \"cmd //c echo hi > loop.txt\" works, \"cmd /c ...\" hangs.", " --prompt <text> Text typed into the agent or command after it starts; for a", " Session loop, the message sent to the Session's agent each run.", " --prompt-file <path|-> Read the prompt from a file or stdin.", " --worktree-name <template> Worktree and branch name; defaults to loop-<name>. Project loops only.", " --dry-run Check the schedule and print what would be saved.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1396
|
+
readonly "loops run": readonly ["Usage:", "runpane loops run --loop <id> --yes [--json] [--pane-dir <path>]", "", "Start a run of a loop now. The schedule stays the same.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1397
|
+
readonly "loops pause": readonly ["Usage:", "runpane loops pause --loop <id> --yes [--json] [--pane-dir <path>]", "", "Pause a loop: it starts no scheduled runs until resumed.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1398
|
+
readonly "loops resume": readonly ["Usage:", "runpane loops resume --loop <id> --yes [--json] [--pane-dir <path>]", "", "Resume a paused loop from its next scheduled time.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1399
|
+
readonly "loops delete": readonly ["Usage:", "runpane loops delete --loop <id> --yes [--json] [--pane-dir <path>]", "", "Delete a loop. It starts no more runs.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1320
1400
|
readonly "workspace list": readonly ["Usage:", " runpane workspace list [--json] [--pane-dir <path>]", "", "List the machines on your tailnet, each with its owner, and whether each answers workspaces.", "", "Options:", " --json Print machine-readable output."];
|
|
1321
1401
|
readonly "workspace enable": readonly ["Usage:", " runpane workspace enable [--json] [--pane-dir <path>]", "", "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).", "", "Options:", " --json Print machine-readable output."];
|
|
1322
1402
|
readonly "workspace disable": readonly ["Usage:", " runpane workspace disable [--json] [--pane-dir <path>]", "", "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.", "", "Options:", " --json Print machine-readable output."];
|
|
@@ -1333,7 +1413,7 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1333
1413
|
readonly "inbox ack": readonly ["Usage:", " runpane inbox ack <item-id>... [--session <id|name>] [--json] [--pane-dir <path>]", " runpane inbox ack --all --session <id|name> [--json] [--pane-dir <path>]", "", "Clears Session inbox items. Ids that match nothing are listed as unknown; acknowledging twice is harmless.", "", "Options:", " --session <id|name> Only clear items of this Session; required with --all", " --all Clear every item of the Session", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
|
|
1334
1414
|
};
|
|
1335
1415
|
readonly pip: {
|
|
1336
|
-
readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane doctor --report --body-file <path|->", " runpane daemon repair [--pane-dir <path>] [--yes] [--json]", " runpane agent-context [--json]", " runpane mcp [--toolsets <name,...>] [--read-only]", " runpane agents doctor --agent <codex|claude|cursor> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes cost [--repo <selector>] [--pane <pane-id>] [--json]", " runpane workspace state [--repo <selector>] [--json]", " runpane watch --follow", " runpane watch --until-event", " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--base-branch <branch>] [--source user|agent] [--focus|--no-focus] [--wait-ready]", " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--remove-worktree] [--dry-run] --yes", " runpane panes archive --session <id|name> --merged [--remove-worktree] [--dry-run] --yes", " python -m runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> (--text <text>|--keys <name,...>|--input-file <path|->) --yes [--json]", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", " runpane panels submit-composer --panel <panel-id> [--strategy auto|codex-ctrl-enter|enter|tab] --yes [--json]", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--json]", " runpane panels resume (--panel <panel-id>|--session <id|name>|--all-stopped) [--wait-ready] --yes [--json]", " runpane panels last-message --panel <panel-id> [--limit <count>] [--json]", " runpane panes git-status --pane <pane-id> [--json] [--pane-dir <path>]", " runpane panes commit --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes push --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes pull --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes rebase-main --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes restore --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane links create --pane <pane-id> [--panel <panel-id>] [--json]", " runpane links open --url <pane-url> --yes [--json] [--pane-dir <path>]", " runpane docs search --query <text> [--limit <count>] [--json]", " runpane docs read --doc <path> [--json]", " runpane agents start (--pane <pane-id> | --repo <selector> --name <name> [--base-branch <branch>]) (--agent <codex|claude|cursor>|--tool-command <command>) --prompt <task> --yes [--json] [--pane-dir <path>]", " runpane agents status (--pane <pane-id>|--panel <panel-id>) [--limit <count>] [--json] [--pane-dir <path>]", " runpane agents send (--pane <pane-id>|--panel <panel-id>) --text <message> --yes [--json] [--pane-dir <path>]", " runpane report --state <ready|blocked|failed|done> [--pr <number>] [--head <sha>] [--summary-file <path|->] [--question <text>] [--json]", " runpane inbox [--session <id|name>] [--json]", " runpane inbox ack <item-id>... [--session <id|name>] [--json]", " runpane panes squash-rebase --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes stash --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stash-pop --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes soft-reset --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes fetch --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes run-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stop-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes move --pane <pane-id> --folder <folder-id> --yes [--json] [--pane-dir <path>]", " runpane folders list --repo <repo-id> [--json] [--pane-dir <path>]", " runpane folders create --repo <repo-id> --name <name> --yes [--json] [--pane-dir <path>]", " runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", " runpane help [command]", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup", "", "Advanced examples:", " pipx run runpane install client", " pipx run runpane install daemon --label \"My Server\"", " uvx runpane@latest", "", "Common commands:", " runpane help", " runpane setup", " runpane install", " runpane doctor", "", "Agent discovery:", " runpane doctor --json", " runpane agent-context --json", " runpane agent-context --command \"<command>\" --json", "", "Run \"runpane help panes create\" for pane orchestration options."];
|
|
1416
|
+
readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane doctor --report --body-file <path|->", " runpane daemon repair [--pane-dir <path>] [--yes] [--json]", " runpane agent-context [--json]", " runpane mcp [--toolsets <name,...>] [--read-only]", " runpane agents doctor --agent <codex|claude|cursor> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes cost [--repo <selector>] [--pane <pane-id>] [--json]", " runpane workspace state [--repo <selector>] [--json]", " runpane watch --follow", " runpane watch --until-event", " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--base-branch <branch>] [--source user|agent] [--focus|--no-focus] [--wait-ready]", " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--remove-worktree] [--dry-run] --yes", " runpane panes archive --session <id|name> --merged [--remove-worktree] [--dry-run] --yes", " python -m runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> (--text <text>|--keys <name,...>|--input-file <path|->) --yes [--json]", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", " runpane panels submit-composer --panel <panel-id> [--strategy auto|codex-ctrl-enter|enter|tab] --yes [--json]", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--json]", " runpane panels resume (--panel <panel-id>|--session <id|name>|--all-stopped) [--wait-ready] --yes [--json]", " runpane panels last-message --panel <panel-id> [--limit <count>] [--json]", " runpane panes git-status --pane <pane-id> [--json] [--pane-dir <path>]", " runpane panes commit --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes push --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes pull --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes rebase-main --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes restore --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane links create --pane <pane-id> [--panel <panel-id>] [--json]", " runpane links open --url <pane-url> --yes [--json] [--pane-dir <path>]", " runpane docs search --query <text> [--limit <count>] [--json]", " runpane docs read --doc <path> [--json]", " runpane agents start (--pane <pane-id> | --repo <selector> --name <name> [--base-branch <branch>]) (--agent <codex|claude|cursor>|--tool-command <command>) --prompt <task> --yes [--json] [--pane-dir <path>]", " runpane agents status (--pane <pane-id>|--panel <panel-id>) [--limit <count>] [--json] [--pane-dir <path>]", " runpane agents send (--pane <pane-id>|--panel <panel-id>) --text <message> --yes [--json] [--pane-dir <path>]", " runpane report --state <ready|blocked|failed|done> [--pr <number>] [--head <sha>] [--summary-file <path|->] [--question <text>] [--json]", " runpane inbox [--session <id|name>] [--json]", " runpane inbox ack <item-id>... [--session <id|name>] [--json]", " runpane panes squash-rebase --pane <pane-id> --message <message> --yes [--json] [--pane-dir <path>]", " runpane panes stash --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stash-pop --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes soft-reset --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes fetch --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes run-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes stop-script --pane <pane-id> --yes [--json] [--pane-dir <path>]", " runpane panes move --pane <pane-id> --folder <folder-id> --yes [--json] [--pane-dir <path>]", " runpane folders list --repo <repo-id> [--json] [--pane-dir <path>]", " runpane folders create --repo <repo-id> --name <name> --yes [--json] [--pane-dir <path>]", " runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", " runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", " python -m runpane loops list [--json]", " python -m runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>] --yes", " python -m runpane loops update|run|pause|resume|delete --loop <id> --yes", " runpane help [command]", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup", "", "Advanced examples:", " pipx run runpane install client", " pipx run runpane install daemon --label \"My Server\"", " uvx runpane@latest", "", "Common commands:", " runpane help", " runpane setup", " runpane install", " runpane doctor", "", "Agent discovery:", " runpane doctor --json", " runpane agent-context --json", " runpane agent-context --command \"<command>\" --json", "", "Run \"runpane help panes create\" for pane orchestration options."];
|
|
1337
1417
|
readonly install: readonly ["Usage:", " runpane install [client|daemon] [options]", "", "Examples:", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"", " pipx run runpane install daemon --label \"My Server\"", "", "Wrapper options:", " --version <latest|vX.Y.Z>", " --format <auto|appimage|deb|dmg|zip|exe>", " --download-dir <path>", " --pane-path <path>", " --dry-run", " --yes", " --verbose", "", "Daemon passthrough options:", " --label <name>", " --prefer-tunnel <tailscale|ssh|manual|auto>", " --channel <stable|nightly>", " --base-url <url>", " --pane-dir <path>", " --listen-port <port> / --port <port>", " --auto-listen-port", " --interactive-tailscale-setup", " --no-install-service", " --no-tailscale-serve", " --print-only", " --repo-ref <ref>"];
|
|
1338
1418
|
readonly setup: readonly ["Usage:", " runpane setup", "", "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup"];
|
|
1339
1419
|
readonly update: readonly ["Usage:", " runpane update [--pane-only | --cli-only] [--version <latest|vX.Y.Z>] [--pane-dir <path>] [--dry-run] [--wait] [--json]", " runpane update --status <operation-id> [--wait] [--pane-dir <path>] [--json]", "", "Updates both Pane and the invoked supported CLI by default, on this machine.", "Preflight identifies the host and installation owner before downtime. The independent helper stages an app, CLI, and standalone Node runtime before stopping Pane.", "Status distinguishes acceptance, installed components, host health, and per-panel restoration. No prompts or uncertain actions are replayed.", "CLI-only updates do not restart Pane; a managed CLI pin survives later Pane startup.", "Use workspace <machine> exec -- runpane update for an explicit remote machine."];
|
|
@@ -1407,6 +1487,14 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1407
1487
|
readonly "lock acquire": readonly ["Usage:", "python -m runpane lock acquire --name <name> --ttl <duration> [--wait <milliseconds>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1408
1488
|
readonly "lock release": readonly ["Usage:", "python -m runpane lock release --name <name> [--force] [--session <id|name>] [--note <text>] [--pane <pane-id>] [--panel <panel-id>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1409
1489
|
readonly "lock list": readonly ["Usage:", "python -m runpane lock list [--session <id|name>] [--json] [--pane-dir <path>]", "", "Options:", " --name <name> Lock name: 1-128 letters, digits, \".\", \"_\", or \"-\".", " --ttl <duration> Time to live, such as 90s, 30m, or 2h; a bare number is milliseconds.", " --wait <milliseconds> Wait this long for a held lock to come free (acquire).", " --note <text> What the lock is for; outside a Pane it also names the owner.", " --pane <pane-id> Act for this Pane instead of $PANE_SESSION_ID.", " --panel <panel-id> Act for this panel instead of $PANE_PANEL_ID.", " --force Release a lock another owner holds (release).", " --session <id|name> Named Session whose locks to list or release.", " --json Print JSON output."];
|
|
1490
|
+
readonly loops: readonly ["Usage:", " python -m runpane loops <list|create|update|run|pause|resume|delete> [options]", "", "Loops (scheduled tasks) start a new Pane in a fresh worktree on a cron schedule.", "A Session loop instead sends its prompt to a Session's agent each run.", "Loops are for large recurring jobs and run at most once an hour.", "For short waits, use your agent harness's own sleep and wake.", "Runs start only while Pane is running, in this machine's local time zone.", "", "Commands:", " python -m runpane loops list [--json] [--pane-dir <path>]", " python -m runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--paused] [--dry-run] --yes [--json] [--pane-dir <path>]", " python -m runpane loops update --loop <id> [--repo <selector>|--session <id|name|new>] [--name <name>] [--cron <expr>] [--agent <claude|codex|cursor>|--tool-command <command>] [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--dry-run] --yes [--json] [--pane-dir <path>]", " python -m runpane loops run --loop <id> --yes [--json] [--pane-dir <path>]", " python -m runpane loops pause --loop <id> --yes [--json] [--pane-dir <path>]", " python -m runpane loops resume --loop <id> --yes [--json] [--pane-dir <path>]", " python -m runpane loops delete --loop <id> --yes [--json] [--pane-dir <path>]"];
|
|
1491
|
+
readonly "loops list": readonly ["Usage:", "python -m runpane loops list [--json] [--pane-dir <path>]", "", "List loops (scheduled tasks) with their schedule, next run, and recent runs.", "", "Options:", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1492
|
+
readonly "loops create": readonly ["Usage:", "python -m runpane loops create (--repo <selector>|--session <id|name|new>) --name <name> --cron <expr> (--agent <claude|codex|cursor>|--tool-command <command>) [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--paused] [--dry-run] --yes [--json] [--pane-dir <path>]", "", "Create a loop: a cron schedule that starts a new Pane in a fresh worktree for each run, or sends a prompt to a Session's agent. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.", "With --repo, each run is a new Pane in a fresh worktree from the repo's default base branch.", "A Session loop sends its prompt to that Session's agent each run instead of creating a new Pane.", "", "Options:", " --repo <selector> Repository: active, id, exact path, or saved name.", " --session <id|name|new> Session whose agent gets the prompt each run, instead of", " a new Pane; `new` creates a Session named after the loop.", " That agent then skips permission prompts for every message", " it gets, not only loop runs.", " --name <name> Loop name.", " --cron <expr> Five-field cron in local time, such as \"0 3 * * *\"; at least 1 hour apart.", " --agent <claude|codex|cursor> Agent each run starts; for a Session loop, the Session's agent.", " Runs skip permission prompts.", " --tool-command <command> Command each run starts instead of an agent, such as", " ./scripts/nightly-report.sh. Project loops only. On Windows it runs", " in Pane's terminal shell, Git Bash by default, so write bash or", " `cmd //c`: \"cmd //c echo hi > loop.txt\" works, \"cmd /c ...\" hangs.", " --prompt <text> Text typed into the agent or command after it starts; for a", " Session loop, the message sent to the Session's agent each run.", " --prompt-file <path|-> Read the prompt from a file or stdin.", " --worktree-name <template> Worktree and branch name; defaults to loop-<name>. Project loops only.", " --paused Create the loop paused.", " --dry-run Check the schedule and print what would be saved.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1493
|
+
readonly "loops update": readonly ["Usage:", "python -m runpane loops update --loop <id> [--repo <selector>|--session <id|name|new>] [--name <name>] [--cron <expr>] [--agent <claude|codex|cursor>|--tool-command <command>] [--prompt <text>|--prompt-file <path|->] [--worktree-name <template>] [--dry-run] --yes [--json] [--pane-dir <path>]", "", "Change a loop's repo or Session, name, schedule, agent or command, prompt, or worktree template. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.", "With --repo, each run is a new Pane in a fresh worktree from the repo's default base branch.", "A Session loop sends its prompt to that Session's agent each run instead of creating a new Pane.", "", "Options:", " --loop <id> Loop to change; other flags replace its values.", " --repo <selector> Repository: active, id, exact path, or saved name.", " --session <id|name|new> Session whose agent gets the prompt each run, instead of", " a new Pane; `new` creates a Session named after the loop.", " That agent then skips permission prompts for every message", " it gets, not only loop runs.", " --name <name> Loop name.", " --cron <expr> Five-field cron in local time, such as \"0 3 * * *\"; at least 1 hour apart.", " --agent <claude|codex|cursor> Agent each run starts; for a Session loop, the Session's agent.", " Runs skip permission prompts.", " --tool-command <command> Command each run starts instead of an agent, such as", " ./scripts/nightly-report.sh. Project loops only. On Windows it runs", " in Pane's terminal shell, Git Bash by default, so write bash or", " `cmd //c`: \"cmd //c echo hi > loop.txt\" works, \"cmd /c ...\" hangs.", " --prompt <text> Text typed into the agent or command after it starts; for a", " Session loop, the message sent to the Session's agent each run.", " --prompt-file <path|-> Read the prompt from a file or stdin.", " --worktree-name <template> Worktree and branch name; defaults to loop-<name>. Project loops only.", " --dry-run Check the schedule and print what would be saved.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1494
|
+
readonly "loops run": readonly ["Usage:", "python -m runpane loops run --loop <id> --yes [--json] [--pane-dir <path>]", "", "Start a run of a loop now. The schedule stays the same.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1495
|
+
readonly "loops pause": readonly ["Usage:", "python -m runpane loops pause --loop <id> --yes [--json] [--pane-dir <path>]", "", "Pause a loop: it starts no scheduled runs until resumed.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1496
|
+
readonly "loops resume": readonly ["Usage:", "python -m runpane loops resume --loop <id> --yes [--json] [--pane-dir <path>]", "", "Resume a paused loop from its next scheduled time.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1497
|
+
readonly "loops delete": readonly ["Usage:", "python -m runpane loops delete --loop <id> --yes [--json] [--pane-dir <path>]", "", "Delete a loop. It starts no more runs.", "", "Options:", " --loop <id> Loop id, from runpane loops list.", " --yes Confirm the change.", " --json Print JSON output.", " --pane-dir <path> Connect to a specific Pane data directory."];
|
|
1410
1498
|
readonly "workspace list": readonly ["Usage:", " runpane workspace list [--json] [--pane-dir <path>]", "", "`runpane workspace list` ships in the npm package and the Pane app, not in the Python package.", "Run it with Node instead: npx --yes runpane@latest workspace list"];
|
|
1411
1499
|
readonly "workspace enable": readonly ["Usage:", " runpane workspace enable [--json] [--pane-dir <path>]", "", "`runpane workspace enable` ships in the npm package and the Pane app, not in the Python package.", "Run it with Node instead: npx --yes runpane@latest workspace enable"];
|
|
1412
1500
|
readonly "workspace disable": readonly ["Usage:", " runpane workspace disable [--json] [--pane-dir <path>]", "", "`runpane workspace disable` ships in the npm package and the Pane app, not in the Python package.", "Run it with Node instead: npx --yes runpane@latest workspace disable"];
|
|
@@ -1429,8 +1517,8 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1429
1517
|
readonly npmCommands: readonly ["npx --yes runpane@latest", "npx --yes runpane@latest setup", "npx --yes runpane@latest install client", "npx --yes runpane@latest install daemon --label \"My Server\"", "pnpm dlx runpane@latest", "pnpm dlx runpane@latest install daemon --label \"My Server\"", "npm i -g runpane && runpane", "npm i -g runpane && runpane setup", "npm i -g runpane && runpane install daemon --label \"My Server\"", "pnpm add -g runpane && runpane", "pnpm add -g runpane && runpane setup", "pnpm add -g runpane && runpane install daemon --label \"My Server\"", "yarn dlx runpane@latest install daemon --label \"My Server\"", "bunx runpane@latest install daemon --label \"My Server\""];
|
|
1430
1518
|
readonly pythonCommands: readonly ["pipx run runpane", "pipx run runpane setup", "python -m pip install runpane", "runpane", "runpane setup", "python -m runpane setup", "runpane install daemon --label \"My Server\"", "pipx install runpane", "runpane", "runpane setup", "pipx run runpane install daemon --label \"My Server\"", "uvx runpane@latest", "uvx runpane@latest setup", "uvx runpane@latest install daemon --label \"My Server\"", "python -m runpane install daemon --label \"My Server\""];
|
|
1431
1519
|
readonly packageManagerNotes: readonly ["Use `pnpm dlx` for one-shot pnpm execution and `pnpm add -g` for persistent CLI installation.", "Do not document `pnpm install runpane` as the public CLI install path."];
|
|
1432
|
-
readonly commandUsages: readonly ["runpane", "runpane setup", "runpane install", "runpane install client", "runpane install daemon", "runpane update", "runpane version", "runpane doctor", "runpane doctor --json", "runpane daemon repair --pane-dir ~/.pane_remote --yes --json", "runpane agent-context", "runpane agent-context --command \"panes create\" --json", "runpane mcp", "runpane repos list --json", "runpane repos add --path /path/to/repo --name Pane --yes --json", "runpane panes list --repo active --json", "runpane panes cost --pane <pane-id> --json", "runpane panes create --repo active --name issue-252 --agent <agent> --prompt \"Kick off the discussion skill for issue 252\" --source agent --no-focus --wait-ready --yes --json", "runpane panes create --from-json panes.json --yes --json", "runpane panes archive --pane <pane-id> --source agent --yes --json", "runpane panes rename --pane <pane-id> --name issue-393 --yes --json", "runpane panels list --pane <pane-id> --json", "runpane panels output --panel <panel-id> --limit 200 --json", "printf 'Continue\\n' | runpane panels input --panel <panel-id> --input-file - --yes --json", "runpane sessions list [--json] [--pane-dir <path>]", "runpane sessions create --from-json <path|-> [--json] [--pane-dir <path>]", "runpane sessions get --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions update --session <id|name> --from-json <path|-> [--json] [--pane-dir <path>]", "runpane sessions pin --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions unpin --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions set-agent --session <id|name> --agent <codex|claude|cursor> [--json] [--pane-dir <path>]", "runpane sessions associate --session <id|name> --pane <pane-id> [--json] [--pane-dir <path>]", "runpane sessions detach --session <id|name> [--pane <pane-id>] [--json] [--pane-dir <path>]", "runpane sessions overview --session <id|name> [--json] [--pane-dir <path>]", "runpane lock acquire --name testing-account --ttl 30m --wait 1800000 --note \"call QA\" --json", "runpane lock release --name testing-account --json", "runpane lock list --json", "runpane agents start --repo active --name fix-login --agent claude --prompt \"Fix the login redirect\" --yes --json", "runpane agents start --pane <pane-id> --agent codex --prompt \"Review the PR from this branch and report findings\" --yes --json", "runpane agents status --pane <pane-id> --json", "runpane agents send --pane <pane-id> --text \"Also add a test\" --yes --json", "runpane report --state ready --pr 747 --head fc5dce9 --summary-file /tmp/report.md --json", "runpane panels last-message --panel <panel-id> --json", "runpane panels resume --panel <panel-id> --wait-ready --yes --json", "runpane panels resume --session <id|name> --wait-ready --yes --json", "runpane docs search --query \"archive a pane\" --json", "runpane links create --pane <pane-id> --json", "runpane panes git-status --pane <pane-id> --json", "runpane help", "runpane <command> --help", "runpane watch --until-event", "runpane watch --follow", "runpane watch --session <id|name> --follow", "runpane watch --session <id|name> --follow --ready-settle 1m --blocked-settle 15s --min-interval 2m", "runpane pr watch [--pane <id>] --url <PR URL> [--head <full-sha>] [--json] [--pane-dir <path>]", "runpane pr unwatch [--pane <id>] --url <PR URL> [--json] [--pane-dir <path>]", "runpane pr list [--pane <id>] [--json] [--pane-dir <path>]"];
|
|
1433
|
-
readonly commandDescriptions: readonly ["`runpane` with no arguments and `runpane setup` open an interactive wizard when stdin and stdout are TTYs. The remote-host wizard asks only for a name, then runs interactive Tailscale setup with automatic port selection; explicit install daemon flags remain available for SSH and manual URLs. In non-interactive shells or CI, both forms must print help, common commands, and agent discovery hints, then exit successfully instead of waiting for input.", "`runpane install` is an alias for `runpane install client`.", "`runpane install client` downloads the selected Pane desktop artifact and installs, opens, or launches it for the current platform.", "`runpane install daemon` downloads or installs Pane, resolves a stable Pane executable path, and spawns `<pane executable> --remote-setup <forwarded remote setup args>`.", "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.", "`runpane update` defaults to both app and active supported CLI, with independent supervision, staging, durable status, and explicit restoration outcomes. Prerequisites, status fields/exit codes, draft handling and manual recovery are documented in [Update recovery](UPDATE_RECOVERY.md).", "`runpane version` prints only wrapper package metadata and does not contact, launch, or focus the Pane app or daemon.", "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, daemon reachability, and remote-daemon hints. Add `--json` for a machine-readable report that agents should run before mutating Pane state. Installed app version detection must be best-effort and must not launch, focus, or configure Pane; macOS wrappers read app bundle metadata instead of executing `Pane --version`.", "`runpane daemon repair` rewrites and restarts only the managed remote-daemon launcher/service. It never creates pairing credentials, changes tunnels, or downloads Pane; doctor only recommends it and never runs it automatically.", "`runpane agent-context` prints a brief, token-efficient command schema for coding agents without connecting to the Pane daemon.", "`runpane agent-context --command \"panes create\"` prints the detailed definition for one command. Add `--json` for machine-readable output. An unknown command exits 2 and lists the closest command names; with `--json` it prints `{ ok: false, code: \"unknown_command\", message, candidates }` on stdout.", "`runpane mcp` runs a stdio MCP server whose tools are generated from this contract: every command with result `jsonSchemas` becomes a tool that runs `runpane <command> --json` and returns its output. Only the npm package and the Pane app include it; the Python wrapper prints how to run it with Node and exits non-zero.", "`runpane repos list` connects to the running local Pane daemon and prints saved repository records.", "`runpane repos add` registers an existing git repository with the running local Pane daemon. It does not create directories or initialize git repositories by default.", "`runpane panes list` lists Pane sessions, optionally scoped to one saved repository.", "`runpane panes cost` reports estimated token costs per Pane for the last 30 days, including per-model breakdowns and cache efficiency; unscoped output includes an Unattributed bucket that reconciles against workspace totals.", "`runpane panes create` connects to the running local Pane daemon, resolves the requested saved base repository, creates user-visible Pane sessions backed by Pane-managed worktrees/branches, opens terminal-backed tool tabs, and optionally sends initial input to the started tool. Built-in agent panes and `--source agent` default to background/no-focus unless `--focus` is passed. New Panes are pinned into the UI's favorite/pin set by default, except when the CLI runs inside a Session orchestrator (`PANE_ORCHESTRATION_SESSION_ID`), where child worktrees default to unpinned. Explicit `--pinned` / `--no-pinned` override creation defaults. First Session association clears an existing pin, including an explicit creation pin; use `panes pin` after association to pin a child. This avoids duplicating Session children in the global pinned list. Manual pins applied afterward are preserved. Panes created interactively in the Pane UI are unaffected. Inside a Session orchestrator (`PANE_ORCHESTRATION_SESSION_ID` set), new Panes are associated with that Session automatically; `--no-associate` opts out. A failed association is reported on the item and never undoes the Pane.", "For `panes create --wait-ready` (and `panels create`, `panes adopt --launch`), ready means an identified agent at its own input box: declared with `--agent`, or detected from the command, its foreground process or its screen. A `--tool-command` that never shows a supported agent is not ready: `readiness.ok` is false with `readiness.reason.code` `no-agent-detected` after the timeout, or `command-exited` as soon as the command exits back to the shell, and nothing is typed into it. `agent-not-ready` means the agent was detected but its input box was not ready in time. CLI readiness is confirmed on consecutive polls. Codex also requires a recognized configured model or context footer below its live composer; its provisional startup composer is not ready. Hidden or unrecognized Codex status lines conservatively time out rather than prove readiness. Startup prompts return blocked with the prompt's own text in blocked.message and a suggestedCommand, and Pane never answers them: first-run trust and daemon dialogs and Agent Farm's `Trust this repository workspace? [y/N]` as blocked.kind=first-run-dialog; Codex's security setup banner and any other prompt, including a wrapper's or shell's `[y/N]` before the agent appears, as agent-prompt. A starting message blocked this way is held and sent once the prompt is answered and the agent's input box is ready. Every create with a starting message returns `initialInput`. Pane stages the text in the composer, presses the agent's submit key separately (Ctrl+Enter for Codex, declared or detected), and checks where it went: `initialInput.delivery` is `taken` or `queued` (from the agent's transcript or its screen), `in-composer`, or `unknown` (`argv` means a prompt was routed at launch; Pane gives the transcript up to 10 seconds before settling on unknown). `initialInput.verifiedSubmitted` is true exactly when it is `taken` or `queued`, and the create's `ok` is false unless a Claude or Codex starting message is verified. Cursor and OpenCode have no acceptance probe: their delivery stays `unknown` with a delivery.message saying so, `verification: unverifiable`, and `ok` follows readiness. Without `--wait-ready` the create returns at once with `initialInput.verifiedSubmitted: false`, a delivery.message saying the call did not wait, and a `panels wait` nextCommand; Pane still sends the message once the agent is identified and at its input box, and gives up without typing it if no supported agent appears within 30 seconds.", "`runpane panes archive` refreshes the configured upstream, reports exact unpushed commit evidence, and refuses unsafe archive operations unless `--force` is used. A branch whose upstream is gone counts as pushed when a merged GitHub pull request has HEAD as its head (`safetyCheck.mergedViaPr`). Add `--dry-run` to inspect the same evidence without archiving. `--remove-worktree` applies the same check and removal to an adopted worktree; local branches are always kept. Successful archives report `worktreeCleanup: completed` once the worktree is gone from its path and from git; `trashDeletion: pending` means its files are still being deleted in the background. `runpane panes archive --session <id|name> --merged` archives every Session Pane that is clean and pushed or merged, and reports a reason for each skipped Pane.", "`runpane panes rename` trims and updates a Pane's display name without changing its worktree, branch, panels, or focus, and returns the updated pane summary.", "`runpane panes focus` raises the Pane window and selects a Pane (and optionally one of its panels) exactly like clicking it in the UI. Because it steals the user's window focus, run it only on an explicit user request to open, focus, show, or switch to a Pane; never focus a Pane proactively, the same doctrine that keeps `panes create` background/no-focus for `--source agent`.", "`runpane panels open` opens a URL or a file from the Pane worktree as a tab in an existing Pane (default: the calling panel's Pane from `PANE_SESSION_ID`), in split view beside the agent unless `--tab` is passed. Files open in an editor tab with read-only previews for supported formats, and HTML opens as editable source; an existing tab showing the same target is reused. It brings the tab forward for clients already showing that Pane, and never raises or focuses the Pane window or switches anyone's Pane.", "`runpane panels list` lists tool panels inside one Pane session. Each panel with a saved agent session ID reports it as `resumeId`, with `resumeSource` (`agent-farm`, `configured`, or `agent`) naming the rule that reopens the conversation.", "`runpane panels output` reads bounded recent terminal output from one panel and strips common terminal control noise for agent use.", "`runpane panels input` sends exact input bytes to one terminal panel. Prefer `--input-file` for newlines, Ctrl-C, quotes, or shell-sensitive text.", "`runpane panes create --prompt` is an alias for `--initial-input`; request JSON and daemon payloads should use the canonical `initialInput` field.", "`runpane panes create --branch <name>` creates the Pane's worktree on exactly that new branch, slashes included (for example `agents/w5a`). The name is checked with `git check-ref-format --branch`, creation fails if the branch already exists, and Pane never renames it to make it unique. `--worktree-name` still names the directory and defaults to `--name`. `--base` is an alias for `--base-branch`, and `--prompt-file` for `--initial-input-file`. `panes create --base <ref> --branch <name> --prompt-file <file>` replaces `git worktree add` plus `panes adopt`. When the base is a remote-tracking branch (the default `origin/main`, or one named with `--base`), Pane fetches it first, waiting at most about 10 seconds, so the Pane starts at the remote's current tip. Each created item reports `base` (`ref`, `commit`, `refresh`); if the fetch fails the Pane still starts, from the local ref, and `base.notice` says so and how to catch up.", "`runpane panes adopt --launch` accepts `--prompt`, `--prompt-file`, `--wait-ready`, and `--ready-timeout-ms`, and reports `readiness`, `initialInput`, and `nextCommand` like `panes create`. A prompt without `--launch` is an error rather than being dropped.", "If composer submission cannot be verified without risking a duplicate, the create item is unsuccessful with `initialInput.staged`, `initialInput.attempts`, `initialInput.blocked.kind: submission_unverified`, and an actionable `nextCommand`. The CLI-facing `--prompt` alias maps to this canonical `initialInput` result.", "When running from WSL while Pane is installed on Windows, the Linux wrapper may look for a missing `/tmp/pane-daemon.../daemon.sock` or resolve to a Windows shim such as Volta. In that case invoke the Windows wrapper through PowerShell from a Windows cwd, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`.", "`runpane watch` waits for agent, Pane, panel, and PR events from the daemon journal without polling. `--follow` keeps watching with defaults tuned for an agent watching unattended (quiet, batched, and it ends itself after 3 hours with nothing happening); individual duration flags override these defaults. Cadence requires a named follow consumer; `--follow --since <generation>` has no consumer name and bypasses settling and batching. `--until-event` waits for one event worth waking for, prints it immediately without follow settling or batching, and exits 0. The defaults are listed in the contract under defaults.watch.", "A watch releases its pending slot when its client socket or named pipe disconnects. Re-arming the same named cursor takes over the previous request; the superseded watcher exits with a WATCH ERROR instead of competing for the cursor. Anonymous concurrent watchers retain the eight-wait limit. Each request also has a 125-second lease (slightly longer than the maximum 120-second long poll), so an abandoned request is reclaimed even if no disconnect arrives.", "The desktop app treats one consumer name specially: while a `runpane watch --as dictate` request is in flight, and for 30 seconds after the last one ends, Pane skips its own \"needs your input\" and \"finished\" desktop notifications, because [Dictate](https://github.com/parsakhaz/open-dictate) shows those events on its pill. When that watcher stops, Pane's notifications come back. The CLI's flags and output are unchanged.", "`sessions list` list durable named orchestration Sessions.", "`sessions create` create a durable named orchestration Session and its hidden terminal owner.", "`sessions get` read one durable named orchestration Session.", "`sessions update` update a Session overview from structured JSON.", "`sessions pin` and `sessions unpin` set the Session pin star through the existing UI update path. Create JSON accepts `isPinned` (default false); update JSON preserves the pin when the field is omitted.", "`sessions set-agent` switch the durable terminal agent for a named Session.", "`sessions associate` associate a user-visible Pane with a named Session.", "`sessions detach` detach a Pane from a named Session.", "`sessions overview` read a live status, activity, git, and pull request overview for a named Session. Each panel in `panes[].panels[]` carries its own latest `runpane report` as `report`, so one call shows what every worker last reported and when (`reportedAt`, next to the panel's `state` and `lastActivityAt`). When a report's summary is a complete JSON object, such as a status file sent with `--summary-file`, `report.data` holds it exactly as the worker gave it; Pane never reads, renames or validates its fields. A summary that is not a JSON object (plain text, an array, a scalar or invalid JSON), is nested more than 64 levels deep, or was truncated (`summaryTruncated`), has no `data`. A panel that never reported has no `report`. `panes[].report` is still the newest report among the Pane's panels.", "`runpane lock acquire|release|list` coordinate a resource shared between agents, such as one test account. The caller's Pane and panel own the lock; it is scoped to the owner's Session (or global outside one), renews for the same owner, and is released on TTL expiry, owner panel exit, or owner Pane archive. `--wait` blocks in the daemon until the lock comes free.", "`runpane agents start|status|send` finish the three common agent jobs in one call each: start an agent on a task (a new tab in the work's Pane with `--pane <id>`, or a new Pane for new work), check on it, and send it a follow-up.", "`runpane report --state ready|blocked|failed|done` is how a worker hands back its result. It stores the latest report on the worker's panel (state, `--pr`, `--head`, up to 16,000 characters of `--summary` or `--summary-file`, and the `--question` a blocked worker needs answered), journals an opt-in `agent.report` watch event (`REPORT <pane-name> pane <pane-id> panel <panel-id> ready pr#747 fc5dce9`; it skips the `--min-interval` batch), records it as Session activity, and shows it in `agents status`, `panels list`, and `sessions overview` (each panel's own report as `panes[].panels[].report`, with a JSON object summary as `data`, and the Pane's newest as `panes[].report`). Inside a Pane terminal the panel comes from `PANE_SESSION_ID` and `PANE_PANEL_ID`; elsewhere pass `--pane` and `--panel`. It prints how many watches were waiting for the report and received it (`Delivered to 1 waiting watcher.`, `liveWatchers` in JSON). Zero means nobody was waiting right now, not that the report is lost: it stays on the panel, and a named-cursor watch receives it when it next waits.", "Work sent to an agent through `runpane panels create`, `panes create` (with a prompt), or `panels submit` records that the sender waits for a `runpane report`, unless the request says `--source user` (Pane's own UI does) or `--no-expect-report`; `--expect-report` asks for one anyway. Typing into a tab never does. If the agent then goes ready or its panel exits without a report, Pane journals one opt-in `agent.report.missing` entry (`MISSING REPORT <pane-name> pane <pane-id> panel <panel-id> ready|exited`) whose `lastOutput` is the agent's last transcript reply or last screen lines; it skips the `--min-interval` batch and reaches only watchers that list it in `--kinds`. While the agent's screen shows background work (Claude's `· 1 shell` footer or a running background subagent row, Codex's `background terminal running` line), Pane waits and looks again every 10 seconds instead. `agent.blocked` entries carry `screenLines`, the prompt the agent waits on, and are journalled once a panel has stayed blocked for 2 seconds.", "The orchestrator guide prescribes submit without `--wait`, followed by its named watch; use one completion consumer. As an optional CLI route, `--wait` on `runpane panels submit`, `panels create`, and `panes create` turns the expected report on and blocks on that panel until the first `agent.report`, `agent.report.missing`, `agent.blocked`, `panel.exited`, or `pane.gone`, then prints one line of JSON (`dispatchWaitResult`): the outcome, ids, the report's state, summary, `summaryPath`, PR and head, `screenLines` for a prompt, or `lastOutput` for a missing report, never the transcript. It exits 0 for a report, 3 missing, 4 blocked, 5 exited or gone, and 124 when `--timeout <duration>` passes. It follows the journal from the position the daemon took before delivering the work, so nothing that happens right after delivery is missed. It reuses watch --until-event and returns indeterminate (exit 6) if the journal epoch changes or retained history is lost; inspect the panel and inbox before retrying. Report-expected dispatches are serialized per panel and refused before writing while a result or missing-output collection is outstanding. Answer a blocked panel with panels submit --no-expect-report, then watch for the original result.", "`runpane inbox [--session <id|name>] [--json]` lists what a Session's orchestrator has not acknowledged: reports, missing reports, and on-screen questions (a question clears itself once its panel moves on). `runpane inbox ack <item-id>...` or `--all --session <id|name>` clears items. An orchestrator runs it when it starts or resumes, to catch anything that finished while it was down; Pane never injects the inbox into its turns.", "`runpane panels resume --panel <panel-id>` restarts a stopped terminal panel in place, keeping its panel id: an agent panel relaunches with its resume command (Claude `--resume <session>`, `codex resume <session>`, Agent Farm `agent-farm run <profile> --resume <id>` with the ID Agent Farm printed; the result's `agentSessionId` names it), the same restart the app runs when it shows the panel, without taking focus. A running panel is left alone (`action: \"already-running\"`); one whose agent exited back to its shell is stopped, and resume runs its saved command again in that shell (`action: \"resumed\"`). If that command exits at once, `--wait-ready` returns `ok: false` with `reason.code: \"command-exited\"` and the error line it printed. `--session <id|name>` or `--all-stopped` resumes every stopped agent panel in that scope, `--concurrency` at a time (default 3), then, with `--wait-ready`, waits on the resumed panels together, and returns `{ resumed, alreadyRunning, failed, notReady, items[] }` with each panel's own result, readiness, and blocker or error. After a Pane restart, or once an agent exits back to its shell, stopped panels report `running: false` (`initialized` stays true while the shell lives) in `panels list`, `panels screen`, and `panels wait` (which returns `stopped: true` instead of timing out), and `nextCommand` points at `panels resume`. `runpane watch` reports them as `panel.stopped` (`STOPPED ...`) when `--kinds` lists that kind; other consumers and `workspace state` see `agent.unknown` with `running: false`, never `agent.ready`.", "`runpane panels last-message --panel <panel-id>` reads a Claude or Codex agent's last reply from its transcript (up to `--limit` characters, default 20,000, keeping the end and reporting `truncated`). It never scrapes the screen: without a transcript it prints `{ ok: false, reason: \"transcript-unavailable\" }` and exits 1.", "Commands with a contract `daemonAction` (the `panes` git, script, restore, and move commands, `folders list|create`, and `links open`) call the same Pane daemon channel as the matching button in the app and print `{ ok, data, error }`. Destructive ones add a pane:// `link` to review the Pane.", "`runpane links create` builds `pane://open?...` links; opening one in Pane selects what it names and never changes Pane state.", "`runpane docs search|read` search and read Pane docs, help, and installed Pane Chat skills offline. They ship in the npm package and the Pane app only.", "`runpane handoff` hands a task to another agent on this or another of your machines. The sending agent writes the note from `runpane handoff --template` (goal, current state, done and verified, in progress, next steps, decisions and constraints, open questions, how to verify, git state); `runpane handoff \"claude opus on parsas-macbook-pro\" --note-file ~/handoff.md` checks every section is filled in, requires the branch to be pushed (or pushes it with `--push`, never forcing), writes the note to that machine's `~/.pane/handoffs/` and starts the agent in a new Pane branched from the sender's branch. When the sender is a Pane tab running a Claude, Codex, Cursor or OpenCode session and the receiver is the same agent, the handoff carries that session: on another machine its files are copied into that machine's agent store and the receiver resumes the same id; on this machine the receiver resumes a fork, because two agents never resume one session on one machine. The receiver starts with no prompt, and the CLI runs the continuity check and reports JSON `continuity.result` `continued`, `inconclusive` (exit 0; `next` gives a probe question) or `not-continued` (exit 1; the receiver is kept and `next` gives the `--note-only` command). `--note-only`, a different agent, or a tab with no carried session starts a fresh agent with the note (`fresh-agent`). JSON `continuity` is `{ carried, result, agent, sessionId, resumedId, fork, files, bytes, checks: { resumedById, restartResumes, historyLoaded, originalUntouched?, originalAppended? }, reason, next }`: `sessionId` is the sender's session, `resumedId` the id the receiver resumes (the fork's on this machine), `checks` are the continuity checks (`historyLoaded` is null when there was nothing to compare; `originalUntouched` is set for forks), and a dry run sets `carried`, `sessionId`, `fork`, `files` and `bytes` with no `result`. After `continued` or `inconclusive` the sending agent ends its turn and makes no more changes on the branch. An OpenCode session travels as its export: `opencode export` on this machine, then `opencode import` inside the receiving repository there, and an OpenCode receiver is accepted only to continue an OpenCode session. A Cursor session is carried only to another machine, best effort since Cursor's store is undocumented: Cursor has no fork, and a copied chat still writes to the original, so on this machine the result is `not-continued` and nothing is started. A destination's agent store is assumed at its default location (`~/.claude`, `~/.codex`, `~/.cursor`); a copy already there is replaced only when the sender's holds all of it and no agent there runs it, otherwise nothing is copied and the result is `not-continued`. A destination Pane too old to resume a carried session is refused before anything is sent (`ERR_HANDOFF_RESUME_UNSUPPORTED`). From a Session's terminal it skips git and creates a Session with the same name, goal and agent on the other machine instead; a same-agent Session resumes the sender's conversation when first opened. The receiver reports back to the sender's panel.", "`runpane pr watch`: Register durable GitHub PR monitoring for a Pane.", "`runpane pr unwatch`: Remove a Pane’s explicit PR registration.", "`runpane pr list`: List PR registrations and stopped watches."];
|
|
1520
|
+
readonly commandUsages: readonly ["runpane", "runpane setup", "runpane install", "runpane install client", "runpane install daemon", "runpane update", "runpane version", "runpane doctor", "runpane doctor --json", "runpane daemon repair --pane-dir ~/.pane_remote --yes --json", "runpane agent-context", "runpane agent-context --command \"panes create\" --json", "runpane mcp", "runpane repos list --json", "runpane repos add --path /path/to/repo --name Pane --yes --json", "runpane panes list --repo active --json", "runpane panes cost --pane <pane-id> --json", "runpane panes create --repo active --name issue-252 --agent <agent> --prompt \"Kick off the discussion skill for issue 252\" --source agent --no-focus --wait-ready --yes --json", "runpane panes create --from-json panes.json --yes --json", "runpane panes archive --pane <pane-id> --source agent --yes --json", "runpane panes rename --pane <pane-id> --name issue-393 --yes --json", "runpane panels list --pane <pane-id> --json", "runpane panels output --panel <panel-id> --limit 200 --json", "printf 'Continue\\n' | runpane panels input --panel <panel-id> --input-file - --yes --json", "runpane sessions list [--json] [--pane-dir <path>]", "runpane sessions create --from-json <path|-> [--json] [--pane-dir <path>]", "runpane sessions get --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions update --session <id|name> --from-json <path|-> [--json] [--pane-dir <path>]", "runpane sessions pin --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions unpin --session <id|name> [--json] [--pane-dir <path>]", "runpane sessions set-agent --session <id|name> --agent <codex|claude|cursor> [--json] [--pane-dir <path>]", "runpane sessions associate --session <id|name> --pane <pane-id> [--json] [--pane-dir <path>]", "runpane sessions detach --session <id|name> [--pane <pane-id>] [--json] [--pane-dir <path>]", "runpane sessions overview --session <id|name> [--json] [--pane-dir <path>]", "runpane lock acquire --name testing-account --ttl 30m --wait 1800000 --note \"call QA\" --json", "runpane lock release --name testing-account --json", "runpane lock list --json", "runpane loops create --repo active --name nightly-bug-sweep --cron \"0 3 * * *\" --agent claude --prompt \"Fix one bug from yesterday's issues\" --yes --json", "runpane loops list --json", "runpane loops run --loop <loop-id> --yes --json", "runpane agents start --repo active --name fix-login --agent claude --prompt \"Fix the login redirect\" --yes --json", "runpane agents start --pane <pane-id> --agent codex --prompt \"Review the PR from this branch and report findings\" --yes --json", "runpane agents status --pane <pane-id> --json", "runpane agents send --pane <pane-id> --text \"Also add a test\" --yes --json", "runpane report --state ready --pr 747 --head fc5dce9 --summary-file /tmp/report.md --json", "runpane panels last-message --panel <panel-id> --json", "runpane panels resume --panel <panel-id> --wait-ready --yes --json", "runpane panels resume --session <id|name> --wait-ready --yes --json", "runpane docs search --query \"archive a pane\" --json", "runpane links create --pane <pane-id> --json", "runpane panes git-status --pane <pane-id> --json", "runpane help", "runpane <command> --help", "runpane watch --until-event", "runpane watch --follow", "runpane watch --session <id|name> --follow", "runpane watch --session <id|name> --follow --ready-settle 1m --blocked-settle 15s --min-interval 2m", "runpane pr watch [--pane <id>] --url <PR URL> [--head <full-sha>] [--json] [--pane-dir <path>]", "runpane pr unwatch [--pane <id>] --url <PR URL> [--json] [--pane-dir <path>]", "runpane pr list [--pane <id>] [--json] [--pane-dir <path>]"];
|
|
1521
|
+
readonly commandDescriptions: readonly ["`runpane` with no arguments and `runpane setup` open an interactive wizard when stdin and stdout are TTYs. The remote-host wizard asks only for a name, then runs interactive Tailscale setup with automatic port selection; explicit install daemon flags remain available for SSH and manual URLs. In non-interactive shells or CI, both forms must print help, common commands, and agent discovery hints, then exit successfully instead of waiting for input.", "`runpane install` is an alias for `runpane install client`.", "`runpane install client` downloads the selected Pane desktop artifact and installs, opens, or launches it for the current platform.", "`runpane install daemon` downloads or installs Pane, resolves a stable Pane executable path, and spawns `<pane executable> --remote-setup <forwarded remote setup args>`.", "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.", "`runpane update` defaults to both app and active supported CLI, with independent supervision, staging, durable status, and explicit restoration outcomes. Prerequisites, status fields/exit codes, draft handling and manual recovery are documented in [Update recovery](UPDATE_RECOVERY.md).", "`runpane version` prints only wrapper package metadata and does not contact, launch, or focus the Pane app or daemon.", "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, daemon reachability, and remote-daemon hints. Add `--json` for a machine-readable report that agents should run before mutating Pane state. Installed app version detection must be best-effort and must not launch, focus, or configure Pane; macOS wrappers read app bundle metadata instead of executing `Pane --version`.", "`runpane daemon repair` rewrites and restarts only the managed remote-daemon launcher/service. It never creates pairing credentials, changes tunnels, or downloads Pane; doctor only recommends it and never runs it automatically.", "`runpane agent-context` prints a brief, token-efficient command schema for coding agents without connecting to the Pane daemon.", "`runpane agent-context --command \"panes create\"` prints the detailed definition for one command. Add `--json` for machine-readable output. An unknown command exits 2 and lists the closest command names; with `--json` it prints `{ ok: false, code: \"unknown_command\", message, candidates }` on stdout.", "`runpane mcp` runs a stdio MCP server whose tools are generated from this contract: every command with result `jsonSchemas` becomes a tool that runs `runpane <command> --json` and returns its output. Only the npm package and the Pane app include it; the Python wrapper prints how to run it with Node and exits non-zero.", "`runpane repos list` connects to the running local Pane daemon and prints saved repository records.", "`runpane repos add` registers an existing git repository with the running local Pane daemon. It does not create directories or initialize git repositories by default.", "`runpane panes list` lists Pane sessions, optionally scoped to one saved repository.", "`runpane panes cost` reports estimated token costs per Pane for the last 30 days, including per-model breakdowns and cache efficiency; unscoped output includes an Unattributed bucket that reconciles against workspace totals.", "`runpane panes create` connects to the running local Pane daemon, resolves the requested saved base repository, creates user-visible Pane sessions backed by Pane-managed worktrees/branches, opens terminal-backed tool tabs, and optionally sends initial input to the started tool. Built-in agent panes and `--source agent` default to background/no-focus unless `--focus` is passed. New Panes are pinned into the UI's favorite/pin set by default, except when the CLI runs inside a Session orchestrator (`PANE_ORCHESTRATION_SESSION_ID`), where child worktrees default to unpinned. Explicit `--pinned` / `--no-pinned` override creation defaults. First Session association clears an existing pin, including an explicit creation pin; use `panes pin` after association to pin a child. This avoids duplicating Session children in the global pinned list. Manual pins applied afterward are preserved. Panes created interactively in the Pane UI are unaffected. Inside a Session orchestrator (`PANE_ORCHESTRATION_SESSION_ID` set), new Panes are associated with that Session automatically; `--no-associate` opts out. A failed association is reported on the item and never undoes the Pane.", "For `panes create --wait-ready` (and `panels create`, `panes adopt --launch`), ready means an identified agent at its own input box: declared with `--agent`, or detected from the command, its foreground process or its screen. A `--tool-command` that never shows a supported agent is not ready: `readiness.ok` is false with `readiness.reason.code` `no-agent-detected` after the timeout, or `command-exited` as soon as the command exits back to the shell, and nothing is typed into it. `agent-not-ready` means the agent was detected but its input box was not ready in time. CLI readiness is confirmed on consecutive polls. Codex also requires a recognized configured model or context footer below its live composer; its provisional startup composer is not ready. Hidden or unrecognized Codex status lines conservatively time out rather than prove readiness. Startup prompts return blocked with the prompt's own text in blocked.message and a suggestedCommand, and Pane never answers them: first-run trust and daemon dialogs and Agent Farm's `Trust this repository workspace? [y/N]` as blocked.kind=first-run-dialog; Codex's security setup banner and any other prompt, including a wrapper's or shell's `[y/N]` before the agent appears, as agent-prompt. A starting message blocked this way is held and sent once the prompt is answered and the agent's input box is ready. Every create with a starting message returns `initialInput`. Pane stages the text in the composer, presses the agent's submit key separately (Ctrl+Enter for Codex, declared or detected), and checks where it went: `initialInput.delivery` is `taken` or `queued` (from the agent's transcript or its screen), `in-composer`, or `unknown` (`argv` means a prompt was routed at launch; Pane gives the transcript up to 10 seconds before settling on unknown). `initialInput.verifiedSubmitted` is true exactly when it is `taken` or `queued`, and the create's `ok` is false unless a Claude or Codex starting message is verified. Cursor and OpenCode have no acceptance probe: their delivery stays `unknown` with a delivery.message saying so, `verification: unverifiable`, and `ok` follows readiness. Without `--wait-ready` the create returns at once with `initialInput.verifiedSubmitted: false`, a delivery.message saying the call did not wait, and a `panels wait` nextCommand; Pane still sends the message once the agent is identified and at its input box, and gives up without typing it if no supported agent appears within 30 seconds.", "`runpane panes archive` refreshes the configured upstream, reports exact unpushed commit evidence, and refuses unsafe archive operations unless `--force` is used. A branch whose upstream is gone counts as pushed when a merged GitHub pull request has HEAD as its head (`safetyCheck.mergedViaPr`). Add `--dry-run` to inspect the same evidence without archiving. `--remove-worktree` applies the same check and removal to an adopted worktree; local branches are always kept. Successful archives report `worktreeCleanup: completed` once the worktree is gone from its path and from git; `trashDeletion: pending` means its files are still being deleted in the background. `runpane panes archive --session <id|name> --merged` archives every Session Pane that is clean and pushed or merged, and reports a reason for each skipped Pane.", "`runpane panes rename` trims and updates a Pane's display name without changing its worktree, branch, panels, or focus, and returns the updated pane summary.", "`runpane panes focus` raises the Pane window and selects a Pane (and optionally one of its panels) exactly like clicking it in the UI. Because it steals the user's window focus, run it only on an explicit user request to open, focus, show, or switch to a Pane; never focus a Pane proactively, the same doctrine that keeps `panes create` background/no-focus for `--source agent`.", "`runpane panels open` opens a URL or a file from the Pane worktree as a tab in an existing Pane (default: the calling panel's Pane from `PANE_SESSION_ID`), in split view beside the agent unless `--tab` is passed. Files open in an editor tab with read-only previews for supported formats, and HTML opens as editable source; an existing tab showing the same target is reused. It brings the tab forward for clients already showing that Pane, and never raises or focuses the Pane window or switches anyone's Pane.", "`runpane panels list` lists tool panels inside one Pane session. Each panel with a saved agent session ID reports it as `resumeId`, with `resumeSource` (`agent-farm`, `configured`, or `agent`) naming the rule that reopens the conversation.", "`runpane panels output` reads bounded recent terminal output from one panel and strips common terminal control noise for agent use.", "`runpane panels input` sends exact input bytes to one terminal panel. Prefer `--input-file` for newlines, Ctrl-C, quotes, or shell-sensitive text.", "`runpane panes create --prompt` is an alias for `--initial-input`; request JSON and daemon payloads should use the canonical `initialInput` field.", "`runpane panes create --branch <name>` creates the Pane's worktree on exactly that new branch, slashes included (for example `agents/w5a`). The name is checked with `git check-ref-format --branch`, creation fails if the branch already exists, and Pane never renames it to make it unique. `--worktree-name` still names the directory and defaults to `--name`. `--base` is an alias for `--base-branch`, and `--prompt-file` for `--initial-input-file`. `panes create --base <ref> --branch <name> --prompt-file <file>` replaces `git worktree add` plus `panes adopt`. When the base is a remote-tracking branch (the default `origin/main`, or one named with `--base`), Pane fetches it first, waiting at most about 10 seconds, so the Pane starts at the remote's current tip. Each created item reports `base` (`ref`, `commit`, `refresh`); if the fetch fails the Pane still starts, from the local ref, and `base.notice` says so and how to catch up.", "`runpane panes adopt --launch` accepts `--prompt`, `--prompt-file`, `--wait-ready`, and `--ready-timeout-ms`, and reports `readiness`, `initialInput`, and `nextCommand` like `panes create`. A prompt without `--launch` is an error rather than being dropped.", "If composer submission cannot be verified without risking a duplicate, the create item is unsuccessful with `initialInput.staged`, `initialInput.attempts`, `initialInput.blocked.kind: submission_unverified`, and an actionable `nextCommand`. The CLI-facing `--prompt` alias maps to this canonical `initialInput` result.", "When running from WSL while Pane is installed on Windows, the Linux wrapper may look for a missing `/tmp/pane-daemon.../daemon.sock` or resolve to a Windows shim such as Volta. In that case invoke the Windows wrapper through PowerShell from a Windows cwd, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`.", "`runpane watch` waits for agent, Pane, panel, and PR events from the daemon journal without polling. `--follow` keeps watching with defaults tuned for an agent watching unattended (quiet, batched, and it ends itself after 3 hours with nothing happening); individual duration flags override these defaults. Cadence requires a named follow consumer; `--follow --since <generation>` has no consumer name and bypasses settling and batching. `--until-event` waits for one event worth waking for, prints it immediately without follow settling or batching, and exits 0. The defaults are listed in the contract under defaults.watch.", "A watch releases its pending slot when its client socket or named pipe disconnects. Re-arming the same named cursor takes over the previous request; the superseded watcher exits with a WATCH ERROR instead of competing for the cursor. Anonymous concurrent watchers retain the eight-wait limit. Each request also has a 125-second lease (slightly longer than the maximum 120-second long poll), so an abandoned request is reclaimed even if no disconnect arrives.", "The desktop app treats one consumer name specially: while a `runpane watch --as dictate` request is in flight, and for 30 seconds after the last one ends, Pane skips its own \"needs your input\" and \"finished\" desktop notifications, because [Dictate](https://github.com/parsakhaz/open-dictate) shows those events on its pill. When that watcher stops, Pane's notifications come back. The CLI's flags and output are unchanged.", "`sessions list` list durable named orchestration Sessions.", "`sessions create` create a durable named orchestration Session and its hidden terminal owner.", "`sessions get` read one durable named orchestration Session.", "`sessions update` update a Session overview from structured JSON.", "`sessions pin` and `sessions unpin` set the Session pin star through the existing UI update path. Create JSON accepts `isPinned` (default false); update JSON preserves the pin when the field is omitted.", "`sessions set-agent` switch the durable terminal agent for a named Session.", "`sessions associate` associate a user-visible Pane with a named Session.", "`sessions detach` detach a Pane from a named Session.", "`sessions overview` read a live status, activity, git, and pull request overview for a named Session. Each panel in `panes[].panels[]` carries its own latest `runpane report` as `report`, so one call shows what every worker last reported and when (`reportedAt`, next to the panel's `state` and `lastActivityAt`). When a report's summary is a complete JSON object, such as a status file sent with `--summary-file`, `report.data` holds it exactly as the worker gave it; Pane never reads, renames or validates its fields. A summary that is not a JSON object (plain text, an array, a scalar or invalid JSON), is nested more than 64 levels deep, or was truncated (`summaryTruncated`), has no `data`. A panel that never reported has no `report`. `panes[].report` is still the newest report among the Pane's panels.", "`runpane lock acquire|release|list` coordinate a resource shared between agents, such as one test account. The caller's Pane and panel own the lock; it is scoped to the owner's Session (or global outside one), renews for the same owner, and is released on TTL expiry, owner panel exit, or owner Pane archive. `--wait` blocks in the daemon until the lock comes free.", "`runpane loops list|create|update|run|pause|resume|delete` manage loops (scheduled tasks): a cron schedule that starts a new Pane in a fresh worktree for each run, or sends a prompt to a Session's agent. Loops are for large recurring jobs and run at most once an hour; for short waits, agents use their harness's own sleep and wake. See [LOOPS.md](LOOPS.md).", "`runpane agents start|status|send` finish the three common agent jobs in one call each: start an agent on a task (a new tab in the work's Pane with `--pane <id>`, or a new Pane for new work), check on it, and send it a follow-up.", "`runpane report --state ready|blocked|failed|done` is how a worker hands back its result. It stores the latest report on the worker's panel (state, `--pr`, `--head`, up to 16,000 characters of `--summary` or `--summary-file`, and the `--question` a blocked worker needs answered), journals an opt-in `agent.report` watch event (`REPORT <pane-name> pane <pane-id> panel <panel-id> ready pr#747 fc5dce9`; it skips the `--min-interval` batch), records it as Session activity, and shows it in `agents status`, `panels list`, and `sessions overview` (each panel's own report as `panes[].panels[].report`, with a JSON object summary as `data`, and the Pane's newest as `panes[].report`). Inside a Pane terminal the panel comes from `PANE_SESSION_ID` and `PANE_PANEL_ID`; elsewhere pass `--pane` and `--panel`. It prints how many watches were waiting for the report and received it (`Delivered to 1 waiting watcher.`, `liveWatchers` in JSON). Zero means nobody was waiting right now, not that the report is lost: it stays on the panel, and a named-cursor watch receives it when it next waits.", "Work sent to an agent through `runpane panels create`, `panes create` (with a prompt), or `panels submit` records that the sender waits for a `runpane report`, unless the request says `--source user` (Pane's own UI does) or `--no-expect-report`; `--expect-report` asks for one anyway. Typing into a tab never does. If the agent then goes ready or its panel exits without a report, Pane journals one opt-in `agent.report.missing` entry (`MISSING REPORT <pane-name> pane <pane-id> panel <panel-id> ready|exited`) whose `lastOutput` is the agent's last transcript reply or last screen lines; it skips the `--min-interval` batch and reaches only watchers that list it in `--kinds`. While the agent's screen shows background work (Claude's `· 1 shell` footer or a running background subagent row, Codex's `background terminal running` line), Pane waits and looks again every 10 seconds instead. `agent.blocked` entries carry `screenLines`, the prompt the agent waits on, and are journalled once a panel has stayed blocked for 2 seconds.", "The orchestrator guide prescribes submit without `--wait`, followed by its named watch; use one completion consumer. As an optional CLI route, `--wait` on `runpane panels submit`, `panels create`, and `panes create` turns the expected report on and blocks on that panel until the first `agent.report`, `agent.report.missing`, `agent.blocked`, `panel.exited`, or `pane.gone`, then prints one line of JSON (`dispatchWaitResult`): the outcome, ids, the report's state, summary, `summaryPath`, PR and head, `screenLines` for a prompt, or `lastOutput` for a missing report, never the transcript. It exits 0 for a report, 3 missing, 4 blocked, 5 exited or gone, and 124 when `--timeout <duration>` passes. It follows the journal from the position the daemon took before delivering the work, so nothing that happens right after delivery is missed. It reuses watch --until-event and returns indeterminate (exit 6) if the journal epoch changes or retained history is lost; inspect the panel and inbox before retrying. Report-expected dispatches are serialized per panel and refused before writing while a result or missing-output collection is outstanding. Answer a blocked panel with panels submit --no-expect-report, then watch for the original result.", "`runpane inbox [--session <id|name>] [--json]` lists what a Session's orchestrator has not acknowledged: reports, missing reports, and on-screen questions (a question clears itself once its panel moves on). `runpane inbox ack <item-id>...` or `--all --session <id|name>` clears items. An orchestrator runs it when it starts or resumes, to catch anything that finished while it was down; Pane never injects the inbox into its turns.", "`runpane panels resume --panel <panel-id>` restarts a stopped terminal panel in place, keeping its panel id: an agent panel relaunches with its resume command (Claude `--resume <session>`, `codex resume <session>`, Agent Farm `agent-farm run <profile> --resume <id>` with the ID Agent Farm printed; the result's `agentSessionId` names it), the same restart the app runs when it shows the panel, without taking focus. A running panel is left alone (`action: \"already-running\"`); one whose agent exited back to its shell is stopped, and resume runs its saved command again in that shell (`action: \"resumed\"`). If that command exits at once, `--wait-ready` returns `ok: false` with `reason.code: \"command-exited\"` and the error line it printed. `--session <id|name>` or `--all-stopped` resumes every stopped agent panel in that scope, `--concurrency` at a time (default 3), then, with `--wait-ready`, waits on the resumed panels together, and returns `{ resumed, alreadyRunning, failed, notReady, items[] }` with each panel's own result, readiness, and blocker or error. After a Pane restart, or once an agent exits back to its shell, stopped panels report `running: false` (`initialized` stays true while the shell lives) in `panels list`, `panels screen`, and `panels wait` (which returns `stopped: true` instead of timing out), and `nextCommand` points at `panels resume`. `runpane watch` reports them as `panel.stopped` (`STOPPED ...`) when `--kinds` lists that kind; other consumers and `workspace state` see `agent.unknown` with `running: false`, never `agent.ready`.", "`runpane panels last-message --panel <panel-id>` reads a Claude or Codex agent's last reply from its transcript (up to `--limit` characters, default 20,000, keeping the end and reporting `truncated`). It never scrapes the screen: without a transcript it prints `{ ok: false, reason: \"transcript-unavailable\" }` and exits 1.", "Commands with a contract `daemonAction` (the `panes` git, script, restore, and move commands, `folders list|create`, and `links open`) call the same Pane daemon channel as the matching button in the app and print `{ ok, data, error }`. Destructive ones add a pane:// `link` to review the Pane.", "`runpane links create` builds `pane://open?...` links; opening one in Pane selects what it names and never changes Pane state.", "`runpane docs search|read` search and read Pane docs, help, and installed Pane Chat skills offline. They ship in the npm package and the Pane app only.", "`runpane handoff` hands a task to another agent on this or another of your machines. The sending agent writes the note from `runpane handoff --template` (goal, current state, done and verified, in progress, next steps, decisions and constraints, open questions, how to verify, git state); `runpane handoff \"claude opus on parsas-macbook-pro\" --note-file ~/handoff.md` checks every section is filled in, requires the branch to be pushed (or pushes it with `--push`, never forcing), writes the note to that machine's `~/.pane/handoffs/` and starts the agent in a new Pane branched from the sender's branch. When the sender is a Pane tab running a Claude, Codex, Cursor or OpenCode session and the receiver is the same agent, the handoff carries that session: on another machine its files are copied into that machine's agent store and the receiver resumes the same id; on this machine the receiver resumes a fork, because two agents never resume one session on one machine. The receiver starts with no prompt, and the CLI runs the continuity check and reports JSON `continuity.result` `continued`, `inconclusive` (exit 0; `next` gives a probe question) or `not-continued` (exit 1; the receiver is kept and `next` gives the `--note-only` command). `--note-only`, a different agent, or a tab with no carried session starts a fresh agent with the note (`fresh-agent`). JSON `continuity` is `{ carried, result, agent, sessionId, resumedId, fork, files, bytes, checks: { resumedById, restartResumes, historyLoaded, originalUntouched?, originalAppended? }, reason, next }`: `sessionId` is the sender's session, `resumedId` the id the receiver resumes (the fork's on this machine), `checks` are the continuity checks (`historyLoaded` is null when there was nothing to compare; `originalUntouched` is set for forks), and a dry run sets `carried`, `sessionId`, `fork`, `files` and `bytes` with no `result`. After `continued` or `inconclusive` the sending agent ends its turn and makes no more changes on the branch. An OpenCode session travels as its export: `opencode export` on this machine, then `opencode import` inside the receiving repository there, and an OpenCode receiver is accepted only to continue an OpenCode session. A Cursor session is carried only to another machine, best effort since Cursor's store is undocumented: Cursor has no fork, and a copied chat still writes to the original, so on this machine the result is `not-continued` and nothing is started. A destination's agent store is assumed at its default location (`~/.claude`, `~/.codex`, `~/.cursor`); a copy already there is replaced only when the sender's holds all of it and no agent there runs it, otherwise nothing is copied and the result is `not-continued`. A destination Pane too old to resume a carried session is refused before anything is sent (`ERR_HANDOFF_RESUME_UNSUPPORTED`). From a Session's terminal it skips git and creates a Session with the same name, goal and agent on the other machine instead; a same-agent Session resumes the sender's conversation when first opened. The receiver reports back to the sender's panel.", "`runpane pr watch`: Register durable GitHub PR monitoring for a Pane.", "`runpane pr unwatch`: Remove a Pane’s explicit PR registration.", "`runpane pr list`: List PR registrations and stopped watches."];
|
|
1434
1522
|
readonly wrapperFlagNote: "The top-level `runpane --version` form prints the wrapper version. The install subcommand form `runpane install --version vX.Y.Z` selects a Pane release.";
|
|
1435
1523
|
readonly localControlFlagNote: "`runpane doctor --json`, `runpane repos list`, `runpane panes ...`, and `runpane panels ...` commands use or describe the local framed daemon socket/pipe for a running Pane app. `--pane-dir` points the wrapper at a non-default Pane data directory, such as `PANE_DIR=~/.pane_test` in development. `runpane agent-context` is local/offline and can be used before Pane is running. `agent-context` and `version` accept and ignore `--pane-dir`, so one `--pane-dir` can be passed to every runpane command. In a Pane repository checkout, if `runpane` is not on PATH, build the local wrapper with `pnpm --filter runpane build` and run it with patched Node 22.23.4+ (22.x), 24.22.1+ (24.x), or 26.12.1+ (26.x), for example `node packages/runpane/dist/cli.js doctor --json`. From WSL, if the user runs Windows Pane, call the Windows wrapper through `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane ...'` so the command can reach the Windows named-pipe daemon and avoid UNC cwd issues.";
|
|
1436
1524
|
readonly daemonFlagNote: "Unknown daemon flags should be forwarded rather than dropped so newer Pane versions can extend `--remote-setup` without requiring an immediate wrapper release. Unknown flags for non-daemon commands should fail clearly.";
|
|
@@ -1438,10 +1526,10 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
1438
1526
|
readonly publishingCredentials: readonly ["Local implementation, build, and dry-run validation do not need npm or PyPI API tokens.", "Release publishing should prefer npm Trusted Publishing and PyPI Trusted Publishing from GitHub Actions.", "Fallback `NPM_TOKEN` or `PYPI_API_TOKEN` credentials may be used for first package reservation or manual publication only. They must be supplied through local environment variables or GitHub Actions secrets, never committed, and revoked or rotated after use."];
|
|
1439
1527
|
};
|
|
1440
1528
|
readonly testFixtures: {
|
|
1441
|
-
readonly parserSamples: readonly [readonly ["setup"], readonly ["install"], readonly ["install", "client", "--version", "v2.2.8", "--format", "dmg", "--download-dir", "/tmp/pane-downloads", "--dry-run", "--yes"], readonly ["install", "daemon", "--label", "VM", "--prefer-tunnel", "ssh", "--channel", "nightly", "--base-url", "https://example.test", "--pane-dir", "/tmp/pane", "--listen-port", "4555", "--auto-listen-port", "--print-only", "--repo-ref", "main", "--unknown-future-flag", "future-value", "--dry-run", "--verbose"], readonly ["update", "--version", "latest", "--format", "appimage", "--pane-path", "/usr/bin/pane", "--dry-run"], readonly ["doctor", "--pane-path", "/usr/bin/pane", "--format", "zip", "--verbose"], readonly ["doctor", "--json", "--pane-dir", "/tmp/pane"], readonly ["doctor", "--report", "--title", "watch failed", "--body-file", "/tmp/watch-evidence.txt", "--json"], readonly ["watch", "--as", "monitor", "--from", "earliest", "--follow", "--heartbeat", "60s", "--idle-after", "600000", "--ready-settle", "180000", "--blocked-settle", "30000", "--min-interval", "600000", "--expire-after", "10800000", "--exclude-pane", "pane-old", "--kinds", "agent.ready,agent.idle", "--include-held-input", "--self-test"], readonly ["daemon", "repair", "--pane-dir", "/tmp/pane-remote", "--yes", "--json"], readonly ["agent-context"], readonly ["agent-context", "--command", "panes create", "--json"], readonly ["repos", "list", "--json", "--pane-dir", "/tmp/pane"], readonly ["repos", "add", "--path", "/tmp/repo", "--name", "Repo", "--dry-run", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panes", "list", "--repo", "active", "--json"], readonly ["panes", "cost", "--pane", "session-1", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--source", "agent", "--pinned", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--source", "agent", "--no-pinned", "--no-associate", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--from-json", "-", "--yes", "--json"], readonly ["panes", "archive", "--pane", "session-1", "--force", "--source", "agent", "--yes", "--json"], readonly ["panes", "pin", "--pane", "session-1", "--yes", "--json"], readonly ["panes", "unpin", "--pane", "session-1", "--yes", "--json"], readonly ["panes", "rename", "--pane", "session-1", "--name", "issue-393", "--yes", "--json"], readonly ["panes", "focus", "--pane", "session-1", "--panel", "panel-1", "--source", "user", "--yes", "--json"], readonly ["panels", "list", "--pane", "session-1", "--json"], readonly ["panels", "output", "--panel", "panel-1", "--limit", "200", "--json"], readonly ["panels", "input", "--panel", "panel-1", "--text", "Continue\\n", "--yes", "--json"], readonly ["--version"], readonly ["agents", "doctor", "--agent", "codex", "--repo", "active", "--json"], readonly ["panes", "create", "--from-json", "-", "--source", "agent", "--focus", "--wait-ready", "--ready-timeout-ms", "45000", "--concurrency", "2", "--yes", "--json"], readonly ["panels", "screen", "--panel", "panel-1", "--limit", "80", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "2", "--yes", "--json"], readonly ["panels", "wait", "--panel", "panel-1", "--for", "text", "--contains", "ready", "--timeout-ms", "30000", "--interval-ms", "500", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--source", "agent", "--no-focus", "--wait-ready", "--ready-timeout-ms", "15000", "--yes", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--focus", "--yes", "--json"], readonly ["panels", "submit-composer", "--panel", "panel-1", "--strategy", "auto", "--yes", "--json"], readonly ["sessions", "list", "--json"], readonly ["sessions", "get", "--session", "demo", "--json"], readonly ["sessions", "update", "--session", "demo", "--from-json", "-"], readonly ["panels", "submit", "--panel=panel-1", "--text=- [ ] item", "--yes", "--json"], readonly ["panes", "commit", "--pane", "pane-1", "--message", "fix: title\n\nbody", "--yes", "--json"], readonly ["links", "create", "--pane", "pane-1", "--panel", "panel-1", "--json"], readonly ["links", "open", "--url=pane://open?pane=pane-1", "--yes"], readonly ["mcp", "--toolsets", "core,git", "--read-only"], readonly ["docs", "search", "--query", "archive a pane", "--limit", "3"], readonly ["docs", "read", "--doc", "docs/PANE_MCP.md"], readonly ["agents", "start", "--repo", "active", "--name", "fix-login", "--agent", "claude", "--prompt", "Fix the login redirect", "--yes", "--json"], readonly ["agents", "send", "--pane", "pane-1", "--text=- [ ] item", "--yes"], readonly ["panels", "input", "--panel", "panel-1", "--keys", "down,enter", "--yes", "--json"], readonly ["panes", "squash-rebase", "--pane", "pane-1", "--message", "feat: land it", "--yes", "--json"], readonly ["folders", "create", "--repo", "3", "--name", "Reviews", "--yes"], readonly ["panes", "move", "--pane", "pane-1", "--folder", "folder-9", "--yes", "--json"], readonly ["watch", "--follow", "--json", "--pane-dir", "/tmp/pane"], readonly ["watch", "--follow"], readonly ["watch", "--session", "__orchestration_session_1b4e28ba-2fa1-11d2-883f-0016d3cca427__", "--follow", "--json", "--kinds", "agent.ready,agent.blocked,pane.associated,pane.detached,pr.conflicted,pr.checks,pr.merged", "--ready-settle", "180000"], readonly ["watch", "--session=Release train", "--as", "release-watch", "--exclude-pane", "pane-old"], readonly ["agent-context", "--command", "panes create", "--json", "--pane-dir", "/tmp/pane"], readonly ["agent-context", "--pane-dir=/tmp/pane"], readonly ["version", "--pane-dir", "/tmp/pane"], readonly ["panes", "create", "--repo", "active", "--name", "w5a", "--agent", "claude", "--base-branch", "origin/release", "--source", "agent", "--no-focus", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--tool-command", "wrapper codex-run", "--wait-ready", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "farm", "--tool-command", "agent-farm run free-range", "--agent", "claude", "--prompt", "Plan", "--yes", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--input-file", "brief.md", "--as-file-pointer", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "long", "--agent", "claude", "--initial-input-file", "brief.md", "--as-file-pointer", "--dry-run", "--yes", "--json"], readonly ["report", "--state", "ready", "--pr", "747", "--head", "FC5DCE9", "--summary", "Done: tests pass", "--json"], readonly ["report", "--state", "blocked", "--question", "Which API version?", "--pane", "session-1", "--panel", "panel-1", "--summary-file", "-"], readonly ["report", "--state=done", "--summary-file=/tmp/report.md", "--pane-dir", "/tmp/pane"], readonly ["panels", "resume", "--all-stopped", "--wait-ready", "--concurrency", "2", "--yes", "--json"], readonly ["panels", "resume", "--panel", "panel-1", "--wait-ready", "--ready-timeout-ms", "45000", "--yes", "--json"], readonly ["panels", "last-message", "--panel", "panel-1", "--limit", "5000", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "w5a", "--base", "release/foo", "--branch", "agents/w5a", "--agent", "claude", "--prompt-file", "prompt.md", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "w5b", "--base-branch", "origin/main", "--branch", "agents/w5b", "--worktree-name", "w5b-dir", "--tool-command", "bash", "--initial-input-file", "-", "--dry-run", "--yes", "--json"], readonly ["panes", "archive", "--pane", "session-1", "--remove-worktree", "--yes", "--json"], readonly ["panes", "archive", "--session", "refactor", "--merged", "--dry-run", "--json"], readonly ["panes", "archive", "--session", "refactor", "--merged", "--remove-worktree", "--yes"], readonly ["lock", "acquire", "--name", "testing-account", "--ttl", "30m", "--wait", "1800000", "--note", "call QA", "--json"], readonly ["lock", "acquire", "--name", "staging-db", "--ttl", "1500", "--pane", "session-1", "--panel", "panel-1", "--pane-dir", "/tmp/pane"], readonly ["lock", "acquire", "--name=db", "--ttl=2h"], readonly ["lock", "release", "--name", "testing-account", "--force", "--session", "Release QA", "--json"], readonly ["lock", "list", "--session", "Release QA", "--json"], readonly ["lock", "--help"], readonly ["panels", "open", "--pane", "session-1", "--file", "plan.html", "--title", "Plan", "--split", "--no-focus", "--source", "agent", "--yes", "--json"], readonly ["panels", "open", "--url", "http://localhost:3000", "--tab", "--yes", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "correction", "--interrupt", "--yes", "--json"], readonly ["watch", "--as", "orch", "--until-event", "--json", "--kinds", "agent.report,agent.blocked,panel.exited,pane.gone", "--timeout-ms", "600000"], readonly ["pr", "watch", "--pane", "worker", "--url", "https://github.com/acme/app/pull/7"], readonly ["pr", "unwatch", "--pane", "worker", "--url", "https://github.com/acme/app/pull/7"], readonly ["pr", "list", "--pane", "worker"], readonly ["watch", "--follow", "--ready-settle", "5s", "--expire-after", "0"], readonly ["watch", "--until-event", "--timeout-ms", "30s"], readonly ["watch", "--timeout-ms", "off"], readonly ["watch", "--since", "42", "--epoch", "test-epoch", "--until-event", "--json"], readonly ["watch", "--follow", "--ready-settle", "5s", "--expire-after", "off"], readonly ["watch", "--follow", "--ready-settle", "5s", "--blocked-settle", "2s", "--min-interval", "1m", "--idle-after", "20m", "--expire-after", "off", "--heartbeat", "30s"], readonly ["watch", "--follow", "--since", "42", "--epoch", "test-epoch"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "go", "--expect-report", "--yes", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "claude", "--expect-report", "--yes"], readonly ["panes", "create", "--repo", "active", "--name", "feat", "--agent", "codex", "--expect-report", "--yes"], readonly ["inbox", "--session", "Release", "--json"], readonly ["inbox", "ack", "in-1a2b3c4d", "in-5e6f7a8b", "--session", "Release", "--json"], readonly ["inbox", "ack", "--all", "--session", "Release"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "fyi", "--no-expect-report", "--yes"], readonly ["panels", "submit", "--panel", "panel-1", "--input-file", "prompt.md", "--as-file-pointer", "--wait", "--yes"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "Red", "--wait", "--timeout", "30m", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "feat", "--agent", "claude", "--prompt-file", "task.md", "--wait", "--yes"], readonly ["lock", "acquire", "--name", "deploy", "--wait", "5000"]];
|
|
1529
|
+
readonly parserSamples: readonly [readonly ["setup"], readonly ["install"], readonly ["install", "client", "--version", "v2.2.8", "--format", "dmg", "--download-dir", "/tmp/pane-downloads", "--dry-run", "--yes"], readonly ["install", "daemon", "--label", "VM", "--prefer-tunnel", "ssh", "--channel", "nightly", "--base-url", "https://example.test", "--pane-dir", "/tmp/pane", "--listen-port", "4555", "--auto-listen-port", "--print-only", "--repo-ref", "main", "--unknown-future-flag", "future-value", "--dry-run", "--verbose"], readonly ["update", "--version", "latest", "--format", "appimage", "--pane-path", "/usr/bin/pane", "--dry-run"], readonly ["doctor", "--pane-path", "/usr/bin/pane", "--format", "zip", "--verbose"], readonly ["doctor", "--json", "--pane-dir", "/tmp/pane"], readonly ["doctor", "--report", "--title", "watch failed", "--body-file", "/tmp/watch-evidence.txt", "--json"], readonly ["watch", "--as", "monitor", "--from", "earliest", "--follow", "--heartbeat", "60s", "--idle-after", "600000", "--ready-settle", "180000", "--blocked-settle", "30000", "--min-interval", "600000", "--expire-after", "10800000", "--exclude-pane", "pane-old", "--kinds", "agent.ready,agent.idle", "--include-held-input", "--self-test"], readonly ["daemon", "repair", "--pane-dir", "/tmp/pane-remote", "--yes", "--json"], readonly ["agent-context"], readonly ["agent-context", "--command", "panes create", "--json"], readonly ["repos", "list", "--json", "--pane-dir", "/tmp/pane"], readonly ["repos", "add", "--path", "/tmp/repo", "--name", "Repo", "--dry-run", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panes", "list", "--repo", "active", "--json"], readonly ["panes", "cost", "--pane", "session-1", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--source", "agent", "--pinned", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--source", "agent", "--no-pinned", "--no-associate", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--from-json", "-", "--yes", "--json"], readonly ["panes", "archive", "--pane", "session-1", "--force", "--source", "agent", "--yes", "--json"], readonly ["panes", "pin", "--pane", "session-1", "--yes", "--json"], readonly ["panes", "unpin", "--pane", "session-1", "--yes", "--json"], readonly ["panes", "rename", "--pane", "session-1", "--name", "issue-393", "--yes", "--json"], readonly ["panes", "focus", "--pane", "session-1", "--panel", "panel-1", "--source", "user", "--yes", "--json"], readonly ["panels", "list", "--pane", "session-1", "--json"], readonly ["panels", "output", "--panel", "panel-1", "--limit", "200", "--json"], readonly ["panels", "input", "--panel", "panel-1", "--text", "Continue\\n", "--yes", "--json"], readonly ["--version"], readonly ["agents", "doctor", "--agent", "codex", "--repo", "active", "--json"], readonly ["panes", "create", "--from-json", "-", "--source", "agent", "--focus", "--wait-ready", "--ready-timeout-ms", "45000", "--concurrency", "2", "--yes", "--json"], readonly ["panels", "screen", "--panel", "panel-1", "--limit", "80", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "2", "--yes", "--json"], readonly ["panels", "wait", "--panel", "panel-1", "--for", "text", "--contains", "ready", "--timeout-ms", "30000", "--interval-ms", "500", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--source", "agent", "--no-focus", "--wait-ready", "--ready-timeout-ms", "15000", "--yes", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--focus", "--yes", "--json"], readonly ["panels", "submit-composer", "--panel", "panel-1", "--strategy", "auto", "--yes", "--json"], readonly ["sessions", "list", "--json"], readonly ["sessions", "get", "--session", "demo", "--json"], readonly ["sessions", "update", "--session", "demo", "--from-json", "-"], readonly ["panels", "submit", "--panel=panel-1", "--text=- [ ] item", "--yes", "--json"], readonly ["panes", "commit", "--pane", "pane-1", "--message", "fix: title\n\nbody", "--yes", "--json"], readonly ["links", "create", "--pane", "pane-1", "--panel", "panel-1", "--json"], readonly ["links", "open", "--url=pane://open?pane=pane-1", "--yes"], readonly ["mcp", "--toolsets", "core,git", "--read-only"], readonly ["docs", "search", "--query", "archive a pane", "--limit", "3"], readonly ["docs", "read", "--doc", "docs/PANE_MCP.md"], readonly ["agents", "start", "--repo", "active", "--name", "fix-login", "--agent", "claude", "--prompt", "Fix the login redirect", "--yes", "--json"], readonly ["agents", "send", "--pane", "pane-1", "--text=- [ ] item", "--yes"], readonly ["panels", "input", "--panel", "panel-1", "--keys", "down,enter", "--yes", "--json"], readonly ["panes", "squash-rebase", "--pane", "pane-1", "--message", "feat: land it", "--yes", "--json"], readonly ["folders", "create", "--repo", "3", "--name", "Reviews", "--yes"], readonly ["panes", "move", "--pane", "pane-1", "--folder", "folder-9", "--yes", "--json"], readonly ["watch", "--follow", "--json", "--pane-dir", "/tmp/pane"], readonly ["watch", "--follow"], readonly ["watch", "--session", "__orchestration_session_1b4e28ba-2fa1-11d2-883f-0016d3cca427__", "--follow", "--json", "--kinds", "agent.ready,agent.blocked,pane.associated,pane.detached,pr.conflicted,pr.checks,pr.merged", "--ready-settle", "180000"], readonly ["watch", "--session=Release train", "--as", "release-watch", "--exclude-pane", "pane-old"], readonly ["agent-context", "--command", "panes create", "--json", "--pane-dir", "/tmp/pane"], readonly ["agent-context", "--pane-dir=/tmp/pane"], readonly ["version", "--pane-dir", "/tmp/pane"], readonly ["panes", "create", "--repo", "active", "--name", "w5a", "--agent", "claude", "--base-branch", "origin/release", "--source", "agent", "--no-focus", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "codex", "--tool-command", "wrapper codex-run", "--wait-ready", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "farm", "--tool-command", "agent-farm run free-range", "--agent", "claude", "--prompt", "Plan", "--yes", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--input-file", "brief.md", "--as-file-pointer", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "long", "--agent", "claude", "--initial-input-file", "brief.md", "--as-file-pointer", "--dry-run", "--yes", "--json"], readonly ["report", "--state", "ready", "--pr", "747", "--head", "FC5DCE9", "--summary", "Done: tests pass", "--json"], readonly ["report", "--state", "blocked", "--question", "Which API version?", "--pane", "session-1", "--panel", "panel-1", "--summary-file", "-"], readonly ["report", "--state=done", "--summary-file=/tmp/report.md", "--pane-dir", "/tmp/pane"], readonly ["panels", "resume", "--all-stopped", "--wait-ready", "--concurrency", "2", "--yes", "--json"], readonly ["panels", "resume", "--panel", "panel-1", "--wait-ready", "--ready-timeout-ms", "45000", "--yes", "--json"], readonly ["panels", "last-message", "--panel", "panel-1", "--limit", "5000", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "w5a", "--base", "release/foo", "--branch", "agents/w5a", "--agent", "claude", "--prompt-file", "prompt.md", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "w5b", "--base-branch", "origin/main", "--branch", "agents/w5b", "--worktree-name", "w5b-dir", "--tool-command", "bash", "--initial-input-file", "-", "--dry-run", "--yes", "--json"], readonly ["panes", "archive", "--pane", "session-1", "--remove-worktree", "--yes", "--json"], readonly ["panes", "archive", "--session", "refactor", "--merged", "--dry-run", "--json"], readonly ["panes", "archive", "--session", "refactor", "--merged", "--remove-worktree", "--yes"], readonly ["lock", "acquire", "--name", "testing-account", "--ttl", "30m", "--wait", "1800000", "--note", "call QA", "--json"], readonly ["lock", "acquire", "--name", "staging-db", "--ttl", "1500", "--pane", "session-1", "--panel", "panel-1", "--pane-dir", "/tmp/pane"], readonly ["lock", "acquire", "--name=db", "--ttl=2h"], readonly ["lock", "release", "--name", "testing-account", "--force", "--session", "Release QA", "--json"], readonly ["lock", "list", "--session", "Release QA", "--json"], readonly ["lock", "--help"], readonly ["panels", "open", "--pane", "session-1", "--file", "plan.html", "--title", "Plan", "--split", "--no-focus", "--source", "agent", "--yes", "--json"], readonly ["panels", "open", "--url", "http://localhost:3000", "--tab", "--yes", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "correction", "--interrupt", "--yes", "--json"], readonly ["watch", "--as", "orch", "--until-event", "--json", "--kinds", "agent.report,agent.blocked,panel.exited,pane.gone", "--timeout-ms", "600000"], readonly ["pr", "watch", "--pane", "worker", "--url", "https://github.com/acme/app/pull/7"], readonly ["pr", "unwatch", "--pane", "worker", "--url", "https://github.com/acme/app/pull/7"], readonly ["pr", "list", "--pane", "worker"], readonly ["watch", "--follow", "--ready-settle", "5s", "--expire-after", "0"], readonly ["watch", "--until-event", "--timeout-ms", "30s"], readonly ["watch", "--timeout-ms", "off"], readonly ["watch", "--since", "42", "--epoch", "test-epoch", "--until-event", "--json"], readonly ["watch", "--follow", "--ready-settle", "5s", "--expire-after", "off"], readonly ["watch", "--follow", "--ready-settle", "5s", "--blocked-settle", "2s", "--min-interval", "1m", "--idle-after", "20m", "--expire-after", "off", "--heartbeat", "30s"], readonly ["watch", "--follow", "--since", "42", "--epoch", "test-epoch"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "go", "--expect-report", "--yes", "--json"], readonly ["panels", "create", "--pane", "pane-1", "--agent", "claude", "--expect-report", "--yes"], readonly ["panes", "create", "--repo", "active", "--name", "feat", "--agent", "codex", "--expect-report", "--yes"], readonly ["inbox", "--session", "Release", "--json"], readonly ["inbox", "ack", "in-1a2b3c4d", "in-5e6f7a8b", "--session", "Release", "--json"], readonly ["inbox", "ack", "--all", "--session", "Release"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "fyi", "--no-expect-report", "--yes"], readonly ["panels", "submit", "--panel", "panel-1", "--input-file", "prompt.md", "--as-file-pointer", "--wait", "--yes"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "Red", "--wait", "--timeout", "30m", "--yes", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "feat", "--agent", "claude", "--prompt-file", "task.md", "--wait", "--yes"], readonly ["lock", "acquire", "--name", "deploy", "--wait", "5000"], readonly ["loops", "create", "--repo", "active", "--name", "nightly", "--cron", "0 3 * * *", "--agent", "claude", "--prompt", "Sweep bugs", "--worktree-name", "nightly-sweep", "--paused", "--dry-run", "--yes", "--json"], readonly ["loops", "create", "--repo=2", "--name=deps", "--cron=0 9 * * 1", "--tool-command", "./scripts/nightly-report.sh", "--prompt-file", "-"], readonly ["loops", "create", "--session", "new", "--name", "triage", "--cron", "0 9 * * 1-5", "--agent", "claude", "--prompt", "Triage", "--yes"], readonly ["loops", "update", "--loop", "loop-1", "--cron", "0 4 * * *", "--yes"], readonly ["loops", "update", "--loop", "loop-1", "--session", "Nightly", "--yes"], readonly ["loops", "run", "--loop=loop-1", "--yes", "--json"], readonly ["loops", "pause", "--loop", "loop-1", "--pane-dir", "/tmp/pane"], readonly ["loops", "list", "--json"], readonly ["loops", "--help"]];
|
|
1442
1530
|
readonly topLevelHelpIncludes: readonly ["runpane setup", "runpane install", "runpane update", "runpane version", "runpane doctor", "runpane agent-context", "runpane repos list", "runpane repos add", "runpane panes list", "runpane panes create", "runpane panes archive", "runpane panels create", "runpane panels list", "runpane panels output", "runpane panels input", "runpane agents doctor", "runpane panels screen", "runpane panels submit", "runpane panels submit-composer", "runpane panels wait", "runpane doctor --json", "runpane agent-context --json", "Agent discovery:", "Common commands:"];
|
|
1443
|
-
readonly npmHelpIncludes: readonly ["pnpm dlx runpane@latest", "npx --yes runpane@latest"];
|
|
1444
|
-
readonly pipHelpIncludes: readonly ["pipx run runpane", "python -m pip install runpane && python -m runpane setup"];
|
|
1531
|
+
readonly npmHelpIncludes: readonly ["pnpm dlx runpane@latest", "npx --yes runpane@latest", "runpane loops list"];
|
|
1532
|
+
readonly pipHelpIncludes: readonly ["pipx run runpane", "python -m pip install runpane && python -m runpane setup", "python -m runpane loops list"];
|
|
1445
1533
|
readonly installHelpIncludes: readonly ["--version <latest|vX.Y.Z>", "--format <auto|appimage|deb|dmg|zip|exe>", "--download-dir <path>", "--pane-path <path>", "--label <name>", "--prefer-tunnel <tailscale|ssh|manual|auto>", "--repo-ref <ref>"];
|
|
1446
1534
|
};
|
|
1447
1535
|
readonly jsonSchemas: {
|
|
@@ -5821,12 +5909,192 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
5821
5909
|
};
|
|
5822
5910
|
readonly additionalProperties: false;
|
|
5823
5911
|
};
|
|
5912
|
+
readonly loopInput: {
|
|
5913
|
+
readonly type: "object";
|
|
5914
|
+
readonly required: readonly ["name", "cron", "enabled"];
|
|
5915
|
+
readonly properties: {
|
|
5916
|
+
readonly id: {
|
|
5917
|
+
readonly type: "string";
|
|
5918
|
+
};
|
|
5919
|
+
readonly name: {
|
|
5920
|
+
readonly type: "string";
|
|
5921
|
+
readonly minLength: 1;
|
|
5922
|
+
};
|
|
5923
|
+
readonly projectId: {
|
|
5924
|
+
readonly type: "number";
|
|
5925
|
+
};
|
|
5926
|
+
readonly orchestrationSessionId: {
|
|
5927
|
+
readonly type: "string";
|
|
5928
|
+
};
|
|
5929
|
+
readonly cron: {
|
|
5930
|
+
readonly type: "string";
|
|
5931
|
+
};
|
|
5932
|
+
readonly agent: {
|
|
5933
|
+
readonly enum: readonly ["claude", "codex", "cursor"];
|
|
5934
|
+
};
|
|
5935
|
+
readonly toolCommand: {
|
|
5936
|
+
readonly type: "string";
|
|
5937
|
+
};
|
|
5938
|
+
readonly initialInput: {
|
|
5939
|
+
readonly type: "string";
|
|
5940
|
+
};
|
|
5941
|
+
readonly worktreeTemplate: {
|
|
5942
|
+
readonly type: "string";
|
|
5943
|
+
};
|
|
5944
|
+
readonly enabled: {
|
|
5945
|
+
readonly type: "boolean";
|
|
5946
|
+
};
|
|
5947
|
+
};
|
|
5948
|
+
readonly additionalProperties: false;
|
|
5949
|
+
};
|
|
5950
|
+
readonly loop: {
|
|
5951
|
+
readonly type: "object";
|
|
5952
|
+
readonly required: readonly ["id", "name", "cron", "enabled", "createdAtMs", "nextRunAtMs", "scheduleText", "runs"];
|
|
5953
|
+
readonly properties: {
|
|
5954
|
+
readonly id: {
|
|
5955
|
+
readonly type: "string";
|
|
5956
|
+
};
|
|
5957
|
+
readonly name: {
|
|
5958
|
+
readonly type: "string";
|
|
5959
|
+
readonly minLength: 1;
|
|
5960
|
+
};
|
|
5961
|
+
readonly projectId: {
|
|
5962
|
+
readonly type: "number";
|
|
5963
|
+
};
|
|
5964
|
+
readonly orchestrationSessionId: {
|
|
5965
|
+
readonly type: "string";
|
|
5966
|
+
};
|
|
5967
|
+
readonly cron: {
|
|
5968
|
+
readonly type: "string";
|
|
5969
|
+
};
|
|
5970
|
+
readonly agent: {
|
|
5971
|
+
readonly enum: readonly ["claude", "codex", "cursor"];
|
|
5972
|
+
};
|
|
5973
|
+
readonly toolCommand: {
|
|
5974
|
+
readonly type: "string";
|
|
5975
|
+
};
|
|
5976
|
+
readonly initialInput: {
|
|
5977
|
+
readonly type: "string";
|
|
5978
|
+
};
|
|
5979
|
+
readonly worktreeTemplate: {
|
|
5980
|
+
readonly type: "string";
|
|
5981
|
+
};
|
|
5982
|
+
readonly enabled: {
|
|
5983
|
+
readonly type: "boolean";
|
|
5984
|
+
};
|
|
5985
|
+
readonly createdAtMs: {
|
|
5986
|
+
readonly type: "number";
|
|
5987
|
+
};
|
|
5988
|
+
readonly nextRunAtMs: {
|
|
5989
|
+
readonly type: readonly ["number", "null"];
|
|
5990
|
+
};
|
|
5991
|
+
readonly scheduleText: {
|
|
5992
|
+
readonly type: "string";
|
|
5993
|
+
};
|
|
5994
|
+
readonly runs: {
|
|
5995
|
+
readonly type: "array";
|
|
5996
|
+
readonly items: {
|
|
5997
|
+
readonly type: "object";
|
|
5998
|
+
readonly required: readonly ["id", "loopId", "slotAtMs", "trigger", "status", "error", "sessionId"];
|
|
5999
|
+
readonly properties: {
|
|
6000
|
+
readonly id: {
|
|
6001
|
+
readonly type: "string";
|
|
6002
|
+
};
|
|
6003
|
+
readonly loopId: {
|
|
6004
|
+
readonly type: "string";
|
|
6005
|
+
};
|
|
6006
|
+
readonly slotAtMs: {
|
|
6007
|
+
readonly type: "number";
|
|
6008
|
+
};
|
|
6009
|
+
readonly trigger: {
|
|
6010
|
+
readonly enum: readonly ["schedule", "manual"];
|
|
6011
|
+
};
|
|
6012
|
+
readonly status: {
|
|
6013
|
+
readonly enum: readonly ["started", "failed", "skipped"];
|
|
6014
|
+
};
|
|
6015
|
+
readonly error: {
|
|
6016
|
+
readonly type: readonly ["string", "null"];
|
|
6017
|
+
};
|
|
6018
|
+
readonly sessionId: {
|
|
6019
|
+
readonly type: readonly ["string", "null"];
|
|
6020
|
+
};
|
|
6021
|
+
};
|
|
6022
|
+
readonly additionalProperties: false;
|
|
6023
|
+
};
|
|
6024
|
+
};
|
|
6025
|
+
};
|
|
6026
|
+
readonly additionalProperties: false;
|
|
6027
|
+
};
|
|
6028
|
+
readonly loopListResult: {
|
|
6029
|
+
readonly type: "object";
|
|
6030
|
+
readonly required: readonly ["ok", "loops"];
|
|
6031
|
+
readonly properties: {
|
|
6032
|
+
readonly ok: {
|
|
6033
|
+
readonly const: true;
|
|
6034
|
+
};
|
|
6035
|
+
readonly loops: {
|
|
6036
|
+
readonly type: "array";
|
|
6037
|
+
readonly items: {
|
|
6038
|
+
readonly $ref: "#/jsonSchemas/loop";
|
|
6039
|
+
};
|
|
6040
|
+
};
|
|
6041
|
+
};
|
|
6042
|
+
readonly additionalProperties: false;
|
|
6043
|
+
};
|
|
6044
|
+
readonly loopResult: {
|
|
6045
|
+
readonly type: "object";
|
|
6046
|
+
readonly required: readonly ["ok", "loop"];
|
|
6047
|
+
readonly properties: {
|
|
6048
|
+
readonly ok: {
|
|
6049
|
+
readonly const: true;
|
|
6050
|
+
};
|
|
6051
|
+
readonly loop: {
|
|
6052
|
+
readonly $ref: "#/jsonSchemas/loop";
|
|
6053
|
+
};
|
|
6054
|
+
};
|
|
6055
|
+
readonly additionalProperties: false;
|
|
6056
|
+
};
|
|
6057
|
+
readonly loopDryRunResult: {
|
|
6058
|
+
readonly type: "object";
|
|
6059
|
+
readonly required: readonly ["ok", "dryRun", "input", "scheduleText", "nextRunAtMs"];
|
|
6060
|
+
readonly properties: {
|
|
6061
|
+
readonly ok: {
|
|
6062
|
+
readonly const: true;
|
|
6063
|
+
};
|
|
6064
|
+
readonly dryRun: {
|
|
6065
|
+
readonly const: true;
|
|
6066
|
+
};
|
|
6067
|
+
readonly input: {
|
|
6068
|
+
readonly $ref: "#/jsonSchemas/loopInput";
|
|
6069
|
+
};
|
|
6070
|
+
readonly scheduleText: {
|
|
6071
|
+
readonly type: "string";
|
|
6072
|
+
};
|
|
6073
|
+
readonly nextRunAtMs: {
|
|
6074
|
+
readonly type: "number";
|
|
6075
|
+
};
|
|
6076
|
+
};
|
|
6077
|
+
readonly additionalProperties: false;
|
|
6078
|
+
};
|
|
6079
|
+
readonly loopDeleteResult: {
|
|
6080
|
+
readonly type: "object";
|
|
6081
|
+
readonly required: readonly ["ok", "deleted"];
|
|
6082
|
+
readonly properties: {
|
|
6083
|
+
readonly ok: {
|
|
6084
|
+
readonly const: true;
|
|
6085
|
+
};
|
|
6086
|
+
readonly deleted: {
|
|
6087
|
+
readonly type: "string";
|
|
6088
|
+
};
|
|
6089
|
+
};
|
|
6090
|
+
readonly additionalProperties: false;
|
|
6091
|
+
};
|
|
5824
6092
|
};
|
|
5825
6093
|
readonly agentContext: {
|
|
5826
6094
|
readonly brief: {
|
|
5827
6095
|
readonly title: "Pane agent context";
|
|
5828
6096
|
readonly summary: "Pane lets a developer manage saved base repositories, user-visible Panes (Pane sessions) for feature/PR work, and terminal-backed panel tabs. A Pane is a visible workspace that normally maps to one Pane-managed git worktree and branch; a panel is a terminal tab inside one Pane and shares that Pane's worktree; an agent is a CLI process running inside a panel.";
|
|
5829
|
-
readonly rules: readonly ["Start with `runpane doctor --json` to understand wrapper, platform, daemon reachability, and the next safe commands before mutating Pane state.", "In a Pane repository checkout, if `runpane` is not on PATH, build the local wrapper with `pnpm --filter runpane build` and run it with patched Node 22.23.4+ (22.x), 24.22.1+ (24.x), or 26.12.1+ (26.x), for example `node packages/runpane/dist/cli.js doctor --json`.", "Happy path for any user request to use Pane/RunPane: run `runpane doctor --json`, read `runpane agent-context --json`, resolve or add the saved base repo, then route by the rule 1 feature = 1 worktree = 1 branch = 1 Pane; reviews, audits, fixes and QA for it are tabs in that Pane: if the work's branch already has a Pane (find it with `runpane panes list --repo <repo> --json` by matching the PR's head branch against `git -C <worktreePath> branch --show-current`), open a new agent tab in it with `runpane panels create --pane <id> --agent <agent> --initial-input \"<task>\" --source agent --no-focus --wait-ready --yes --json`; only when the branch has no Pane yet, create one with a complete command such as `runpane panes create --repo <repo> --name <name> --agent <agent> --prompt \"<task>\" --source agent --no-focus --wait-ready --yes --json` (the new Pane is pinned by default; add `--no-pinned` for a throwaway Pane, add `--base-branch <ref>` to branch from something other than the repository default, or use `--tool-command <command>` instead of `--agent <agent>`), then validate with `panels wait` or `panels screen`. For long-lived supervision, use `runpane watch --follow` instead of polling wait or screen.", "Treat Pane as the user's visible cockpit for watching/co-driving work. Do not create Panes or panels for private delegation unless the user asked for visible Pane orchestration or the result should appear in the Pane app.", "Register the saved base repository once with `repos add`; do not register a pre-created worktree as a separate repo unless the user explicitly asks.", "1 feature = 1 worktree = 1 branch = 1 Pane; reviews, audits, fixes and QA for it are tabs in that Pane. Use `panes create` only when the work's branch has no Pane yet (new work, or an existing PR with no Pane), since each new Pane creates a worktree. Every later agent for that branch opens as a new tab in its Pane with `panels create --pane <id>`, never a new Pane. Tabs share one checkout: only the implementer changes the branch or HEAD, one writer at a time; review, audit and QA tabs never run `git checkout`, `reset` or `stash`.", "For private background decomposition, use your normal subagent/worktree mechanism instead of Pane.", "Skill routing: Pane's skills live in `<PANE_DIR>/skills/pane-chat/skills/`, and the Pane Chat entry point is `<PANE_DIR>/skills/pane-chat/pane-orchestrator/SKILL.md`; read the skill that matches the request, such as `discussion`, `create-ticket`, `tdd`, `prepare-pr`, or `review`.", "When an agent creates Panes or panels, pass `--source agent --no-focus --wait-ready --yes --json` unless the user explicitly wants focus moved; `panes create` pins the new Pane into the UI's favorite/pin set by default, so no follow-up `panes pin` call is needed and `--no-pinned` is the opt-out for throwaway Panes.", "Use `runpane agent-context --json` for the full agent-facing CLI context, or `runpane agent-context --command <command> --json` for one detailed command definition.", "For `agent-context --command`, use canonical spaced names like `panes create`; copied forms like `panes.create` or `runpane panes create` are accepted too.", "Use `runpane repos list --json` to find the saved repository when unsure after doctor shows the daemon is reachable.", "If WSL cannot reach Pane or `runpane` resolves to a broken Windows shim, the user may be running Windows Pane; try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane doctor --json'`.", "If the repository exists on disk but is not saved in Pane, use `runpane repos add --path <repo> --yes --json` before creating panes.", "Use `runpane agents doctor --agent <codex|claude|cursor> --repo <selector> --json` when agent availability differs across host, Windows, WSL, or repo environments.", "Use `runpane panes create --wait-ready` to create Panes, wait for each agent's input box, and verify its starting message in one call.", "Use `runpane panels screen` for compact current state, including Claude and Codex composer state. Use `panels wait` for create-time readiness or text checks. Use `runpane watch --follow` to block on workspace transitions (READY, BLOCKED, IDLE, STUCK, EXIT) without polling, or `runpane watch --until-event` to exit on the first one. Use `panels submit` to send and submit a new turn. Use `panels submit-composer --strategy auto` only for a composer that was filled separately.", "Use `runpane panels input` only when exact bytes are required, such as Ctrl-C or handcrafted terminal input.", "Pane terminals draw inline images: sixel, iTerm2 inline images, and the kitty graphics protocol. Tools that need kitty graphics, such as terminal-browser and terminal-doom, run inside a Pane panel; `runpane doctor --json` reports the exact list under `terminal.graphicsProtocols`.", "After creating Panes or sending terminal input, validate with `panels wait` or bounded `panels screen`. For a harness that consumes streaming output, use `runpane watch --follow` (with `--session <id>` for a Session); its named consumer applies settling and batching. Adding numeric --since leaves it unnamed and bypasses cadence; --as cannot be combined with --since. A harness that wakes only when a process exits uses `runpane watch --as <name> --until-event --json` and runs it again after each event. Single-event waits deliver immediately without follow cadence. Never pipe `--follow` into `grep -m1` or `head`.", "When several agents share one resource, such as a test account, name a lock in their prompts: each worker runs `runpane lock acquire --name <name> --ttl 30m --wait 1800000 --json` before using it and `runpane lock release --name <name>` after."];
|
|
6097
|
+
readonly rules: readonly ["Start with `runpane doctor --json` to understand wrapper, platform, daemon reachability, and the next safe commands before mutating Pane state.", "In a Pane repository checkout, if `runpane` is not on PATH, build the local wrapper with `pnpm --filter runpane build` and run it with patched Node 22.23.4+ (22.x), 24.22.1+ (24.x), or 26.12.1+ (26.x), for example `node packages/runpane/dist/cli.js doctor --json`.", "Happy path for any user request to use Pane/RunPane: run `runpane doctor --json`, read `runpane agent-context --json`, resolve or add the saved base repo, then route by the rule 1 feature = 1 worktree = 1 branch = 1 Pane; reviews, audits, fixes and QA for it are tabs in that Pane: if the work's branch already has a Pane (find it with `runpane panes list --repo <repo> --json` by matching the PR's head branch against `git -C <worktreePath> branch --show-current`), open a new agent tab in it with `runpane panels create --pane <id> --agent <agent> --initial-input \"<task>\" --source agent --no-focus --wait-ready --yes --json`; only when the branch has no Pane yet, create one with a complete command such as `runpane panes create --repo <repo> --name <name> --agent <agent> --prompt \"<task>\" --source agent --no-focus --wait-ready --yes --json` (the new Pane is pinned by default; add `--no-pinned` for a throwaway Pane, add `--base-branch <ref>` to branch from something other than the repository default, or use `--tool-command <command>` instead of `--agent <agent>`), then validate with `panels wait` or `panels screen`. For long-lived supervision, use `runpane watch --follow` instead of polling wait or screen.", "Treat Pane as the user's visible cockpit for watching/co-driving work. Do not create Panes or panels for private delegation unless the user asked for visible Pane orchestration or the result should appear in the Pane app.", "Register the saved base repository once with `repos add`; do not register a pre-created worktree as a separate repo unless the user explicitly asks.", "1 feature = 1 worktree = 1 branch = 1 Pane; reviews, audits, fixes and QA for it are tabs in that Pane. Use `panes create` only when the work's branch has no Pane yet (new work, or an existing PR with no Pane), since each new Pane creates a worktree. Every later agent for that branch opens as a new tab in its Pane with `panels create --pane <id>`, never a new Pane. Tabs share one checkout: only the implementer changes the branch or HEAD, one writer at a time; review, audit and QA tabs never run `git checkout`, `reset` or `stash`.", "For private background decomposition, use your normal subagent/worktree mechanism instead of Pane.", "Skill routing: Pane's skills live in `<PANE_DIR>/skills/pane-chat/skills/`, and the Pane Chat entry point is `<PANE_DIR>/skills/pane-chat/pane-orchestrator/SKILL.md`; read the skill that matches the request, such as `discussion`, `create-ticket`, `tdd`, `prepare-pr`, or `review`.", "When an agent creates Panes or panels, pass `--source agent --no-focus --wait-ready --yes --json` unless the user explicitly wants focus moved; `panes create` pins the new Pane into the UI's favorite/pin set by default, so no follow-up `panes pin` call is needed and `--no-pinned` is the opt-out for throwaway Panes.", "Use `runpane agent-context --json` for the full agent-facing CLI context, or `runpane agent-context --command <command> --json` for one detailed command definition.", "For `agent-context --command`, use canonical spaced names like `panes create`; copied forms like `panes.create` or `runpane panes create` are accepted too.", "Use `runpane repos list --json` to find the saved repository when unsure after doctor shows the daemon is reachable.", "If WSL cannot reach Pane or `runpane` resolves to a broken Windows shim, the user may be running Windows Pane; try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane doctor --json'`.", "If the repository exists on disk but is not saved in Pane, use `runpane repos add --path <repo> --yes --json` before creating panes.", "Use `runpane agents doctor --agent <codex|claude|cursor> --repo <selector> --json` when agent availability differs across host, Windows, WSL, or repo environments.", "Use `runpane panes create --wait-ready` to create Panes, wait for each agent's input box, and verify its starting message in one call.", "Use `runpane panels screen` for compact current state, including Claude and Codex composer state. Use `panels wait` for create-time readiness or text checks. Use `runpane watch --follow` to block on workspace transitions (READY, BLOCKED, IDLE, STUCK, EXIT) without polling, or `runpane watch --until-event` to exit on the first one. Use `panels submit` to send and submit a new turn. Use `panels submit-composer --strategy auto` only for a composer that was filled separately.", "Use `runpane panels input` only when exact bytes are required, such as Ctrl-C or handcrafted terminal input.", "Pane terminals draw inline images: sixel, iTerm2 inline images, and the kitty graphics protocol. Tools that need kitty graphics, such as terminal-browser and terminal-doom, run inside a Pane panel; `runpane doctor --json` reports the exact list under `terminal.graphicsProtocols`.", "After creating Panes or sending terminal input, validate with `panels wait` or bounded `panels screen`. For a harness that consumes streaming output, use `runpane watch --follow` (with `--session <id>` for a Session); its named consumer applies settling and batching. Adding numeric --since leaves it unnamed and bypasses cadence; --as cannot be combined with --since. A harness that wakes only when a process exits uses `runpane watch --as <name> --until-event --json` and runs it again after each event. Single-event waits deliver immediately without follow cadence. Never pipe `--follow` into `grep -m1` or `head`.", "When several agents share one resource, such as a test account, name a lock in their prompts: each worker runs `runpane lock acquire --name <name> --ttl 30m --wait 1800000 --json` before using it and `runpane lock release --name <name>` after.", "Loops (`runpane loops create`) run a task on a cron schedule, each run in a new Pane or, with `--session`, as a message to a Session's agent. They are for large recurring jobs, such as a nightly bug sweep, and run at most once an hour. For a short wait, use your agent harness's own sleep and wake instead."];
|
|
5830
6098
|
readonly detailCommand: "runpane agent-context --command <command> [--json]";
|
|
5831
6099
|
readonly tools: readonly [{
|
|
5832
6100
|
readonly name: "doctor";
|
|
@@ -6148,7 +6416,7 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
6148
6416
|
readonly name: "--toolsets";
|
|
6149
6417
|
readonly value: "<name,...>";
|
|
6150
6418
|
readonly required: false;
|
|
6151
|
-
readonly description: "Comma-separated toolsets to serve: core (default), all, read, repos, panes, panels, agents, sessions, git, docs, links, admin.";
|
|
6419
|
+
readonly description: "Comma-separated toolsets to serve: core (default), all, read, repos, panes, panels, agents, sessions, loops, git, docs, links, admin.";
|
|
6152
6420
|
}, {
|
|
6153
6421
|
readonly name: "--read-only";
|
|
6154
6422
|
readonly required: false;
|
|
@@ -8841,6 +9109,297 @@ export declare const RUNPANE_CONTRACT: {
|
|
|
8841
9109
|
readonly jsonSchemas: readonly ["inboxAckResult"];
|
|
8842
9110
|
readonly notes: readonly ["Unknown ids are reported under `unknown`; acknowledging twice is harmless."];
|
|
8843
9111
|
};
|
|
9112
|
+
readonly "loops list": {
|
|
9113
|
+
readonly name: "loops list";
|
|
9114
|
+
readonly summary: "List loops (scheduled tasks) with their schedule, next run, and recent runs.";
|
|
9115
|
+
readonly details: "Lists every loop: its id, target (projectId for a repo, or orchestrationSessionId for a Session), cron and scheduleText, enabled, nextRunAtMs (null while paused), and its newest runs. A run's sessionId is its Pane (null for a Session loop's runs); read its progress with `runpane agents status --pane <id>`.";
|
|
9116
|
+
readonly requiresPaneDaemon: true;
|
|
9117
|
+
readonly mutates: false;
|
|
9118
|
+
readonly arguments: readonly [{
|
|
9119
|
+
readonly name: "--json";
|
|
9120
|
+
readonly required: false;
|
|
9121
|
+
readonly description: "Print machine-readable output.";
|
|
9122
|
+
}, {
|
|
9123
|
+
readonly name: "--pane-dir";
|
|
9124
|
+
readonly value: "<path>";
|
|
9125
|
+
readonly required: false;
|
|
9126
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9127
|
+
}];
|
|
9128
|
+
readonly examples: readonly ["runpane loops list --json"];
|
|
9129
|
+
readonly jsonSchemas: readonly ["loopListResult"];
|
|
9130
|
+
readonly notes: readonly ["Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake."];
|
|
9131
|
+
};
|
|
9132
|
+
readonly "loops create": {
|
|
9133
|
+
readonly name: "loops create";
|
|
9134
|
+
readonly summary: "Create a loop: a cron schedule that starts a new Pane in a fresh worktree for each run, or sends a prompt to a Session's agent. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.";
|
|
9135
|
+
readonly details: "With --repo, each run is a new Pane in a fresh worktree branched from the repo's default base branch, started like `runpane panes create` with the agent or command and prompt given here. With --session, each run sends the prompt to that Session's agent instead of creating a Pane; a Session loop needs --agent and --prompt and takes no --tool-command. `new` creates a Session named after the loop. The Session's agent then skips permission prompts for every message it gets, not only loop runs. Runs start only while Pane is running, in the host's local time zone. A run up to 15 minutes late still starts; a later one is recorded as skipped and never caught up. Runs may overlap. Unattended agent runs skip permission prompts. Pane keeps each loop's last 10 run Panes and archives older ones.";
|
|
9136
|
+
readonly requiresPaneDaemon: true;
|
|
9137
|
+
readonly mutates: true;
|
|
9138
|
+
readonly arguments: readonly [{
|
|
9139
|
+
readonly name: "--repo";
|
|
9140
|
+
readonly value: "<selector>";
|
|
9141
|
+
readonly required: false;
|
|
9142
|
+
readonly description: "Repository: active, id, exact path, or saved repository name. Each run is a new Pane in it. Pass this or --session.";
|
|
9143
|
+
}, {
|
|
9144
|
+
readonly name: "--session";
|
|
9145
|
+
readonly value: "<id|name|new>";
|
|
9146
|
+
readonly required: false;
|
|
9147
|
+
readonly description: "Session whose agent gets the prompt each run, by id or name, instead of a new Pane. `new` creates a Session named after the loop. The Session's agent then skips permission prompts for every message it gets, not only loop runs. Pass this or --repo.";
|
|
9148
|
+
}, {
|
|
9149
|
+
readonly name: "--name";
|
|
9150
|
+
readonly value: "<name>";
|
|
9151
|
+
readonly required: true;
|
|
9152
|
+
readonly description: "Loop name.";
|
|
9153
|
+
}, {
|
|
9154
|
+
readonly name: "--cron";
|
|
9155
|
+
readonly value: "<expr>";
|
|
9156
|
+
readonly required: true;
|
|
9157
|
+
readonly description: "Five-field cron in the host's local time zone, such as \"0 3 * * *\" (every day at 03:00). Runs must be at least 60 minutes apart.";
|
|
9158
|
+
}, {
|
|
9159
|
+
readonly name: "--agent";
|
|
9160
|
+
readonly value: "<claude|codex|cursor>";
|
|
9161
|
+
readonly required: false;
|
|
9162
|
+
readonly description: "Agent each run starts; for a Session loop, the Session's agent. Pass this or --tool-command.";
|
|
9163
|
+
}, {
|
|
9164
|
+
readonly name: "--tool-command";
|
|
9165
|
+
readonly value: "<command>";
|
|
9166
|
+
readonly required: false;
|
|
9167
|
+
readonly description: "Command each run starts instead of a built-in agent, such as `./scripts/nightly-report.sh` or `pnpm test`. Project loops only. On Windows it runs in Pane's terminal shell, Git Bash by default: write bash, or `cmd //c echo hi > loop.txt` rather than `cmd /c`.";
|
|
9168
|
+
}, {
|
|
9169
|
+
readonly name: "--prompt";
|
|
9170
|
+
readonly value: "<text>";
|
|
9171
|
+
readonly required: false;
|
|
9172
|
+
readonly description: "Text typed into the agent or command after it starts; for a Session loop, the message sent to the Session's agent each run.";
|
|
9173
|
+
}, {
|
|
9174
|
+
readonly name: "--prompt-file";
|
|
9175
|
+
readonly value: "<path|->";
|
|
9176
|
+
readonly required: false;
|
|
9177
|
+
readonly description: "Read the prompt from a file or stdin.";
|
|
9178
|
+
}, {
|
|
9179
|
+
readonly name: "--worktree-name";
|
|
9180
|
+
readonly value: "<template>";
|
|
9181
|
+
readonly required: false;
|
|
9182
|
+
readonly description: "Worktree and branch name template; defaults to loop-<name>. Project loops only.";
|
|
9183
|
+
}, {
|
|
9184
|
+
readonly name: "--paused";
|
|
9185
|
+
readonly required: false;
|
|
9186
|
+
readonly description: "Create the loop paused.";
|
|
9187
|
+
}, {
|
|
9188
|
+
readonly name: "--dry-run";
|
|
9189
|
+
readonly required: false;
|
|
9190
|
+
readonly description: "Check the cron and print the loop that would be saved, with its schedule and next run, without saving.";
|
|
9191
|
+
}, {
|
|
9192
|
+
readonly name: "--yes";
|
|
9193
|
+
readonly required: true;
|
|
9194
|
+
readonly description: "Confirm the change.";
|
|
9195
|
+
}, {
|
|
9196
|
+
readonly name: "--json";
|
|
9197
|
+
readonly required: false;
|
|
9198
|
+
readonly description: "Print machine-readable output.";
|
|
9199
|
+
}, {
|
|
9200
|
+
readonly name: "--pane-dir";
|
|
9201
|
+
readonly value: "<path>";
|
|
9202
|
+
readonly required: false;
|
|
9203
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9204
|
+
}];
|
|
9205
|
+
readonly examples: readonly ["runpane loops create --repo active --name nightly-bug-sweep --cron \"0 3 * * *\" --agent claude --prompt \"Fix one bug from yesterday's issues\" --yes --json", "runpane loops create --repo <repo> --name dependency-check --cron \"0 9 * * 1\" --tool-command \"pnpm test\" --yes --json", "runpane loops create --session new --name morning-triage --cron \"0 9 * * 1-5\" --agent claude --prompt \"Triage the new issues\" --yes --json"];
|
|
9206
|
+
readonly jsonSchemas: readonly ["loopInput", "loopResult", "loopDryRunResult"];
|
|
9207
|
+
readonly notes: readonly ["Saving rejects a cron whose runs fall less than 60 minutes apart. Check one first with --dry-run."];
|
|
9208
|
+
};
|
|
9209
|
+
readonly "loops update": {
|
|
9210
|
+
readonly name: "loops update";
|
|
9211
|
+
readonly summary: "Change a loop's repo or Session, name, schedule, agent or command, prompt, or worktree template. Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake.";
|
|
9212
|
+
readonly details: "Reads the loop, replaces the values you pass, and saves it. Passing --agent clears --tool-command and the other way round; --repo and --session replace each other the same way. Pause and resume with `loops pause` and `loops resume`. Runs start only while Pane is running, in the host's local time zone. A run up to 15 minutes late still starts; a later one is recorded as skipped and never caught up. Runs may overlap. Unattended agent runs skip permission prompts. Pane keeps each loop's last 10 run Panes and archives older ones.";
|
|
9213
|
+
readonly requiresPaneDaemon: true;
|
|
9214
|
+
readonly mutates: true;
|
|
9215
|
+
readonly arguments: readonly [{
|
|
9216
|
+
readonly name: "--loop";
|
|
9217
|
+
readonly value: "<id>";
|
|
9218
|
+
readonly required: true;
|
|
9219
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
9220
|
+
}, {
|
|
9221
|
+
readonly name: "--repo";
|
|
9222
|
+
readonly value: "<selector>";
|
|
9223
|
+
readonly required: false;
|
|
9224
|
+
readonly description: "Repository: active, id, exact path, or saved repository name. Each run is a new Pane in it. Pass this or --session.";
|
|
9225
|
+
}, {
|
|
9226
|
+
readonly name: "--session";
|
|
9227
|
+
readonly value: "<id|name|new>";
|
|
9228
|
+
readonly required: false;
|
|
9229
|
+
readonly description: "Session whose agent gets the prompt each run, by id or name, instead of a new Pane. `new` creates a Session named after the loop. The Session's agent then skips permission prompts for every message it gets, not only loop runs. Pass this or --repo.";
|
|
9230
|
+
}, {
|
|
9231
|
+
readonly name: "--name";
|
|
9232
|
+
readonly value: "<name>";
|
|
9233
|
+
readonly required: false;
|
|
9234
|
+
readonly description: "Loop name.";
|
|
9235
|
+
}, {
|
|
9236
|
+
readonly name: "--cron";
|
|
9237
|
+
readonly value: "<expr>";
|
|
9238
|
+
readonly required: false;
|
|
9239
|
+
readonly description: "Five-field cron in the host's local time zone, such as \"0 3 * * *\" (every day at 03:00). Runs must be at least 60 minutes apart.";
|
|
9240
|
+
}, {
|
|
9241
|
+
readonly name: "--agent";
|
|
9242
|
+
readonly value: "<claude|codex|cursor>";
|
|
9243
|
+
readonly required: false;
|
|
9244
|
+
readonly description: "Agent each run starts; for a Session loop, the Session's agent. Pass this or --tool-command.";
|
|
9245
|
+
}, {
|
|
9246
|
+
readonly name: "--tool-command";
|
|
9247
|
+
readonly value: "<command>";
|
|
9248
|
+
readonly required: false;
|
|
9249
|
+
readonly description: "Command each run starts instead of a built-in agent, such as `./scripts/nightly-report.sh` or `pnpm test`. Project loops only. On Windows it runs in Pane's terminal shell, Git Bash by default: write bash, or `cmd //c echo hi > loop.txt` rather than `cmd /c`.";
|
|
9250
|
+
}, {
|
|
9251
|
+
readonly name: "--prompt";
|
|
9252
|
+
readonly value: "<text>";
|
|
9253
|
+
readonly required: false;
|
|
9254
|
+
readonly description: "Text typed into the agent or command after it starts; for a Session loop, the message sent to the Session's agent each run.";
|
|
9255
|
+
}, {
|
|
9256
|
+
readonly name: "--prompt-file";
|
|
9257
|
+
readonly value: "<path|->";
|
|
9258
|
+
readonly required: false;
|
|
9259
|
+
readonly description: "Read the prompt from a file or stdin.";
|
|
9260
|
+
}, {
|
|
9261
|
+
readonly name: "--worktree-name";
|
|
9262
|
+
readonly value: "<template>";
|
|
9263
|
+
readonly required: false;
|
|
9264
|
+
readonly description: "Worktree and branch name template; defaults to loop-<name>. Project loops only.";
|
|
9265
|
+
}, {
|
|
9266
|
+
readonly name: "--dry-run";
|
|
9267
|
+
readonly required: false;
|
|
9268
|
+
readonly description: "Check the cron and print the loop that would be saved, with its schedule and next run, without saving.";
|
|
9269
|
+
}, {
|
|
9270
|
+
readonly name: "--yes";
|
|
9271
|
+
readonly required: true;
|
|
9272
|
+
readonly description: "Confirm the change.";
|
|
9273
|
+
}, {
|
|
9274
|
+
readonly name: "--json";
|
|
9275
|
+
readonly required: false;
|
|
9276
|
+
readonly description: "Print machine-readable output.";
|
|
9277
|
+
}, {
|
|
9278
|
+
readonly name: "--pane-dir";
|
|
9279
|
+
readonly value: "<path>";
|
|
9280
|
+
readonly required: false;
|
|
9281
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9282
|
+
}];
|
|
9283
|
+
readonly examples: readonly ["runpane loops update --loop <loop-id> --cron \"0 4 * * *\" --yes --json"];
|
|
9284
|
+
readonly jsonSchemas: readonly ["loopInput", "loopResult", "loopDryRunResult"];
|
|
9285
|
+
readonly notes: readonly [];
|
|
9286
|
+
};
|
|
9287
|
+
readonly "loops run": {
|
|
9288
|
+
readonly name: "loops run";
|
|
9289
|
+
readonly summary: "Start a run of a loop now. The schedule stays the same.";
|
|
9290
|
+
readonly details: "Starts a run now, as a new Pane or a message to the loop's Session, even while the loop is paused or another run is still going. The schedule stays the same, and the run counts toward the 10 kept runs.";
|
|
9291
|
+
readonly requiresPaneDaemon: true;
|
|
9292
|
+
readonly mutates: true;
|
|
9293
|
+
readonly arguments: readonly [{
|
|
9294
|
+
readonly name: "--loop";
|
|
9295
|
+
readonly value: "<id>";
|
|
9296
|
+
readonly required: true;
|
|
9297
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
9298
|
+
}, {
|
|
9299
|
+
readonly name: "--yes";
|
|
9300
|
+
readonly required: true;
|
|
9301
|
+
readonly description: "Confirm the change.";
|
|
9302
|
+
}, {
|
|
9303
|
+
readonly name: "--json";
|
|
9304
|
+
readonly required: false;
|
|
9305
|
+
readonly description: "Print machine-readable output.";
|
|
9306
|
+
}, {
|
|
9307
|
+
readonly name: "--pane-dir";
|
|
9308
|
+
readonly value: "<path>";
|
|
9309
|
+
readonly required: false;
|
|
9310
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9311
|
+
}];
|
|
9312
|
+
readonly examples: readonly ["runpane loops run --loop <loop-id> --yes --json"];
|
|
9313
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
9314
|
+
readonly notes: readonly ["The result is the loop; `runs[0]` is the new run, with `status` started or failed and `sessionId` its Pane (null for a Session loop).", "Loops are for large recurring jobs and run at most once an hour; for short waits, use your agent harness's own sleep and wake."];
|
|
9315
|
+
};
|
|
9316
|
+
readonly "loops pause": {
|
|
9317
|
+
readonly name: "loops pause";
|
|
9318
|
+
readonly summary: "Pause a loop: it starts no scheduled runs until resumed.";
|
|
9319
|
+
readonly details: "A paused loop starts no scheduled runs. `loops run` still starts one by hand.";
|
|
9320
|
+
readonly requiresPaneDaemon: true;
|
|
9321
|
+
readonly mutates: true;
|
|
9322
|
+
readonly arguments: readonly [{
|
|
9323
|
+
readonly name: "--loop";
|
|
9324
|
+
readonly value: "<id>";
|
|
9325
|
+
readonly required: true;
|
|
9326
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
9327
|
+
}, {
|
|
9328
|
+
readonly name: "--yes";
|
|
9329
|
+
readonly required: true;
|
|
9330
|
+
readonly description: "Confirm the change.";
|
|
9331
|
+
}, {
|
|
9332
|
+
readonly name: "--json";
|
|
9333
|
+
readonly required: false;
|
|
9334
|
+
readonly description: "Print machine-readable output.";
|
|
9335
|
+
}, {
|
|
9336
|
+
readonly name: "--pane-dir";
|
|
9337
|
+
readonly value: "<path>";
|
|
9338
|
+
readonly required: false;
|
|
9339
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9340
|
+
}];
|
|
9341
|
+
readonly examples: readonly ["runpane loops pause --loop <loop-id> --yes --json"];
|
|
9342
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
9343
|
+
readonly notes: readonly [];
|
|
9344
|
+
};
|
|
9345
|
+
readonly "loops resume": {
|
|
9346
|
+
readonly name: "loops resume";
|
|
9347
|
+
readonly summary: "Resume a paused loop from its next scheduled time.";
|
|
9348
|
+
readonly details: "Runs resume at the next scheduled time. Runs missed while paused are not caught up.";
|
|
9349
|
+
readonly requiresPaneDaemon: true;
|
|
9350
|
+
readonly mutates: true;
|
|
9351
|
+
readonly arguments: readonly [{
|
|
9352
|
+
readonly name: "--loop";
|
|
9353
|
+
readonly value: "<id>";
|
|
9354
|
+
readonly required: true;
|
|
9355
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
9356
|
+
}, {
|
|
9357
|
+
readonly name: "--yes";
|
|
9358
|
+
readonly required: true;
|
|
9359
|
+
readonly description: "Confirm the change.";
|
|
9360
|
+
}, {
|
|
9361
|
+
readonly name: "--json";
|
|
9362
|
+
readonly required: false;
|
|
9363
|
+
readonly description: "Print machine-readable output.";
|
|
9364
|
+
}, {
|
|
9365
|
+
readonly name: "--pane-dir";
|
|
9366
|
+
readonly value: "<path>";
|
|
9367
|
+
readonly required: false;
|
|
9368
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9369
|
+
}];
|
|
9370
|
+
readonly examples: readonly ["runpane loops resume --loop <loop-id> --yes --json"];
|
|
9371
|
+
readonly jsonSchemas: readonly ["loopResult"];
|
|
9372
|
+
readonly notes: readonly [];
|
|
9373
|
+
};
|
|
9374
|
+
readonly "loops delete": {
|
|
9375
|
+
readonly name: "loops delete";
|
|
9376
|
+
readonly summary: "Delete a loop. It starts no more runs.";
|
|
9377
|
+
readonly details: "Deletes the loop and its schedule.";
|
|
9378
|
+
readonly requiresPaneDaemon: true;
|
|
9379
|
+
readonly mutates: true;
|
|
9380
|
+
readonly arguments: readonly [{
|
|
9381
|
+
readonly name: "--loop";
|
|
9382
|
+
readonly value: "<id>";
|
|
9383
|
+
readonly required: true;
|
|
9384
|
+
readonly description: "Loop id, from `runpane loops list`.";
|
|
9385
|
+
}, {
|
|
9386
|
+
readonly name: "--yes";
|
|
9387
|
+
readonly required: true;
|
|
9388
|
+
readonly description: "Confirm the change.";
|
|
9389
|
+
}, {
|
|
9390
|
+
readonly name: "--json";
|
|
9391
|
+
readonly required: false;
|
|
9392
|
+
readonly description: "Print machine-readable output.";
|
|
9393
|
+
}, {
|
|
9394
|
+
readonly name: "--pane-dir";
|
|
9395
|
+
readonly value: "<path>";
|
|
9396
|
+
readonly required: false;
|
|
9397
|
+
readonly description: "Connect to a specific Pane data directory.";
|
|
9398
|
+
}];
|
|
9399
|
+
readonly examples: readonly ["runpane loops delete --loop <loop-id> --yes --json"];
|
|
9400
|
+
readonly jsonSchemas: readonly ["loopDeleteResult"];
|
|
9401
|
+
readonly notes: readonly [];
|
|
9402
|
+
};
|
|
8844
9403
|
};
|
|
8845
9404
|
readonly managedBlock: readonly ["## Pane", "", "This repository is used with [Pane](https://runpane.com). Drive it with the CLI or the `pane` MCP server.", "", "1 feature = 1 worktree = 1 branch = 1 Pane; reviews, audits, fixes and QA for it are tabs in that Pane. Open later agents with `runpane panels create --pane <id>` (MCP: `panels_create` or `agents_start` with `pane`), not a new Pane.", "", "CLI: `npm i -g runpane` (or `npx --yes runpane@latest`), then `runpane doctor --json`. Full command reference: `runpane agent-context --json`.", "", "MCP: packaged Pane registers a stdio server named `pane` with Claude Code, Codex, and Cursor. Check the connection with `claude mcp list`, `codex mcp list`, or `agent mcp list`. Cursor may ask you to enable `pane` with `agent mcp enable pane`. If tools are missing, add it in the agent's MCP settings: Claude Code `claude mcp add --scope user pane -- npx --yes runpane@latest mcp`; Codex (`~/.codex/config.toml`) table `[mcp_servers.pane]` with `command = \"npx\"` and `args = [\"--yes\", \"runpane@latest\", \"mcp\"]`; Cursor (`~/.cursor/mcp.json`) uses `mcpServers.pane` with the same `npx` command and args; any other stdio client uses them too."];
|
|
8846
9405
|
};
|