ultra-builder-pro-cli 3.0.2 → 5.0.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/.ultra-template/contexts/TEMPLATE.md +6 -0
- package/CHANGELOG.md +73 -1
- package/README.md +126 -36
- package/README.zh-CN.md +440 -0
- package/adapters/_shared/host-profile.cjs +3 -151
- package/adapters/_shared/plugin-core.cjs +57 -0
- package/adapters/_shared/runtime-assets.cjs +64 -12
- package/bin/delegate-worker.cjs +2 -345
- package/bin/delegate.cjs +3 -530
- package/docs/ARCHITECTURE.md +59 -18
- package/docs/ARTIFACT-AUTHORITY.md +21 -5
- package/docs/DECISIONS.md +31 -10
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +28 -12
- package/docs/RUNTIME-COMPAT-MATRIX.md +101 -22
- package/docs/SKILL-AUTHORING.md +15 -3
- package/docs/WORKFLOW-LIFECYCLE.md +83 -29
- package/docs/evals/ultra-5-0-journey-results.md +62 -0
- package/docs/evals/ultra-5-0-live-acp-conformance.md +93 -0
- package/docs/evals/ultra-5-0-route-journeys.md +145 -0
- package/package.json +2 -1
- package/skills/ultra-change/SKILL.md +30 -4
- package/skills/ultra-delegate/SKILL.md +80 -7
- package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +184 -0
- package/skills/ultra-delegate/references/delegation-contract.md +60 -1
- package/skills/ultra-delegate/scripts/acp-conformance.cjs +287 -0
- package/skills/ultra-delegate/scripts/acp-driver.cjs +762 -0
- package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +320 -0
- package/skills/ultra-delegate/scripts/cli-driver.cjs +61 -0
- package/skills/ultra-delegate/scripts/delegate-worker.cjs +328 -0
- package/skills/ultra-delegate/scripts/delegate.cjs +690 -0
- package/skills/ultra-delegate/scripts/host-profile.cjs +267 -0
- package/skills/ultra-deliver/SKILL.md +13 -0
- package/skills/ultra-dev/SKILL.md +18 -2
- package/skills/ultra-init/SKILL.md +12 -0
- package/skills/ultra-plan/SKILL.md +21 -3
- package/skills/ultra-research/SKILL.md +33 -5
- package/skills/ultra-status/SKILL.md +37 -7
- package/skills/ultra-status/references/route-contract.md +100 -0
- package/skills/ultra-test/SKILL.md +16 -1
- /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-read-only.md +0 -0
- /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-write.md +0 -0
|
@@ -24,7 +24,7 @@ When workflow-route signals conflict, consumers resolve them in this order:
|
|
|
24
24
|
2. the current accepted North Star and the active Change intent;
|
|
25
25
|
3. the current owner-issued Execution Grant — `session-local` while its conversation
|
|
26
26
|
activation is live, or a `durable work-package` grant a fresh Agent has stably
|
|
27
|
-
verified — its
|
|
27
|
+
verified — its exact Change, modes, effects, topology, budget, and stop conditions;
|
|
28
28
|
4. the task ledger, task acceptance, planned paths, and dependencies;
|
|
29
29
|
5. the current validated Review SUMMARY verdict;
|
|
30
30
|
6. current evidence and Test observations;
|
|
@@ -42,6 +42,11 @@ scope, or budget, and it cannot promote P2/P3 findings into blockers or reopen a
|
|
|
42
42
|
review that returned a current verdict. Historical reviews, progress records, and
|
|
43
43
|
Hook observations are provenance only.
|
|
44
44
|
|
|
45
|
+
The Route Card is a projection of this precedence, not another layer in it. Its Route,
|
|
46
|
+
Mode, Position, Exit condition, Delta, and Next fields are recalculated from the same
|
|
47
|
+
authorities and current observations whenever a public Skill enters, pauses, exits, or
|
|
48
|
+
transitions.
|
|
49
|
+
|
|
45
50
|
A formal terminal outcome — an accepted result, an owner decision, an external
|
|
46
51
|
blocker, a review-budget stop, or an abandonment — outranks every Resume, Hook, or
|
|
47
52
|
Status suggestion that appears to continue the same work. Review stays inside the
|
|
@@ -81,11 +86,18 @@ whatever length keeps the owner able to judge:
|
|
|
81
86
|
4. **Delta** — what materially changed since the last checkpoint.
|
|
82
87
|
5. **Reality** — how far the live path actually works; what is still fake, unknown,
|
|
83
88
|
or unverified.
|
|
84
|
-
6. **Decision needed** — what the owner must decide now;
|
|
85
|
-
nothing is genuinely blocking.
|
|
89
|
+
6. **Decision needed** — what the owner must decide now; a Route Card says `none` when
|
|
90
|
+
nothing is genuinely blocking, while a free-form handoff may omit the section.
|
|
86
91
|
7. **Next bounded action** — the smallest authorized next step.
|
|
87
92
|
8. **Not done** — what remains owed when stopping or pausing.
|
|
88
93
|
|
|
94
|
+
The canonical
|
|
95
|
+
[`UBP Route Card`](../skills/ultra-status/references/route-contract.md#route-card) adds
|
|
96
|
+
four navigation fields — Route, Mode, Position, and Exit condition — around these eight
|
|
97
|
+
semantics. It is emitted output only: it has no canonical project path, never becomes a
|
|
98
|
+
route ledger, and cannot grant continuation. Counts and transport events may explain
|
|
99
|
+
Position or Reality but cannot produce a semantic completion verdict.
|
|
100
|
+
|
|
89
101
|
A checkpoint is a cognitive interface, not a mechanical stage marker: no line count,
|
|
90
102
|
token budget, or coverage percentage gates it, and alignment failure ("I don't know
|
|
91
103
|
what you are doing", or the same concept re-explained repeatedly) stops execution and
|
|
@@ -168,6 +180,7 @@ Pure file state uses three mechanisms:
|
|
|
168
180
|
|
|
169
181
|
A state field records a mechanically checkable fact. Route selection remains a model
|
|
170
182
|
judgment. Do not add a workflow-position field merely to decide which Skill should run.
|
|
183
|
+
The Route Card is derived each time and is disposable in exactly this sense.
|
|
171
184
|
|
|
172
185
|
At most one Change is active in one worktree. Zero active Changes is valid before a new
|
|
173
186
|
request and after delivery; completed current tasks may remain active while awaiting
|
|
@@ -275,7 +288,9 @@ decisions.
|
|
|
275
288
|
After interruption or host change:
|
|
276
289
|
|
|
277
290
|
1. identify the repository root and current `HEAD`;
|
|
278
|
-
2. resolve zero or one active `change_id`, then read `.ultra/tasks.json`;
|
|
291
|
+
2. resolve zero or one active `change_id`, then read `.ultra/tasks.json`; if authority
|
|
292
|
+
resolution returns a typed conflict or unavailable observation, stop semantic writes
|
|
293
|
+
but keep Status recovery diagnosis reachable without selecting an ambiguous intent;
|
|
279
294
|
3. select only matching tasks and read the frontier task's full context and closing Resume Note;
|
|
280
295
|
4. read the Project Brief, accepted North Star, `CONTEXT.md`, relevant decisions, active
|
|
281
296
|
Change, specifications, and evidence;
|
|
@@ -283,7 +298,8 @@ After interruption or host change:
|
|
|
283
298
|
6. rely only on ledger task status; preserve any legacy context Status or Complexity as
|
|
284
299
|
a migration diagnostic, and use the explicit recorded reopen before repairing an
|
|
285
300
|
invalid completed task's current v2 evidence or task-review bindings;
|
|
286
|
-
7. continue through the next observable acceptance
|
|
301
|
+
7. derive a fresh Route Card and continue only through the next observable acceptance
|
|
302
|
+
boundary covered by the current owner instruction or valid Execution Grant.
|
|
287
303
|
|
|
288
304
|
Hooks and the `ubp` executable may be unavailable. Recovery must still work through
|
|
289
305
|
these files and Git alone.
|
package/docs/DECISIONS.md
CHANGED
|
@@ -24,6 +24,19 @@ exact grant (see `.ultra/decisions/2026-08-17-ultra-builder-pro-3.0-mode-b.md`);
|
|
|
24
24
|
file, status, Hook, or Resume note ever implies activation. Optional Graph/Loop
|
|
25
25
|
coordination layers own observations only and none is integrated.
|
|
26
26
|
|
|
27
|
+
## Ultra 5.0 workflow projection (accepted 2026-08-25)
|
|
28
|
+
|
|
29
|
+
The owner accepted the 5.0 scope and interaction boundary in
|
|
30
|
+
`.ultra/decisions/2026-08-25-ultra-5-0-scope.md`; the versioned contract is
|
|
31
|
+
`docs/ULTRA-BUILDER-PRO-5.0.zh-CN.md`. One shared Route Contract projects the existing
|
|
32
|
+
owner-checkpoint semantics into every public Skill without adding route state. Research
|
|
33
|
+
has explicit baseline and grant-continuable Change-scoped modes; Change makes
|
|
34
|
+
intake/evidence/reconcile/accepted visible and permits only same-Change non-material
|
|
35
|
+
reconciliation under a valid grant; Plan returns product evidence gaps through Change.
|
|
36
|
+
Host invocation bits remain coarse discovery metadata and every Skill rechecks mode,
|
|
37
|
+
grant, effects, and material checkpoints. Team Pack, remote shared assets, a semantic
|
|
38
|
+
state machine, daemon, and resident ACP service remain outside 5.0.
|
|
39
|
+
|
|
27
40
|
## Primary transfer between Agents (r3, accepted 2026-08-17)
|
|
28
41
|
|
|
29
42
|
A work package's canonical writer moves to another Agent only through an
|
|
@@ -58,13 +71,13 @@ ownership of route and meaning.
|
|
|
58
71
|
|
|
59
72
|
## Three Skill roles
|
|
60
73
|
|
|
61
|
-
The product exposes eight
|
|
62
|
-
router. Public
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
session-local activation in the current conversation, or a stably verified
|
|
66
|
-
work-package grant.
|
|
67
|
-
inlined.
|
|
74
|
+
The product exposes eight owner-invocable public workflows, five model-invoked
|
|
75
|
+
disciplines, and one router. Public modes are `explicit-entry` or
|
|
76
|
+
`grant-continuable`. Scoped Research, same-Change reconciliation, Plan, Dev, Test, and
|
|
77
|
+
Deliver reconciliation may be selected under an activated Change-scoped execution
|
|
78
|
+
grant — session-local activation in the current conversation, or a stably verified
|
|
79
|
+
durable work-package grant. All other public modes stay explicit-entry; Status stays
|
|
80
|
+
owner-invoked and read-only. A model discipline needs at least two canonical callers or it is inlined.
|
|
68
81
|
|
|
69
82
|
This keeps reusable reasoning in one place without turning it into another user-facing
|
|
70
83
|
route or custom-agent registry.
|
|
@@ -136,6 +149,11 @@ Directory position and explicit fields record mechanically checkable facts. The
|
|
|
136
149
|
model reads those facts and chooses the next route. There is no persisted “current
|
|
137
150
|
workflow stage” whose value can override the actual files.
|
|
138
151
|
|
|
152
|
+
The `UBP Route Card` is the owner-visible projection of those facts: it adds Route,
|
|
153
|
+
Mode, Position, and Exit condition around the eight accepted checkpoint semantics. It
|
|
154
|
+
is derived at public boundaries, has no canonical path, and provides neither completion
|
|
155
|
+
nor continuation authority.
|
|
156
|
+
|
|
139
157
|
Task status lives only in the `ultra-task-ledger-v2` row and is read back there. New task
|
|
140
158
|
contexts do not duplicate it; legacy context Status and Complexity fields remain
|
|
141
159
|
migration diagnostics and the ledger wins. Tasks retain a stable `change_id` in the
|
|
@@ -186,11 +204,14 @@ their repair is authorization scoped to the exact command digest.
|
|
|
186
204
|
|
|
187
205
|
## Delegation is a process boundary
|
|
188
206
|
|
|
189
|
-
|
|
190
|
-
permission JSON, and named worktree.
|
|
207
|
+
The installed `ultra-delegate/scripts/delegate.cjs` starts a supported CLI with an
|
|
208
|
+
immutable instruction, explicit permission JSON, and named worktree. Its exact
|
|
209
|
+
digest-bound sources are embedded in
|
|
191
210
|
the worker prompt because some native sandboxes correctly deny reads outside the
|
|
192
211
|
worktree. Files remain the cross-host state; the embedded copy is transport, not another
|
|
193
|
-
authority. The parent reads a stable terminal result instead of worker chatter.
|
|
212
|
+
authority. The parent reads a stable terminal result instead of worker chatter. The
|
|
213
|
+
package `ubp delegate` surface is a one-release compatibility import of that same
|
|
214
|
+
launcher, not a second implementation or a runtime installation requirement.
|
|
194
215
|
Delegation adds no semantic store and no authority. The instruction selects task
|
|
195
216
|
execution, scoped Research evidence, or aggregate Change review/verification; only task
|
|
196
217
|
execution requires a task row.
|
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
# Plugin isolation contract
|
|
2
2
|
|
|
3
|
-
Ultra Builder Pro owns a narrow install surface and
|
|
4
|
-
|
|
3
|
+
Ultra Builder Pro owns a narrow install surface. Installation and discovery create no
|
|
4
|
+
project authority. A public workflow becomes active only through an explicit owner
|
|
5
|
+
entry or one mode covered by a currently valid Execution Grant; Hooks separately use
|
|
6
|
+
the presence of `.ultra/` as their idle guard.
|
|
5
7
|
|
|
6
8
|
## Owned surfaces
|
|
7
9
|
|
|
8
10
|
Per host, Ultra may install:
|
|
9
11
|
|
|
10
12
|
- exactly fourteen managed Skills;
|
|
13
|
+
- the launcher, worker, Host profile, and launch-only profile assets below the managed
|
|
14
|
+
`ultra-delegate/scripts/` Skill directory;
|
|
11
15
|
- exactly five hook scripts plus `_common.py` and any required wire adapter;
|
|
12
16
|
- one native plugin manifest or entrypoint;
|
|
13
17
|
- provenance and managed-ownership markers;
|
|
14
18
|
- the host's native registry entry where required.
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
For one release cycle the package also owns thin `ubp delegate` launcher/worker
|
|
21
|
+
compatibility imports. They execute the Skill-local implementation and contain no
|
|
22
|
+
forked behavior.
|
|
17
23
|
|
|
18
24
|
## Surfaces Ultra does not own
|
|
19
25
|
|
|
@@ -29,9 +35,10 @@ Ultra must not create or rewrite:
|
|
|
29
35
|
|
|
30
36
|
## Installation lifecycle
|
|
31
37
|
|
|
32
|
-
Install builds a complete staging tree,
|
|
33
|
-
atomically publishes it. An existing unmanaged
|
|
34
|
-
replaces only the managed tree. Doctor is
|
|
38
|
+
Install builds a complete staging tree, including the Skill-local delegation runtime,
|
|
39
|
+
marks it managed, writes provenance, then atomically publishes it. An existing unmanaged
|
|
40
|
+
target is never overwritten. Reinstall replaces only the managed tree. Doctor is
|
|
41
|
+
read-only and reports runner reachability separately. Uninstall removes only assets
|
|
35
42
|
whose ownership can be proven.
|
|
36
43
|
|
|
37
44
|
Host-owned sidecars must resolve from the same isolation root as `--config-dir`. For
|
|
@@ -63,12 +70,21 @@ the owner.
|
|
|
63
70
|
|
|
64
71
|
## Activation
|
|
65
72
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
Public Skill modes are `explicit-entry`, `grant-continuable`, or read-only `router`.
|
|
74
|
+
Explicit-entry modes activate only through the Host's owner-facing Skill surface.
|
|
75
|
+
Grant-continuable modes may be model-selected only after the loaded Skill verifies the
|
|
76
|
+
same active Change, valid grant, allowed effects, and material checkpoints. A router may
|
|
77
|
+
diagnose read-only state only on explicit owner invocation and creates no continuation
|
|
78
|
+
authority. Model-discipline Skills
|
|
79
|
+
may be selected only as methods inside the current covered workflow.
|
|
80
|
+
|
|
81
|
+
Host invocation metadata is a coarse discovery aid. It cannot express every per-mode
|
|
82
|
+
boundary, so the in-Skill check remains mandatory and Hosts without an equivalent bit
|
|
83
|
+
rely on discriminating descriptions plus that same check. A public Skill may transition
|
|
84
|
+
to another only when a valid grant covers the exact next mode and effects, after showing
|
|
85
|
+
the Route Card; otherwise it stops and recommends the explicit route. Installation does
|
|
86
|
+
not create a grant, launch a workflow, or start background work. Hooks activate only
|
|
87
|
+
through Host lifecycle registrations and retain their independent idle guard.
|
|
72
88
|
|
|
73
89
|
## Idle behavior
|
|
74
90
|
|
|
@@ -40,21 +40,34 @@ isolated user-scope installation test.
|
|
|
40
40
|
|
|
41
41
|
## Invocation policy
|
|
42
42
|
|
|
43
|
-
|
|
|
43
|
+
| Invocation class | Owner can route directly | Model can select implicitly |
|
|
44
44
|
|---|---:|---:|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
| `
|
|
45
|
+
| `explicit-entry` public mode | yes | no |
|
|
46
|
+
| `grant-continuable` public mode | yes | only under a valid Execution Grant covering that mode |
|
|
47
|
+
| five `model-discipline` Skills | no | as an internal method of a covered workflow |
|
|
48
|
+
| `ultra-status` `router` modes | yes | no; other Skills derive their cards directly from the shared contract |
|
|
49
|
+
|
|
50
|
+
The canonical per-mode map is `PUBLIC_SKILL_INVOCATION_MODES` in
|
|
51
|
+
`adapters/_shared/runtime-assets.cjs`. Init and Delegate are explicit-only. Research has
|
|
52
|
+
explicit `baseline` and grant-continuable `change-scoped`; Change has explicit
|
|
53
|
+
intake/evidence/acceptance and grant-continuable same-Change reconciliation; Deliver has
|
|
54
|
+
grant-continuable reconciliation and explicit finalization. Plan, Dev, and Test modes
|
|
55
|
+
are grant-continuable. Every public mode remains directly owner-invocable.
|
|
48
56
|
|
|
49
57
|
Claude and Grok receive `user-invocable` / `disable-model-invocation` frontmatter.
|
|
50
58
|
Kimi receives its native equivalent. Codex receives
|
|
51
|
-
`policy.allow_implicit_invocation` in `agents/openai.yaml`.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
`policy.allow_implicit_invocation` in `agents/openai.yaml`. Those Hosts expose only a
|
|
60
|
+
coarse Skill-level bit, so a Skill with any grant-continuable mode is discoverable to the
|
|
61
|
+
model; the loaded Skill must still verify the selected mode, same active `change_id`,
|
|
62
|
+
grant, effects, and material checkpoints. In particular, the coarse bit does not permit
|
|
63
|
+
baseline Research, Change intake/acceptance, or Deliver finalization.
|
|
64
|
+
|
|
65
|
+
OpenCode uses portable source frontmatter and native discovery, but its current Skill
|
|
66
|
+
schema has no equivalent owner/model routing bit: all fourteen Skills remain
|
|
67
|
+
discoverable and their descriptions plus the same in-Skill guard guide selection. Ultra
|
|
68
|
+
does not add a semantic interception hook to imitate a Host feature OpenCode does not
|
|
69
|
+
expose. ZCode likewise discovers all plugin Skills and relies on their portable
|
|
70
|
+
descriptions and runtime guard rather than a fabricated routing flag.
|
|
58
71
|
|
|
59
72
|
## Hook compatibility
|
|
60
73
|
|
|
@@ -72,9 +85,47 @@ hook activation are distinct: Codex skips newly installed non-managed plugin hoo
|
|
|
72
85
|
until the user reviews and trusts the current definition, so Doctor reports
|
|
73
86
|
`hook_activation: user_review_required` without pretending the hook already ran.
|
|
74
87
|
|
|
75
|
-
##
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
## Agent execution driver selection
|
|
89
|
+
|
|
90
|
+
| Host | ACP candidate observed locally | Versioned conformance | 5.0 active driver | Fallback reason |
|
|
91
|
+
|---|---|---|---|---|
|
|
92
|
+
| Claude Code | pinned `@agentclientprotocol/claude-agent-acp@0.70.0` stdio adapter | PASS, real provider receipt | ACP when `npx` exists | `acp_command_unavailable` when absent |
|
|
93
|
+
| Codex | pinned `@agentclientprotocol/codex-acp@1.6.2` stdio adapter | PASS, real provider receipt | ACP when `npx` exists | `acp_command_unavailable` when absent |
|
|
94
|
+
| OpenCode | native `opencode acp` stdio server | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
|
|
95
|
+
| Kimi Code | documented [`kimi acp`](https://moonshotai.github.io/kimi-code/en/reference/kimi-acp.html) stdio server | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
|
|
96
|
+
| Grok Build | documented [`grok agent stdio`](https://docs.x.ai/build/cli/headless-scripting) | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
|
|
97
|
+
| ZCode | source-pinned `zcode-acp` v0.1.0 plus digest-bound 0.16.5 patch translating to installed `app-server` | PASS, domestic BigModel provider receipt | ACP when bridge exists and `--ack-experimental` is supplied | `acp_command_unavailable` when absent |
|
|
98
|
+
|
|
99
|
+
Selection is ACP-first only after the exact Host row is `passed` and names a non-empty
|
|
100
|
+
evidence reference: stable protocol v1, stdio, executable availability, read-only,
|
|
101
|
+
bounded write, permission denial,
|
|
102
|
+
cancellation/no-orphan, cwd/diff parity, result parity, and credential/event redaction
|
|
103
|
+
must all hold. Static capability inspection never starts the provider. A candidate,
|
|
104
|
+
binary, help output, SDK version, or successful fake-agent suite alone cannot promote a
|
|
105
|
+
Host. The stable wire contract follows the official
|
|
106
|
+
[ACP v1 schema](https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/v1/schema.json);
|
|
107
|
+
unstable v2 features are outside the 5.0 required path.
|
|
108
|
+
|
|
109
|
+
All Driver receipts and terminal results expose the selected driver, ACP capability,
|
|
110
|
+
and fallback reason. Doctor reports the same facts separately from installation health.
|
|
111
|
+
`AcpDriver` stores a bounded redacted `events.jsonl`, never raw protocol messages or
|
|
112
|
+
hidden reasoning. Status re-projects every displayed latest event through that fixed
|
|
113
|
+
safe shape and treats a corrupted journal as unavailable. `CliDriver` bounds
|
|
114
|
+
stdout/stderr while retaining the output tail so the existing exact Ultra result
|
|
115
|
+
extractor remains compatible.
|
|
116
|
+
|
|
117
|
+
During `session/new`, `AcpDriver` may temporarily buffer only the bounded creation-time
|
|
118
|
+
metadata updates emitted by some conforming agents. It rejects message/tool content,
|
|
119
|
+
wrong session identities, more than 32 updates, or more than 256 KiB before the response;
|
|
120
|
+
accepted metadata is exposed only after every buffered `sessionId` matches the created
|
|
121
|
+
session. `ULTRA_DELEGATE_FORCE_CLI=1` is an explicit per-run recovery seam: it selects
|
|
122
|
+
the same bounded CLI result path and records `acp_forced_cli` without changing the
|
|
123
|
+
Host's stored conformance status.
|
|
124
|
+
|
|
125
|
+
## CLI fallback argv
|
|
126
|
+
|
|
127
|
+
`skills/ultra-delegate/scripts/host-profile.cjs` records current non-interactive
|
|
128
|
+
invocation for:
|
|
78
129
|
|
|
79
130
|
- Claude print mode with structured output and an explicit file-tool allowlist; read-only
|
|
80
131
|
uses `plan`, while bounded write uses `acceptEdits` without Bash or web tools;
|
|
@@ -90,20 +141,34 @@ until the user reviews and trusts the current definition, so Doctor reports
|
|
|
90
141
|
camel-case `--disallowedTools` surface used to deny Bash, web, subagents, and (in
|
|
91
142
|
read-only mode) write tools. The launcher's timeout remains the execution bound.
|
|
92
143
|
|
|
93
|
-
ZCode 0.16.
|
|
94
|
-
rejects them at the live root parser. Ultra therefore does not
|
|
95
|
-
headless delegation also requires an explicit CLI model
|
|
96
|
-
|
|
97
|
-
|
|
144
|
+
The installed ZCode 0.16.5 runtime advertises `--max-turns`, `--allowed-tools`, and
|
|
145
|
+
`--settings` in help but rejects them at the live root parser. Ultra therefore does not
|
|
146
|
+
pass those flags. ZCode headless delegation also requires an explicit CLI model
|
|
147
|
+
provider. Host/runtime identity and provider identity remain separate: the verified
|
|
148
|
+
local path uses ZCode Desktop with the Owner's domestic BigModel Coding Plan provider,
|
|
149
|
+
not international Z.AI OAuth. Ultra's package does not silently copy Desktop credentials;
|
|
150
|
+
the user controls the provider entry in `~/.zcode/cli/config.json`.
|
|
98
151
|
|
|
99
|
-
On macOS, the
|
|
152
|
+
On macOS, the Skill-local host profile uses
|
|
100
153
|
`/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs` when that App-bundled CLI
|
|
101
154
|
exists, then falls back to `zcode` on `PATH`. `UBP_DELEGATE_ZCODE_BIN` remains an explicit
|
|
102
155
|
test or operator override; the normal source-to-ZCode path does not require it.
|
|
103
156
|
|
|
157
|
+
The ACP bridge is independently installed from `jpalmae/zcode-acp` v0.1.0 at source
|
|
158
|
+
revision `42fe149d4b501469343c01f23ba3801832306d53`, then patched by the shipped
|
|
159
|
+
`zcode-acp-0.1.0-zcode-0.16.5.patch` with SHA-256
|
|
160
|
+
`174dfd0feafe84320556a84b5ae08b10e44c5515fea4992fd1d58af54cee4e3d`. The patch
|
|
161
|
+
answers the `session/requestRuntimePreferences` server request introduced by ZCode
|
|
162
|
+
0.16.5 before and after session creation. The pinned source plus patch passes the locked
|
|
163
|
+
Rust tests, reproduced RED, patched fake App-server E2E, release build, and real provider
|
|
164
|
+
session before use. It stamps the bridge as
|
|
165
|
+
`zcode-acp 0.1.0+ultra.zcode.0.16.5`; selection requires that marker and an installed
|
|
166
|
+
runtime reporting `0.16.5`. Ultra records both source inputs and ships only the patch; it
|
|
167
|
+
redistributes neither the bridge binary nor any ZCode Desktop bytes.
|
|
168
|
+
|
|
104
169
|
**ZCode transport maturity is `experimental`** (recorded in
|
|
105
|
-
`
|
|
106
|
-
surface — it exists, launches, and passed the 2026-08-
|
|
170
|
+
`skills/ultra-delegate/scripts/host-profile.cjs`): the App-bundled CLI is a verified-local
|
|
171
|
+
surface — it exists, launches, and passed the 2026-08-26 conformance drill — but
|
|
107
172
|
the provider publishes no headless CLI, SDK, A2A, or ZCode Protocol stability
|
|
108
173
|
contract. Promotion to `supported` requires both official documentation and a
|
|
109
174
|
full recovery drill; a binary's existence, working help, or zero exit status is
|
|
@@ -118,6 +183,20 @@ can present an internal CLI run as the documented ZCode Desktop interactive
|
|
|
118
183
|
surface. The documented interactive primary path for ZCode is the Desktop task
|
|
119
184
|
surface itself, not this headless transport.
|
|
120
185
|
|
|
186
|
+
## Installed delegation runner
|
|
187
|
+
|
|
188
|
+
Every managed plugin contains `ultra-delegate/scripts/delegate.cjs`, its worker, the
|
|
189
|
+
canonical Host profile, all three driver modules, and the Kimi launch-only profiles.
|
|
190
|
+
The loaded Skill resolves
|
|
191
|
+
that directory and invokes Node directly, so a clean plugin install does not require a
|
|
192
|
+
persisted Ultra package binary on `PATH` and never uses `npx` to rediscover Ultra.
|
|
193
|
+
The source-pinned Claude and Codex ACP adapters may themselves run through their exact
|
|
194
|
+
`npx --yes <package>@<version>` profiles. Doctor
|
|
195
|
+
reports `delegation_runner`, `acp_capability`, `agent_execution_driver`, its fallback
|
|
196
|
+
reason, and ZCode maturity separately from Skill discovery and Hooks. The package
|
|
197
|
+
`ubp delegate` surface remains a thin one-release compatibility wrapper around the same
|
|
198
|
+
functions; receipts and recovery commands point to the canonical Skill-local entrypoint.
|
|
199
|
+
|
|
121
200
|
### ZCode Desktop Workspace Memory (post-turn host effect)
|
|
122
201
|
|
|
123
202
|
ZCode Desktop ships an optional Workspace Memory feature that extracts project
|
package/docs/SKILL-AUTHORING.md
CHANGED
|
@@ -7,12 +7,17 @@ owner boundaries; host-specific discovery and invocation policy belong in adapte
|
|
|
7
7
|
|
|
8
8
|
Choose exactly one role before writing:
|
|
9
9
|
|
|
10
|
-
- **
|
|
10
|
+
- **public workflow**: an owner-invocable workflow with one or more declared modes and
|
|
11
|
+
a durable outcome;
|
|
11
12
|
- **model-invoked**: a reusable discipline used by at least two canonical workflows;
|
|
12
13
|
- **router**: read-only diagnosis that recommends the smallest next public route.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
Every public mode is `explicit-entry` or `grant-continuable`. A public workflow may
|
|
16
|
+
continue to another public mode only when a currently valid Execution Grant covers the
|
|
17
|
+
same Change, exact mode, effects, and stop conditions, and only after showing the Route
|
|
18
|
+
Card. Otherwise it stops and recommends the owner-invoked route. Host metadata never
|
|
19
|
+
substitutes for that in-Skill check. A discipline with only one real caller should be
|
|
20
|
+
inlined.
|
|
16
21
|
|
|
17
22
|
## Portable frontmatter
|
|
18
23
|
|
|
@@ -42,6 +47,12 @@ Every Skill has one outcome-led title and these semantic sections:
|
|
|
42
47
|
## References
|
|
43
48
|
```
|
|
44
49
|
|
|
50
|
+
Every public workflow and router also has `## Route modes` with a `Mode | Entry |
|
|
51
|
+
Observable exit | Next` table and references the canonical
|
|
52
|
+
`ultra-status/references/route-contract.md`. Shared card fields, material checkpoints,
|
|
53
|
+
continuation, and degraded recovery live only in that reference; each Skill owns only
|
|
54
|
+
its modes and workflow-specific facts.
|
|
55
|
+
|
|
45
56
|
User workflows first resolve at most one active `change_id`, then read only matching
|
|
46
57
|
rows from `.ultra/tasks.json`, the frontier task's `context_file` and Resume Note,
|
|
47
58
|
`CONTEXT.md`, and relevant decisions. Historical or abandoned rows never become current
|
|
@@ -96,6 +107,7 @@ For every changed Skill:
|
|
|
96
107
|
3. verify its role metadata on all six hosts;
|
|
97
108
|
4. test the accepted workflow with representative valid and adversarial inputs;
|
|
98
109
|
5. confirm no retired runtime vocabulary or host-specific path entered portable text.
|
|
110
|
+
6. run the Route Contract structural test and inspect the applicable owner journey.
|
|
99
111
|
|
|
100
112
|
The repository's `tests/skill-authoring.test.cjs` and
|
|
101
113
|
`tests/v026-contract.test.cjs` mechanize the portable parts of this contract.
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
# Ultra Builder Pro workflow lifecycle
|
|
2
2
|
|
|
3
|
-
Ultra
|
|
3
|
+
Ultra 5.0 has no fixed runtime state machine. Skills define checkable entry and exit
|
|
4
4
|
criteria; repository files record facts; the host model chooses the route.
|
|
5
5
|
|
|
6
6
|
## Capability flow
|
|
7
7
|
|
|
8
8
|
```text
|
|
9
|
-
ultra-init ──raw Project Brief──► ultra-research
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
ultra-init/create|recover ──raw Project Brief──► ultra-research/baseline
|
|
10
|
+
│
|
|
11
|
+
▼
|
|
12
|
+
ultra-change/intake
|
|
13
|
+
│
|
|
14
|
+
┌── ultra-research/change-scoped ◄──┤ evidence-needed
|
|
15
|
+
└── ultra-change/reconcile ─────────┘
|
|
16
|
+
│ accepted
|
|
17
|
+
▼
|
|
12
18
|
|
|
13
19
|
ultra-change ─► ultra-plan ─► ultra-dev (per task) ─► ultra-test ─► ultra-deliver
|
|
14
20
|
▲ │ │
|
|
@@ -18,14 +24,16 @@ ultra-status read-only router at any point
|
|
|
18
24
|
ultra-delegate orthogonal bounded execution on another CLI
|
|
19
25
|
```
|
|
20
26
|
|
|
21
|
-
Arrows are recommendations
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
Arrows are recommendations unless a live owner-activated Execution Grant authorizes the
|
|
28
|
+
exact next mode. Public modes are either `explicit-entry`, `grant-continuable`, or
|
|
29
|
+
read-only `router`; model-only methods are `model-discipline`. Scoped Research,
|
|
30
|
+
same-Change reconciliation, Plan, Dev, Test, and Deliver reconciliation may continue
|
|
31
|
+
only when the grant covers the same `change_id`, mode, effects, and stop conditions.
|
|
32
|
+
Init, Change intake/evidence/acceptance/abandonment/primary transfer, Delegate, Deliver
|
|
33
|
+
finalization, archive, and every external effect remain explicit-entry. Status remains
|
|
34
|
+
owner-invoked, read-only, and supplies no continuation authority. Delivery archives one stable
|
|
35
|
+
`change_id`; the next request opens a new active id while prior task rows remain in the
|
|
36
|
+
append-only ledger.
|
|
29
37
|
|
|
30
38
|
## Topology and checkpoints
|
|
31
39
|
|
|
@@ -43,10 +51,14 @@ Every owner-facing checkpoint — a WIP at a stop, a closing Resume Note, a deli
|
|
|
43
51
|
report — carries the eight fixed semantics defined in
|
|
44
52
|
[artifact authority](ARTIFACT-AUTHORITY.md#owner-checkpoint-semantics): why, outcome,
|
|
45
53
|
accepted boundary, delta, reality, decision needed, next bounded action, and not-done.
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
The shared [Route Contract](../skills/ultra-status/references/route-contract.md) adds
|
|
55
|
+
Route, Mode, Position, and Exit condition as navigation around those semantics. Every
|
|
56
|
+
public Skill shows the card at entry, a material checkpoint, pause/blocked exit, normal
|
|
57
|
+
exit, and before a public transition. Cards are derived observations, not stage markers,
|
|
58
|
+
permission, or persisted route state; alignment failure stops work until the owner
|
|
59
|
+
re-accepts an outcome.
|
|
48
60
|
|
|
49
|
-
## Common entry contract
|
|
61
|
+
## Common mode-aware entry contract
|
|
50
62
|
|
|
51
63
|
Every user-invoked Skill reads, in order:
|
|
52
64
|
|
|
@@ -62,6 +74,11 @@ Every user-invoked Skill reads, in order:
|
|
|
62
74
|
Missing files produce a precise recovery or initialization recommendation. They do not
|
|
63
75
|
cause the Skill to invent a state transition.
|
|
64
76
|
|
|
77
|
+
After reading these facts, the Skill chooses only one mode declared in its own Route
|
|
78
|
+
table and emits the entry Route Card. If model-selected, it revalidates that this mode is
|
|
79
|
+
grant-continuable and that the grant covers the same Change and effects. Host metadata
|
|
80
|
+
is only coarse discovery; it never substitutes for this runtime check.
|
|
81
|
+
|
|
65
82
|
## Initialization
|
|
66
83
|
|
|
67
84
|
Init writes the raw Project Brief and stable empty skeleton. `ultra-init` preserves the
|
|
@@ -73,22 +90,29 @@ launch another workflow.
|
|
|
73
90
|
|
|
74
91
|
## Research
|
|
75
92
|
|
|
76
|
-
Research turns the brief into an accepted North
|
|
77
|
-
|
|
93
|
+
Research has two modes. `baseline` explicitly turns the brief into an accepted North
|
|
94
|
+
Star and evidence-backed baseline. `change-scoped` answers only one active Change's
|
|
95
|
+
recorded Research Disposition and returns named evidence to that same Change for
|
|
96
|
+
reconciliation. `ultra-research` uses Wayfinding only when a multi-lens path is unclear,
|
|
97
|
+
then records entry question, selected lenses, omissions, dependencies, source plan,
|
|
98
|
+
material checkpoints, observable stop condition, and return route before mapping the
|
|
78
99
|
question to the smallest useful subset of seventeen focused references. The first six
|
|
79
100
|
are semantic lenses with real dependencies: `00` precedes `01`; conditional `02` and
|
|
80
101
|
`03` may fan out after the boundary is known; `04` consumes their relevant conclusions
|
|
81
102
|
and is the first owner checkpoint; `05` extracts assumptions from `00` through `04`.
|
|
82
103
|
Grilling controls how missing owner inputs are asked, Think tests one consequential
|
|
83
104
|
decision, and Domain Modeling writes settled vocabulary; none owns the Research route.
|
|
84
|
-
The
|
|
85
|
-
three specifications, and a source-hash-bound distillate.
|
|
105
|
+
The baseline synthesis promotes accepted conclusions into the North Star, `CONTEXT.md`,
|
|
106
|
+
three specifications, and a source-hash-bound distillate. A change-scoped run updates
|
|
107
|
+
only its mapped sections and never changes Change acceptance on its own. Lens counts are
|
|
108
|
+
navigation facts, not semantic progress or a completion signal.
|
|
86
109
|
|
|
87
110
|
## Change reconciliation
|
|
88
111
|
|
|
89
|
-
Change updates only the touched baseline rather than rebuilding it.
|
|
90
|
-
|
|
91
|
-
|
|
112
|
+
Change updates only the touched baseline rather than rebuilding it. Its visible modes
|
|
113
|
+
are `intake`, `evidence-needed`, `reconcile`, and `accepted`. `ultra-change` first
|
|
114
|
+
compares requested behavior with accepted product truth and current code. It classifies
|
|
115
|
+
changes by the resulting commitments:
|
|
92
116
|
|
|
93
117
|
- expansion and correction may proceed inside accepted intent;
|
|
94
118
|
- a reduction waits for explicit owner authority.
|
|
@@ -99,6 +123,16 @@ existing evidence; `bounded` or `required` names the exact question, lenses, and
|
|
|
99
123
|
evidence. Unsatisfied exit evidence routes to Research, then back through Change
|
|
100
124
|
reconciliation before planning when the accepted contract needs an update.
|
|
101
125
|
|
|
126
|
+
Draft intent is mutable. Revising a consequential accepted answer creates a superseding
|
|
127
|
+
decision record so Status can reconstruct history without treating an event log as
|
|
128
|
+
authority. Only same-Change, non-material `reconcile` may continue under a valid grant;
|
|
129
|
+
opening or accepting a boundary, abandoning it, reducing a commitment, or changing the
|
|
130
|
+
canonical writer is an explicit owner checkpoint.
|
|
131
|
+
|
|
132
|
+
If the owner rejects the offered options as inadequate, Change preserves that answer,
|
|
133
|
+
keeps the draft unresolved, and returns to evidence or materially different options. It
|
|
134
|
+
never selects the closest rejected option or advances to Plan by default.
|
|
135
|
+
|
|
102
136
|
A micro edit that makes no specification sentence false stays outside the Ultra
|
|
103
137
|
lifecycle and uses ordinary repository TDD/verification. Once an active Change exists,
|
|
104
138
|
Plan creates the smallest graph justified by the real seams, evidence, review, and
|
|
@@ -121,6 +155,12 @@ coupling and recovery risk justify a whole-path check. Cycles and broken trace p
|
|
|
121
155
|
repaired before handoff. Complexity, file, task, line, and context counts are
|
|
122
156
|
observations rather than plan-quality gates.
|
|
123
157
|
|
|
158
|
+
Plan names the earliest executable tracer bullet's real consumer, real data path, and
|
|
159
|
+
owner-visible observation. A product or contract evidence gap returns to
|
|
160
|
+
`ultra-change/reconcile`; Change decides whether bounded Research is required. Ordinary
|
|
161
|
+
technical uncertainty remains model-owned or becomes a bounded spike/tracer task, so
|
|
162
|
+
Plan never bypasses Change by opening product Research directly.
|
|
163
|
+
|
|
124
164
|
## Task development
|
|
125
165
|
|
|
126
166
|
`ultra-dev` writes the implementation plan into the task context before code. It uses
|
|
@@ -208,17 +248,17 @@ effects. Readiness grants none automatically.
|
|
|
208
248
|
`ultra-status` infers the smallest next route from observable files:
|
|
209
249
|
|
|
210
250
|
- no healthy skeleton or usable raw brief → init;
|
|
211
|
-
- raw brief without an accepted baseline
|
|
251
|
+
- raw brief without an accepted baseline → baseline research;
|
|
212
252
|
- requested outcome without active Change → change;
|
|
213
253
|
- draft or blocking active intent → change;
|
|
214
|
-
- unsatisfied Research Disposition → research;
|
|
254
|
+
- unsatisfied Research Disposition → change-scoped research, then the same Change reconciliation;
|
|
215
255
|
- active Change without matching executable tasks → plan;
|
|
216
256
|
- the unique matching `in_progress` task → dev;
|
|
217
257
|
- only `pending` tasks remaining → report them as frontier candidates and recommend
|
|
218
258
|
one exact task id for an explicit owner invocation of dev;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
259
|
+
- a completed ledger row with missing, stale, or invalid v2 evidence/task review → dev
|
|
260
|
+
to record affected criteria and reason, explicitly reopen, and repair provenance;
|
|
261
|
+
- completed current-Change tasks with current v2 evidence and no matching fresh report → test;
|
|
222
262
|
- false report → route by finding and owner disposition, not by the boolean alone;
|
|
223
263
|
- fresh, dispositioned report and unarchived Change → deliver.
|
|
224
264
|
|
|
@@ -229,6 +269,12 @@ replays the existing structural validators; they observe transport and freshness
|
|
|
229
269
|
never decide semantic acceptance. Age, complexity, and file/task counts may be reported
|
|
230
270
|
as context but never decide staleness or quality. It does not mutate artifacts.
|
|
231
271
|
|
|
272
|
+
Status outputs the Route Card by default and expands `history`, `installation`,
|
|
273
|
+
`delegation`, or `recovery` on request. An ambiguous or malformed active authority stops
|
|
274
|
+
semantic routing and writes, but not diagnosis: recovery mode reports the typed fact,
|
|
275
|
+
safe Git/directory observations, and the cheapest repair/retry/cancel/abandon path
|
|
276
|
+
without selecting an ambiguous intent as truth.
|
|
277
|
+
|
|
232
278
|
## Delegation
|
|
233
279
|
|
|
234
280
|
`ultra-delegate` is orthogonal to the lifecycle and requires explicit owner authority.
|
|
@@ -238,6 +284,10 @@ the latter two may be read-only and do not require a task, so both pre-Plan evid
|
|
|
238
284
|
post-task review remain reachable. Every scope still binds the one active `change_id`, a
|
|
239
285
|
clean isolated worktree, strict permission/result schemas, and primary-host inspection.
|
|
240
286
|
The worker cannot write canonical `.ultra` files or perform external effects.
|
|
287
|
+
Delegation itself is explicit-entry. Tool calls, plans, usage, permissions, process
|
|
288
|
+
output, ACP updates, and terminal transport state remain execution observations; only
|
|
289
|
+
the primary writer interprets the validated result against Research, task, review, or
|
|
290
|
+
Test acceptance and selects the semantic route.
|
|
241
291
|
|
|
242
292
|
## Artifact closure
|
|
243
293
|
|
|
@@ -263,7 +313,7 @@ session contains `WORKER-PACKET.json`, `ADMISSION.json`, every selected speciali
|
|
|
263
313
|
artifact, and `SUMMARY.json`; retain it until aggregate Test and Deliver have both consumed it
|
|
264
314
|
successfully, then it may be garbage-collected. Premature loss requires a fresh Review
|
|
265
315
|
and Test; never reconstruct the old receipt. Other derived observations keep their
|
|
266
|
-
explicit rebuild or rerun paths. No route creates an unowned drift log,
|
|
316
|
+
explicit rebuild or rerun paths. No route creates an unowned drift log, parallel planning file,
|
|
267
317
|
technical-debt report, or second delivery summary.
|
|
268
318
|
|
|
269
319
|
## Interruption and cross-host continuation
|
|
@@ -275,7 +325,11 @@ task, evidence, or report authority would lose meaning.
|
|
|
275
325
|
|
|
276
326
|
Before stopping, the active task context records current facts, exact verification,
|
|
277
327
|
open questions, Completion, and a closing Resume Note. The next session or host repeats
|
|
278
|
-
the common entry contract
|
|
328
|
+
the common entry contract, compares the working tree with those claims, and derives a
|
|
329
|
+
fresh Route Card. It does not rerun completed Research merely because conversation
|
|
330
|
+
memory is gone. When context pressure threatens a reliable continuation, the current
|
|
331
|
+
Agent finishes the nearest safe write, refreshes the Resume Note, shows a stop card, and
|
|
332
|
+
recommends a fresh session; context size does not become route authority.
|
|
279
333
|
|
|
280
334
|
This path remains valid when hooks and `ubp` are disabled. A compact snapshot may be
|
|
281
335
|
used as a hint, then checked against canonical files and Git.
|