ur-agent 1.45.2 → 1.45.4

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.
@@ -81,6 +81,24 @@ The optional `provider.fallback` value is used only to print an explicit
81
81
  recovery recommendation in provider diagnostics. It never silently or
82
82
  automatically changes the active provider.
83
83
 
84
+ ## v1.45.4 Additions
85
+
86
+ - Fresh workspaces require a provider/model choice before their first
87
+ interactive session and persist the validated pair locally.
88
+ - Fresh headless workspaces fail before model execution unless a model is
89
+ supplied explicitly or by workspace/managed configuration.
90
+ - Resume, initialization-only, and explicit model paths remain uninterrupted;
91
+ AutoApprove behavior is unchanged.
92
+
93
+ ## v1.45.3 Additions
94
+
95
+ | Addition | Surface | What it adds |
96
+ | --- | --- | --- |
97
+ | Deterministic slash registry | `src/commands.ts`, `test/commandRegistryIntegrity.test.ts` | Resolves bundled, plugin, project, workflow, and built-in commands by explicit source priority; rejects duplicate canonical tokens, removes only conflicting aliases, validates every lazy loader, and keeps the technical command catalog complete. |
98
+ | Unified sandbox command | `/sandbox [status\|check\|init\|eval\|exclude]` | One interactive slash command now owns both the settings UI and text subcommands; the shell-facing `ur sandbox` implementation is shared rather than separately registered. |
99
+ | Actionable CI cwd handling | `ur ci-loop --cwd <path>` | Reports the absolute execution directory, retains assertion and stack context, and stops "No tests found" after one attempt without wasting a fix-agent run. |
100
+ | Explicit worktree completion | `/debug-v2`, `/refactor`, `/paper-implementation`, `/benchmark`, `/security-review`, `/dockerize`, `/latex-paper`, `/batch` | Keeps changes local, asks before the final full suite, and never commits, pushes, or opens a PR unless separately requested. |
101
+
84
102
  ## v1.25.x Additions
85
103
 
86
104
  | Addition | Surface | What it adds |
@@ -273,7 +291,7 @@ runners, so the core logic is deterministic and unit-tested offline.
273
291
  | Spec-driven development | `ur spec init\|generate\|approve\|run\|status` + `.ur/specs/` | requirements -> design -> tasks documents and a phase/approval record; executes the Spec Kit / Kiro `- [ ] T1: ...` task list one task at a time, checking off each PASS |
274
292
  | In-loop model escalation | `ur escalate plan\|run\|oracle\|policy` + `.ur/escalation.json` | capability-aware fast/oracle tiers from `model-doctor`; routine work runs fast and auto-escalates hard/failed work to the strong model; `oracle` is a one-shot second opinion |
275
293
  | Best-of-N judging | `ur arena "<task>" [--agents N] [--apply]` | runs N agents on one task in isolated worktrees, scores diffs with the self-review gate + verdict/diff heuristics, surfaces (optionally applies) the winner |
276
- | Self-healing CI loop | `ur ci-loop [--command ...] [--commit] [--push]` | run -> on failure summarize -> fix agent -> re-run, bounded by retries; commits/pushes are self-review gated; `--from-log` seeds the first failure |
294
+ | Self-healing CI loop | `ur ci-loop [--command ...] [--cwd ...] [--commit] [--push]` | run -> on failure summarize -> fix agent -> re-run, bounded by retries; no-test failures stop immediately with cwd guidance; commits/pushes are self-review gated; `--from-log` seeds the first failure |
277
295
  | Verifiable artifacts | `ur artifacts add\|capture-diff\|capture-tests\|approve\|reject` + `.ur/artifacts/` | reviewable deliverables with pending/approved/rejected status and threaded feedback; threads into the provenance stack (`claim-ledger`, `trace`, `evidence`) |
278
296
 
279
297
  ### Commands
@@ -286,7 +304,7 @@ ur escalate plan "debug the race condition in the scheduler"
286
304
  ur escalate run "refactor the cache layer" --force-oracle
287
305
  ur escalate oracle "is this lock-free queue correct?"
288
306
  ur arena "implement the rate limiter" --agents 3 --apply
289
- ur ci-loop --command "bun test" --max-attempts 3
307
+ ur ci-loop --command "bun test" --cwd . --max-attempts 3
290
308
  ur artifacts capture-diff
291
309
  ur artifacts capture-tests --command "bun test"
292
310
  ur artifacts approve 1
@@ -48,7 +48,7 @@ ur context-pack remember --decision "Use manifest commands first"
48
48
  ur context-pack compress
49
49
  ur acp serve --port 8123
50
50
  ur exec "add tests for the parser" --concurrency 4 --json
51
- ur ci-loop --command "bun test" --dry-run
51
+ ur ci-loop --command "bun test" --cwd . --dry-run
52
52
  ur artifacts capture-diff
53
53
  ur artifacts capture-tests --command "bun test"
54
54
  ur claim-ledger validate
@@ -87,7 +87,7 @@ Inside an interactive session:
87
87
  | Spec-driven development | Covered | `ur spec` scaffolds requirements/design/tasks under `.ur/specs/`, tracks phase/approvals, and runs the Spec Kit / Kiro task list one task at a time | Add bidirectional sync with an external `specs/` directory |
88
88
  | Capability-aware model escalation | Covered | `ur escalate` selects fast/oracle tiers from `model-doctor`, runs routine work fast, and auto-escalates hard/failed work to the strong local model | Learn per-model success rates to tune the difficulty threshold |
89
89
  | Best-of-N agent judging | Covered | `ur arena` runs N agents per task in isolated worktrees and judges diffs with the self-review gate; winner is selectable/appliable | Add an optional model judge alongside the deterministic scorer |
90
- | Self-healing CI | Covered | `ur ci-loop` runs a command, summarizes failures, invokes a fix agent, and re-runs with bounded retries; commits/pushes are self-review gated | Wire to `ur trigger` so a failed CI webhook auto-launches the loop |
90
+ | Self-healing CI | Covered | `ur ci-loop` reports its resolved cwd, preserves assertion/stack context, stops no-test configuration failures before invoking a fixer, and re-runs real failures with bounded retries; commits/pushes require explicit flags and are self-review gated | Wire to `ur trigger` so a failed CI webhook can explicitly launch the loop |
91
91
  | Verifiable artifacts | Covered | `ur artifacts` records plans/diffs/test-runs with approve/reject/feedback under `.ur/artifacts/`; comments steer active background agents through stream-json inbox injection | Attach browser-QA screenshots and link artifacts to claim-ledger entries |
92
92
  | Native IDE review | Covered | `ur ide diff` writes `.ur/ide/diffs/` bundles and `extensions/vscode-ur-inline-diffs/` provides a VS Code tree/webview/comment surface | Add JetBrains packaging if demand appears |
93
93
  | ACP / IDE agent server | Covered | `ur acp serve|stop|status` exposes an HTTP+JSON-RPC agent server so VS Code/Cursor/Zed extensions can list tools, call tools, and submit tasks | Ship reference editor extensions |
@@ -105,7 +105,7 @@ ur spec run demo --all --dry-run
105
105
  ur arena "implement a debounce helper" --agents 2 --dry-run
106
106
  ur escalate run "refactor the cache layer" --force-oracle --dry-run
107
107
  ur test-first --dry-run
108
- ur ci-loop --command "bun test" --dry-run
108
+ ur ci-loop --command "bun test" --cwd . --dry-run
109
109
  ur artifacts capture-tests --command "bun test"
110
110
  ```
111
111
 
@@ -77,6 +77,15 @@ incompatible saved model instead of silently carrying it across providers. The
77
77
  saved provider/model pair controls the runtime backend for the next agent
78
78
  request; Ollama is only used when `ollama` is the selected provider.
79
79
 
80
+ The same provider-first picker is mandatory on the first interactive run in a
81
+ workspace with no model in `.ur/settings.json` or `.ur/settings.local.json`.
82
+ The result is validated and written to the gitignored local settings file.
83
+ User-global and built-in model defaults do not silently select a model for a
84
+ new folder. `--model`, `OLLAMA_MODEL`, `UR_MODEL`, agent configuration,
85
+ `--settings`, managed settings, and resumed sessions are deliberate selections
86
+ and therefore do not open the startup picker. Fresh `-p` runs without one of
87
+ those inputs fail with an actionable message before making a model request.
88
+
80
89
  Use this to inspect the active runtime path:
81
90
 
82
91
  ```sh
@@ -127,8 +136,8 @@ UR_MODEL=qwen2.5-coder:7b
127
136
  ```
128
137
 
129
138
  `OLLAMA_MODEL` selects the model name and takes precedence over `UR_MODEL` only
130
- for Ollama runtime sessions. If neither is set, UR lets its Ollama router choose
131
- from the model list advertised by the configured Ollama app.
139
+ for Ollama runtime sessions. If neither is set and the workspace has no saved
140
+ model, interactive startup asks and headless startup requires `--model`.
132
141
 
133
142
  ### Discovering LAN Ollama servers
134
143
 
@@ -56,6 +56,11 @@ context.
56
56
 
57
57
  The GitHub install path uses the bundled launcher in `dist/cli.js`, so `bun run bundle` must be run before packaging or pushing a release. `bun run release:check` verifies that `package.json`, `bunfig.toml`, the bundle, docs, and `node ./bin/ur.js --version` agree. The GitHub workflow keeps production bundle, release, package, and global-install checks behind the Bun test step; do not publish, tag, or push release artifacts until that workflow is green.
58
58
 
59
+ For a patch release, keep the version synchronized in `package.json`,
60
+ `bunfig.toml`, the VS Code extension manifest, the JetBrains Gradle build,
61
+ `documentation/index.html`, `technical/README.md`, and `CHANGELOG.md`. Rebuild
62
+ `dist/cli.js` after changing the version.
63
+
59
64
  ## Build
60
65
 
61
66
  ```sh
@@ -73,6 +78,7 @@ only the root README. Check:
73
78
  - `CHANGELOG.md`
74
79
  - `docs/`
75
80
  - `documentation/`
81
+ - `technical/`
76
82
  - `examples/`
77
83
  - extension and plugin README files when the feature affects them
78
84
 
@@ -80,6 +86,11 @@ For top-level commands, also update the static documentation site command data
80
86
  in `documentation/app.js` and any relevant tutorial section in
81
87
  `documentation/index.html`.
82
88
 
89
+ For slash-command changes, update `technical/03-slash-commands.md` and run
90
+ `bun test test/commandRegistryIntegrity.test.ts`. That test verifies unique
91
+ canonical names and aliases, non-empty descriptions, loadable implementations,
92
+ and coverage of every visible shipped command in the technical reference.
93
+
83
94
  For command surfaces that write `.ur/` state, update configuration and
84
95
  validation docs with the generated files and cleanup expectations.
85
96
 
@@ -182,10 +182,18 @@ ur sandbox check
182
182
  gates.
183
183
 
184
184
  ```sh
185
- ur ci-loop --command "bun test" --max-attempts 3
185
+ ur ci-loop --command "bun test" --cwd . --max-attempts 3
186
186
  ur test-first detect
187
187
  ```
188
188
 
189
+ If the runner says "No tests found", check the working directory printed by
190
+ the result and run from the test root or pass it explicitly. This configuration
191
+ failure stops after the first attempt and does not invoke a fix agent:
192
+
193
+ ```sh
194
+ ur ci-loop --command "bun test" --cwd ./packages/app --max-attempts 3
195
+ ```
196
+
189
197
  ## Integrations
190
198
 
191
199
  ### Plugin fails to load
package/docs/USAGE.md CHANGED
@@ -8,6 +8,13 @@ UR is a terminal agent. Running `ur` opens an interactive session in the current
8
8
  ur
9
9
  ```
10
10
 
11
+ On the first interactive run in a folder without a workspace model, UR opens
12
+ the provider-first model picker before the REPL. A validated choice is saved to
13
+ `.ur/settings.local.json` and reused in that workspace. A global user model is
14
+ not silently copied into new folders. Shared `.ur/settings.json`, managed,
15
+ `--settings`, agent, CLI, environment, and resumed-session choices remain
16
+ explicit inputs and skip this one-time picker.
17
+
11
18
  Use interactive mode for iterative coding, debugging, research, and repository exploration. The session can read project instructions, use tools, call slash commands, and keep resumable conversation history.
12
19
 
13
20
  Useful options:
@@ -29,9 +36,13 @@ UR also accepts custom "Other" answers when the dialog includes one.
29
36
  Print mode is useful for scripts and shell pipelines:
30
37
 
31
38
  ```sh
32
- ur -p "write a changelog entry for the current diff"
39
+ ur -p --model qwen2.5-coder:7b "write a changelog entry for the current diff"
33
40
  ```
34
41
 
42
+ In a fresh workspace without a configured model, print mode exits before any
43
+ model request and tells the caller to pass `--model <model>` or run interactive
44
+ setup. This keeps automation deterministic instead of selecting a default.
45
+
35
46
  Output formats:
36
47
 
37
48
  ```sh
@@ -57,8 +68,9 @@ in this order:
57
68
  1. `OLLAMA_MODEL`
58
69
  2. `UR_MODEL`
59
70
 
60
- If neither variable is set and `ollama` is the selected provider, UR lets its
61
- Ollama router choose from the models exposed by your local Ollama app.
71
+ If neither variable is set, a fresh workspace requires an interactive choice.
72
+ After the provider/model pair has been stored locally, that exact pair is used
73
+ for subsequent sessions.
62
74
 
63
75
  You can also choose the model for a single session:
64
76
 
@@ -241,7 +253,9 @@ UR includes slash commands and CLI subcommands for common workflows:
241
253
  - `ur escalate ...` to plan, run, or ask an oracle model for hard tasks
242
254
  - `ur arena ...` to run multiple agents on the same task and select a winner
243
255
  - `ur test-first ...` to detect compile/test/lint commands, store failure traces, and install after-edit gates
244
- - `ur ci-loop ...` to run tests, repair failures, and rerun with a bounded loop
256
+ - `ur ci-loop ...` to run tests in an explicit working directory, repair real
257
+ failures, and rerun with a bounded loop. A "No tests found" result stops
258
+ after one attempt and reports how to correct `--cwd`.
245
259
  - `ur artifacts ...` to capture reviewable diffs, test runs, notes, and feedback
246
260
  - `ur ide diff ...` to capture editor-readable inline diff bundles
247
261
  - `ur acp ...` to start/stop/status the Agent Communication Protocol server for IDE extensions
@@ -334,7 +348,7 @@ ur context-pack remember --accepted "Use p-map for concurrency" --scope project
334
348
  ur context-pack compress
335
349
  ur acp serve --port 8123
336
350
  ur exec "add tests for the parser" --concurrency 4 --json
337
- ur ci-loop --command "bun test" --dry-run
351
+ ur ci-loop --command "bun test" --cwd . --dry-run
338
352
  ur artifacts capture-diff
339
353
  ur bg run "fix the flaky parser test" --worktree --dry-run
340
354
  ur worktree list
@@ -19,10 +19,28 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected: the version from package.json, e.g. "1.35.1 (UR-Nexus)"
22
+ # expected for this release: "1.45.4 (UR-Nexus)"
23
23
  ```
24
24
 
25
- ## 0.1 Permission safety and context pack (1.19.0)
25
+ ## 0.1 First-workspace model selection (1.45.4)
26
+
27
+ In a new temporary directory, run `ur`. Expected: before the REPL appears, UR
28
+ opens the provider-first picker. After selecting a connected provider and one
29
+ of its models, `.ur/settings.local.json` contains both `provider.active` and
30
+ the selected model. A second `ur` run in the same directory reuses that local
31
+ pair without showing the startup picker.
32
+
33
+ Before making the interactive choice, the equivalent headless command must
34
+ exit non-zero without contacting a model:
35
+
36
+ ```sh
37
+ ur -p "say hi"
38
+ ```
39
+
40
+ Expected: `No model has been selected for this workspace`. Supplying
41
+ `--model <model>`, `OLLAMA_MODEL`, or `UR_MODEL` bypasses the gate for that run.
42
+
43
+ ## 0.2 Permission safety and context pack (1.19.0)
26
44
 
27
45
  In a project checkout:
28
46
 
@@ -47,7 +65,7 @@ Expected:
47
65
  - `remember` appends task memory entries under `.ur/context/task-memory.jsonl`.
48
66
  - `compress` writes `.ur/context/compressed.md`.
49
67
 
50
- ## 0.2 Test-first execution loop (1.18.0)
68
+ ## 0.3 Test-first execution loop (1.18.0)
51
69
 
52
70
  In a project checkout:
53
71
 
@@ -74,7 +92,7 @@ ur test-first --max-attempts 1
74
92
  Expected: a non-zero command creates a log under
75
93
  `.ur/test-first/traces/`, and the command reports `exhausted`, not `passed`.
76
94
 
77
- ## 0.3 Reliable repo editing (1.17.0)
95
+ ## 0.4 Reliable repo editing (1.17.0)
78
96
 
79
97
  In a disposable checkout:
80
98
 
@@ -92,7 +110,7 @@ Expected:
92
110
  - If the check command exits non-zero, every touched file is restored and the
93
111
  JSON result reports `"rolledBack": true`.
94
112
 
95
- ## 0.4 Network Ollama discovery (1.16.0)
113
+ ## 0.5 Network Ollama discovery (1.16.0)
96
114
 
97
115
  With at least one other Ollama server reachable on your LAN:
98
116
 
@@ -287,11 +305,14 @@ ur escalate run "refactor the cache layer" --force-oracle --dry-run
287
305
  ur test-first --dry-run
288
306
  ur safety check --command "rm -rf build"
289
307
  ur context-pack scan
290
- ur ci-loop --command "bun test" --dry-run
308
+ ur ci-loop --command "bun test" --cwd . --dry-run
291
309
  ur artifacts capture-tests --command "bun test"
292
310
  ```
293
311
 
294
312
  Expected: no `unknown option` or `too many arguments` parser errors.
313
+ The CI-loop result should include the resolved working directory. If that
314
+ directory has no matching tests, the run should stop after its first attempt
315
+ with `--cwd` guidance and must not launch a fix agent.
295
316
 
296
317
  ## What to do if any step fails
297
318
 
@@ -2,7 +2,7 @@ const featureGroups = [
2
2
  {
3
3
  title: 'Core agent runtime',
4
4
  tags: ['interactive', 'headless', 'models'],
5
- text: 'Interactive terminal sessions, one-shot print mode, JSON and stream-json output, resumable conversations, custom agents, model routing, local runtimes, and legal provider adapters.',
5
+ text: 'Interactive terminal sessions with first-workspace provider/model selection, deterministic one-shot print mode, JSON and stream-json output, resumable conversations, custom agents, model routing, local runtimes, and legal provider adapters.',
6
6
  commands: ['ur', 'ur -p', 'ur --resume', 'ur --continue', 'ur --model <model>', 'ur provider'],
7
7
  },
8
8
  {
@@ -72,15 +72,15 @@ const commands = [
72
72
  name: 'ur',
73
73
  category: 'Core',
74
74
  aliases: [],
75
- summary: 'Start an interactive UR-Nexus session in the current workspace.',
75
+ summary: 'Start an interactive session; a fresh workspace must choose and locally persist a validated provider/model pair first.',
76
76
  examples: ['ur', 'ur --model qwen3-coder:480b-cloud', 'ur --continue', 'ur --resume'],
77
77
  },
78
78
  {
79
79
  name: 'ur -p',
80
80
  category: 'Core',
81
81
  aliases: ['--print'],
82
- summary: 'Run one prompt headlessly and exit. This is the base mode for scripts, CI, evals, triggers, SDK calls, and A2A tasks.',
83
- examples: ['ur -p "Summarize this repository"', 'ur -p --output-format json "Review the current diff"', 'ur -p --json-schema \'{"type":"object"}\' "Return structured output"'],
82
+ summary: 'Run one prompt headlessly and exit. Fresh workspaces require an explicit or workspace-configured model instead of loading a default.',
83
+ examples: ['ur -p --model qwen3-coder:480b-cloud "Summarize this repository"', 'ur -p --model qwen3-coder:480b-cloud --output-format json "Review the current diff"', 'ur -p --model qwen3-coder:480b-cloud --json-schema \'{"type":"object"}\' "Return structured output"'],
84
84
  },
85
85
  {
86
86
  name: 'acp',
@@ -191,8 +191,8 @@ const commands = [
191
191
  name: 'ci-loop',
192
192
  category: 'Automation',
193
193
  aliases: ['heal'],
194
- summary: 'Run a build or test command, summarize failures, invoke a fix agent, and rerun with a bounded retry budget.',
195
- examples: ['ur ci-loop --command "bun test" --dry-run', 'ur ci-loop --command "bun test" --max-attempts 3', 'ur ci-loop --from-log failure.log --dry-run', 'ur ci-loop --command "bun test" --commit'],
194
+ summary: 'Run a build or test command in an explicit working directory, preserve useful failure context, and rerun real failures with a bounded fix budget. No-test configuration failures stop immediately.',
195
+ examples: ['ur ci-loop --command "bun test" --cwd . --dry-run', 'ur ci-loop --command "bun test" --cwd ./packages/app --max-attempts 3', 'ur ci-loop --from-log failure.log --cwd . --dry-run', 'ur ci-loop --command "bun test" --cwd . --json'],
196
196
  },
197
197
  {
198
198
  name: 'context-pack',
@@ -264,13 +264,6 @@ const commands = [
264
264
  summary: 'Track persistent long-horizon objectives with notes, linked workflows, and resumable execution.',
265
265
  examples: ['ur goal add release-docs --objective "Ship professional docs" --workflow docs', 'ur goal note release-docs --note "Command reference drafted"', 'ur goal resume release-docs --dry-run', 'ur goal done release-docs'],
266
266
  },
267
- {
268
- name: 'update',
269
- category: 'Ops',
270
- aliases: ['upgrade'],
271
- summary: 'Check npm for UR-Nexus updates.',
272
- examples: ['ur update', 'ur upgrade'],
273
- },
274
267
  {
275
268
  name: 'connect',
276
269
  category: 'Providers',
@@ -432,6 +425,41 @@ const commands = [
432
425
  summary: 'Parse GitHub, Slack, or generic webhook payloads and optionally launch a headless UR run.',
433
426
  examples: ['ur trigger parse --file payload.json --source github', 'ur trigger run --file payload.json --keyword /ur --dry-run', 'ur trigger run --file slack.json --max-turns 8'],
434
427
  },
428
+ {
429
+ name: 'audit',
430
+ category: 'Verification',
431
+ aliases: [],
432
+ summary: 'Export the hash-chained project audit trail or verify it for tampering.',
433
+ examples: ['ur audit export --format jsonl', 'ur audit export --format csv --out audit.csv', 'ur audit verify'],
434
+ },
435
+ {
436
+ name: 'cloud',
437
+ category: 'Agent Platform',
438
+ aliases: [],
439
+ summary: 'Run detached best-of-N tasks, inspect their results, and explicitly apply a selected winner.',
440
+ examples: ['ur cloud run "speed up parser" --attempts 3', 'ur cloud list', 'ur cloud show <id>', 'ur cloud apply <id>'],
441
+ },
442
+ {
443
+ name: 'recipe',
444
+ category: 'Automation',
445
+ aliases: ['recipes'],
446
+ summary: 'Create and run structured-output playbooks whose child result must satisfy the recipe schema.',
447
+ examples: ['ur recipe init triage', 'ur recipe list', 'ur recipe run triage "login returns 500"'],
448
+ },
449
+ {
450
+ name: 'thread',
451
+ category: 'Sessions',
452
+ aliases: ['threads'],
453
+ summary: 'Share a session transcript through the local artifacts server or list shared threads.',
454
+ examples: ['ur thread share', 'ur thread list', 'ur thread share <session-id>'],
455
+ },
456
+ {
457
+ name: 'wiki',
458
+ category: 'Knowledge',
459
+ aliases: ['repo-wiki'],
460
+ summary: 'Generate a living repository wiki and map, inspect status, or install its maintenance hook.',
461
+ examples: ['ur wiki generate', 'ur wiki map', 'ur wiki status', 'ur wiki install-hook'],
462
+ },
435
463
  {
436
464
  name: 'update',
437
465
  category: 'Ops',
@@ -472,7 +500,7 @@ const slashGroups = [
472
500
  {
473
501
  title: 'Agent skills',
474
502
  items: ['/debug-v2', '/refactor', '/paper-implementation', '/benchmark', '/security-review', '/dockerize', '/latex-paper', '/simplify', '/debug'],
475
- text: 'Bundled slash skills that dispatch focused agent work in isolated git worktrees with clean commits and PR output.',
503
+ text: 'Bundled slash skills that dispatch focused work in isolated git worktrees, keep changes local, ask before the final full suite, and publish only after a separate explicit request.',
476
504
  },
477
505
  {
478
506
  title: 'Memory and evidence',
@@ -486,8 +514,8 @@ const slashGroups = [
486
514
  },
487
515
  {
488
516
  title: 'Models, tools, and interop',
489
- items: ['/model', '/model-doctor', '/model-route', '/escalate', '/mcp', '/plugin', '/skills', '/sdk', '/a2a-card'],
490
- text: 'Pick models, inspect capabilities, escalate to oracle models, manage MCP/plugin extensions, and expose interop surfaces.',
517
+ items: ['/model', '/model-doctor', '/model-route', '/escalate', '/mcp', '/plugin', '/skills', '/skill', '/sdk', '/a2a-card'],
518
+ text: 'Pick models, inspect capabilities, manage MCP/plugin extensions, browse prompt skills with /skills, run executable workflows with /skill, and expose interop surfaces.',
491
519
  },
492
520
  {
493
521
  title: 'Security operations',
@@ -502,7 +530,7 @@ const slashGroups = [
502
530
  {
503
531
  title: 'Preferences and environment',
504
532
  items: ['/config', '/permissions', '/sandbox', '/mode', '/theme', '/vim', '/terminal-setup', '/usage', '/ide'],
505
- text: 'Configure permissions, sandboxing, UI preferences, IDE integration, and runtime environment details.',
533
+ text: 'Configure permissions and UI preferences; /sandbox combines its interactive settings with status, check, init, eval, and exclude operations.',
506
534
  },
507
535
  ];
508
536
 
@@ -662,8 +690,8 @@ const examples = [
662
690
  },
663
691
  {
664
692
  title: 'Self-healing CI',
665
- text: 'Run a test command, summarize failures, attempt a bounded fix loop, and rerun.',
666
- code: 'ur ci-loop --command "bun test" --dry-run\nur ci-loop --command "bun test" --max-attempts 3',
693
+ text: 'Run in an explicit cwd, preserve useful assertion and stack context, and attempt a bounded fix loop only for actionable failures.',
694
+ code: 'ur ci-loop --command "bun test" --cwd . --dry-run\nur ci-loop --command "bun test" --cwd ./packages/app --max-attempts 3',
667
695
  },
668
696
  {
669
697
  title: 'Test-first command evidence',
@@ -44,7 +44,7 @@
44
44
  <main id="content" class="content">
45
45
  <header class="topbar">
46
46
  <div>
47
- <p class="eyebrow">Version 1.45.2</p>
47
+ <p class="eyebrow">Version 1.45.4</p>
48
48
  <h1>UR-Nexus Documentation</h1>
49
49
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
50
50
  </div>
@@ -89,6 +89,10 @@
89
89
  <strong>Test-first execution</strong>
90
90
  <span><code>ur test-first</code> detects compile/test/lint commands, stores failure traces, and installs edit-time verifier gates.</span>
91
91
  </article>
92
+ <article>
93
+ <strong>Deterministic commands</strong>
94
+ <span>The external runtime exposes 150 commands and 217 unique slash tokens; registry tests reject ambiguous names, broken loaders, and undocumented visible commands.</span>
95
+ </article>
92
96
  <article>
93
97
  <strong>Safety and context</strong>
94
98
  <span><code>ur safety</code> evaluates command risk. <code>ur context-pack</code> writes architecture context and task memory.</span>
@@ -122,13 +126,13 @@ ur --model qwen3-coder:480b-cloud</code></pre>
122
126
  <article class="step">
123
127
  <span>3</span>
124
128
  <h3>Run once in scripts</h3>
125
- <pre><code>ur -p "Summarize this repository"
126
- ur -p --output-format json "Review the current diff"</code></pre>
129
+ <pre><code>ur -p --model qwen3-coder:480b-cloud "Summarize this repository"
130
+ ur -p --model qwen3-coder:480b-cloud --output-format json "Review the current diff"</code></pre>
127
131
  </article>
128
132
  </div>
129
133
  <div class="callout">
130
134
  <strong>Runtime requirement</strong>
131
- <p>UR expects Bun. For local-first work, run a local Ollama app/server at <code>http://localhost:11434/api</code>. Set <code>OLLAMA_MODEL</code> or <code>UR_MODEL</code> to force a model route.</p>
135
+ <p>UR expects Bun. On the first interactive run in a workspace, choose a provider and model; UR validates and saves the pair locally before starting the session. Fresh print-mode workspaces require <code>--model</code> or another explicit model source.</p>
132
136
  </div>
133
137
  </section>
134
138
 
@@ -159,7 +163,7 @@ ur config set provider.fallback ollama</code></pre>
159
163
  </article>
160
164
  <article>
161
165
  <h3>Status bar and updates</h3>
162
- <pre><code>Ollama | llama3 | ask | main | update 1.37.3 available</code></pre>
166
+ <pre><code>Ollama | llama3 | ask | main | update 1.45.4 available</code></pre>
163
167
  <p>The interactive status bar shows only important runtime state: provider, model, mode, branch, active tasks, checks status when known, and update availability. It is hidden in CI, dumb terminals, and print mode.</p>
164
168
  </article>
165
169
  </div>
@@ -396,13 +400,14 @@ ur arena "fix the parser" --agents 3 --apply</code></pre>
396
400
  <article>
397
401
  <h3>Repair failing CI in a bounded loop</h3>
398
402
  <ol>
399
- <li>Run the build or test command.</li>
400
- <li>Summarize the failure and launch a fix attempt.</li>
403
+ <li>Run the build or test command in the printed working directory.</li>
404
+ <li>Preserve the assertion and stack context, then launch a fix attempt only for an actionable failure.</li>
401
405
  <li>Rerun until the command passes or the retry budget is exhausted.</li>
402
406
  </ol>
403
- <pre><code>ur ci-loop --command "bun test" --dry-run
404
- ur ci-loop --command "bun test" --max-attempts 3
405
- ur ci-loop --from-log failure.log --dry-run</code></pre>
407
+ <p>A <code>No tests found</code> result stops after the first attempt and points to <code>--cwd</code>; it does not invoke a fix agent.</p>
408
+ <pre><code>ur ci-loop --command "bun test" --cwd . --dry-run
409
+ ur ci-loop --command "bun test" --cwd ./packages/app --max-attempts 3
410
+ ur ci-loop --from-log failure.log --cwd . --dry-run</code></pre>
406
411
  </article>
407
412
 
408
413
  <article>
@@ -453,7 +458,7 @@ ur artifacts approve 1</code></pre>
453
458
  <pre><code>OLLAMA_MODEL=qwen3-coder:480b-cloud ur
454
459
  UR_MODEL=qwen3-coder:480b-cloud ur
455
460
  ur --model qwen2.5-coder:latest</code></pre>
456
- <p><code>OLLAMA_MODEL</code> wins over <code>UR_MODEL</code>. Without either, UR routes from local Ollama model inventory.</p>
461
+ <p><code>OLLAMA_MODEL</code> wins over <code>UR_MODEL</code>. Without an explicit or workspace model, interactive startup opens the provider/model picker and fresh print mode exits before model execution.</p>
457
462
  </article>
458
463
  <article>
459
464
  <h3>Permissions</h3>
@@ -554,6 +559,12 @@ ur agent-inspect --file session.jsonl
554
559
  ur artifacts list
555
560
  ur eval report starter
556
561
  ur claim-ledger validate</code></pre>
562
+ </article>
563
+ <article>
564
+ <h3>CI loop reports no tests</h3>
565
+ <p>Use the working directory printed in the result. The loop stops after one attempt because changing code cannot repair a test-discovery cwd error.</p>
566
+ <pre><code>ur ci-loop --command "bun test" --cwd . --max-attempts 3
567
+ ur ci-loop --command "bun test" --cwd ./packages/app --max-attempts 3</code></pre>
557
568
  </article>
558
569
  <article>
559
570
  <h3>New agent-platform command is missing</h3>
@@ -5,7 +5,7 @@ plugins {
5
5
  }
6
6
 
7
7
  group = "dev.urnexus"
8
- version = "1.45.2"
8
+ version = "1.45.4"
9
9
 
10
10
  repositories {
11
11
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.45.2",
5
+ "version": "1.45.4",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.45.2",
3
+ "version": "1.45.4",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",