ur-agent 1.45.5 → 1.46.0

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/docs/A2A.md ADDED
@@ -0,0 +1,143 @@
1
+ # Agent2Agent (A2A)
2
+
3
+ UR exposes an opt-in agent-to-agent server with two deliberately distinct API
4
+ surfaces:
5
+
6
+ | Surface | Path | Contract |
7
+ | --- | --- | --- |
8
+ | Agent Card | `/.well-known/agent-card.json` | Public discovery metadata that exactly describes the running server |
9
+ | A2A JSON-RPC | `/a2a/jsonrpc` | A2A protocol v0.3, implemented with the official stable JavaScript SDK |
10
+ | UR compatibility API | `/a2a/tasks` and `/a2a/tasks/:id` | UR-specific REST-style background-task controls; not an A2A REST binding |
11
+
12
+ The A2A specification itself is at v1. UR does not claim v1 conformance yet:
13
+ the official JavaScript SDK's v1 support is prerelease, while its current
14
+ stable line implements v0.3. UR will migrate and run the official conformance
15
+ suite when a stable JavaScript v1 path is available.
16
+
17
+ ## Start the server
18
+
19
+ Loopback without authentication is allowed for local development:
20
+
21
+ ```sh
22
+ ur a2a serve --port 8765
23
+ ```
24
+
25
+ For authenticated use, keep secrets out of process arguments:
26
+
27
+ ```sh
28
+ UR_A2A_TOKEN='<random-secret>' ur a2a serve --port 8765
29
+ ```
30
+
31
+ An off-loopback bind requires either `UR_A2A_TOKEN` or
32
+ `UR_A2A_DELEGATION_SECRET`. A wildcard bind also requires a reachable external
33
+ base URL so the Agent Card never advertises `0.0.0.0`:
34
+
35
+ ```sh
36
+ UR_A2A_TOKEN='<random-secret>' \
37
+ ur a2a serve --host 0.0.0.0 --port 8765 \
38
+ --public-base-url https://agent.example.com
39
+ ```
40
+
41
+ Terminate TLS at a trusted reverse proxy for non-loopback deployments; bearer
42
+ tokens must not travel over plaintext networks.
43
+
44
+ ## Agent Card and protocol calls
45
+
46
+ Inspect the live card:
47
+
48
+ ```sh
49
+ curl -s http://127.0.0.1:8765/.well-known/agent-card.json
50
+ ```
51
+
52
+ The card advertises protocol `0.3.0`, `JSONRPC`, `/a2a/jsonrpc`, unary task
53
+ execution, the installed UR version, skills, and only the authentication
54
+ schemes actually configured for that server.
55
+
56
+ Send a blocking message:
57
+
58
+ ```sh
59
+ curl -s http://127.0.0.1:8765/a2a/jsonrpc \
60
+ -H 'content-type: application/json' \
61
+ -H 'A2A-Version: 0.3' \
62
+ -H "authorization: Bearer $UR_A2A_TOKEN" \
63
+ -d '{
64
+ "jsonrpc":"2.0",
65
+ "id":"request-1",
66
+ "method":"message/send",
67
+ "params":{
68
+ "configuration":{"blocking":true},
69
+ "metadata":{"skill":"coding-agent"},
70
+ "message":{
71
+ "kind":"message",
72
+ "messageId":"message-1",
73
+ "role":"user",
74
+ "parts":[{"kind":"text","text":"Review the current diff."}]
75
+ }
76
+ }
77
+ }'
78
+ ```
79
+
80
+ Set `configuration.blocking` to `false` to receive a working task promptly,
81
+ then call `tasks/get`; use `tasks/cancel` for a nonterminal task. The stable
82
+ binding supports `message/send`, `tasks/get`, and `tasks/cancel`. Streaming,
83
+ resubscription, push notifications, and authenticated extended cards are not
84
+ advertised and return protocol errors if requested.
85
+
86
+ `params.metadata.skill` selects an advertised skill; the default is
87
+ `coding-agent`. Requests with an unknown skill are rejected before execution.
88
+ Prompts enter the child process through stdin, and the child uses fail-closed
89
+ `dontAsk` permissions because this network binding has no interactive approval
90
+ bridge.
91
+
92
+ ## Delegation tokens
93
+
94
+ UR delegation tokens are short-lived HMAC-signed capabilities bound to a
95
+ subject, one audience, an expiry, and explicit skill scopes:
96
+
97
+ ```sh
98
+ export UR_A2A_DELEGATION_SECRET='<issuer-secret>'
99
+ TOKEN=$(ur a2a token mint --sub peer-a --aud ur-nexus \
100
+ --scope coding-agent --ttl 900)
101
+ printf '%s\n' "$TOKEN" | ur a2a token verify --token-stdin \
102
+ --aud ur-nexus --scope coding-agent
103
+ ```
104
+
105
+ The HMAC secret belongs only to the trusted issuer. A narrower child token can
106
+ be minted by that issuer, but an untrusted holder cannot attenuate the token
107
+ without the root signing secret. Protocol and compatibility tasks are isolated
108
+ by both delegation subject and skill, including get, continue, reference, and
109
+ cancel operations.
110
+
111
+ ## UR compatibility task API
112
+
113
+ The compatibility API preserves older UR-specific background options:
114
+
115
+ - `POST /a2a/tasks` — submit `{ prompt, skill, mode, worktree, model, maxTurns }`
116
+ - `GET /a2a/tasks` — list tasks visible to the caller
117
+ - `GET /a2a/tasks/:id` — status
118
+ - `GET /a2a/tasks/:id/output` — bounded output metadata and logs
119
+ - `POST /a2a/tasks/:id/cancel` or `DELETE /a2a/tasks/:id` — cancel
120
+
121
+ These routes do not use the A2A wire schema and must not be presented to A2A
122
+ clients as an A2A REST endpoint. `skipPermissions` additionally requires the
123
+ static operator token or a delegation scope of `permissions:bypass`.
124
+
125
+ ## Operational limits
126
+
127
+ The server bounds work with these environment variables:
128
+
129
+ - `UR_A2A_MAX_REQUEST_BYTES` and `UR_A2A_MAX_PROMPT_CHARS`
130
+ - `UR_A2A_MAX_OUTPUT_BYTES`
131
+ - `UR_A2A_MAX_SUBMISSIONS_PER_MINUTE`
132
+ - `UR_A2A_MAX_CONCURRENT_SUBMISSIONS`
133
+ - `UR_A2A_MAX_ACTIVE_TASKS`
134
+ - `UR_A2A_MAX_ACTIVE_TASKS_PER_OWNER`
135
+ - `UR_A2A_TASK_TIMEOUT_MS`
136
+
137
+ Protocol task state is persisted with owner and skill metadata in
138
+ `.ur/a2a/protocol-tasks.json` using owner-only file permissions. UR
139
+ compatibility task state remains under the same `.ur/a2a/` directory and links
140
+ to `.ur/background/` output files.
141
+
142
+ References: [A2A v1 specification](https://a2a-protocol.org/latest/specification/),
143
+ [official JavaScript SDK](https://github.com/a2aproject/a2a-js).
package/docs/ACP.md CHANGED
@@ -1,13 +1,14 @@
1
- # Agent Communication / Client Protocol (ACP)
1
+ # Agent Client Protocol (ACP)
2
2
 
3
- UR exposes two ACP surfaces:
3
+ UR exposes one native ACP transport and one separate HTTP integration surface:
4
4
 
5
- 1. **Stdio ACP agent** (`ur acp stdio`) — newline-delimited JSON-RPC over stdio,
6
- the protocol Zed and ACP-capable editors speak. Use this for native editor
7
- integration.
8
- 2. **HTTP JSON-RPC server** (`ur acp serve`) — a loopback HTTP endpoint for
9
- scripting, task delegation, and custom clients. This is **not** Zed-style
10
- stdio ACP; use the stdio agent for native ACP editors.
5
+ 1. **Stdio ACP agent** (`ur acp stdio`) — the stable ACP v1 wire protocol over
6
+ newline-delimited JSON-RPC, implemented with the official TypeScript SDK.
7
+ Use this for Zed and other native ACP clients.
8
+ 2. **UR HTTP JSON-RPC compatibility server** (`ur acp serve`) — a separate
9
+ loopback endpoint for scripting, the experimental JetBrains plugin, tool
10
+ calls, and background tasks. It is not an ACP transport binding and is not
11
+ advertised as one.
11
12
 
12
13
  ## Stdio ACP agent
13
14
 
@@ -16,6 +17,8 @@ ur acp stdio
16
17
  ```
17
18
 
18
19
  The editor launches this process and exchanges one JSON-RPC object per line.
20
+ The official SDK owns wire parsing, request concurrency, notification
21
+ semantics, and error envelopes.
19
22
 
20
23
  Methods:
21
24
 
@@ -24,9 +27,11 @@ Methods:
24
27
  | `initialize` | client → agent | `{ protocolVersion, agentCapabilities, authMethods }` |
25
28
  | `authenticate` | client → agent | `{}` (no auth required for local stdio) |
26
29
  | `session/new` | client → agent | `{ sessionId }` |
30
+ | `session/resume` | client → agent | restores a persisted session without replaying history |
31
+ | `session/close` | client → agent | cancels active work and releases the in-process session |
27
32
  | `session/prompt` | client → agent | `{ stopReason }`, with streaming `session/update` notifications |
28
33
  | `session/cancel` | client → agent (notification) | aborts the in-flight prompt |
29
- | `shutdown` | clientagent | `null` |
34
+ | `session/request_permission` | agentclient | asks the user to allow or reject a tool call |
30
35
 
31
36
  During `session/prompt` the agent emits `session/update` notifications:
32
37
 
@@ -38,22 +43,61 @@ During `session/prompt` the agent emits `session/update` notifications:
38
43
  ```
39
44
 
40
45
  `session/prompt` resolves with `{ "stopReason": "end_turn" }` (or `"cancelled"`
41
- if a `session/cancel` arrived). Configure it with `ur ide config zed`.
46
+ if a `session/cancel` arrived). Repeated prompts resume the underlying UR CLI
47
+ conversation for that ACP session. Stable `session/resume` reconnects after an
48
+ agent restart without replaying history; UR stores only the ACP-to-CLI session
49
+ identity and working directory in mode-`0600` metadata under
50
+ `~/.ur/acp/sessions/`. MCP credentials are never written there. Configure the
51
+ agent with `ur ide config zed`.
52
+
53
+ The stdio surface advertises text and resource-link prompt support, additional
54
+ workspace directories, MCP stdio/HTTP/SSE transports, and stable resume/close
55
+ capabilities. Client-provided MCP configuration is validated, written to a
56
+ mode-`0600` temporary file instead of argv, and removed after each turn. Image,
57
+ audio, embedded-context, and `session/load` capabilities are not advertised;
58
+ `session/load` requires full history replay, while `session/resume` deliberately
59
+ does not replay it.
60
+
61
+ Tool calls that require approval are bridged to the client's native ACP
62
+ permission UI with allow-once, reject, and (when UR supplies a durable rule)
63
+ always-allow choices. Cancellation and client errors fail closed. The prompt is
64
+ sent over stdin rather than argv. Session count, prompt size, output size, and
65
+ runtime are bounded by `UR_ACP_STDIO_MAX_SESSIONS`,
66
+ `UR_ACP_STDIO_MAX_PROMPT_CHARS`, `UR_ACP_STDIO_MAX_OUTPUT_CHARS`, and
67
+ `UR_ACP_STDIO_PROMPT_TIMEOUT_MS`.
42
68
 
43
69
  ## HTTP JSON-RPC server
44
70
 
45
71
  ```sh
46
- ur acp serve --host 127.0.0.1 --port 8123 [--token <secret>] [--debug]
72
+ UR_ACP_TOKEN='<secret>' ur acp serve --host 127.0.0.1 --port 8123 [--debug]
47
73
  ur acp status [--json]
48
74
  ur acp stop
49
75
  ```
50
76
 
51
- Binds to loopback only; binding off-loopback requires `--token`. `--debug` logs
52
- each method and outcome to stderr. POST JSON-RPC to `/acp`; `GET /healthz`
53
- returns `{ ok: true }`.
77
+ Binds to loopback by default; binding off-loopback requires a bearer token.
78
+ Prefer `UR_ACP_TOKEN` because command-line secrets may be visible to other
79
+ local processes. `--debug` logs method names and outcomes—not request params or
80
+ secrets—to stderr. POST JSON-RPC to `/acp`; `GET /healthz` returns `{ ok: true }`.
81
+
82
+ Tool calls are schema-validated and pass through the normal permission engine.
83
+ Because the HTTP API has no interactive approval channel, requests that need an
84
+ approval fail closed. Requests, prompts, tool I/O, task submission rate, tool
85
+ call rate, concurrency, retained sessions/tasks, response size, and runtime are
86
+ bounded. A session may select an existing subdirectory of the configured server
87
+ workspace, but cannot escape that root (including through symlinks). Deployments
88
+ can tune these defaults with `UR_ACP_MAX_REQUESTS_PER_MINUTE`,
89
+ `UR_ACP_MAX_CONCURRENT_REQUESTS`, `UR_ACP_MAX_REQUEST_BYTES`,
90
+ `UR_ACP_MAX_RESPONSE_BYTES`, `UR_ACP_MAX_ERROR_CHARS`,
91
+ `UR_ACP_MAX_PROMPT_CHARS`, `UR_ACP_MAX_SESSIONS`,
92
+ `UR_ACP_MAX_ACTIVE_TASKS`, `UR_ACP_MAX_RETAINED_TASKS`,
93
+ `UR_ACP_MAX_TASKS_PER_MINUTE`, `UR_ACP_MAX_CONCURRENT_TASKS`,
94
+ `UR_ACP_MAX_TASK_OUTPUT_BYTES`, `UR_ACP_TASK_TIMEOUT_MS`,
95
+ `UR_ACP_MAX_TOOL_CALLS_PER_MINUTE`, `UR_ACP_MAX_CONCURRENT_TOOL_CALLS`,
96
+ `UR_ACP_TOOL_TIMEOUT_MS`, `UR_ACP_MAX_TOOL_INPUT_CHARS`, and
97
+ `UR_ACP_MAX_TOOL_OUTPUT_CHARS` environment variables.
54
98
 
55
99
  Methods: `initialize` (returns `capabilities` and `workspaceRoot`),
56
- `session/new`, `session/prompt`, `session/cancel`, `tools/list`, `tools/call`,
100
+ `session/new`, `session/prompt`, `session/cancel`, `session/close`, `tools/list`, `tools/call`,
57
101
  `tasks/send` / `tasks/get` / `tasks/cancel`, `ide/diffCapture`, `ide/select`,
58
102
  and `shutdown` (acknowledges, then stops the server).
59
103
 
@@ -75,8 +119,8 @@ curl -s http://127.0.0.1:8123/acp \
75
119
 
76
120
  ## Capabilities and limitations
77
121
 
78
- - The stdio agent streams via `session/update`; token-level granularity depends
79
- on the active provider.
122
+ - The stdio agent streams text deltas via `session/update`; chunk granularity
123
+ depends on the active provider's stream.
80
124
  - The HTTP server returns unary responses (`streaming: false`); use the stdio
81
125
  agent for incremental updates.
82
126
  - Neither surface silently falls back to another provider; dispatch failures are
@@ -9,6 +9,30 @@ reproducible autonomous software engineering agent: every substantial task can
9
9
  be driven as `spec -> plan -> patch -> test -> report -> rollback`, with the
10
10
  spec as the durable source of truth and command evidence as the success gate.
11
11
 
12
+ ## v1.46.0 Additions
13
+
14
+ - Native ACP v1 stdio support now uses the official SDK and includes durable
15
+ sessions, resume/close, MCP server configuration, additional roots,
16
+ permission requests, cancellation, and streaming updates. The separate HTTP
17
+ automation API is documented as UR JSON-RPC rather than mislabelled ACP.
18
+ - A2A interoperability now uses the official stable JavaScript SDK for the
19
+ advertised v0.3 JSON-RPC binding, with authenticated discovery, scoped
20
+ delegation, durable tasks, cancellation, and bounded request execution.
21
+ - The VS Code Actions view can safely start, inspect, and cancel background
22
+ tasks, including isolated worktree execution. The JetBrains client now
23
+ propagates cancellation, rejects overlapping prompts, and closes sessions.
24
+ - Background-task state uses locked, atomic, private manifest writes with
25
+ corruption detection, structural limits, and symlink-safe artifact paths.
26
+ - Provider protocol handling, MCP validation, CI supply-chain controls, release
27
+ version checks, and secret-input paths received additional compatibility and
28
+ security coverage.
29
+
30
+ ## v1.45.6 Additions
31
+
32
+ - Project verification approval is deduplicated per user turn. The agent asks
33
+ once before the final compile/test/lint commands, then respects that decision
34
+ without presenting the same gate again.
35
+
12
36
  ## v1.45.5 Additions
13
37
 
14
38
  - Ollama Cloud requests have bounded response-header and streaming phases and
@@ -175,7 +199,7 @@ components instead of one giant prompt.
175
199
 
176
200
  | Addition | Surface | What it adds |
177
201
  | --- | --- | --- |
178
- | ACP server for IDE extensions | `ur acp serve\|stop\|status` | HTTP+JSON-RPC Agent Communication Protocol server that exposes tool listing, tool calls, task submission, and status for VS Code/Cursor/Zed-like editors. |
202
+ | ACP and IDE transports | `ur acp stdio`; `ur acp serve\|stop\|status` | Official-SDK ACP v1 stdio agent for native ACP editors, plus a distinct UR HTTP JSON-RPC API for tools, tasks, scripts, and the experimental JetBrains plugin. |
179
203
  | Non-interactive pool execution | `ur exec [prompts...]` | Run one or more prompts headlessly with optional concurrency, worktrees, output capture, and dry-run. |
180
204
  | GitHub tool | `GitHub` | PR/issue/repo operations via the `gh` CLI. |
181
205
  | API tool | `Api` | REST HTTP calls with JSON/text output. |
@@ -234,7 +258,7 @@ and route model work through the local Ollama-backed UR runtime.
234
258
  | Auto compaction and memory retention | `compaction.autoThreshold`, `ur memory retention` | Configurable context compaction threshold plus TTL/max/decay pruning for `.ur/memory/*.jsonl` |
235
259
  | Code-index auto-reindex | `codeIndex.autoReindex`, `ur code-index watch` | File watcher that rebuilds the local semantic code index after source changes |
236
260
  | Live artifact steering | `ur artifacts comment <id> --feedback ... --task <bg_id>` | Artifact feedback is queued into the linked background task inbox and injected into active stream-json background agents as `priority: "now"` turns |
237
- | Full opt-in A2A task server | `ur a2a serve`, `/a2a/tasks` lifecycle routes | Token/delegation-protected task submission, status, output, and cancel routes backed by local background tasks |
261
+ | Opt-in A2A + compatibility server | `ur a2a serve`, `/a2a/jsonrpc`, `/a2a/tasks` | Official-SDK A2A v0.3 JSON-RPC task lifecycle plus clearly separate token/delegation-protected UR background-task compatibility routes |
238
262
  | IDE inline diff bundles | `ur ide diff capture|list|show|comment|schema`, `extensions/vscode-ur-inline-diffs/` | Editor-readable `.ur/ide/diffs/` manifest, metadata, patch files, comments, plus a native VS Code tree/webview review extension |
239
263
  | Benchmark adapters | `ur eval bench swe-bench|terminal-bench|aider-polyglot` | Imports local benchmark JSON/JSONL exports into UR eval suites without external downloads |
240
264
 
@@ -247,7 +271,7 @@ and route model work through the local Ollama-backed UR runtime.
247
271
  | Model capability report | `ur model-doctor` | Local Ollama model inventory with context length, advertised capabilities, and likely vision/code readiness |
248
272
  | Reusable agent templates | `ur agent-templates install` | Project agents for review, tests, browser QA, docs research, security, release notes, PR fixes, and memory curation |
249
273
  | GitHub agent runner | `.github/workflows/ur.yml` scaffold | Opt-in CI entry point for manual prompts or `/ur` issue comments |
250
- | A2A adapter handoff | `ur a2a serve` | Loopback Agent Card and token-gated task execution endpoint |
274
+ | A2A interoperability | `ur a2a serve` | Accurate Agent Card, stable A2A v0.3 JSON-RPC binding, and separate UR compatibility task API; A2A v1 waits for the official stable JS SDK |
251
275
  | Semantic memory index | `ur semantic-memory build|search` | Local memory index over durable memory, docs, README, and UR instructions |
252
276
  | Claim provenance ledger | `ur claim-ledger add|list|validate` | Maps generated claims to web, file, MCP, tool, or user sources |
253
277
  | Browser replay evals | `ur browser-qa list|validate|run` | Validates replay fixtures and performs lightweight target smoke checks |
@@ -262,7 +286,7 @@ tasks, custom agents, memory files, browser workflows, evidence commands, A2A
262
286
  Agent Card export, and local Ollama routing; these surfaces make those
263
287
  capabilities easier to discover and reuse.
264
288
 
265
- Network-facing behavior, such as a full A2A task server or a GitHub bot that can
289
+ Network-facing behavior, such as the opt-in A2A server or a GitHub bot that can
266
290
  push code, should remain explicitly opt-in because it changes the trust and
267
291
  permission boundary.
268
292
 
@@ -1,7 +1,10 @@
1
1
  # Agent Trend Coverage
2
2
 
3
- UR is a local-first terminal coding agent. This page tracks how UR maps to the
4
- current agent platform trends and where future work should go next.
3
+ UR is a provider-flexible, local-first terminal coding agent. This page tracks
4
+ how UR maps to current agent-platform trends and where future work should go
5
+ next. The factual comparison below is a **2026-07-15 research snapshot**; run
6
+ `ur agent-trends` for the versioned machine-readable report and re-check the
7
+ linked primary sources before acting on prerelease standards.
5
8
 
6
9
  ## Quick Commands
7
10
 
@@ -66,12 +69,14 @@ Inside an interactive session:
66
69
 
67
70
  | Trend | UR status | Current coverage | Professional next step |
68
71
  | --- | --- | --- | --- |
69
- | Local-first model runtime | Covered | local Ollama app endpoint, local and Ollama Cloud-backed models exposed through that app, model auto-routing | Add model capability reporting for tools, vision, context length, and multimodal readiness |
70
- | MCP tool ecosystem | Covered | `ur mcp`, MCP OAuth/XAA helpers, elicitation, permission checks, shared tool registry | Keep MCP registry/security guidance current as the spec evolves |
71
- | A2A / Agent Card interoperability | Covered | `ur a2a card`, `/a2a-card`, and opt-in `ur a2a serve` with task lifecycle routes and bearer/delegation auth | Track A2A spec changes and keep the server disabled unless explicitly started |
72
+ | Provider-flexible, local-first runtime | Covered | Local Ollama; direct OpenAI, Anthropic, Gemini, OpenRouter, and OpenAI-compatible APIs; authenticated subscription-CLI adapters; explicit provider selection | Normalize capability discovery across providers and make automatic per-step routing opt-in |
73
+ | MCP tool ecosystem | Covered | `ur mcp`, MCP OAuth/XAA helpers, elicitation, fail-closed permission checks, bounded execution, shared tool registry | Keep the production v1 SDK pinned while testing the final 2026 stateless-core transition separately |
74
+ | MCP Tasks and MCP Apps | Adapter-ready | UR's durable task engine could back protocol tasks, but UR advertises neither experimental Tasks nor an Apps renderer | Prototype negotiated extensions; ship only against a final spec and production SDK, with context-bound task auth and cancellation |
75
+ | A2A / Agent Card interoperability | Partial | Official-SDK A2A v0.3 Agent Card + JSON-RPC binding at `/a2a/jsonrpc`; separate UR compatibility task routes; bearer/delegation auth | Add a negotiated v1 dual stack, signed-card verification, and official TCK coverage when the JavaScript SDK v1 line is stable |
72
76
  | Durable workflows and checkpoints | Covered | resume, rewind, `ur bg` background runs, optional worktrees/PRs, cron/workflow internals, file restore | Publish a checkpointed workflow format for repeated automations |
73
77
  | Multi-agent orchestration | Covered | built-in planning, exploration, verification, and general-purpose agents; custom agents | Document reusable team patterns and role selection |
74
- | Long-term memory | Covered | `/remember`, `/forget`, `.ur/memory`, semantic memory, research notes, team memory, consolidation, `ur memory retention` | Tune retention defaults from real long-run telemetry |
78
+ | Long-term memory | Partial | `/remember`, `/forget`, `.ur/memory`, optional local dense retrieval plus lexical fallback, semantic code search, provenance, consolidation, retention | Add scope deletion guarantees and integrity baselines, quarantine, and rollback for poisoned memory writes |
79
+ | Portable Agent Skills | Partial | Project/user/plugin/remote/bundled `SKILL.md` support, lazy Skill tool, creation and skillification, skill-scoped permissions | Add strict open-spec validation plus signed provenance and permission manifests before community-registry installation |
75
80
  | Semantic codebase retrieval | Covered | local embedding-based code index (`ur code-index`), opt-in `CodeSearch` tool, incremental re-index, auto-reindex watcher, Ollama embeddings | Add richer symbol-aware ranking |
76
81
  | Reliable repo editing | Covered | `ur repo-edit` builds a file/symbol index, performs AST-aware JS/TS identifier rename planning, previews patches before writing, and applies multi-file edits transactionally with rollback on syntax or check failure | Extend AST edits beyond identifier rename into import moves and signature-aware refactors |
77
82
  | Permission and safety policy | Covered | `ur safety`, `.ur/safety-policy.json`, pre-Bash safety evaluation, read/write/execute/network command classes, destructive-command approval, sandbox recommendations, and secret exfiltration denial | Record sandbox attestation in every risky command's evidence trail |
@@ -79,18 +84,20 @@ Inside an interactive session:
79
84
  | AGENTS.md interoperability | Covered | `AGENTS.md` loaded as runtime project context (before `UR.md`), plus imported by the `/init` command | Keep aligned as the AGENTS.md spec evolves |
80
85
  | Browser and computer-use workflows | Covered | `/browser`, `/chrome`, Playwright-aware tasks, WebSearch, WebFetch, risky-action approval | Add more release fixtures with screenshots and replay assertions |
81
86
  | Provenance and citations | Partial | WebFetch source URLs, `/cite`, `/graph`, `/trace`, evidence ledgers | Add claim-to-source mapping for web/MCP answers |
82
- | Evals and observability | Covered | verifier gates, `.ur/verify.json`, `/verify`, `/trace`, OpenTelemetry hooks, release checks, eval dashboard, benchmark adapters | Publish benchmark numbers from local reproducible suites |
87
+ | Evals and observability | Partial | verifier gates, `.ur/verify.json`, `/verify`, `/trace`, OpenTelemetry hooks, replayable evals, dashboard, benchmark adapters | Grade complete trajectories in CI and publish versioned pass rates by category |
88
+ | Standard GenAI telemetry | Partial | Internal interaction/model/tool/agent/hook spans and bounded Perfetto traces | Dual-emit current OpenTelemetry GenAI semantics with sensitive content redacted by default |
83
89
  | Test-first execution | Covered | `ur test-first` detects compile/test/lint commands, stores failure traces, retries through a fix agent, and installs detected commands into `.ur/verify.json` for edit-time gates | Add per-package command plans for large monorepos |
84
- | Security and prompt-injection resistance | Covered | allow/ask/deny permissions, shell safety analysis, secret scan, untrusted web-content guidance, OS-level execution sandbox (macOS Seatbelt, Linux bubblewrap) | Continuously test web/MCP injection cases |
85
- | Agent identity and delegated authorization | Covered | MCP OAuth/XAA helpers, A2A bearer/delegation tokens, local trust boundaries, permission rules | Keep delegated scopes narrow and auditable |
90
+ | Security and prompt-injection resistance | Covered | allow/ask/deny permissions, shell safety analysis, secret scan, untrusted web-content guidance, OS-level execution sandbox (macOS Seatbelt, Linux bubblewrap) | Continuously test web/MCP/repository/skill/memory injection, confused-deputy, and tool-abuse cases |
91
+ | Agent identity and delegated authorization | Covered | MCP OAuth/XAA helpers, issuer-minted A2A bearer/delegation tokens, subject/audience/expiry/skill binding, local trust boundaries, permission rules | Keep delegated scopes narrow and auditable; HMAC child-token narrowing remains issuer-side |
86
92
  | Multimodal workflows | Partial | `/image`, `/video`, `/youtube`, `/voice`, browser workflows | Add model-aware multimodal capability reporting for local Ollama setups |
87
93
  | 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
94
  | 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
95
  | 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
96
  | 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
97
  | 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
- | 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
- | 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 |
98
+ | Native IDE review | Covered | `ur ide diff` bundles, a VS Code tree/webview/comment surface with background task controls, and a buildable JetBrains ACP client with cancellation | Add signed marketplace packaging and keep behavior parity covered in editor-host integration tests |
99
+ | ACP / IDE agent server | Partial | Official-SDK ACP v1 stdio agent with permission requests, MCP stdio/HTTP/SSE, additional roots, persistent resume, close, and cancellation; separate UR HTTP JSON-RPC for scripts | Add paginated `session/list`/`session/delete`, then exact-history `session/load`; advertise config/slash capabilities only when complete |
100
+ | Provider-native durable inference | Partial | UR provides provider-independent background processes and local compaction, while direct OpenAI requests still use Chat Completions | Add an opt-in Responses adapter for background/WebSocket execution, server compaction, and deferred tool discovery with privacy-aware defaults |
94
101
  | External tool integration | Covered | Built-in `GitHub`, `Api`, `Browser`, `Docker`, `TestRunner`, and `Database` tools complement existing file-system, terminal, web, and MCP tools | Add richer output parsing and error recovery |
95
102
 
96
103
  ## v1.13.9 Direct CLI Surfaces
@@ -111,18 +118,62 @@ ur artifacts capture-tests --command "bun test"
111
118
 
112
119
  ## A2A Position
113
120
 
114
- UR exports an Agent Card so other tools can discover what UR is and what it can
115
- do. `ur a2a serve` is the opt-in task server: it exposes health, Agent Card,
116
- task submission, task listing, task status, output, and cancellation routes. It
117
- refuses off-loopback binds unless bearer or delegation authentication is
118
- configured, and task execution stays backed by local UR background tasks.
121
+ `ur a2a serve` exposes a real A2A v0.3 JSON-RPC binding, implemented by the
122
+ official stable JavaScript SDK, at `/a2a/jsonrpc`. Its discoverable Agent Card
123
+ is served at `/.well-known/agent-card.json`; the advertised URL, transport,
124
+ protocol version, capabilities, and configured security schemes match the
125
+ running server. Protocol tasks are durable under `.ur/a2a/`, and retrieval,
126
+ continuation, references, and cancellation are isolated by delegation subject
127
+ and skill scope. Streaming and push notifications are not advertised.
128
+
129
+ The existing `/a2a/tasks` submission/list/status/output/cancel routes are a
130
+ separate **UR compatibility API**, not an A2A REST binding. They remain useful
131
+ for UR background-task options such as worktrees and bounded turns. On these
132
+ routes, `skipPermissions` is rejected unless the caller uses the static
133
+ operator token or a token that grants `permissions:bypass`; the official A2A
134
+ runner always uses fail-closed `dontAsk` permissions.
135
+
136
+ The server refuses unauthenticated off-loopback binds and requires
137
+ `--public-base-url` for wildcard binds so discovery never advertises
138
+ `0.0.0.0`. Prefer `UR_A2A_TOKEN` and `UR_A2A_DELEGATION_SECRET` over argv
139
+ secrets. Request size, prompt size, output size, submission rate, concurrent
140
+ submissions, and active tasks are bounded by `UR_A2A_*` settings. The current
141
+ A2A protocol release is v1, but the official JavaScript SDK's stable line still
142
+ implements v0.3 and its `next` v1 line is beta. UR deliberately stays on the
143
+ official stable v0.3 binding until a production v1 SDK and conformance path are
144
+ available, then should run both versions during a negotiated migration.
119
145
 
120
146
  ## Model Runtime Position
121
147
 
122
- UR intentionally sends model requests only to the local Ollama app. If that app
123
- exposes local models or Ollama Cloud-backed models, UR treats them the same way:
124
- as models available through the local Ollama endpoint. This keeps provider
125
- configuration out of UR and avoids direct model API key handling.
148
+ UR is local-first, not local-only. Ollama supports private on-device execution;
149
+ direct adapters support OpenAI, Anthropic, Gemini, OpenRouter, and compatible
150
+ endpoints; subscription adapters use the provider's authenticated CLI. Provider
151
+ and model selection are explicit, credentials are resolved through the
152
+ credential layer, and the optional fallback setting is diagnostic advice rather
153
+ than an automatic provider switch.
154
+
155
+ ## 2026-07-15 Frontier Priorities
156
+
157
+ The research conducted after the `1.46.0` version bump produced this ordered
158
+ backlog. Prerelease protocol work should remain behind capability flags and must
159
+ not replace the production path until its SDK and conformance tooling are stable.
160
+
161
+ 1. Add an A2A v1 dual stack with version negotiation, signed Agent Card
162
+ verification, multi-tenant isolation, and official TCK coverage.
163
+ 2. Complete ACP's durable session lifecycle with paginated `session/list` and
164
+ `session/delete`; implement `session/load` only with exact ordered replay.
165
+ 3. Prepare for MCP's stateless core and negotiated Tasks/Apps extensions on a
166
+ compatibility branch. The announced 2026-07-28 specification is not yet the
167
+ production baseline for this snapshot.
168
+ 4. Add an opt-in Responses adapter: privacy-aware background execution,
169
+ authenticated webhooks or bounded polling, WebSocket continuation, opaque
170
+ compaction preservation, and deferred tool search.
171
+ 5. Adopt OpenTelemetry GenAI semantic conventions and trace graders as CI
172
+ regression gates without exporting prompts, tool arguments, retrieval
173
+ queries, or results by default.
174
+ 6. Treat durable memories and installable skills as supply-chain inputs:
175
+ validate provenance, constrain capabilities, quarantine suspicious writes,
176
+ and provide integrity snapshots and rollback.
126
177
 
127
178
  ## Source And Trust Policy
128
179
 
@@ -141,13 +192,23 @@ Professional answer requirements:
141
192
 
142
193
  ## References
143
194
 
144
- - OpenAI Agents SDK: https://openai.github.io/openai-agents-python/
145
- - OpenAI Agents SDK tracing: https://openai.github.io/openai-agents-python/tracing/
195
+ - OpenAI Responses background mode: https://developers.openai.com/api/docs/guides/background
196
+ - OpenAI Responses WebSocket mode: https://developers.openai.com/api/docs/guides/websocket-mode
197
+ - OpenAI Responses compaction: https://developers.openai.com/api/docs/guides/compaction
198
+ - OpenAI deferred tool search: https://developers.openai.com/api/docs/guides/tools-tool-search
199
+ - OpenAI agent evals: https://developers.openai.com/api/docs/guides/agent-evals
146
200
  - Model Context Protocol: https://modelcontextprotocol.io/docs/getting-started/intro
147
- - MCP elicitation specification: https://modelcontextprotocol.io/specification/2025-06-18/client/elicitation
201
+ - MCP 2026-07-28 release candidate: https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
202
+ - MCP Tasks extension: https://modelcontextprotocol.io/extensions/tasks/overview
203
+ - ACP v1 schema: https://agentclientprotocol.com/protocol/v1/schema
148
204
  - A2A protocol specification: https://a2a-protocol.org/latest/specification/
205
+ - A2A JavaScript SDK: https://github.com/a2aproject/a2a-js
206
+ - Open Agent Skills specification: https://openagentskills.dev/docs/specification
207
+ - OpenTelemetry GenAI semantic conventions: https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/
208
+ - OWASP AI Agent Security Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/AI_Agent_Security_Cheat_Sheet.html
209
+ - OWASP Agent Memory Guard: https://owasp.org/www-project-agent-memory-guard/
149
210
  - LangGraph overview: https://docs.langchain.com/oss/python/langgraph/overview
150
- - OpenAI computer use guide: https://platform.openai.com/docs/guides/tools-computer-use
211
+ - OpenAI computer use guide: https://developers.openai.com/api/docs/guides/tools-computer-use
151
212
  - Ollama docs: https://docs.ollama.com/
152
- - MCP authorization specification: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
153
- - MCP security best practices: https://modelcontextprotocol.io/specification/2025-06-18/basic/security_best_practices
213
+ - MCP authorization specification: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
214
+ - MCP security best practices: https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices
@@ -311,7 +311,7 @@ Behaviour is controlled by environment variables:
311
311
  ```sh
312
312
  # Overall mode (default: strict) — controls the L1 gates
313
313
  UR_VERIFIER_MODE=strict # all L1 gates on: done-claim, loops, empty turn,
314
- # project gates
314
+ # project gates; approval is requested once per user turn
315
315
  UR_VERIFIER_MODE=loose # only empty-turn check + loop detector
316
316
  UR_VERIFIER_MODE=off # disable verifier entirely
317
317
 
@@ -447,10 +447,47 @@ ur mcp list
447
447
  ur mcp get <name>
448
448
  ur mcp add-json <name> '<json>'
449
449
  ur mcp remove <name>
450
+ ur mcp serve
450
451
  ```
451
452
 
452
453
  MCP servers may execute code or access external services. Only enable servers you trust, and keep credentials out of committed config.
453
454
 
455
+ When UR itself runs as an MCP server, tool requests are non-interactive:
456
+ schema validation and normal permission checks still run, and any operation
457
+ that would require an approval prompt is rejected. Resource limits can be
458
+ adjusted with `UR_MCP_MAX_CALLS_PER_MINUTE`,
459
+ `UR_MCP_MAX_CONCURRENT_CALLS`, `UR_MCP_TOOL_TIMEOUT_MS`,
460
+ `UR_MCP_MAX_INPUT_CHARS`, and `UR_MCP_MAX_OUTPUT_CHARS`.
461
+
462
+ ## Background Agents
463
+
464
+ Detached `ur bg` task state is stored under `.ur/background/`. Manifest updates
465
+ use a cross-process lock and atomic mode-`0600` replacement; task logs, outputs,
466
+ and steering inboxes are created mode `0600` under mode-`0700` directories.
467
+ The loader rejects corrupt, oversized, or structurally invalid manifests rather
468
+ than silently replacing them. `UR_BACKGROUND_MAX_MANIFEST_BYTES` controls the
469
+ manifest byte ceiling (16 MiB by default, capped at 64 MiB), and
470
+ `UR_BACKGROUND_MAX_TASKS` controls the retained task ceiling (5,000 by default,
471
+ capped at 20,000).
472
+
473
+ ## Agent Servers
474
+
475
+ For native editor integration, `ur acp stdio` implements stable Agent Client
476
+ Protocol v1 through the official SDK. Its resource controls use the
477
+ `UR_ACP_STDIO_*` prefix. It supports client-provided MCP stdio/HTTP/SSE
478
+ servers, additional workspace roots, native permission requests, cancellation,
479
+ and persistent `session/resume`; see the [ACP Guide](ACP.md).
480
+
481
+ `ur acp serve` is a separate UR HTTP JSON-RPC API. Set `UR_ACP_TOKEN` instead
482
+ of putting its bearer token in argv. Request, task, and tool limits use the
483
+ `UR_ACP_*` prefix.
484
+
485
+ `ur a2a serve` exposes the stable official-SDK A2A v0.3 JSON-RPC binding and a
486
+ separate UR compatibility task API. Use `UR_A2A_TOKEN` for a static operator
487
+ token or `UR_A2A_DELEGATION_SECRET` for issuer-minted scoped tokens. Limits use
488
+ the `UR_A2A_*` prefix. See the [A2A Guide](A2A.md) for endpoints, proxy setup,
489
+ scope isolation, and the A2A v1 migration status.
490
+
454
491
  ## Plugins and Skills
455
492
 
456
493
  Plugins can add commands, tools, and skills:
@@ -35,6 +35,7 @@ bun run dev
35
35
  ```sh
36
36
  bun run typecheck
37
37
  bun run lint
38
+ bun run dependencies:audit
38
39
  bun test
39
40
  bun run build
40
41
  bun run smoke