ur-agent 1.13.5 → 1.13.7
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/CHANGELOG.md +30 -0
- package/README.md +1 -0
- package/dist/cli.js +105 -79
- package/docs/USAGE.md +3 -0
- package/docs/VALIDATION.md +1 -1
- package/documentation/README.md +18 -0
- package/documentation/app.js +625 -0
- package/documentation/assets/ur-architecture.svg +67 -0
- package/documentation/index.html +374 -0
- package/documentation/styles.css +575 -0
- package/package.json +2 -1
package/docs/VALIDATION.md
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# UR Agent Documentation Site
|
|
2
|
+
|
|
3
|
+
This folder is a static documentation project for UR Agent.
|
|
4
|
+
|
|
5
|
+
Open `index.html` directly in a browser. No build step or dev server is
|
|
6
|
+
required.
|
|
7
|
+
|
|
8
|
+
## Files
|
|
9
|
+
|
|
10
|
+
- `index.html` - documentation app shell and content sections.
|
|
11
|
+
- `styles.css` - responsive documentation layout and visual system.
|
|
12
|
+
- `app.js` - command data, search, filters, copy buttons, and navigation.
|
|
13
|
+
- `assets/ur-architecture.svg` - architecture diagram used by the docs.
|
|
14
|
+
|
|
15
|
+
## Maintenance
|
|
16
|
+
|
|
17
|
+
When adding a public command, update the `commands` array in `app.js` and add
|
|
18
|
+
examples to the relevant tutorial or workflow section in `index.html`.
|
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
const featureGroups = [
|
|
2
|
+
{
|
|
3
|
+
title: 'Core agent runtime',
|
|
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, and local Ollama execution.',
|
|
6
|
+
commands: ['ur', 'ur -p', 'ur --resume', 'ur --continue', 'ur --model <model>'],
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
title: 'Project context',
|
|
10
|
+
tags: ['UR.md', 'AGENTS.md', '.ur'],
|
|
11
|
+
text: 'Repository instructions, project settings, custom agents, skills, memory, knowledge sources, verification gates, workflows, evals, and local state.',
|
|
12
|
+
commands: ['UR.md', 'AGENTS.md', '.ur/agents', '.ur/workflows', '.ur/knowledge'],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
title: 'Agent platform',
|
|
16
|
+
tags: ['workflow', 'pattern', 'crew', 'goal'],
|
|
17
|
+
text: 'Durable workflows, collaboration patterns, parallel crews, long-horizon goals, live execution boards, and resumable checkpoint state.',
|
|
18
|
+
commands: ['ur workflow', 'ur pattern', 'ur crew', 'ur goal'],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: 'Automation and triggers',
|
|
22
|
+
tags: ['cron', 'daemon', 'webhooks'],
|
|
23
|
+
text: 'Project-local automation specs, resident scheduler installation, daemon ticks, GitHub or Slack mention parsing, and headless trigger dispatch.',
|
|
24
|
+
commands: ['ur automation', 'ur trigger'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: 'Knowledge and memory',
|
|
28
|
+
tags: ['retrieval', 'provenance', 'citations'],
|
|
29
|
+
text: 'Durable memory, semantic memory, curated knowledge sources, lexical or embedding retrieval, citations, claim ledgers, and research graph primitives.',
|
|
30
|
+
commands: ['ur knowledge', 'ur semantic-memory', 'ur remember', 'ur claim-ledger'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: 'Evaluation and verification',
|
|
34
|
+
tags: ['evals', 'review', 'QA'],
|
|
35
|
+
text: 'Replayable eval suites, self-review PR gate, browser QA fixtures, verifier reminders, trace inspection, and subagent timelines.',
|
|
36
|
+
commands: ['ur eval', 'ur agent-task', 'ur browser-qa', '/verify', '/trace'],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: 'Interoperability',
|
|
40
|
+
tags: ['MCP', 'plugins', 'A2A', 'SDK'],
|
|
41
|
+
text: 'MCP servers, plugin marketplaces, A2A Agent Card and task server, delegation tokens, and a TypeScript SDK wrapper around headless UR.',
|
|
42
|
+
commands: ['ur mcp', 'ur plugin', 'ur a2a', 'ur sdk'],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: 'Security and operations',
|
|
46
|
+
tags: ['sandbox', 'scope', 'diagnostics'],
|
|
47
|
+
text: 'Permission modes, allow/deny tool lists, optional OS sandboxing, diagnostic commands, security scope, threat modeling, hardening, and vulnerability checks.',
|
|
48
|
+
commands: ['ur doctor', '/sandbox', '/scope', '/security', '/vuln'],
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const commands = [
|
|
53
|
+
{
|
|
54
|
+
name: 'ur',
|
|
55
|
+
category: 'Core',
|
|
56
|
+
aliases: [],
|
|
57
|
+
summary: 'Start an interactive UR Agent session in the current workspace.',
|
|
58
|
+
examples: ['ur', 'ur --model qwen3-coder:480b-cloud', 'ur --continue', 'ur --resume'],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'ur -p',
|
|
62
|
+
category: 'Core',
|
|
63
|
+
aliases: ['--print'],
|
|
64
|
+
summary: 'Run one prompt headlessly and exit. This is the base mode for scripts, CI, evals, triggers, SDK calls, and A2A tasks.',
|
|
65
|
+
examples: ['ur -p "Summarize this repository"', 'ur -p --output-format json "Review the current diff"', 'ur -p --json-schema \'{"type":"object"}\' "Return structured output"'],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'a2a',
|
|
69
|
+
category: 'Interop',
|
|
70
|
+
aliases: [],
|
|
71
|
+
summary: 'A2A interoperability utilities: Agent Card, local task server, and delegation tokens.',
|
|
72
|
+
examples: ['ur a2a card', 'ur a2a serve --dry-run', 'ur a2a token mint --secret "$UR_A2A_DELEGATION_SECRET" --scope coding,review'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'agent-features',
|
|
76
|
+
category: 'Agent Platform',
|
|
77
|
+
aliases: ['agent-roadmap'],
|
|
78
|
+
summary: 'Show or initialize UR agent feature expansion scaffolds.',
|
|
79
|
+
examples: ['ur agent-features', 'ur agent-features --json', 'ur agent-features init --force'],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'agent-inspect',
|
|
83
|
+
category: 'Verification',
|
|
84
|
+
aliases: ['inspect-agents'],
|
|
85
|
+
summary: 'Reconstruct per-subagent timelines, verdicts, and failures from a session transcript.',
|
|
86
|
+
examples: ['ur agent-inspect --file session.jsonl', 'ur agent-inspect --file session.json --json'],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'agent-task',
|
|
90
|
+
category: 'Delivery',
|
|
91
|
+
aliases: ['task-pr'],
|
|
92
|
+
summary: 'Summarize task state, diff status, and PR handoff commands with a deterministic pre-PR self-review gate.',
|
|
93
|
+
examples: ['ur agent-task status', 'ur agent-task diff', 'ur agent-task pr --create --dry-run', 'ur agent-task pr --create --force'],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'agent-templates',
|
|
97
|
+
category: 'Agent Platform',
|
|
98
|
+
aliases: ['agent-template'],
|
|
99
|
+
summary: 'List or install reusable project agent templates such as reviewer, test-runner, security-auditor, and docs-researcher.',
|
|
100
|
+
examples: ['ur agent-templates list', 'ur agent-templates install reviewer test-runner', 'ur agent-templates install --force'],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'agent-trends',
|
|
104
|
+
category: 'Agent Platform',
|
|
105
|
+
aliases: ['trends'],
|
|
106
|
+
summary: 'Show UR coverage against modern agent trends: workflows, memory, A2A, MCP, evals, security, browser use, and more.',
|
|
107
|
+
examples: ['ur agent-trends', 'ur agent-trends --json'],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'agents',
|
|
111
|
+
category: 'Core',
|
|
112
|
+
aliases: [],
|
|
113
|
+
summary: 'List configured agents and project agents available to sessions.',
|
|
114
|
+
examples: ['ur agents', 'ur --agents \'{"reviewer":{"description":"Reviews code","prompt":"Review carefully"}}\''],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'auth',
|
|
118
|
+
category: 'Ops',
|
|
119
|
+
aliases: [],
|
|
120
|
+
summary: 'Manage authentication surfaces that are enabled in this build.',
|
|
121
|
+
examples: ['ur auth', 'ur setup-token'],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'automation',
|
|
125
|
+
category: 'Automation',
|
|
126
|
+
aliases: ['automations'],
|
|
127
|
+
summary: 'Manage project-local automation specs and the resident scheduler.',
|
|
128
|
+
examples: ['ur automation create nightly --schedule "0 9 * * 1-5" --prompt "Review open tasks"', 'ur automation run-due --dry-run', 'ur automation install --platform launchd --interval 300', 'ur automation daemon --once --dry-run'],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'browser-qa',
|
|
132
|
+
category: 'Verification',
|
|
133
|
+
aliases: [],
|
|
134
|
+
summary: 'Validate and smoke-run browser replay fixtures under `.ur/browser-qa`.',
|
|
135
|
+
examples: ['ur browser-qa list', 'ur browser-qa validate', 'ur browser-qa run home-page-smoke --dry-run'],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'claim-ledger',
|
|
139
|
+
category: 'Evidence',
|
|
140
|
+
aliases: ['claims'],
|
|
141
|
+
summary: 'Manage project claim-to-source provenance records for web, file, MCP, tool, and user evidence.',
|
|
142
|
+
examples: ['ur claim-ledger add --claim "The API supports JSON" --source file:docs/API.md --confidence high', 'ur claim-ledger list', 'ur claim-ledger validate'],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'code-index',
|
|
146
|
+
category: 'Knowledge',
|
|
147
|
+
aliases: ['codeindex'],
|
|
148
|
+
summary: 'Build and query a local semantic code index using embeddings through the local Ollama app.',
|
|
149
|
+
examples: ['ur code-index build', 'ur code-index search "where is auth handled"', 'UR_CODE_INDEX=1 ur'],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'crew',
|
|
153
|
+
category: 'Agent Platform',
|
|
154
|
+
aliases: ['crews'],
|
|
155
|
+
summary: 'Create a headless lead/worker task board where worker subagents claim and complete subtasks.',
|
|
156
|
+
examples: ['ur crew create docs --goal "Document every command"', 'ur crew add docs --task "Write examples for workflow"', 'ur crew run docs --workers 3 --dry-run', 'ur crew reset docs'],
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'doctor',
|
|
160
|
+
category: 'Ops',
|
|
161
|
+
aliases: [],
|
|
162
|
+
summary: 'Check health of the installation and configured environment.',
|
|
163
|
+
examples: ['ur doctor', 'ur ur-doctor', 'ur model-doctor'],
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'eval',
|
|
167
|
+
category: 'Verification',
|
|
168
|
+
aliases: ['evals'],
|
|
169
|
+
summary: 'Create, validate, run, and report public agent eval suites with deterministic grading.',
|
|
170
|
+
examples: ['ur eval init', 'ur eval list', 'ur eval validate starter', 'ur eval run starter --dry-run', 'ur eval report starter'],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'goal',
|
|
174
|
+
category: 'Agent Platform',
|
|
175
|
+
aliases: ['goals'],
|
|
176
|
+
summary: 'Track persistent long-horizon objectives with notes, linked workflows, and resumable execution.',
|
|
177
|
+
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'],
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: 'install',
|
|
181
|
+
category: 'Ops',
|
|
182
|
+
aliases: [],
|
|
183
|
+
summary: 'Install or update the native UR build for a target version/channel.',
|
|
184
|
+
examples: ['ur install', 'ur install latest', 'ur update'],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'knowledge',
|
|
188
|
+
category: 'Knowledge',
|
|
189
|
+
aliases: ['kb'],
|
|
190
|
+
summary: 'Curated project knowledge base with file, directory, and note sources plus lexical or embedding search.',
|
|
191
|
+
examples: ['ur knowledge add docs --label docs', 'ur knowledge add --note "Release requires bundle and smoke"', 'ur knowledge build --embeddings', 'ur knowledge search "release checks"'],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: 'mcp',
|
|
195
|
+
category: 'Interop',
|
|
196
|
+
aliases: [],
|
|
197
|
+
summary: 'Configure and manage Model Context Protocol servers.',
|
|
198
|
+
examples: ['ur mcp list', 'ur mcp get filesystem', 'ur mcp add-json local-tools \'{"command":"node","args":["server.js"]}\'', 'ur mcp remove local-tools'],
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'model-doctor',
|
|
202
|
+
category: 'Models',
|
|
203
|
+
aliases: ['model-capabilities'],
|
|
204
|
+
summary: 'Inspect local Ollama models, context lengths, and likely capabilities such as coding, vision, tools, and embeddings.',
|
|
205
|
+
examples: ['ur model-doctor', 'ur model-doctor qwen3-coder:480b-cloud', 'ur model-doctor --json'],
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'model-route',
|
|
209
|
+
category: 'Models',
|
|
210
|
+
aliases: ['model-pick'],
|
|
211
|
+
summary: 'Recommend the best local Ollama model for a task by capability fit.',
|
|
212
|
+
examples: ['ur model-route "Fix a failing TypeScript test"', 'ur model-route "Analyze this screenshot UI bug" --json'],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'pattern',
|
|
216
|
+
category: 'Agent Platform',
|
|
217
|
+
aliases: ['patterns'],
|
|
218
|
+
summary: 'List, inspect, install, save, or execute multi-agent collaboration patterns such as PEER, DOE, concurrent, handoff, and debate.',
|
|
219
|
+
examples: ['ur pattern list', 'ur pattern show peer', 'ur pattern run peer "Implement and review auth"', 'ur pattern run concurrent "Audit docs" --execute --dry-run'],
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'plugin',
|
|
223
|
+
category: 'Interop',
|
|
224
|
+
aliases: ['plugins'],
|
|
225
|
+
summary: 'Manage UR plugins and plugin marketplaces.',
|
|
226
|
+
examples: ['ur plugin list', 'ur plugin install hello@ur-plugins-official', 'ur plugin update <plugin>', 'ur plugin disable <plugin>'],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'role-mode',
|
|
230
|
+
category: 'Agent Platform',
|
|
231
|
+
aliases: ['roles'],
|
|
232
|
+
summary: 'List, show, or install built-in Architect, Code, Debug, and Ask role agents.',
|
|
233
|
+
examples: ['ur role-mode list', 'ur role-mode show architect', 'ur role-mode install code debug'],
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'route',
|
|
237
|
+
category: 'Agent Platform',
|
|
238
|
+
aliases: ['intent'],
|
|
239
|
+
summary: 'Classify a task and recommend the best subagent and collaboration pattern.',
|
|
240
|
+
examples: ['ur route "Refactor the auth flow and add tests"', 'ur route "Research competitor docs and cite sources" --json'],
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'sdk',
|
|
244
|
+
category: 'Interop',
|
|
245
|
+
aliases: ['embed'],
|
|
246
|
+
summary: 'Show or scaffold examples for driving UR programmatically from TypeScript or Python.',
|
|
247
|
+
examples: ['ur sdk', 'ur sdk init', 'ur sdk init --force', "import { query } from 'ur-agent/sdk'"],
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: 'semantic-memory',
|
|
251
|
+
category: 'Knowledge',
|
|
252
|
+
aliases: ['memory-index'],
|
|
253
|
+
summary: 'Build and search a project-local memory index over durable memory, docs, README, and instructions.',
|
|
254
|
+
examples: ['ur semantic-memory build', 'ur semantic-memory search "release process"', 'ur semantic-memory status --json'],
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: 'setup-token',
|
|
258
|
+
category: 'Ops',
|
|
259
|
+
aliases: [],
|
|
260
|
+
summary: 'Set up a long-lived authentication token when that subscription surface is enabled.',
|
|
261
|
+
examples: ['ur setup-token'],
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: 'trigger',
|
|
265
|
+
category: 'Automation',
|
|
266
|
+
aliases: ['mention'],
|
|
267
|
+
summary: 'Parse GitHub, Slack, or generic webhook payloads and optionally launch a headless UR run.',
|
|
268
|
+
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'],
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: 'update',
|
|
272
|
+
category: 'Ops',
|
|
273
|
+
aliases: ['upgrade'],
|
|
274
|
+
summary: 'Check for updates and install if available. Interactive sessions also show an update-available notice when a newer package is published.',
|
|
275
|
+
examples: ['ur update', 'ur upgrade'],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: 'workflow',
|
|
279
|
+
category: 'Agent Platform',
|
|
280
|
+
aliases: ['wf'],
|
|
281
|
+
summary: 'Declarative checkpointed workflows: init, list, show, validate, graph, plan, next, done, reset, and run.',
|
|
282
|
+
examples: ['ur workflow init release', 'ur workflow validate release', 'ur workflow graph release --ascii', 'ur workflow run release --live --concurrency 2'],
|
|
283
|
+
},
|
|
284
|
+
];
|
|
285
|
+
|
|
286
|
+
const slashGroups = [
|
|
287
|
+
{
|
|
288
|
+
title: 'Session control',
|
|
289
|
+
items: ['/help', '/clear', '/compact', '/context', '/cost', '/status', '/resume', '/rename', '/exit'],
|
|
290
|
+
text: 'Inspect and manage the current interactive session, conversation history, context usage, and session metadata.',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
title: 'Editing and delivery',
|
|
294
|
+
items: ['/diff', '/commit', '/commit-push-pr', '/review', '/verify', '/trace', '/agent-task'],
|
|
295
|
+
text: 'Review changes, create commits, prepare PRs, inspect the trace, and run verification.',
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
title: 'Project intelligence',
|
|
299
|
+
items: ['/dna', '/project', '/workspace', '/read', '/search', '/index', '/analyze', '/summarize'],
|
|
300
|
+
text: 'Understand the workspace, build indexes, and read or summarize project files.',
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
title: 'Agents and orchestration',
|
|
304
|
+
items: ['/agents', '/agent-templates', '/workflow', '/pattern', '/crew', '/goal', '/route', '/role-mode'],
|
|
305
|
+
text: 'Manage agents, install role modes, run workflows, and coordinate multi-agent work.',
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
title: 'Memory and evidence',
|
|
309
|
+
items: ['/memory', '/remember', '/forget', '/knowledge', '/semantic-memory', '/claim-ledger', '/evidence', '/graph'],
|
|
310
|
+
text: 'Persist useful facts, search memory and knowledge, and keep claim provenance.',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
title: 'Automation and evals',
|
|
314
|
+
items: ['/automation', '/trigger', '/eval', '/browser-qa', '/actions', '/stability'],
|
|
315
|
+
text: 'Run recurring prompts, webhook-triggered runs, browser smoke checks, evals, and stability diagnostics.',
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
title: 'Models, tools, and interop',
|
|
319
|
+
items: ['/model', '/model-doctor', '/model-route', '/mcp', '/plugin', '/skills', '/sdk', '/a2a-card'],
|
|
320
|
+
text: 'Pick models, inspect capabilities, manage MCP/plugin extensions, and expose interop surfaces.',
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
title: 'Security operations',
|
|
324
|
+
items: ['/security', '/scope', '/threat-model', '/compliance', '/lab', '/playbook', '/kali', '/harden', '/vuln', '/ir'],
|
|
325
|
+
text: 'Read-only security workflows, test scope definition, threat modeling, hardening, vulnerability checks, and incident response.',
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
title: 'Media and research',
|
|
329
|
+
items: ['/research', '/paper', '/cite', '/image', '/video', '/youtube', '/browser', '/chrome'],
|
|
330
|
+
text: 'Handle research notes, citations, multimodal files, browser workflows, and video metadata/transcripts.',
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
title: 'Preferences and environment',
|
|
334
|
+
items: ['/config', '/permissions', '/sandbox', '/mode', '/theme', '/vim', '/terminal-setup', '/usage', '/ide'],
|
|
335
|
+
text: 'Configure permissions, sandboxing, UI preferences, IDE integration, and runtime environment details.',
|
|
336
|
+
},
|
|
337
|
+
];
|
|
338
|
+
|
|
339
|
+
const projectFiles = [
|
|
340
|
+
{
|
|
341
|
+
title: 'UR.md',
|
|
342
|
+
text: 'Shared project instructions loaded as runtime context. Commit it when it describes team-wide behavior.',
|
|
343
|
+
example: 'touch UR.md',
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
title: 'AGENTS.md',
|
|
347
|
+
text: 'Cross-tool agent instructions loaded before UR.md for compatibility with other coding-agent tools.',
|
|
348
|
+
example: 'touch AGENTS.md',
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
title: 'UR.local.md',
|
|
352
|
+
text: 'Private local instructions. Keep it out of Git.',
|
|
353
|
+
example: 'echo "Prefer concise answers" > UR.local.md',
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
title: '.ur/agents/',
|
|
357
|
+
text: 'Project agent definitions installed by agent templates or role modes.',
|
|
358
|
+
example: 'ur agent-templates install reviewer test-runner',
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
title: '.ur/workflows/',
|
|
362
|
+
text: 'Workflow YAML specs and checkpoint state for `ur workflow` and goal resumes.',
|
|
363
|
+
example: 'ur workflow init release',
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
title: '.ur/automations/',
|
|
367
|
+
text: 'Cron-like automation specs for project-local scheduled headless prompts.',
|
|
368
|
+
example: 'ur automation create nightly --schedule "0 9 * * 1-5" --prompt "Review tasks"',
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
title: '.ur/evals/',
|
|
372
|
+
text: 'Replayable eval suites and saved reports.',
|
|
373
|
+
example: 'ur eval init && ur eval run starter --dry-run',
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
title: '.ur/knowledge/',
|
|
377
|
+
text: 'Curated knowledge sources and indexes with provenance.',
|
|
378
|
+
example: 'ur knowledge add docs && ur knowledge build',
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
title: '.ur/evidence/',
|
|
382
|
+
text: 'Claim provenance ledger and evidence files.',
|
|
383
|
+
example: 'ur claim-ledger validate',
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
title: '.ur/browser-qa/',
|
|
387
|
+
text: 'Browser replay fixtures and smoke-test targets.',
|
|
388
|
+
example: 'ur browser-qa validate',
|
|
389
|
+
},
|
|
390
|
+
];
|
|
391
|
+
|
|
392
|
+
const examples = [
|
|
393
|
+
{
|
|
394
|
+
title: 'Interactive coding session',
|
|
395
|
+
text: 'Start in the repository root and let UR discover project context.',
|
|
396
|
+
code: 'ur\n# then ask: "Find the bug in the failing checkout test and fix it."',
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
title: 'Headless JSON run',
|
|
400
|
+
text: 'Use for scripts or CI jobs that need machine-readable output.',
|
|
401
|
+
code: 'ur -p --output-format json "Return the release checklist for this repo"',
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
title: 'Model routing',
|
|
405
|
+
text: 'Let UR recommend a model before a difficult run.',
|
|
406
|
+
code: 'ur model-route "Implement a browser screenshot comparison test"\nur --model qwen3-coder:480b-cloud',
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
title: 'PR handoff with self-review',
|
|
410
|
+
text: 'Dry-run first, then create the PR after the deterministic gate passes.',
|
|
411
|
+
code: 'ur agent-task pr --create --dry-run\nur agent-task pr --create',
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
title: 'A2A local task server',
|
|
415
|
+
text: 'Expose Agent Card discovery and token-gated task execution.',
|
|
416
|
+
code: 'ur a2a card\nur a2a serve --host 127.0.0.1 --port 8765 --dry-run',
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
title: 'Delegated A2A token',
|
|
420
|
+
text: 'Mint an attenuated token scoped to selected skills.',
|
|
421
|
+
code: 'export UR_A2A_DELEGATION_SECRET="dev-secret"\nur a2a token mint --scope coding,review --ttl 900',
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
title: 'Workflow live board',
|
|
425
|
+
text: 'Run independent steps in parallel and stream board updates.',
|
|
426
|
+
code: 'ur workflow run release --live --concurrency 2',
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
title: 'Long-horizon goal',
|
|
430
|
+
text: 'Track progress and resume the linked workflow later.',
|
|
431
|
+
code: 'ur goal add docs --objective "Ship complete docs" --workflow release\nur goal note docs --note "Quickstart complete"\nur goal resume docs --dry-run',
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
title: 'Webhook trigger dry-run',
|
|
435
|
+
text: 'Check a GitHub or Slack payload before launching the agent.',
|
|
436
|
+
code: 'ur trigger parse --file payload.json --source github --keyword /ur\nur trigger run --file payload.json --dry-run',
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
title: 'SDK TypeScript',
|
|
440
|
+
text: 'Drive UR from another Node program.',
|
|
441
|
+
code: "import { query } from 'ur-agent/sdk'\n\nconst result = await query('Review the current git diff', { maxTurns: 6 })\nconsole.log(result.text)",
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
title: 'Eval suite',
|
|
445
|
+
text: 'Create a suite, validate, run offline, then run live.',
|
|
446
|
+
code: 'ur eval init\nur eval validate starter\nur eval run starter --dry-run\nur eval report starter',
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
title: 'Safe automation',
|
|
450
|
+
text: 'Create and test recurring headless prompts before installing a scheduler.',
|
|
451
|
+
code: 'ur automation create weekly --schedule "0 10 * * 1" --prompt "Review unresolved TODOs"\nur automation run weekly --dry-run\nur automation install --platform launchd --interval 300',
|
|
452
|
+
},
|
|
453
|
+
];
|
|
454
|
+
|
|
455
|
+
function escapeHtml(value) {
|
|
456
|
+
return String(value)
|
|
457
|
+
.replaceAll('&', '&')
|
|
458
|
+
.replaceAll('<', '<')
|
|
459
|
+
.replaceAll('>', '>')
|
|
460
|
+
.replaceAll('"', '"')
|
|
461
|
+
.replaceAll("'", ''');
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
function renderFeatureGrid() {
|
|
465
|
+
const root = document.getElementById('featureGrid');
|
|
466
|
+
root.innerHTML = featureGroups.map(group => `
|
|
467
|
+
<article class="feature-card searchable" data-search="${escapeHtml([group.title, group.text, group.tags.join(' '), group.commands.join(' ')].join(' '))}">
|
|
468
|
+
<div class="tag-row">${group.tags.map(tag => `<span class="tag">${escapeHtml(tag)}</span>`).join('')}</div>
|
|
469
|
+
<h3>${escapeHtml(group.title)}</h3>
|
|
470
|
+
<p>${escapeHtml(group.text)}</p>
|
|
471
|
+
<pre><code>${escapeHtml(group.commands.join('\n'))}</code></pre>
|
|
472
|
+
</article>
|
|
473
|
+
`).join('');
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
function renderCommandFilters() {
|
|
477
|
+
const categories = ['All', ...Array.from(new Set(commands.map(command => command.category))).sort()];
|
|
478
|
+
const root = document.getElementById('commandFilters');
|
|
479
|
+
root.innerHTML = categories
|
|
480
|
+
.map((category, index) => `<button class="filter-chip ${index === 0 ? 'active' : ''}" type="button" data-category="${escapeHtml(category)}">${escapeHtml(category)}</button>`)
|
|
481
|
+
.join('');
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
function commandCard(command) {
|
|
485
|
+
return `
|
|
486
|
+
<article class="command-card searchable" data-category="${escapeHtml(command.category)}" data-search="${escapeHtml([command.name, command.aliases.join(' '), command.summary, command.examples.join(' ')].join(' '))}">
|
|
487
|
+
<div class="command-title">
|
|
488
|
+
<div>
|
|
489
|
+
<code>${escapeHtml(command.name)}</code>
|
|
490
|
+
${command.aliases.length ? `<div class="aliases">Aliases: ${escapeHtml(command.aliases.join(', '))}</div>` : ''}
|
|
491
|
+
</div>
|
|
492
|
+
<span class="category">${escapeHtml(command.category)}</span>
|
|
493
|
+
</div>
|
|
494
|
+
<p>${escapeHtml(command.summary)}</p>
|
|
495
|
+
<pre><code>${escapeHtml(command.examples.join('\n'))}</code></pre>
|
|
496
|
+
</article>
|
|
497
|
+
`;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function renderCommands(category = 'All') {
|
|
501
|
+
const root = document.getElementById('commandGrid');
|
|
502
|
+
const active = category === 'All' ? commands : commands.filter(command => command.category === category);
|
|
503
|
+
root.innerHTML = active.length ? active.map(commandCard).join('') : '<div class="empty-state">No commands match this filter.</div>';
|
|
504
|
+
applySearch();
|
|
505
|
+
addCopyButtons();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
function renderSlashGroups() {
|
|
509
|
+
const root = document.getElementById('slashGrid');
|
|
510
|
+
root.innerHTML = slashGroups.map(group => `
|
|
511
|
+
<article class="searchable" data-search="${escapeHtml([group.title, group.text, group.items.join(' ')].join(' '))}">
|
|
512
|
+
<h3>${escapeHtml(group.title)}</h3>
|
|
513
|
+
<p>${escapeHtml(group.text)}</p>
|
|
514
|
+
<div class="tag-row">${group.items.map(item => `<span class="tag">${escapeHtml(item)}</span>`).join('')}</div>
|
|
515
|
+
</article>
|
|
516
|
+
`).join('');
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
function renderProjectFiles() {
|
|
520
|
+
const root = document.getElementById('fileGrid');
|
|
521
|
+
root.innerHTML = projectFiles.map(file => `
|
|
522
|
+
<article class="searchable" data-search="${escapeHtml([file.title, file.text, file.example].join(' '))}">
|
|
523
|
+
<h3>${escapeHtml(file.title)}</h3>
|
|
524
|
+
<p>${escapeHtml(file.text)}</p>
|
|
525
|
+
<pre><code>${escapeHtml(file.example)}</code></pre>
|
|
526
|
+
</article>
|
|
527
|
+
`).join('');
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
function renderExamples() {
|
|
531
|
+
const root = document.getElementById('exampleGrid');
|
|
532
|
+
root.innerHTML = examples.map(example => `
|
|
533
|
+
<article class="example-card searchable" data-search="${escapeHtml([example.title, example.text, example.code].join(' '))}">
|
|
534
|
+
<h3>${escapeHtml(example.title)}</h3>
|
|
535
|
+
<p>${escapeHtml(example.text)}</p>
|
|
536
|
+
<pre><code>${escapeHtml(example.code)}</code></pre>
|
|
537
|
+
</article>
|
|
538
|
+
`).join('');
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
function addCopyButtons() {
|
|
542
|
+
document.querySelectorAll('pre').forEach(pre => {
|
|
543
|
+
if (pre.querySelector('.copy-button')) return;
|
|
544
|
+
const button = document.createElement('button');
|
|
545
|
+
button.type = 'button';
|
|
546
|
+
button.className = 'copy-button';
|
|
547
|
+
button.textContent = 'Copy';
|
|
548
|
+
button.addEventListener('click', async () => {
|
|
549
|
+
const code = pre.querySelector('code')?.innerText ?? '';
|
|
550
|
+
try {
|
|
551
|
+
await navigator.clipboard.writeText(code);
|
|
552
|
+
button.textContent = 'Copied';
|
|
553
|
+
window.setTimeout(() => { button.textContent = 'Copy'; }, 1200);
|
|
554
|
+
} catch {
|
|
555
|
+
button.textContent = 'Select';
|
|
556
|
+
window.setTimeout(() => { button.textContent = 'Copy'; }, 1200);
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
pre.appendChild(button);
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
function applySearch() {
|
|
564
|
+
const input = document.getElementById('globalSearch');
|
|
565
|
+
const query = input.value.trim().toLowerCase();
|
|
566
|
+
document.querySelectorAll('.searchable').forEach(card => {
|
|
567
|
+
const haystack = (card.getAttribute('data-search') || card.textContent || '').toLowerCase();
|
|
568
|
+
card.classList.toggle('hidden', query.length > 0 && !haystack.includes(query));
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
function setupFilters() {
|
|
573
|
+
document.getElementById('commandFilters').addEventListener('click', event => {
|
|
574
|
+
const button = event.target.closest('[data-category]');
|
|
575
|
+
if (!button) return;
|
|
576
|
+
document.querySelectorAll('.filter-chip').forEach(chip => chip.classList.remove('active'));
|
|
577
|
+
button.classList.add('active');
|
|
578
|
+
renderCommands(button.dataset.category);
|
|
579
|
+
});
|
|
580
|
+
document.getElementById('clearFilters').addEventListener('click', () => {
|
|
581
|
+
document.querySelectorAll('.filter-chip').forEach((chip, index) => chip.classList.toggle('active', index === 0));
|
|
582
|
+
document.getElementById('globalSearch').value = '';
|
|
583
|
+
renderCommands('All');
|
|
584
|
+
applySearch();
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
function setupNavigation() {
|
|
589
|
+
const links = Array.from(document.querySelectorAll('#sectionNav a'));
|
|
590
|
+
const sections = links
|
|
591
|
+
.map(link => document.querySelector(link.getAttribute('href')))
|
|
592
|
+
.filter(Boolean);
|
|
593
|
+
const observer = new IntersectionObserver(entries => {
|
|
594
|
+
entries.forEach(entry => {
|
|
595
|
+
if (!entry.isIntersecting) return;
|
|
596
|
+
const id = `#${entry.target.id}`;
|
|
597
|
+
links.forEach(link => link.classList.toggle('active', link.getAttribute('href') === id));
|
|
598
|
+
});
|
|
599
|
+
}, { rootMargin: '-30% 0px -55% 0px' });
|
|
600
|
+
sections.forEach(section => observer.observe(section));
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
function setupBackToTop() {
|
|
604
|
+
const button = document.getElementById('backToTop');
|
|
605
|
+
window.addEventListener('scroll', () => {
|
|
606
|
+
button.classList.toggle('visible', window.scrollY > 900);
|
|
607
|
+
}, { passive: true });
|
|
608
|
+
button.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' }));
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
function init() {
|
|
612
|
+
renderFeatureGrid();
|
|
613
|
+
renderCommandFilters();
|
|
614
|
+
renderCommands();
|
|
615
|
+
renderSlashGroups();
|
|
616
|
+
renderProjectFiles();
|
|
617
|
+
renderExamples();
|
|
618
|
+
addCopyButtons();
|
|
619
|
+
setupFilters();
|
|
620
|
+
setupNavigation();
|
|
621
|
+
setupBackToTop();
|
|
622
|
+
document.getElementById('globalSearch').addEventListener('input', applySearch);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
init();
|