@femtomc/mu-agent 26.2.107 → 26.2.109

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.
@@ -12,7 +12,7 @@ This skill is execution-supervision focused:
12
12
 
13
13
  - `mu heartbeats` / `mu cron` = orchestrator wake cadence
14
14
  - `tmux` + `mu exec` = parallel worker execution
15
- - subagents HUD = operator observability/control board
15
+ - `mu_ui` status + prompt docs = operator↔human communication surface
16
16
 
17
17
  Source of truth remains in `mu issues` + `mu forum`.
18
18
 
@@ -22,7 +22,7 @@ Source of truth remains in `mu issues` + `mu forum`.
22
22
  - [Control-flow dependency](#control-flow-dependency)
23
23
  - [Model-routing dependency](#model-routing-dependency)
24
24
  - [Model quality defaults for orchestration](#model-quality-defaults-for-orchestration)
25
- - [HUD skill dependency](#hud-skill-dependency)
25
+ - [mu_ui communication dependency](#mu_ui-communication-dependency)
26
26
  - [tmux skill dependency](#tmux-skill-dependency)
27
27
  - [When to use](#when-to-use)
28
28
  - [Success condition](#success-condition)
@@ -30,7 +30,7 @@ Source of truth remains in `mu issues` + `mu forum`.
30
30
  - [Orchestration loops](#orchestration-loops)
31
31
  - [Bootstrap and queue targeting](#bootstrap-and-queue-targeting)
32
32
  - [Dispatch templates](#dispatch-templates)
33
- - [Execution HUD (subagents profile)](#execution-hud-subagents-profile)
33
+ - [Execution UI (subagents profile)](#execution-ui-subagents-profile)
34
34
  - [Evaluation scenarios](#evaluation-scenarios)
35
35
  - [Reconciliation](#reconciliation)
36
36
  - [Safety](#safety)
@@ -92,13 +92,20 @@ Operational rules:
92
92
  5. Helper shell workflows must fail fast with actionable usage text whenever
93
93
  required provider/model/thinking args are missing.
94
94
 
95
- ## HUD skill dependency
95
+ ## mu_ui communication dependency
96
96
 
97
- Before emitting or mutating subagent HUD state, load **`hud`** and follow its canonical contract.
98
- HUD usage is not optional for this skill.
97
+ Before publishing execution visibility or user prompts, use **`mu_ui`** as the
98
+ primary communication surface.
99
99
 
100
- - Treat `hud` as source-of-truth for generic `mu_hud` actions, `HudDoc` shape, and rendering constraints.
101
- - This execution skill defines orchestration-specific conventions only (for example `hud_id: "subagents"`, queue/activity semantics).
100
+ - Use one status doc at `ui_id:"ui:subagents"` for queue/worker visibility.
101
+ - Encode status profile metadata with:
102
+ - `metadata.profile.id: "subagents"`
103
+ - `metadata.profile.variant: "status"`
104
+ - `metadata.profile.snapshot.compact|multiline` for deterministic snapshots.
105
+ - Keep status docs non-interactive (`actions: []`); publish user prompts in a
106
+ separate interactive `ui_id` (for example `ui:subagents:handoff`).
107
+ - Use `/mu ui status` and `/mu ui snapshot [compact|multiline]` to verify live
108
+ communication state during orchestration passes.
102
109
 
103
110
  ## tmux skill dependency
104
111
 
@@ -161,7 +168,8 @@ mu forum read issue:<root-id> --limit 20 --pretty
161
168
  2. Choose exactly one action/primitive from `protocol`.
162
169
  3. Apply it.
163
170
  4. Verify (`get`, `children`, `ready`, `validate`).
164
- 5. Update `hud_id:"subagents"` (required) and emit a compact snapshot.
171
+ 5. Upsert `ui_id:"ui:subagents"` via `mu_ui` (required) and keep the status
172
+ snapshot current.
165
173
  6. Post a human-facing `ORCH_PASS` update to forum:
166
174
  - start with a short title that captures status in plain language
167
175
  - follow with one concise paragraph covering: project objective context, milestone moved this pass, impact, overall progress, and next high-level step
@@ -210,7 +218,7 @@ thinking="${4:-}"
210
218
  if [ -z "$root_id" ] || [ -z "$provider" ] || [ -z "$model" ] || [ -z "$thinking" ]; then
211
219
  cat >&2 <<'USAGE'
212
220
  usage: ./orch-heartbeat.sh <root-id> <provider> <model> <thinking>
213
- example: ./orch-heartbeat.sh mu-4be265df openai-codex gpt-5.3-codex xhigh
221
+ example: ./orch-heartbeat.sh mu-root-1234 openai-codex gpt-5.3-codex xhigh
214
222
  USAGE
215
223
  exit 64
216
224
  fi
@@ -219,7 +227,7 @@ mu heartbeats create \
219
227
  --title "hierarchical-work-v1 ${root_id}" \
220
228
  --reason orchestration_v1 \
221
229
  --every-ms 15000 \
222
- --prompt "Use skills subagents, protocol, execution, control-flow, model-routing, and hud for root ${root_id}. Run exactly one bounded orchestration pass: inspect the proto:hierarchical-work-v1 queue, perform exactly one corrective orchestration action (including in_progress-without-worker drift recovery) or claim/work-start one ready issue, then verify state. If flow:* policy tags are present, apply one control-flow transition from the control-flow skill in this pass. If route:* policy tags are present, apply one model-routing transition from the model-routing skill in this pass using live `mu control harness` capabilities and per-turn provider/model/thinking overrides. If route:* policy tags are absent, use the high-quality orchestration profile (openai-codex / gpt-5.3-codex / xhigh) for any execution launch in this pass. Any execution launch in this pass must pass explicit overrides: --provider ${provider} --model ${model} --thinking ${thinking}; if this tuple cannot be used, stop and post BLOCKED with remediation options. Report human-facing progress as a titled status note plus one concise paragraph that explains project context, milestone moved, impact, overall progress, and next high-level step; avoid low-level orchestration internals unless diagnosing a blocker/anomaly. Post a matching ORCH_PASS update to issue:${root_id}. Stop when 'mu issues validate ${root_id}' is final."
230
+ --prompt "Use skills subagents, protocol, execution, control-flow, model-routing, and mu for root ${root_id}. Run exactly one bounded orchestration pass: inspect the proto:hierarchical-work-v1 queue, perform exactly one corrective orchestration action (including in_progress-without-worker drift recovery) or claim/work-start one ready issue, then verify state. Maintain operator↔human communication via mu_ui in this pass: keep ui:subagents updated as a status-profile doc (metadata.profile.id=subagents, metadata.profile.variant=status) and, when user input is required, publish a separate interactive ui_id doc with action metadata.command_text. If flow:* policy tags are present, apply one control-flow transition from the control-flow skill in this pass. If route:* policy tags are present, apply one model-routing transition from the model-routing skill in this pass using live `mu control harness` capabilities and per-turn provider/model/thinking overrides. If route:* policy tags are absent, use the high-quality orchestration profile (openai-codex / gpt-5.3-codex / xhigh) for any execution launch in this pass. Any execution launch in this pass must pass explicit overrides: --provider ${provider} --model ${model} --thinking ${thinking}; if this tuple cannot be used, stop and post BLOCKED with remediation options. Report human-facing progress as a titled status note plus one concise paragraph that explains project context, milestone moved, impact, overall progress, and next high-level step; avoid low-level orchestration internals unless diagnosing a blocker/anomaly. Post a matching ORCH_PASS update to issue:${root_id}. Stop when 'mu issues validate ${root_id}' is final."
223
231
  ```
224
232
 
225
233
  Reusable status-voice add-on for heartbeat prompts (copy/paste):
@@ -244,7 +252,7 @@ limit="${5:-3}"
244
252
  if [ -z "$root_id" ] || [ -z "$provider" ] || [ -z "$model" ] || [ -z "$thinking" ]; then
245
253
  cat >&2 <<'USAGE'
246
254
  usage: ./orch-fanout.sh <root-id> <provider> <model> <thinking> [limit]
247
- example: ./orch-fanout.sh mu-4be265df openai-codex gpt-5.3-codex xhigh 3
255
+ example: ./orch-fanout.sh mu-root-1234 openai-codex gpt-5.3-codex xhigh 3
248
256
  USAGE
249
257
  exit 64
250
258
  fi
@@ -253,33 +261,137 @@ run_id="$(date +%Y%m%d-%H%M%S)"
253
261
  for issue_id in $(mu issues ready --root "$root_id" --tag proto:hierarchical-work-v1 --json | jq -r '.[].id' | head -n "$limit"); do
254
262
  session="mu-sub-${run_id}-${issue_id}"
255
263
  tmux new-session -d -s "$session" \
256
- "cd '$PWD' && mu exec --provider '$provider' --model '$model' --thinking '$thinking' 'Use skills subagents, protocol, execution, control-flow, model-routing, and hud. Work issue ${issue_id} using hierarchical-work.protocol/v1. If flow:* policy tags are present, apply the control-flow overlay before selecting the next primitive. If route:* policy tags are present, apply the model-routing overlay using live harness capabilities before selecting the next primitive. Claim first, then run one full control loop.' ; rc=\$?; echo __MU_DONE__:\$rc"
264
+ "cd '$PWD' && mu exec --provider '$provider' --model '$model' --thinking '$thinking' 'Use skills subagents, protocol, execution, control-flow, model-routing, and mu. Work issue ${issue_id} using hierarchical-work.protocol/v1. Keep ui:subagents current via mu_ui status-profile updates and publish separate interactive ui_id docs for user decisions. If flow:* policy tags are present, apply the control-flow overlay before selecting the next primitive. If route:* policy tags are present, apply the model-routing overlay using live harness capabilities before selecting the next primitive. Claim first, then run one full control loop.' ; rc=\$?; echo __MU_DONE__:\$rc"
257
265
  done
258
266
  ```
259
267
 
260
- ## Execution HUD (subagents profile)
268
+ ## Execution UI (subagents profile)
261
269
 
262
- HUD usage is required for this skill. Truth still lives in issues/forum.
270
+ Use `mu_ui` for active execution communication. Truth still lives in issues/forum.
263
271
 
264
272
  ```text
265
- /mu hud on
266
- /mu hud status
267
- /mu hud snapshot
273
+ /mu ui status
274
+ /mu ui snapshot compact
275
+ /mu ui snapshot multiline
268
276
  ```
269
277
 
270
- Tool: `mu_hud`
278
+ ### Canonical status update (`ui:subagents`)
279
+
280
+ ```json
281
+ {
282
+ "action": "set",
283
+ "doc": {
284
+ "v": 1,
285
+ "ui_id": "ui:subagents",
286
+ "title": "Subagents execution status",
287
+ "summary": "workers=2 · ready=3 · blocked=1",
288
+ "components": [
289
+ {
290
+ "kind": "key_value",
291
+ "id": "queue",
292
+ "title": "Queue",
293
+ "rows": [
294
+ { "key": "ready", "value": "3" },
295
+ { "key": "active", "value": "2" },
296
+ { "key": "blocked", "value": "1" },
297
+ { "key": "next", "value": "Validate final synth issue" }
298
+ ],
299
+ "metadata": {}
300
+ },
301
+ {
302
+ "kind": "list",
303
+ "id": "activity",
304
+ "title": "Recent activity",
305
+ "items": [
306
+ { "id": "a1", "label": "Renderer work completed", "detail": "channel render updates merged" },
307
+ { "id": "a2", "label": "Docs pass in progress", "detail": "execution docs update running" }
308
+ ],
309
+ "metadata": {}
310
+ }
311
+ ],
312
+ "actions": [],
313
+ "revision": { "id": "subagents-status", "version": 12 },
314
+ "updated_at_ms": 1772067300000,
315
+ "metadata": {
316
+ "profile": {
317
+ "id": "subagents",
318
+ "variant": "status",
319
+ "snapshot": {
320
+ "compact": "workers=2 · ready=3 · blocked=1",
321
+ "multiline": "workers: 2\nready: 3\nblocked: 1\nnext: validate synth issue"
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ ### Canonical user prompt (`ui:subagents:handoff`)
330
+
331
+ ```json
332
+ {
333
+ "action": "set",
334
+ "doc": {
335
+ "v": 1,
336
+ "ui_id": "ui:subagents:handoff",
337
+ "title": "Execution handoff decision",
338
+ "summary": "Need user confirmation before final close.",
339
+ "components": [
340
+ {
341
+ "kind": "text",
342
+ "id": "question",
343
+ "text": "Should execution close the root now or open a follow-up issue?",
344
+ "metadata": {}
345
+ },
346
+ {
347
+ "kind": "list",
348
+ "id": "options",
349
+ "title": "Choices",
350
+ "items": [
351
+ { "id": "opt-close", "label": "Close root now" },
352
+ { "id": "opt-followup", "label": "Create follow-up issue first" }
353
+ ],
354
+ "metadata": {}
355
+ }
356
+ ],
357
+ "actions": [
358
+ {
359
+ "id": "close-root",
360
+ "label": "Close root",
361
+ "kind": "primary",
362
+ "payload": {},
363
+ "metadata": { "command_text": "/answer close-root" }
364
+ },
365
+ {
366
+ "id": "create-followup",
367
+ "label": "Create follow-up",
368
+ "kind": "secondary",
369
+ "payload": { "title": "Document remaining follow-up gaps" },
370
+ "metadata": { "command_text": "/answer followup {{title}}" }
371
+ }
372
+ ],
373
+ "revision": { "id": "subagents-handoff", "version": 1 },
374
+ "updated_at_ms": 1772067310000,
375
+ "metadata": {
376
+ "profile": {
377
+ "id": "subagents-handoff",
378
+ "variant": "interactive"
379
+ }
380
+ }
381
+ }
382
+ }
383
+ ```
271
384
 
272
- - Canonical contract: see skill `hud`
273
- - Actions: `status`, `snapshot`, `on`, `off`, `toggle`, `set`, `update`, `replace`, `remove`, `clear`
274
- - Subagents convention: maintain a HUD doc with `hud_id: "subagents"`
275
- - Suggested subagents doc structure:
276
- - chips: health, mode, paused
277
- - sections: queue counts + recent activity lines
278
- - actions: refresh/spawn command hooks (if desired)
279
- - metadata: include `style_preset:"subagents"` for consistent renderer emphasis
280
- - Example update:
281
- - `{"action":"set", "doc": {"hud_id":"subagents", ...}}` (see `hud` skill for exact shape)
282
- - Follow the HUD ownership and teardown protocol from `hud` skill for completion and handoff.
385
+ ### Teardown / handoff semantics
386
+
387
+ - Remove execution-owned interactive docs when the question is resolved.
388
+ - Remove or replace `ui:subagents` when execution completes or hands off.
389
+ - Prefer `remove` over `clear` so other skills keep their docs intact.
390
+
391
+ ```json
392
+ {"action":"remove","ui_id":"ui:subagents:handoff"}
393
+ {"action":"remove","ui_id":"ui:subagents"}
394
+ ```
283
395
 
284
396
  ## Evaluation scenarios
285
397
 
@@ -305,7 +417,8 @@ Tool: `mu_hud`
305
417
  - Merge synth-node outputs into one final user-facing result.
306
418
  - Convert unresolved gaps into new child issues tagged `proto:hierarchical-work-v1`.
307
419
  - Tear down temporary tmux sessions.
308
- - Tear down/handoff `hud_id:"subagents"` ownership following the `hud` skill protocol.
420
+ - Tear down/handoff execution-owned `ui_id`s (at minimum `ui:subagents`) with
421
+ explicit `mu_ui remove` actions.
309
422
 
310
423
  ## Safety
311
424
 
@@ -23,7 +23,7 @@ semantics.
23
23
  - [Planning handoff contract](#planning-handoff-contract)
24
24
  - [Subagents/heartbeat execution contract](#subagentsheartbeat-execution-contract)
25
25
  - [Failure + fallback policy](#failure--fallback-policy)
26
- - [HUD visibility and teardown](#hud-visibility-and-teardown)
26
+ - [mu_ui visibility and handoff](#mu_ui-visibility-and-handoff)
27
27
  - [Evaluation scenarios](#evaluation-scenarios)
28
28
 
29
29
  ## Purpose
@@ -44,7 +44,7 @@ Load these skills before applying model-routing policies:
44
44
  - `protocol` (protocol primitives/invariants)
45
45
  - `execution` (durable execution runtime)
46
46
  - `heartbeats` and/or `crons` (scheduler clock)
47
- - `hud` (required visibility/handoff surface)
47
+ - `mu` (for `/mu ui` inspection commands and communication checks)
48
48
  - `control-flow` (optional; when loop/termination overlays are also active)
49
49
 
50
50
  ## Core contract
@@ -245,7 +245,7 @@ For one-shot execution:
245
245
 
246
246
  ```bash
247
247
  mu exec --provider <provider> --model <model> --thinking <thinking> \
248
- "Use skills subagents, protocol, execution, model-routing, and hud. Work issue <issue-id>."
248
+ "Use skills subagents, protocol, execution, model-routing, and mu. Work issue <issue-id> and keep routing visibility current via mu_ui."
249
249
  ```
250
250
 
251
251
  For existing session turn:
@@ -299,18 +299,19 @@ Per orchestrator tick:
299
299
  5. Verify with:
300
300
  - `mu issues ready --root <root-id> --tag proto:hierarchical-work-v1 --pretty`
301
301
  - `mu issues validate <root-id>`
302
- 6. Update HUD state.
302
+ 6. Upsert routing visibility via `mu_ui` (`ui_id:"ui:subagents"` when orchestration is shared, or `ui_id:"ui:model-routing"` when standalone).
303
303
  7. Post one concise `ORCH_PASS` status update.
304
304
  8. If root is final, disable supervising heartbeat.
305
305
 
306
306
  Reusable heartbeat prompt fragment:
307
307
 
308
308
  ```text
309
- Use skills subagents, protocol, execution, model-routing, and hud.
309
+ Use skills subagents, protocol, execution, model-routing, and mu.
310
310
  For root <root-id>, enforce route:model-routing-v1.
311
311
  Run exactly one bounded routing/orchestration transition pass: compute or validate
312
312
  one issue's model recommendation from live `mu control harness` capabilities,
313
- apply one action, verify DAG state, post one ORCH_PASS, then stop.
313
+ apply one action, keep route status current via mu_ui (`ui:subagents` or
314
+ `ui:model-routing`), verify DAG state, post one ORCH_PASS, then stop.
314
315
  If validate is final, disable the supervising heartbeat and report completion.
315
316
  ```
316
317
 
@@ -334,15 +335,147 @@ If validate is final, disable the supervising heartbeat and report completion.
334
335
  - every route change emits forum packet (`ROUTE_RECOMMENDATION`,
335
336
  `ROUTE_FALLBACK`, `ROUTE_DEGRADED`)
336
337
 
337
- ## HUD visibility and teardown
338
+ ## mu_ui visibility and handoff
338
339
 
339
- HUD usage is not optional for active model-routing execution.
340
+ Use `mu_ui` as the primary communication surface for active model-routing
341
+ execution.
340
342
 
341
- - If subagents HUD is active, publish routing state there (selected model,
342
- alternates remaining, last fallback reason).
343
- - If running model-routing standalone, own `hud_id:"model-routing"`.
344
- - Update HUD each bounded pass before ORCH_PASS output.
345
- - Follow `hud` skill ownership/teardown protocol on completion or handoff.
343
+ - Publish routing status in one status-profile doc:
344
+ - shared orchestration: `ui_id:"ui:subagents"`
345
+ - standalone model-routing loop: `ui_id:"ui:model-routing"`
346
+ - Set status profile metadata for deterministic snapshots:
347
+ - `metadata.profile.id: "subagents"` or `"model-routing"`
348
+ - `metadata.profile.variant: "status"`
349
+ - `metadata.profile.snapshot.compact|multiline`
350
+ - Keep status docs non-interactive (`actions: []`).
351
+ - For user decisions (for example hard-constraint escalation), publish a separate
352
+ interactive prompt doc (for example `ui_id:"ui:model-routing:escalation"`).
353
+ - Update routing status docs each bounded pass before posting `ORCH_PASS`.
354
+ - On completion or handoff, remove model-routing-owned docs with explicit
355
+ `mu_ui remove` actions. Prefer `remove` over `clear`.
356
+
357
+ ### Canonical status doc (`ui:model-routing`)
358
+
359
+ ```json
360
+ {
361
+ "action": "set",
362
+ "doc": {
363
+ "v": 1,
364
+ "ui_id": "ui:model-routing",
365
+ "title": "Model-routing status",
366
+ "summary": "issue=<issue-id> · selected=openai-codex/gpt-5.3-codex/xhigh · alternates=2",
367
+ "components": [
368
+ {
369
+ "kind": "key_value",
370
+ "id": "route",
371
+ "title": "Current route",
372
+ "rows": [
373
+ { "key": "policy", "value": "route:model-routing-v1" },
374
+ { "key": "issue", "value": "<issue-id>" },
375
+ { "key": "selected", "value": "openai-codex/gpt-5.3-codex/xhigh" },
376
+ { "key": "alternates", "value": "2" },
377
+ { "key": "next", "value": "Launch worker with explicit overrides" }
378
+ ],
379
+ "metadata": {}
380
+ },
381
+ {
382
+ "kind": "list",
383
+ "id": "recent",
384
+ "title": "Recent routing events",
385
+ "items": [
386
+ {
387
+ "id": "e1",
388
+ "label": "ROUTE_RECOMMENDATION posted",
389
+ "detail": "selected openai-codex/gpt-5.3-codex/xhigh"
390
+ },
391
+ {
392
+ "id": "e2",
393
+ "label": "fallback budget",
394
+ "detail": "openrouter/google/gemini-3.1-pro-preview/high"
395
+ }
396
+ ],
397
+ "metadata": {}
398
+ }
399
+ ],
400
+ "actions": [],
401
+ "revision": { "id": "model-routing-status", "version": 7 },
402
+ "updated_at_ms": 1772069500000,
403
+ "metadata": {
404
+ "profile": {
405
+ "id": "model-routing",
406
+ "variant": "status",
407
+ "snapshot": {
408
+ "compact": "selected=openai-codex/gpt-5.3-codex/xhigh · alternates=2",
409
+ "multiline": "issue: <issue-id>\nselected: openai-codex/gpt-5.3-codex/xhigh\nalternates: 2\nnext: launch worker"
410
+ }
411
+ }
412
+ }
413
+ }
414
+ }
415
+ ```
416
+
417
+ ### Canonical escalation prompt (`ui:model-routing:escalation`)
418
+
419
+ ```json
420
+ {
421
+ "action": "set",
422
+ "doc": {
423
+ "v": 1,
424
+ "ui_id": "ui:model-routing:escalation",
425
+ "title": "Routing escalation required",
426
+ "summary": "No authenticated model satisfies image + deep reasoning constraints.",
427
+ "components": [
428
+ {
429
+ "kind": "text",
430
+ "id": "question",
431
+ "text": "Routing is blocked by missing provider capability. Should execution wait for provider auth or run with degraded constraints?",
432
+ "metadata": {}
433
+ },
434
+ {
435
+ "kind": "list",
436
+ "id": "options",
437
+ "title": "Choices",
438
+ "items": [
439
+ { "id": "opt-auth", "label": "Pause and authenticate provider" },
440
+ { "id": "opt-degrade", "label": "Proceed with degraded route" }
441
+ ],
442
+ "metadata": {}
443
+ }
444
+ ],
445
+ "actions": [
446
+ {
447
+ "id": "wait-for-auth",
448
+ "label": "Wait for provider auth",
449
+ "kind": "primary",
450
+ "payload": {},
451
+ "metadata": { "command_text": "/answer wait-for-auth" }
452
+ },
453
+ {
454
+ "id": "approve-degraded-route",
455
+ "label": "Approve degraded route",
456
+ "kind": "secondary",
457
+ "payload": {},
458
+ "metadata": { "command_text": "/answer approve-degraded-route" }
459
+ }
460
+ ],
461
+ "revision": { "id": "model-routing-escalation", "version": 1 },
462
+ "updated_at_ms": 1772069510000,
463
+ "metadata": {
464
+ "profile": {
465
+ "id": "model-routing-escalation",
466
+ "variant": "interactive"
467
+ }
468
+ }
469
+ }
470
+ }
471
+ ```
472
+
473
+ ### Teardown / handoff
474
+
475
+ ```json
476
+ {"action":"remove","ui_id":"ui:model-routing:escalation"}
477
+ {"action":"remove","ui_id":"ui:model-routing"}
478
+ ```
346
479
 
347
480
  ## Evaluation scenarios
348
481