ks advice list | /advice list | <instruction> | every consultation one instruction raised: who was asked, who replied, who is pending or unavailable (named), whether the set is complete, current or history |
ks advice show | /advice show | <consultation> | one consultation in full: who asked whom, when it was asked, taken up and answered, the context it was asked with, and the adviser's own words |
ks adviser connect | /adviser connect; fills in this agent and this session | <adviser> [--session ID] [--agent NAME] [--confirm SESSION/AGENT] [--expires DURATION] [--max-consultations N] [--max-tokens N] [--max-output-tokens N] --session ID: the session of the agent that will ask; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: the agent that will ask (default main)--confirm SESSION/AGENT: confirm the adviser without a prompt; it must name the adviser shown, as session/agent or by its id--expires DURATION: how long the connection lasts (default 24h, at most 720h)--max-consultations N: how many consultations the connection carries; default the service's (50)--max-tokens N: input plus output tokens admitted per consultation; default the service's: one turn of the adviser's model, its context plus the output the runner asks for--max-output-tokens N: output tokens admitted per consultation; default the service's: the output one turn of the adviser's model asks for | let an agent consult another agent of yours, after you have seen both ends and confirmed the adviser by name |
ks adviser disconnect | /adviser disconnect | <grant> | withdraw a connection: every future consultation over it stops at once |
ks adviser discover | /adviser discover | [name] [--project ID] --project ID: one project you may read instead of your own account | the existing agents you may consult: selector, availability, the runner each reported, last seen; creates and grants nothing |
ks adviser list | /advisers (also /adviser list); fills in this agent and this session | [--session ID] [--agent NAME] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: the agent (default main) | an agent's adviser connections, live, revoked and expired, in both directions |
ks agent approve (also ks approval approve) | /agent approve; fills in this session | <request> [--session ID] --session ID: the session the request belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | approve one permission request an agent is waiting on, by its id |
ks agent ask | /agent ask; fills in this agent and this session | <name> <question> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | ask one of an agent's connected advisers a question, as a person, and wait for its answer: "@<adviser> <question>" |
ks agent create | /agent create; fills in this session | <name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | create the primary agent of a session that has none |
ks agent deny (also ks approval deny) | /agent deny; fills in this session | <request> [--session ID] --session ID: the session the request belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | deny one permission request an agent is waiting on, by its id |
ks agent history | /agent history; fills in this agent and this session | <name> [--session ID] [--last N] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--last N: only the last N entries | an agent's conversation so far, in any session state, with the whole text of every entry: your instructions, its words, its tools, questions over its connections; newest last |
ks agent list | /agents (also /agent list); fills in this session | [--session ID] --session ID: the session the agents live in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | the agents of a session: name, id, activity, role, current task |
ks agent logs | /logs (also /agent logs); fills in this session | [--session ID] [--follow] [--cursor CURSOR] [--limit N] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--follow: keep reading new lines from the cursor until the service says following ends (a session that pauses ends it) or Ctrl-C--cursor CURSOR: start after this cursor (from a previous page)--limit N: at most N lines per page | the session's setup log and its agent's log from a cursor, safe to print; --follow polls until the service says it ends |
ks agent open | not in the app: you are in the agent's window already; /home, then Enter, opens another | <name> [--session ID] [--take-control] [--view] [--no-follow] [--resume] [--project PROJECT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--take-control: take the control lease from the window that holds it; without it a held agent is refused, never taken--view: open a watching window: it follows the agent and steers nothing, so it opens beside a window that holds control and never takes it--no-follow: print the window's current state and exit, following nothing--resume: if the session is saved and stopped, resume it (runtime is charged again) and then open; without it a stopped session is never woken--project PROJECT: narrow a search by name to one project (without --session) | the agent window: its state, then its events as they happen |
ks agent pause | /pause (also /agent pause); fills in this agent and this session | <name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | save the session an agent lives in and park it, waiting until it is parked |
ks agent queue cancel | /agent queue cancel; fills in this agent and this session | <name> [--session ID] [--preview] [--confirm QREV] [--states STATES] [--reason TEXT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--preview: show exactly what would be cancelled, and the queue revision a confirmation must name; changes nothing--confirm QREV: cancel exactly what the preview at this queue revision showed; if the queue changed since, nothing is cancelled--states STATES: queued, held, or queued,held (default both)--reason TEXT: why, recorded with each cancellation | cancel an agent's pending instructions in bulk: previewed first, then confirmed by naming the preview's queue revision |
ks agent queue hold | /agent queue hold; fills in this agent and this session | <name> [--session ID] [--finding TEXT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--finding TEXT: what you established about the blocked instruction; required, and recorded with the decision | record that an agent's queue stays held, and what you established |
ks agent queue list | /agent queue list; fills in this agent and this session | <name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | an agent's pending work in dispatch order, the instruction executing now apart, and the queue revision a move names |
ks agent queue resume | /agent queue resume; fills in this agent and this session | <name> [--session ID] [--finding TEXT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--finding TEXT: what you established about the blocked instruction; required, and recorded with the decision | continue the instructions held behind a failed or unresolved one; that one is never restarted |
ks agent queue show | /queue (also /agent queue show); fills in this agent and this session | <name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | why an agent's queue is not moving: what blocks it, what waits behind it, what each choice would do |
ks agent remove | /agent remove; fills in this agent and this session | <name> [--session ID] [--plan] [--execute PLAN] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--plan: plan only: what removal would cancel, release and keep; changes nothing--execute PLAN: remove the agent by this plan | remove an agent through a plan: what it cancels and keeps, then the removal naming that plan |
ks agent rename | /agent rename; fills in this agent and this session | <name> <new-name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | rename an agent by id; its tasks, approvals and adviser connections keep resolving |
ks agent resume | /resume (also /agent resume); fills in this agent and this session | <name> [--session ID] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | resume the parked session an agent lives in, waiting out a save that is still completing |
ks agent status | /agent status; fills in this agent and this session | <name> [--session ID] [--watch] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--watch: read it again every 2 seconds until Ctrl-C, which stops watching and changes nothing | one agent's activity, queue depth and current task |
ks agent stop | /stop (also /agent stop); fills in this agent and this session | <name> [--session ID] [--confirm NAME] [--reason TEXT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--confirm NAME: confirm by naming the agent (required without a terminal; never implied by --yes)--reason TEXT: why, recorded with the stop | stop an agent: its instruction in flight is asked to stop and its queue is held; the session keeps running Note: in the app, name the agent to confirm: /stop --confirm <agent>. |
ks agent tell | /agent tell; fills in this agent and this session | <name> <instruction> [--session ID] [--resume] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--resume: if the session is parked, resume it after the instruction is accepted; without it a parked session is never woken and the instruction waits, held | queue one instruction for an agent from outside any window |
ks agent view | /agent view; fills in this agent and this session | <name> [--session ID] [--choose N] [--confirm CHOICE] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--choose N: perform menu item N through the request the service names for it--confirm CHOICE: the dialog choice that performs an item that changes the session (never preselected, never implied by --yes) | the live window's model: header, runner, footer counts and the KS menu, as the service gives them, within 80x24 |
ks approval list | /approvals (also /approval list); fills in this session | [--session ID] [--all] --session ID: the session the request belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--all: every request, decided ones too, with who decided and when | a session's permission requests with the instruction each was asked for, what it touches and what deciding costs |
ks approval show | /approval show; fills in this session | <request> [--session ID] --session ID: the session the request belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | one permission request in full: the action, its instruction, what it touches, the cost, expiry and decision |
ks check define | /check define; fills in this agent and this session | [--session ID] [--agent NAME] [--input PATH] [--artifact PATH] [--workdir PATH] [--kind KIND] [--timeout SECONDS] [--max-output BYTES] <name> [--] <argv...> --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: the agent the check belongs to (default main)--input PATH: a workspace file the check's behaviour depends on (repeatable; at least one); a change to any of them needs your trust again--artifact PATH: a workspace file the check produces, whose digest is recorded (repeatable)--workdir PATH: the workspace directory it runs in (default the workspace root)--kind KIND: check or setup (default check)--timeout SECONDS: the deadline, after which its process group is killed (default 600, at most 3600)--max-output BYTES: the output kept (default 256 KiB, at most 1 MiB) | store a check: an argument vector with no shell, the files it depends on, its artifacts and bounds; runs nothing |
ks check list | /check list; fills in this agent and this session | [--session ID] [--agent NAME] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: the agent the check belongs to (default main) | an agent's checks: the exact action, the definition hash and the input sets you trusted |
ks check run | /check run | <check> | request a run of a check; it executes only over inputs you trusted |
ks check show | /check show | <run> | one run: state, inputs seen, exit status, output, artifacts' digests, the action to trust |
ks check trust | /check trust | <run> [--confirm HASH] --confirm HASH: the action hash you were shown (all of it, or the 12 characters shown); required without a terminal, never implied by --yes | trust the exact action a run stopped at: this definition over the inputs it saw |
ks file list | /file list; fills in this session | [path] [--session ID] --session ID: the session whose workspace to read; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use) | one directory of a session's workspace: type, mode, size, name; secret files marked redacted |
ks file show | /file show; fills in this session | <path> [--session ID] [--max-bytes N] [--out FILE] --session ID: the session whose workspace to read; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--max-bytes N: read at most N bytes (default and maximum 1 MiB)--out FILE: write the bytes to this NEW file instead of printing them | one workspace file, at most 1 MiB, printed as safe text or written to a new file |
ks result apply | /apply (also /result apply) | [result] [--dir DIR] [--confirm DIGEST] [--recover] --dir DIR: the project root to apply to (default this project's root)--confirm DIGEST: the changeset's digest (the 12 characters shown, or all of it); required without a terminal, never implied by --yes--recover: put every path an interrupted apply touched back as it was | apply an attempt's changeset to this project, only onto the recorded base, transactionally |
ks result diff | /diff (also /result diff) | <result> [--content] --content: also show the new text of each changed text file (escaped) | what an attempt's ks-changeset.json says it changed, against its recorded base, with every path escaped |
ks result download | /result download | <result> [--out FILE] [--force] [--extract DIR] [--task ID] [--grant-ttl DURATION] [--keep-partial] --out FILE: where to place it; default the result's own file name in this directory--force: replace an existing file at the target (atomically, and only with verified bytes)--extract DIR: unpack a tar, tar.gz or zip result into this NEW directory after every entry passes the C09 checks--task ID: refuse unless the result belongs to this task--grant-ttl DURATION: how long the download grant lives (1s to 1h; default the service's 10m)--keep-partial: keep an interrupted download's incomplete bytes (.ks-partial-<result>) so the same command can resume; without it they are removed | download a result, verify its size and sha256, and place it without replacing anything |
ks result list | /results (also /result list); fills in this agent and this session | [--task ID] [--session ID] [--agent NAME] --task ID: one instruction's results--session ID: every task of this session's agents; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: only this agent's tasks (with --session) | the results of one task, or of a session's tasks: name, size, sha256, task, verification |
ks result show | /result show | <result> | one result: size, sha256, task and attempt, the producer's checks, the task's verification, provenance |
ks task cancel | /task cancel; fills in this session | <instruction> [--session ID] [--reason TEXT] --session ID: the session the instruction belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--reason TEXT: why you are cancelling it; optional, and recorded with the request | end one instruction: it will not run, and the instructions held behind it stay held |
ks task list (also ks task ls) | /tasks (also /task list); fills in this agent and this session | [--session ID] [--agent NAME] --session ID: the session whose instructions to read; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--agent NAME: read one agent's queue instead of every agent's | the instructions of a session's agents, in the order they were committed |
ks task move | /task move; fills in this session | <instruction> [--session ID] [--before TASK] [--after TASK] [--queue-revision QREV] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--before TASK: place it just before this pending instruction--after TASK: place it just after this pending instruction--queue-revision QREV: the queue revision of the view you decided from (ks agent queue list prints it); without it the queue is read now and shown first | move one queued instruction before or after another pending one of the same agent, against a queue revision |
ks task reconcile | /task reconcile; fills in this session | <instruction> [--session ID] [--finding TEXT] --session ID: the session the instruction belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--finding TEXT: what you established about the attempt; required, and recorded with the decision | record that a running attempt's outcome could NOT be established, after the service refused its close |
ks task replace | /task replace; fills in this session | <instruction> [--session ID] [--text TEXT] [--queue-revision QREV] [--reason TEXT] --session ID: the session the agent lives in; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--text TEXT: the replacement instruction (at most 64 KiB)--queue-revision QREV: the queue revision of the view you decided from; without it the queue is read now and shown first--reason TEXT: why, recorded with the replacement | replace one pending instruction: it is cancelled with its content kept and a new one takes its place, against a queue revision |
ks task resume | /task resume; fills in this session | <instruction> [--session ID] [--checkpoint ID] [--finding TEXT] [--accept-affected DIGEST] --session ID: the session the instruction belongs to; a short id is accepted when it is unique among yours; without it, this project's binding (ks session use)--checkpoint ID: the saved point to start the new attempt from; required, and never chosen for you--finding TEXT: why you are running it again; required, and recorded with the restore--accept-affected DIGEST: the digest the service printed with the exact list of other work a restore would return to that moment; consent is bound to that list and never to the word yes | run one blocked instruction again as a new attempt from a saved point you name; it never continues the rest of the queue instead |
ks task show | /task show; fills in this session | <instruction> [--session ID] --session ID: refuse unless the instruction belongs to this session; optional, and only ever a guard | one instruction in full: where it sits, what it says, what it last reported and what attempt exists |