@kontextmind/kxm 0.7.95 → 0.7.96
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/.claude-plugin/marketplace.json +1 -1
- package/.kxm/README.md +39 -9
- package/CHANGELOG.md +1 -1
- package/README.md +147 -257
- package/SECURITY.md +21 -12
- package/docs/README.md +133 -54
- package/docs/adr/ADR-0002-browser-automation-steel-doks.md +24 -18
- package/docs/adr/ADR-0003-sqlite-only-store.md +100 -0
- package/docs/adr/ADR-0004-edge-identity-authentik.md +99 -0
- package/docs/adr/README.md +33 -0
- package/docs/concepts/architecture.md +262 -0
- package/docs/concepts/data-and-storage.md +194 -0
- package/docs/concepts/trust-model.md +152 -0
- package/docs/contracts/README.md +22 -14
- package/docs/contracts/effects-and-recovery.md +3 -0
- package/docs/contracts/migration.md +2 -2
- package/docs/contracts/routing.md +6 -5
- package/docs/contributing/assignment-runner.md +388 -0
- package/docs/contributing/ci-and-release.md +231 -0
- package/docs/contributing/development.md +362 -0
- package/docs/contributing/harness-routing-internals.md +192 -0
- package/docs/{packages.md → contributing/packages.md} +13 -15
- package/docs/{skills → contributing}/repo-work-delivery.md +20 -21
- package/docs/contributing/test-matrix.md +208 -0
- package/docs/{tui-components.md → contributing/tui-components.md} +30 -22
- package/docs/contributing/writing-docs.md +340 -0
- package/docs/glossary.md +471 -0
- package/docs/guides/agent-skills.md +137 -0
- package/docs/guides/browser-automation.md +160 -0
- package/docs/guides/context-and-memory.md +352 -0
- package/docs/guides/continuous-improvement.md +228 -0
- package/docs/guides/governed-skills.md +173 -0
- package/docs/guides/nous-providers.md +186 -0
- package/docs/guides/peer-messaging.md +304 -0
- package/docs/guides/pi-workers.md +219 -0
- package/docs/guides/provenance-gates.md +313 -0
- package/docs/guides/webhook-workflows.md +364 -0
- package/docs/kb/how-credentials-retrieved-safely.md +38 -12
- package/docs/kb/how-to-capture-and-annotate-section.md +15 -13
- package/docs/kb/how-to-connect-playwright-to-steel.md +16 -11
- package/docs/kb/how-to-recover-expired-session-or-orphan.md +26 -16
- package/docs/kb/how-to-resume-after-mfa.md +19 -11
- package/docs/kb/how-to-take-over-session.md +17 -13
- package/docs/kb/why-authentication-disappeared.md +22 -14
- package/docs/kb/why-automation-opened-different-browser.md +23 -14
- package/docs/kb/why-session-viewer-cannot-control.md +13 -12
- package/docs/operations/backup-and-restore.md +248 -0
- package/docs/operations/deploy.md +307 -0
- package/docs/operations/monitoring.md +209 -0
- package/docs/operations/runtime-sync.md +192 -0
- package/docs/operations/troubleshooting.md +265 -0
- package/docs/operations/upgrade.md +124 -0
- package/docs/prompts/browser-annotate-feedback.md +7 -7
- package/docs/prompts/browser-diagnose-recover.md +11 -10
- package/docs/prompts/browser-explore.md +7 -7
- package/docs/prompts/browser-repro-fix.md +7 -7
- package/docs/prompts/browser-start.md +12 -11
- package/docs/prompts/browser-takeover.md +8 -8
- package/docs/{cli-reference.md → reference/cli-reference.md} +83 -41
- package/docs/{config-reference.md → reference/config-reference.md} +159 -148
- package/docs/reference/configuration.md +299 -0
- package/docs/reference/harness-routing.md +508 -0
- package/docs/reference/http-api.md +203 -0
- package/docs/reference/tools.md +370 -0
- package/docs/{workflow-guide.md → reference/workflow-catalog.md} +92 -153
- package/docs/reference/workflow-definitions.md +286 -0
- package/docs/start/first-workflow.md +287 -0
- package/docs/start/install.md +146 -0
- package/docs/start/quickstart-claude-code.md +405 -0
- package/docs/start/quickstart-pi.md +213 -0
- package/docs/templates/README.md +78 -73
- package/docs/templates/adr.md +13 -13
- package/docs/templates/architecture.md +55 -71
- package/docs/templates/bug-fix.md +13 -16
- package/docs/templates/feature.md +14 -19
- package/docs/templates/handoff.md +44 -46
- package/docs/templates/postmortem.md +30 -43
- package/docs/templates/research.md +15 -20
- package/docs/templates/review.md +49 -50
- package/docs/templates/runbook.md +38 -30
- package/docs/templates/test-plan.md +16 -23
- package/docs/templates/test-report.md +14 -17
- package/examples/README.md +9 -5
- package/examples/provenance-workflow.json +1 -1
- package/examples/webhook-workflows/jira-development.json +59 -0
- package/examples/webhook-workflows/jira-issue-updated.json +12 -0
- package/package.json +1 -1
- package/packages/core/tui/README.md +1 -1
- package/plugins/kxm/.claude-plugin/plugin.json +1 -1
- package/plugins/kxm/README.md +31 -32
- package/plugins/kxm/dist/cli.js +5 -5
- package/plugins/kxm/dist/mcp-server.js +1 -1
- package/plugins/kxm/dist/runtime.js +1 -1
- package/plugins/kxm/package.json +1 -1
- package/plugins/kxm/skills/kxm/references/protocol.md +3 -1
- package/plugins/kxm/skills/kxm-browser-auth/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-browser-diagnostics/SKILL.md +5 -5
- package/plugins/kxm/skills/kxm-browser-explore/SKILL.md +2 -2
- package/plugins/kxm/skills/kxm-browser-session/SKILL.md +10 -13
- package/plugins/kxm/skills/kxm-browser-takeover/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-browser-verify/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-context-memory/SKILL.md +13 -4
- package/plugins/kxm/skills/kxm-hub-ops/SKILL.md +3 -1
- package/plugins/kxm/skills/kxm-mind-setup/SKILL.md +2 -1
- package/plugins/kxm/skills/kxm-project-setup/SKILL.md +31 -54
- package/plugins/kxm/skills/kxm-projects/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-protocol/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-routing-improve/SKILL.md +15 -7
- package/plugins/kxm/skills/kxm-runs/SKILL.md +11 -5
- package/plugins/kxm/skills/kxm-session/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-tasks/SKILL.md +9 -7
- package/plugins/kxm/skills/kxm-workflow/SKILL.md +10 -2
- package/plugins/kxm/src/cli/system.ts +1 -1
- package/plugins/kxm/src/cli.ts +3 -3
- package/plugins/kxm/src/init-guide-setup.ts +1 -1
- package/plugins/kxm/src/mcp-server.ts +1 -1
- package/plugins/kxm/src/modes.ts +1 -1
- package/schemas/README.md +1 -1
- package/docs/agent-communication-envelopes-and-gates.md +0 -553
- package/docs/agent-skills.md +0 -198
- package/docs/architecture.md +0 -245
- package/docs/assignment-runner.md +0 -264
- package/docs/browser-automation.md +0 -139
- package/docs/configuration.md +0 -437
- package/docs/continuous-improvement.md +0 -226
- package/docs/getting-started.md +0 -277
- package/docs/harness-routing.md +0 -616
- package/docs/kb/qa-authentik-authentication.md +0 -97
- package/docs/kb/qa-extension-install-and-hub-bootstrap.md +0 -85
- package/docs/kb/qa-hub-on-a-public-host.md +0 -48
- package/docs/kb/qa-sqlite-vs-duckdb.md +0 -35
- package/docs/kb/qa-what-the-hub-stores.md +0 -64
- package/docs/kxm-handbook.md +0 -1181
- package/docs/operations.md +0 -510
- package/docs/operator-pi-packages.md +0 -67
- package/docs/provenance-gates.md +0 -295
- package/docs/skills.md +0 -47
- package/docs/test-matrix.md +0 -132
- package/docs/troubleshooting.md +0 -322
- package/docs/webhook-workflows.md +0 -240
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# KXM CLI reference
|
|
2
2
|
|
|
3
|
-
This page documents every command and subcommand the `kxm` operator CLI registers
|
|
3
|
+
This page documents every command and subcommand the `kxm` operator CLI registers (`@kontextmind/kxm`). For each command it states what the command does, which files and services it reads and writes, whether it needs a running hub or the KXM Runtime supervisor, what `--json` returns, and the exit codes and refusal codes you are likely to see. Environment variables are described in [Environment variables and limits](configuration.md); this page names them only where a command reads them directly.
|
|
4
4
|
|
|
5
|
-
Output shown under examples was captured from
|
|
5
|
+
Output shown under examples was captured from a source checkout, inside a throwaway Git repository, with `HOME`, `KXM_STATE_HOME`, `KXM_USER_CONFIG_DIR`, and the XDG directories pointed at a temporary directory, no harness CLIs on `PATH`, and (where a hub was needed) a disposable hub on a random loopback port. Paths are shortened to `/work/proj` (the project), `/work/kxm` (the KXM checkout), `/state` (the user state root), and `~/.config/kxm` (the user config directory); session tokens are replaced with `<token>`, the machine's host name with `host.local`, and long JSON is trimmed with `...`. Every command either plans under `--dry-run` without changing anything or refuses the flag (see [Dry runs](#dry-runs)); the dry-run examples were captured from the current source tree, with a digest of the throwaway tree taken before and after to confirm that nothing was written. An example captioned "Not run" was not executed for this reference because it starts a long-lived process, writes durable state, stores credentials, or calls an external service; its output is not shown.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -12,16 +12,16 @@ Output shown under examples was captured from KXM 0.7.1 run from a source checko
|
|
|
12
12
|
- [Where commands read and write](#where-commands-read-and-write)
|
|
13
13
|
- [Task to command](#task-to-command)
|
|
14
14
|
- Setup: [`init`](#kxm-init), [`config`](#kxm-config), [`completion`](#kxm-completion), [`trust`](#kxm-trust)
|
|
15
|
-
- Hub and sessions: [`hub`](#hub-
|
|
15
|
+
- Hub and sessions: [`hub`](#kxm-hub-view), [`session`](#kxm-session), [`dash`](#kxm-dash), [`studio`](#kxm-studio)
|
|
16
16
|
- Harnesses, models, and roles: [`harness`](#kxm-harness), [`auth`](#kxm-auth), [`update`](#kxm-update), [`models`](#kxm-models), [`routes`](#kxm-routes), [`role`](#kxm-role)
|
|
17
17
|
- Running work: [`run`](#kxm-run), [`runs`](#kxm-runs), [`runtime`](#kxm-runtime), [`agent`](#kxm-agent), [`workflow`](#kxm-workflow), [`gate`](#kxm-gate), [`peer`](#kxm-peer), [`task`](#kxm-task), [`goal`](#kxm-goal), [`suggest`](#kxm-suggest), [`explain`](#kxm-explain)
|
|
18
18
|
- Context and learning: [`context`](#kxm-context), [`memory`](#kxm-memory), [`skills`](#kxm-skills), [`improve`](#kxm-improve), [`routing`](#kxm-routing)
|
|
19
19
|
- Operations: [`backup`](#kxm-backup), [`restore`](#kxm-restore), [`tenant`](#kxm-tenant), [`ssh`](#kxm-ssh), [`help`](#kxm-help)
|
|
20
|
-
- [Known behavior gaps
|
|
20
|
+
- [Known behavior gaps](#known-behavior-gaps)
|
|
21
21
|
|
|
22
22
|
## Invoking the CLI
|
|
23
23
|
|
|
24
|
-
An installed CLI is on `PATH` as `kxm`. Install it
|
|
24
|
+
An installed CLI is on `PATH` as `kxm`. Install it as described in [Install KXM](../start/install.md).
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
kxm --help
|
|
@@ -128,11 +128,15 @@ For this page, 63 `--dry-run` invocations (every command in the first list, the
|
|
|
128
128
|
| Code | Meaning |
|
|
129
129
|
|---|---|
|
|
130
130
|
| 0 | Success, including `--help`, `--version`, and dry-run plans. |
|
|
131
|
-
| 1 | The command ran and failed or found a problem
|
|
132
|
-
| 2 | Usage error:
|
|
131
|
+
| 1 | The command ran and failed or found a problem (see below). |
|
|
132
|
+
| 2 | Usage error: the command refused before acting (see below). |
|
|
133
133
|
| 4 | `gate github watch` timed out and posted (or, under `--dry-run`, would have posted) a signed `failed` signal. |
|
|
134
134
|
| other | `hub start` and `agent worker` return the exit code of the foreground process; `ssh run` returns the remote command's exit code. |
|
|
135
135
|
|
|
136
|
+
Exit 1 covers an `ok: false` result, an unreachable hub for `hub view`, permission expansions for `trust check`, a stopped supervisor for `runtime status`, missing local state, and a planning-only `init`.
|
|
137
|
+
|
|
138
|
+
Exit 2 covers an unknown command or option, a missing argument or required option, a value KXM rejects before acting, `--workspace` where unsupported, conflicting flags, a group run without a subcommand, a removed command (`removed_command`), and `--dry-run` on a command that cannot plan (`dry_run_unsupported`).
|
|
139
|
+
|
|
136
140
|
## Where commands read and write
|
|
137
141
|
|
|
138
142
|
| Location | Contents | Used by |
|
|
@@ -334,7 +338,7 @@ kxm config set hub.autoStart off --scope user
|
|
|
334
338
|
kxm completion <bash|zsh|fish>
|
|
335
339
|
```
|
|
336
340
|
|
|
337
|
-
Prints a shell completion script to stdout. With no shell, prints `usage: kxm completion <bash|zsh|fish> | kxm completion install [--shell <shell>] [--no-path]` on stderr and exits 2; an unsupported shell exits 1. The script is printed as text even with `--json`. The generated command list lags the CLI
|
|
341
|
+
Prints a shell completion script to stdout. With no shell, prints `usage: kxm completion <bash|zsh|fish> | kxm completion install [--shell <shell>] [--no-path]` on stderr and exits 2; an unsupported shell exits 1. The script is printed as text even with `--json`. The generated command list lags the CLI (see [Known behavior gaps](#known-behavior-gaps)).
|
|
338
342
|
|
|
339
343
|
- Arguments: `[shell]`, one of `bash`, `zsh`, `fish` (or the `install` subcommand).
|
|
340
344
|
- Reads only.
|
|
@@ -383,6 +387,8 @@ kxm completion install --shell zsh --dry-run
|
|
|
383
387
|
|
|
384
388
|
Compares the authority-bearing fields of the project configuration against a base Git revision. The base is materialized into a temporary shadow with a sanitized environment; nothing in the project is written. Both subcommands refuse `--workspace` (exit 2) and need no hub.
|
|
385
389
|
|
|
390
|
+
The comparison covers the loaded bundle only: `project.yaml`, `agents/`, `models/`, `workflows/`, `gates.yaml`, `project/env.yaml`, and each member repository's `repo.yaml` and `env.yaml`. It does not read `routes.yaml`, `roles/`, `roster.yaml`, or `prices.yaml`, so a new route admission, roster entry, developer-roster route, or price change never counts as an expansion. Review those files by hand.
|
|
391
|
+
|
|
386
392
|
### `kxm trust diff`
|
|
387
393
|
|
|
388
394
|
```text
|
|
@@ -778,13 +784,13 @@ would signal pid files
|
|
|
778
784
|
kxm dash [--screen <name>]
|
|
779
785
|
```
|
|
780
786
|
|
|
781
|
-
Opens the live
|
|
787
|
+
Opens the live dashboard over the hub's server-sent events and a read-only snapshot of the local hub store. On a terminal it is interactive (`1`–`7` switch tabs, `h` help, `q` quit). Without a terminal it prints one plain snapshot and exits.
|
|
782
788
|
|
|
783
789
|
| Option | Argument | Default | Description |
|
|
784
790
|
|---|---|---|---|
|
|
785
791
|
| `--screen` | `<name>` | `agents` | agents, tasks, workflows, plans, inbox, procs, or spend |
|
|
786
792
|
|
|
787
|
-
- Needs a hub for live data.
|
|
793
|
+
- Needs a hub for live data. Treat it as an observer: its action keys `a`, `r`, `s` and `c` post to hub routes that do not exist, so they change nothing even though the status line reports success, and `d` creates a git branch and worktree (see [Monitor KXM](../operations/monitoring.md#watch-live-work-with-kxm-dash)).
|
|
788
794
|
- `--json` is refused (exit 2); use `kxm hub view`. An unknown screen exits 2 with `unknown_screen`. `--dry-run` prints `serverUrl`, `transport`, and `screen`.
|
|
789
795
|
|
|
790
796
|
```bash
|
|
@@ -837,7 +843,10 @@ kxm studio layout --json
|
|
|
837
843
|
kxm studio serve [-p <port>] [--host <host>] [--token <token>]
|
|
838
844
|
```
|
|
839
845
|
|
|
840
|
-
Serves the Web Studio on `http://127.0.0.1:4242` until interrupted. It serves `/`, `/health`, `GET /api/layout`, and `POST /api/mutate
|
|
846
|
+
Serves the Web Studio on `http://127.0.0.1:4242` until interrupted. It serves `/`, `/health`, `GET /api/layout`, and `POST /api/mutate`. The plan comes from `.kxm/workflows/default.yaml` in the current directory, or the first YAML file in `.kxm/workflows/`.
|
|
847
|
+
|
|
848
|
+
> [!WARNING]
|
|
849
|
+
> Every response carries `Access-Control-Allow-Origin: *`, so any web page open in a browser on this machine can read `/api/layout` (your workflow plan). `POST /api/mutate` requires `Authorization: Bearer <session token>` only when a session token resolves (`--token`, `KXM_SESSION_TOKEN`, or the on-disk token); with none, it accepts any caller. It accepts an allowlisted command name and answers `ok: true`, but executes nothing. Keep the default loopback `--host`.
|
|
841
850
|
|
|
842
851
|
| Option | Argument | Default | Description |
|
|
843
852
|
|---|---|---|---|
|
|
@@ -875,6 +884,7 @@ No command-specific options.
|
|
|
875
884
|
|
|
876
885
|
- Reads only. No hub needed. Always exits 0.
|
|
877
886
|
- JSON keys: `defaultHarness`, `harnesses` (each with `id`, `label`, `default`, `mode`, `detected`, `authenticated`, `dispatch` (`status`, `supported`, `reason`), `canUpdate` (`self`, `extensions`, `models`), `issues`).
|
|
887
|
+
- `dispatch` is `yes` only when the harness is detected, has an audited read-only one-shot profile, and is authenticated. Otherwise the first failing check gives the reason: `not_detected`, `no_headless_mode`, `permission_profile_unaudited` (a detected `deepseek`), `not_authenticated`, or the auth issue when login state is unknown (`auth_context_required` for Pi, `auth_unknown`, `auth_unparsed`, or another `auth_*` code).
|
|
878
888
|
|
|
879
889
|
Captured with no harness CLIs on `PATH`:
|
|
880
890
|
|
|
@@ -1005,6 +1015,8 @@ kxm models
|
|
|
1005
1015
|
Opens an interactive screen over `.kxm/models/inventory.yaml` that shows each model's route state and role bindings. Keys: `a` admit, `d` disable, `r` add a role binding, `x` remove a role binding, `q` quit. Changes are written to `.kxm/routes.yaml` and `.kxm/roles/<role>.yaml` in `KXM_WORKDIR` or the current directory.
|
|
1006
1016
|
|
|
1007
1017
|
- Needs an interactive terminal. With `--json` or without a TTY it exits 2 with `interactive_tty_required`.
|
|
1018
|
+
- `r` and `x` also mark the model `admitted` in `.kxm/routes.yaml`. So `x` re-admits a disabled route while it removes the role binding, and `r` admits the route as well as binding it.
|
|
1019
|
+
- `r` writes a roster entry `{model: <inventory id>, enabled: true}` with no harness, creating the role file if needed. The inventory id is often a bare model (`grok-4.6`), which the Runtime's roster check does not match against an agent's `provider/model`; edit the entry to the full selector.
|
|
1008
1020
|
|
|
1009
1021
|
```bash
|
|
1010
1022
|
kxm models --json
|
|
@@ -1198,6 +1210,9 @@ Adds a role definition. Without a role ID, or with `--pick`, you choose from the
|
|
|
1198
1210
|
- Writes `<scope dir>/roles/<id>.yaml`. `--dry-run` plans the write and writes nothing.
|
|
1199
1211
|
- JSON keys: `roleId`, `id`, `filePath`, `scope`.
|
|
1200
1212
|
|
|
1213
|
+
> [!WARNING]
|
|
1214
|
+
> Most built-in template entries, and `--model` as you type it, are bare model IDs such as `grok-4.6`, `fable`, and `gemini-2.5-pro`. The Runtime's roster check needs the agent's full `provider/model` selector, so a live attempt under a local `writer.yaml` copied from the template is refused (`producer_route_unsupported: … not in role 'writer' roster`). Write `--model xai/grok-4.6`, or edit the entries to full selectors, before you drive live runs.
|
|
1215
|
+
|
|
1201
1216
|
```bash
|
|
1202
1217
|
kxm role add demo-role --description "Demo role" --dry-run --json
|
|
1203
1218
|
```
|
|
@@ -1281,7 +1296,7 @@ kxm role modify reviewer --add-model claude:fable --add-skill kxm-peer
|
|
|
1281
1296
|
kxm role hosts [--scope all|global|local]
|
|
1282
1297
|
```
|
|
1283
1298
|
|
|
1284
|
-
Lists role seats (`critic-arch`, `critic-cli`, `planner`, `verifier`, `writer`, plus any configured seat) and the host, model, and effort each resolves to, with the source of the decision (`override`, `role-hosts`, `seat-default`, `role-roster`, or `fallback`).
|
|
1299
|
+
Lists role seats (`critic-arch`, `critic-cli`, `planner`, `verifier`, `writer`, plus any configured seat) and the host, model, and effort each resolves to, with the source of the decision (`override`, `role-hosts`, `seat-default`, `role-roster`, or `fallback`). The listing is display-only: no dispatch path reads seats or `role-hosts.yaml`, so a run's harness and model still come from the agent file.
|
|
1285
1300
|
|
|
1286
1301
|
| Option | Argument | Default | Description |
|
|
1287
1302
|
|---|---|---|---|
|
|
@@ -1308,7 +1323,7 @@ ROLE SEATS (default):
|
|
|
1308
1323
|
kxm role set-host <seatId> <host> [--model <model>] [--effort low|medium|high|xhigh] [--scope global|local]
|
|
1309
1324
|
```
|
|
1310
1325
|
|
|
1311
|
-
Binds a role seat to a host in `role-hosts.yaml`.
|
|
1326
|
+
Binds a role seat to a host in `role-hosts.yaml`. The binding changes what `kxm role hosts` shows, not what runs.
|
|
1312
1327
|
|
|
1313
1328
|
| Option | Argument | Default | Description |
|
|
1314
1329
|
|---|---|---|---|
|
|
@@ -1338,6 +1353,7 @@ Resumes an audit-escalated run with an operator directive. The default ruling is
|
|
|
1338
1353
|
- Arguments: `<runId>`; `[ruling]`, free text recorded with the decision.
|
|
1339
1354
|
- For a KXM run ID (`run_` followed by 32 hex digits) inside a project, posts an `audit_escalation` signal with action `unblock` to the Runtime, starting the supervisor if needed. `--dry-run` plans the request without starting the supervisor. JSON keys: `runId`, `ruling`, `unblocked`.
|
|
1340
1355
|
- For any other ID, updates the hub store at `.kxm/state/kxm.db` in the current directory directly (ignoring `--workspace` and `KXM_DATA_PATH`) and adds a `decision` journal entry. `--dry-run` reads the store read-only, reports the stage it would resume and the resulting `status`, and plans the write. JSON keys: `runId`, `stageId`, `ruling`, `status`.
|
|
1356
|
+
- The hub-run path bypasses the hub even while one is running: it writes SQLite directly, without authentication, in two statements outside one transaction. A running hub keeps runs in memory, so it does not see the change until it restarts, and its next write to that run overwrites it; it also pushes no event and sends the coordinator no resume message. Stop the hub first, or resume a live hub's run with a signed `audit_escalation` signal (see [Waits, signals and escalation](workflow-definitions.md#waits-signals-and-escalation)).
|
|
1341
1357
|
- Errors: `resume_failed` (exit 1), or a plain `not found` line (exit 1).
|
|
1342
1358
|
|
|
1343
1359
|
```bash
|
|
@@ -1365,9 +1381,9 @@ dry run: resume workflow run wf_dry_run (stage: review)
|
|
|
1365
1381
|
kxm run <workflow> [prompt...]
|
|
1366
1382
|
```
|
|
1367
1383
|
|
|
1368
|
-
Create a KXM run (offline-first; `kxm runs drive <runId> --simulated` executes it model-free). The run is immutable and pins the project's `homeRuntimeId`, config revision, and executor and tool policy revisions
|
|
1384
|
+
Create a KXM run (offline-first; `kxm runs drive <runId> --simulated` executes it model-free). The run is immutable and pins the project's `homeRuntimeId`, config revision, and executor and tool policy revisions. Run events record only the SHA-256 of the prompt; the full prompt text is kept in a local sidecar file, `run-events.db.run-prompts.json`, next to the project's Runtime event store and written with mode 0600, and a dispatch refuses the run (`run_prompt_mismatch`) if that text no longer matches the hash. The Runtime supervisor is started first if it is not running. No steps execute until the run is driven (see [`kxm runs drive`](#kxm-runs-drive)); the text output's second line prints the command that drives the new run model-free and the one that cancels it.
|
|
1369
1385
|
|
|
1370
|
-
- Arguments: `<workflow>`, Workflow id to run (a file under `.kxm/workflows/`); `[prompt...]`, Run prompt (
|
|
1386
|
+
- Arguments: `<workflow>`, Workflow id to run (a file under `.kxm/workflows/`); `[prompt...]`, Run prompt (events keep its hash; the full text is kept in a local 0600 sidecar file).
|
|
1371
1387
|
- No command-specific options. Refuses `--workspace` (exit 2).
|
|
1372
1388
|
- Needs a KXM project. Starts and uses the Runtime; no hub needed. Honors `--dry-run`, which validates the project and prints the plan without starting the supervisor.
|
|
1373
1389
|
- JSON keys: `phase`, `idempotent`, `run` (`runId`, `homeRuntimeId`, `status`, `configRevision`), `supervisor` (`runtimeId`, `port`, `started`). Dry run: `projectRoot`, `workflowId`, `configRevision`. The JSON result does not carry the drive command.
|
|
@@ -1663,10 +1679,11 @@ Starts a long-lived, supervised Pi RPC worker in the foreground through `scripts
|
|
|
1663
1679
|
- Needs Pi and a reachable hub. Runs until stopped (`kxm hub stop` stops managed workers too). The exit code is the worker's.
|
|
1664
1680
|
- A name and project are required (exit 2 otherwise); an invalid isolation mode exits 2.
|
|
1665
1681
|
- `--dry-run` prints a `kxm.worker-result.v1` envelope with `workspace`, `name`, `project`, `model`, `fallbackModels`, `tools`, `sessionIsolation`, `continue`, `freshStart`.
|
|
1666
|
-
-
|
|
1682
|
+
- Before Pi starts, the worker runs `--model` and every `--fallback-models` entry through the Pi native-vendor brake. A model whose vendor has its own harness (for example `xai/…`, `openai-codex/…`, `openrouter/x-ai/…` or `antigravity/claude-…`) exits 1 with `pi_native_impersonation_blocked: <message>` on stderr; use the native harness, or an admitted Pi route such as `openrouter/qwen/qwen3-coder-plus`. `--dry-run` does not run this check. See [Harness routing](harness-routing.md#what-the-brake-refuses).
|
|
1683
|
+
- The remaining worker variables are described in [Long-lived worker settings](configuration.md#long-lived-worker-settings).
|
|
1667
1684
|
|
|
1668
1685
|
```bash
|
|
1669
|
-
kxm agent worker --name reviewer --project demo --model
|
|
1686
|
+
kxm agent worker --name reviewer --project demo --model openrouter/qwen/qwen3-coder-plus --tools read,grep,find,ls --session-isolation workflow --fresh-start --dry-run
|
|
1670
1687
|
```
|
|
1671
1688
|
|
|
1672
1689
|
```text
|
|
@@ -1674,7 +1691,7 @@ would start worker
|
|
|
1674
1691
|
```
|
|
1675
1692
|
|
|
1676
1693
|
```bash
|
|
1677
|
-
kxm agent worker --name coordinator --project demo --model
|
|
1694
|
+
kxm agent worker --name coordinator --project demo --model openrouter/qwen/qwen3-coder-plus --session-isolation workflow
|
|
1678
1695
|
```
|
|
1679
1696
|
|
|
1680
1697
|
Not run: starts a long-lived Pi worker.
|
|
@@ -1809,7 +1826,7 @@ kxm workflow record wf_123 lesson "Flaky test hid a race" --stage-id verify --ev
|
|
|
1809
1826
|
kxm workflow wait [runId] [stageId] [signalKey] [summary] [--evidence <json>] [--evidence-refs <json>] [--timeout-ms <ms>]
|
|
1810
1827
|
```
|
|
1811
1828
|
|
|
1812
|
-
Wait for a workflow signal callback: pauses the active stage until a signed external callback checkpoints it. For a KXM run ID (`run_` followed by 32 hex digits) inside a project, the
|
|
1829
|
+
Wait for a workflow signal callback: pauses the active stage until a signed external callback checkpoints it. For a KXM run ID (`run_` followed by 32 hex digits) inside a project, the command posts to the Runtime instead of the hub (the supervisor starts if needed). The Runtime has no wait state yet: it checks that the run exists, answers `waiting: true`, and records nothing, so the command prints `waiting for signal on KXM run <id>` although the run is unchanged.
|
|
1813
1830
|
|
|
1814
1831
|
| Option | Argument | Default | Description |
|
|
1815
1832
|
|---|---|---|---|
|
|
@@ -1823,7 +1840,7 @@ Wait for a workflow signal callback: pauses the active stage until a signed exte
|
|
|
1823
1840
|
| `--payload` | `<json>` | none | JSON payload |
|
|
1824
1841
|
|
|
1825
1842
|
- `--timeout-ms` accepts 1000 through 2592000000 (30 days).
|
|
1826
|
-
- Needs a hub (or the Runtime for KXM runs). Mutates
|
|
1843
|
+
- Needs a hub (or the Runtime for KXM runs). Mutates a hub run; changes nothing for a Runtime run. Honors `--dry-run`.
|
|
1827
1844
|
|
|
1828
1845
|
```bash
|
|
1829
1846
|
kxm workflow wait wf_123 verify github-pr-42-checks "Waiting on CI" --timeout-ms 3600000 --dry-run --json
|
|
@@ -2521,7 +2538,7 @@ dry run: run workflow default for task task_4f79c0833e41, then mark it in_progre
|
|
|
2521
2538
|
kxm task sync <taskId>
|
|
2522
2539
|
```
|
|
2523
2540
|
|
|
2524
|
-
Sync task status and evidence with its linked issue board.
|
|
2541
|
+
Sync task status and evidence with its linked issue board. Today this is local only: it marks the task's tracker link `synced` and updates timestamps without contacting GitHub or Jira.
|
|
2525
2542
|
|
|
2526
2543
|
- Writes the task file. `--dry-run` returns the synced task and plans the write without making it. JSON keys: `task`.
|
|
2527
2544
|
- Exit 1 when the task does not exist or has no tracker link.
|
|
@@ -2669,7 +2686,7 @@ kxm explain --mode planner --domains git,k8s --model grok/grok-4.6 --json
|
|
|
2669
2686
|
|
|
2670
2687
|
## `kxm context`
|
|
2671
2688
|
|
|
2672
|
-
KXM context operating-system queries. Every subcommand POSTs to the hub's `/v1/context/*` API as the control plane, authenticating only with `KXM_AUTH_TOKEN` (the persisted `hub-env.json` credential is not used; without the variable
|
|
2689
|
+
KXM context operating-system queries. Every subcommand POSTs to the hub's `/v1/context/*` API as the control plane, authenticating only with `KXM_AUTH_TOKEN` (the persisted `hub-env.json` credential is not used; without the variable a hub that has an admin token answers 401 `invalid_auth`, while a loopback hub with no admin token accepts the call). The first argument is the project scope. Results carry the hub's HTTP `status` and response fields. Exit 0 on a 2xx response, 1 otherwise. An unreachable hub crashes the command with a stack trace (exit 1, no JSON). Agents reach the same data through the `kxm_context`, `kxm_recall`, `kxm_state`, `kxm_episode`, and `kxm_promote` tools; there is no `kxm_explain` tool.
|
|
2673
2690
|
|
|
2674
2691
|
### `kxm context get`
|
|
2675
2692
|
|
|
@@ -2689,6 +2706,7 @@ Assemble a role-aware context packet within a token budget.
|
|
|
2689
2706
|
| `--kinds` | `<kinds>` | all | Comma-separated item kinds to include |
|
|
2690
2707
|
|
|
2691
2708
|
- `--budget` must be an integer from 512 to 200000 (exit 2).
|
|
2709
|
+
- `--run` and `--stage` do not filter the packet: selection draws on the whole project either way. The hub only echoes them in `audit.request` and its log.
|
|
2692
2710
|
- Reads only. Output keys: `status`, `packet` (`workingState`, `currentState`, `knowledge`, `evidence`, `episodes`, `skills`, `contradictions`, `unresolvedGaps`, `provenanceSummary`, `estimatedTokens`), `audit`.
|
|
2693
2711
|
- Selection is deterministic. Eligible items are ordered by open contradiction, project before `_shared`, task-matched before unmatched, role kind priority, lexical BM25 relevance to `--task`, confidence, authority, recency (newest first), then id. The budget is filled first-fit: an item that does not fit is skipped and smaller ones still fill it.
|
|
2694
2712
|
- `audit.relevance` holds numbers only: `taskTokens` (distinct task words after stopword removal), `matchedCandidates` (eligible items sharing a task word) and `selected` (each selected item's rounded score, in `selectedIds` order).
|
|
@@ -2948,27 +2966,39 @@ kxm memory note "Use pnpm, not npm" --kind convention --dry-run --json
|
|
|
2948
2966
|
kxm memory sync
|
|
2949
2967
|
```
|
|
2950
2968
|
|
|
2951
|
-
Regenerate memory
|
|
2969
|
+
Regenerate the memory block in whichever of `AGENTS.md`, `CLAUDE.md` and `GEMINI.md` exist in the current directory; never creates them.
|
|
2952
2970
|
|
|
2953
2971
|
No command-specific options.
|
|
2954
2972
|
|
|
2955
|
-
- Writes
|
|
2956
|
-
-
|
|
2957
|
-
-
|
|
2973
|
+
- Writes only the project's memory block, the active authored facts from `.kxm/memory/`, between `<!-- kxm:memory:start -->` and `<!-- kxm:memory:end -->`. A file without markers gets the block appended at its end. Nothing outside the markers changes, and KXM adds no instructions of its own.
|
|
2974
|
+
- Updates only the files that already exist. When none of the three exists, it writes nothing and exits 1 with `memory sync failed: none of AGENTS.md, CLAUDE.md, GEMINI.md exists in <dir>; …`.
|
|
2975
|
+
- Refuses malformed markers. Each file must hold exactly one start marker followed by one end marker, or neither. An orphan marker, an end before its start, or a second block exits 1 with `memory sync failed: <file> has <problem>; wrote no file. …`, and no file is written. Keep one pair, or delete both so sync appends a fresh block.
|
|
2976
|
+
- `--dry-run` runs the same checks, lists the files it would change, and writes nothing.
|
|
2977
|
+
- Refusals are plain text on stderr, also under `--json`. JSON keys: `updated`, `unchanged`, `missing` (files that do not exist and were not created).
|
|
2958
2978
|
|
|
2959
|
-
In a project
|
|
2979
|
+
In a project that has only `AGENTS.md`, with no memory block yet:
|
|
2960
2980
|
|
|
2961
2981
|
```bash
|
|
2962
2982
|
kxm memory sync --dry-run --json
|
|
2963
2983
|
```
|
|
2964
2984
|
|
|
2965
2985
|
```text
|
|
2966
|
-
{"schema":"kxm.cli-result.v1","ok":true,"command":"memory sync","updated":[],"
|
|
2986
|
+
{"schema":"kxm.cli-result.v1","ok":true,"command":"memory sync","updated":["AGENTS.md"],"unchanged":[],"missing":["CLAUDE.md","GEMINI.md"],"dryRun":true,"planned":[{"action":"write","target":"/work/proj/AGENTS.md"}]}
|
|
2987
|
+
```
|
|
2988
|
+
|
|
2989
|
+
With a stray start marker in `CLAUDE.md`:
|
|
2990
|
+
|
|
2991
|
+
```bash
|
|
2992
|
+
kxm memory sync
|
|
2993
|
+
```
|
|
2994
|
+
|
|
2995
|
+
```text
|
|
2996
|
+
memory sync failed: CLAUDE.md has <!-- kxm:memory:start --> with no <!-- kxm:memory:end -->; wrote no file. Keep exactly one <!-- kxm:memory:start --> followed by one <!-- kxm:memory:end --> in each file, or delete both so sync appends a fresh block
|
|
2967
2997
|
```
|
|
2968
2998
|
|
|
2969
2999
|
## `kxm skills`
|
|
2970
3000
|
|
|
2971
|
-
Governed skill candidate lifecycle under `.kxm/skills/` in `KXM_WORKDIR` or the current directory: `candidates/`, `promoted/`, `
|
|
3001
|
+
Governed skill candidate lifecycle under `.kxm/skills/` in `KXM_WORKDIR` or the current directory: `candidates/`, `promoted/`, `quarantineds/`, `rejected/`, `history/<id>.jsonl`, and `patches/<id>.patch`. No hub needed. Errors are plain text on stderr.
|
|
2972
3002
|
|
|
2973
3003
|
### `kxm skills create`
|
|
2974
3004
|
|
|
@@ -2994,7 +3024,7 @@ Submit a skill candidate from verified episodes.
|
|
|
2994
3024
|
- Writes a candidate. Honors `--dry-run`. JSON keys: `metadata` (or `name` for a dry run).
|
|
2995
3025
|
|
|
2996
3026
|
```bash
|
|
2997
|
-
kxm skills create --file SKILL.md --name retry-backoff --created-by alice --harness pi --models
|
|
3027
|
+
kxm skills create --file SKILL.md --name retry-backoff --created-by alice --harness pi --models openrouter/qwen/qwen3-coder-plus --run wf_123 --dry-run --json
|
|
2998
3028
|
```
|
|
2999
3029
|
|
|
3000
3030
|
```text
|
|
@@ -3017,7 +3047,7 @@ Record a protected evaluation for a candidate. A failed evaluation can quarantin
|
|
|
3017
3047
|
| `--score` | `<n>` | none | Numeric score |
|
|
3018
3048
|
| `--details` | `<text>` | none | Bounded evaluation details |
|
|
3019
3049
|
|
|
3020
|
-
- Arguments: `<skillId>`, Skill candidate ID. Mutates. `--dry-run` returns the evaluation and whether it would quarantine the candidate, and plans the history write (and the move to `
|
|
3050
|
+
- Arguments: `<skillId>`, Skill candidate ID. Mutates. `--dry-run` returns the evaluation and whether it would quarantine the candidate, and plans the history write (and the move to `quarantineds/`) without making them.
|
|
3021
3051
|
- JSON keys: `skillId`, `quarantined`, `evaluation`.
|
|
3022
3052
|
|
|
3023
3053
|
```bash
|
|
@@ -3207,13 +3237,16 @@ Without `--file` it reads the same sources as [`kxm improve report`](#kxm-improv
|
|
|
3207
3237
|
|
|
3208
3238
|
| Option | Argument | Default | Description |
|
|
3209
3239
|
|---|---|---|---|
|
|
3210
|
-
| `-f`, `--file` | `<path>` | the Runtime store, then workspace telemetry |
|
|
3240
|
+
| `-f`, `--file` | `<path>` | the Runtime store, then workspace telemetry | Read only this telemetry or event log JSONL file (default: this project's Runtime event store plus workspace telemetry) |
|
|
3211
3241
|
| `-l`, `--equivalent-list-cost` | none | off | Include equivalent list price column using price catalog |
|
|
3212
3242
|
| `--list-prices` | none | off | Alias for --equivalent-list-cost |
|
|
3213
3243
|
| `--prices` | `<path>` | `.kxm/prices.yaml` | Path to price catalog (default: .kxm/prices.yaml) |
|
|
3214
3244
|
|
|
3215
3245
|
- Reads only. A price catalog that cannot be loaded is skipped silently.
|
|
3216
|
-
-
|
|
3246
|
+
- `--equivalent-list-cost` loads the catalog without the freshness check the producers apply, so it prices with a catalog of any date, including one the producers treat as stale. Check the catalog `date` before you rely on `ListEquiv($)`.
|
|
3247
|
+
- A Runtime store that exists but cannot be read exits 1 with `improve_source_unreadable`.
|
|
3248
|
+
- Ranking: quality first (Pass%, then Rwk%), then cost per accepted attempt. Among routes of equal quality, any route with an unknown-cost attempt ranks after every route without one. `$/Acc` still shows only the priced part, so a route mixing unmetered and unknown-cost attempts can read `$0.0000`; the `*` in `Unk` marks it.
|
|
3249
|
+
- The `Quota` column counts attempts whose metadata looks quota-exhausted (a quota failure class, a `quota` flag, or text such as `rate limit` or `HTTP 429`). It is a count only: nothing fails over to another route.
|
|
3217
3250
|
- The text output does not list the sources, and prints `no routing records in telemetry` when no source holds a record. The Rwk% column counts records with `transitions` greater than 0, which Runtime records never set.
|
|
3218
3251
|
- JSON keys: `file` (the telemetry path, also when the Runtime store was read), `sources` (without `--file`; the same shape as in `kxm improve`), `configurations` (per behavioral hash for v1 records), `report` (`schema`, `generatedAt`, `totalAttempts`, `rows`).
|
|
3219
3252
|
|
|
@@ -3251,7 +3284,7 @@ no routing records in telemetry
|
|
|
3251
3284
|
kxm routing benchmark [--task <fixture>] [--arms <models>] [--runs <count>]
|
|
3252
3285
|
```
|
|
3253
3286
|
|
|
3254
|
-
Dedicated offline benchmark for side-by-side model comparison (Decision Q12).
|
|
3287
|
+
Dedicated offline benchmark for side-by-side model comparison (Decision Q12). Today this prints fixed placeholder figures: it does not run any model, read the task, or measure anything. Latency, tokens, cost, and outcome are constants chosen from the model name. Do not use its output for routing decisions.
|
|
3255
3288
|
|
|
3256
3289
|
| Option | Argument | Default | Description |
|
|
3257
3290
|
|---|---|---|---|
|
|
@@ -3279,7 +3312,7 @@ pi qwen3-coder-plus 560 1200 450 $0.1
|
|
|
3279
3312
|
kxm backup [--out <dir>]
|
|
3280
3313
|
```
|
|
3281
3314
|
|
|
3282
|
-
Creates a verified SQLite backup with a hashed `kxm.backup-manifest.v1` manifest. It discovers stores relative to the current directory: the hub store `.kxm/state/kxm.db`, and `registry.db`, `bindings.db`, and `events/*.db` under `.kxm/runtime/`. It ignores `--workspace` and `KXM_DATA_PATH
|
|
3315
|
+
Creates a verified SQLite backup of the project hub store, with a hashed `kxm.backup-manifest.v1` manifest (Runtime stores under the user state root are not included). It discovers stores relative to the current directory: the hub store `.kxm/state/kxm.db`, and any `registry.db`, `bindings.db`, and `events/*.db` it finds under `.kxm/runtime/`. The Runtime writes its stores under the user state root instead, so a backup normally holds only the hub store and `manifest.json`. It ignores `--workspace` and `KXM_DATA_PATH`. To back up the Runtime, see [Backup and restore](../operations/backup-and-restore.md).
|
|
3283
3316
|
|
|
3284
3317
|
| Option | Argument | Default | Description |
|
|
3285
3318
|
|---|---|---|---|
|
|
@@ -3335,6 +3368,7 @@ Restores SQLite stores from a verified backup manifest. It checks the manifest s
|
|
|
3335
3368
|
- Before overwriting anything, a restore checks every store's recorded schema version against the ceiling for that store, so a store newer than this build is refused (`runtime_schema_newer`) before the first file is replaced. `--dry-run` runs the same manifest, file, digest, and schema checks and plans each target it would overwrite (and any `-wal` or `-shm` sidecar it would delete) without touching them. Dry-run JSON keys: `backupId`, `manifestPath`, `stores` (`storeId`, `targetPath`, `schemaVersion`), `dryRun`, `planned`.
|
|
3336
3369
|
- JSON keys: `backupId`, `manifestPath`, `restoredStores` (`storeId`, `sourcePath`, `backupFile`, `schemaVersion`, `integrity`).
|
|
3337
3370
|
- Exit 1 with `restore_failed`; `issues` carry codes such as `runtime_path_invalid`, `restore_manifest_invalid`, `restore_file_missing`, `restore_manifest_digest_mismatch`, and `runtime_schema_newer`.
|
|
3371
|
+
- Two more checks run per store while restoring, after the plan checks: a backup file whose schema version differs from the version the manifest records is refused with `runtime_schema_mismatch`, and one that fails its SQLite integrity check with `database_corrupted`. In a multi-store restore, stores restored before the refused one stay restored.
|
|
3338
3372
|
|
|
3339
3373
|
```bash
|
|
3340
3374
|
kxm restore ../bk/manifest.json --dry-run
|
|
@@ -3393,7 +3427,9 @@ kxm tenant status --json
|
|
|
3393
3427
|
|
|
3394
3428
|
## `kxm ssh`
|
|
3395
3429
|
|
|
3396
|
-
Multiplexed remote SSH execution. Commands reuse an OpenSSH ControlMaster socket in `.kxm/run/ssh-sockets/` in the current directory (`ControlPersist=10m`, `BatchMode=yes`, `StrictHostKeyChecking=yes
|
|
3430
|
+
Multiplexed remote SSH execution. Commands reuse an OpenSSH ControlMaster socket in `.kxm/run/ssh-sockets/` in the current directory (`ControlPersist=10m`, `BatchMode=yes`, `StrictHostKeyChecking=yes`; 120 second timeout, 60 seconds for `ssh file` writes).
|
|
3431
|
+
|
|
3432
|
+
Host keys must already be pinned: with those options, OpenSSH refuses a host whose key is not in your `known_hosts` instead of prompting, so add the key yourself (for example with `ssh <host>` once) before the first `kxm ssh` call. KXM also refuses any option that would weaken the check (`StrictHostKeyChecking=accept-new`, `no` or `off`, or `UserKnownHostsFile=/dev/null`). JSON results carry `ok`, `action`, `host`, and the fields below, but no `command` field except `ssh close`. Under `--dry-run`, `ssh run`, `ssh file`, and `ssh close` connect to nothing: they print a plan (`command`, `host`, the remote command or path, `dryRun`, and `planned` with action `ssh`) instead. `ssh info` reads only, with or without the flag.
|
|
3397
3433
|
|
|
3398
3434
|
### `kxm ssh info`
|
|
3399
3435
|
|
|
@@ -3428,7 +3464,7 @@ kxm ssh info --json
|
|
|
3428
3464
|
kxm ssh run <host> <command...> [--sudo]
|
|
3429
3465
|
```
|
|
3430
3466
|
|
|
3431
|
-
Execute a command on a remote SSH host via multiplexed ControlMaster socket. Commands that match KXM's destructive-command patterns are refused before connecting.
|
|
3467
|
+
Execute a command on a remote SSH host via multiplexed ControlMaster socket. Commands that match KXM's destructive-command patterns (`rm` with recursive and force flags, `git reset --hard`, `git clean -f`, `git checkout --` with paths, and `git restore .` or `*`) are refused before connecting.
|
|
3432
3468
|
|
|
3433
3469
|
| Option | Argument | Default | Description |
|
|
3434
3470
|
|---|---|---|---|
|
|
@@ -3436,6 +3472,7 @@ Execute a command on a remote SSH host via multiplexed ControlMaster socket. Com
|
|
|
3436
3472
|
|
|
3437
3473
|
- Connects to the remote host and runs the command. `--dry-run` connects to nothing and prints the command it would run.
|
|
3438
3474
|
- JSON keys: `exitCode`, `stdout`, `stderr`, `truncated`, `socketReused`, `durationMs`, `error`. The exit code is the remote command's.
|
|
3475
|
+
- stdout and stderr are each capped at 50 KB and 2,000 lines. Longer output is cut, ends with `[kxm: ssh output truncated to 50KB / 2000 lines]`, and sets `truncated: true`. Output over 10 MB fails the command. `ssh file --read` uses the same caps.
|
|
3439
3476
|
|
|
3440
3477
|
```bash
|
|
3441
3478
|
kxm ssh run build-01 uptime --dry-run
|
|
@@ -3511,17 +3548,22 @@ Inspect KXM runs
|
|
|
3511
3548
|
...
|
|
3512
3549
|
```
|
|
3513
3550
|
|
|
3514
|
-
## Known behavior gaps
|
|
3551
|
+
## Known behavior gaps
|
|
3515
3552
|
|
|
3516
3553
|
These are behaviors of the current build that differ from what the help text or the flag names suggest. Each is also noted in the command's section.
|
|
3517
3554
|
|
|
3518
3555
|
- The `default` workflow that `kxm init` writes sets `limits.maxAgentTimeMs`, so `kxm runs drive` hands every run of it off with `run_handoff_required` (`limit_unsupported`). Use a `kxm workflow add --template` workflow, or remove the limit, to drive a first run.
|
|
3519
|
-
- `kxm memory sync` creates `CLAUDE.md` and `GEMINI.md` with headers taken from the KXM repository's own instructions.
|
|
3520
3556
|
- `kxm routing benchmark` prints constant placeholder figures.
|
|
3521
3557
|
- `kxm task sync` does not contact GitHub or Jira.
|
|
3522
|
-
- `kxm runs drive` without `--simulated` runs live harness calls, although its description says "model-free simulation".
|
|
3523
3558
|
- `kxm peer inbox` always returns an empty list from the CLI.
|
|
3524
3559
|
- `kxm context` subcommands crash with a stack trace when the hub is unreachable, and they ignore the persisted hub credential.
|
|
3525
3560
|
- `kxm completion <shell>` generates a command list that includes a nonexistent `plan` command, omits `models`, `routes`, `explain`, and `ssh`, lists a nonexistent `goal get`, and omits `runs drive`, `runs receipt`, `runtime sync-retry`, and `improve report`.
|
|
3526
|
-
- `kxm backup`
|
|
3561
|
+
- `kxm backup` JSON shows `manifestSha256` redacted.
|
|
3527
3562
|
- `--help` after an unknown subcommand (for example `kxm hub nope --help`) prints the parent group's help and exits 0, so `--help` cannot be used to test whether a subcommand exists; compare the `Usage:` line instead.
|
|
3563
|
+
|
|
3564
|
+
## Related
|
|
3565
|
+
|
|
3566
|
+
- [Environment variables and limits](configuration.md): every variable the commands read
|
|
3567
|
+
- [Configuration file reference](config-reference.md): the files the commands read and write
|
|
3568
|
+
- [Agent tools](tools.md): the `kxm_*` tools behind `kxm peer` and `kxm workflow`
|
|
3569
|
+
- [Hub HTTP API](http-api.md): the routes the commands call
|