@emiliosp/pi-maestro 0.15.0 → 0.17.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/ADR.md +127 -0
- package/CHANGELOG.md +22 -0
- package/README.md +7 -7
- package/ROADMAP.md +221 -46
- package/agents/builder.md +8 -8
- package/agents/verifier.md +12 -12
- package/docs/configuration.md +21 -27
- package/docs/glossary.md +5 -3
- package/docs/subagent-integration.md +4 -4
- package/docs/workflow.md +40 -32
- package/package.json +3 -3
- package/src/artifacts/builder-handoff/schema.ts +1 -2
- package/src/config/assertConfiguration.ts +0 -6
- package/src/config/defaults.ts +0 -5
- package/src/config/schema.ts +0 -14
- package/src/delegation/SubSession.ts +102 -0
- package/src/delegation/TaskExecutionError.ts +20 -0
- package/src/delegation/createChildServices.ts +110 -0
- package/src/delegation/executeTask.ts +38 -0
- package/src/delegation/readTaskResult.ts +27 -0
- package/src/maestro/instructions/getMaestroInstructions.ts +13 -11
- package/src/tools/main/resolve-findings.ts +3 -4
- package/src/tools/main/run-builder.ts +2 -3
- package/src/tools/main/run-simplifier.ts +2 -3
- package/src/tools/main/run-verifier.ts +2 -3
- package/src/tools/utils/pi-subagent-delegation.ts +3 -0
- package/templates/spec.md +23 -11
package/ADR.md
CHANGED
|
@@ -275,3 +275,130 @@ Approval can finish at `candidate-ready` without agent execution. Agent and mode
|
|
|
275
275
|
### Evidence
|
|
276
276
|
|
|
277
277
|
[Approved design](.specs/20261103-161424-maestro-27-make-implementation-phases-optional/design.md) and [phase selection](docs/configuration.md#phase-selection).
|
|
278
|
+
|
|
279
|
+
## ADR-010: Use the Pi SDK for sequential agent delegation
|
|
280
|
+
|
|
281
|
+
### Status
|
|
282
|
+
|
|
283
|
+
Design decisions confirmed by the `owner`. Not implemented.
|
|
284
|
+
|
|
285
|
+
### Context
|
|
286
|
+
|
|
287
|
+
`Maestro` currently depends on `pi-subagents` to execute the `builder`, `verifier`, and `simplifier`. Its delegation needs are limited: only one workflow and one child
|
|
288
|
+
agent execute at a time, and `Maestro` waits for each child to finish. `Maestro` already owns workflow transitions, role instructions, saved `handoffs`, and result
|
|
289
|
+
validation.
|
|
290
|
+
|
|
291
|
+
The `owner` wants to remove the `pi-subagents` dependency without building a general-purpose delegation framework. Pi provides `createAgentSession()` for direct SDK
|
|
292
|
+
integration and `RpcClient` for subprocess control. Separate conversations do not require separate processes.
|
|
293
|
+
|
|
294
|
+
### Decision
|
|
295
|
+
|
|
296
|
+
1. Replace `pi-subagents` delegation with direct use of the Pi SDK through `createAgentSession()`, rather than RPC subprocesses.
|
|
297
|
+
2. Preserve sequential execution: one workflow at a time, one child agent at a time, with `Maestro` waiting for completion.
|
|
298
|
+
3. Use task-and-handoff communication, not a live supervisor dialogue. `Maestro` assigns the task; the child works, saves its `handoff`, and finishes.
|
|
299
|
+
4. When an `owner` decision is needed, the `builder` saves an `escalation` and ends its `run`. `Maestro` discusses it with the `owner` and records the decisions through
|
|
300
|
+
the existing workflow. Any subsequent `builder` `run` starts a fresh conversation and reads the saved decisions.
|
|
301
|
+
5. Child sessions must have access to the same working tools available to `Maestro`, plus the tools needed to save their own `handoffs`. Do not load the main `Maestro`
|
|
302
|
+
extension into child sessions. Tools supplied by other extensions may remain available even if they support delegation; role instructions forbid using them to
|
|
303
|
+
delegate. This is a tool-access requirement, not merely an extension-loading policy.
|
|
304
|
+
6. Automatically load enabled global and project extensions, excluding the main `Maestro` extension. Provide the corresponding working-tool environment through Pi's
|
|
305
|
+
native APIs and configuration, including separate Pi support such as MCP and `codemode` where needed. Loading the same extensions alone does not reproduce every CLI
|
|
306
|
+
capability. Compatibility of arbitrary extensions, tools, and model providers is outside Maestro's responsibility; do not add custom compatibility checks or adapters.
|
|
307
|
+
7. All three child roles receive the owner's global instruction file, normally `~/.pi/agent/AGENTS.md`, preserving the current `inheritGlobalContext: true` behavior.
|
|
308
|
+
These instructions are not the parent's conversation history.
|
|
309
|
+
8. All three child roles automatically receive project instructions discovered by Pi, such as applicable `AGENTS.md` files, preserving the current
|
|
310
|
+
`inheritProjectContext: true` behavior. These instructions supplement global instructions and role-specific guidance.
|
|
311
|
+
9. All three child roles can discover and use available skills, preserving the current `inheritSkills: true` behavior. Expose the skill catalog without loading every
|
|
312
|
+
skill's full contents into the conversation. Skills remain subject to the child's role boundaries and permitted tools; they do not authorize delegation or workflow
|
|
313
|
+
management.
|
|
314
|
+
10. During a child `run`, report the role, elapsed time, current tool, and recent normal assistant text through Pi's standard tool-progress updates (`onUpdate`). Use Pi's
|
|
315
|
+
built-in presentation, including its default layout, truncation, and expansion behavior. Do not build a custom renderer or implement a fixed visible-line count or
|
|
316
|
+
terminal-height adaptation. Update progress in place instead of appending intermediate messages to the main conversation. Do not include internal reasoning or full
|
|
317
|
+
command output. Continue reporting activity when the child produces no text; do not prompt it to generate artificial progress messages.
|
|
318
|
+
11. Intermediate activity text is UI-only and must not enter the main model's context. `Maestro` continues to receive the existing workflow result. Pi's display limits do
|
|
319
|
+
not truncate the saved child conversation. The five-, ten-, and twenty-line alternatives are superseded by the decision to use Pi's standard presentation.
|
|
320
|
+
12. Persist child conversations using Pi's native session format, rather than a custom transcript format. Saved sessions remain available after execution for diagnosis,
|
|
321
|
+
including unsuccessful executions. Each child `run` starts a new conversation; persistence does not introduce automatic session reuse or workflow recovery.
|
|
322
|
+
13. At child completion or failure, show the `owner` the path to its saved Pi session file, when one exists. The `owner` can inspect the file directly or use Pi's native
|
|
323
|
+
HTML export with `pi --export <session-file> conversation.html`. Do not build a transcript inspector inside `Maestro`. Reading or exporting a transcript does not
|
|
324
|
+
resume child execution.
|
|
325
|
+
14. Do not impose an automatic child `run` timeout in `Maestro`. Remove `builder.timeoutMinutes`, `verifier.timeoutMinutes`, and `simplifier.timeoutMinutes` from
|
|
326
|
+
`.pi/maestro.json` configuration support, including schema validation, defaults, launch inputs, and configuration documentation. A child continues until it finishes,
|
|
327
|
+
fails, or is manually interrupted. This removes the workflow-level deadline, not the elapsed-time progress display or timeouts internal to Pi and its tools.
|
|
328
|
+
15. Remove `timeoutMinutes` from the configuration schemas and retain `additionalProperties: false`. Existing TypeBox-based validation rejects configuration files that
|
|
329
|
+
still contain the field. Do not add a migration, ignored legacy fields, or special compatibility handling. The `owner` removes obsolete fields manually.
|
|
330
|
+
16. Preserve the existing execution-error policy. Launch failures, failed child executions, and missing or invalid `handoffs` stop the workflow and report the error.
|
|
331
|
+
`Maestro` does not automatically start another child session to retry, repair saved state, or roll back files. Preserve the remaining project files and saved workflow
|
|
332
|
+
state for manual `owner` follow-up, including partial protocol writes. Errors do not introduce recovery transitions or synthetic `escalations`.
|
|
333
|
+
17. Propagate manual cancellation of the main tool to its active child through `session.abort()` and await the interruption before releasing the child session. Do not
|
|
334
|
+
send a final model prompt asking the child to finish, and do not generate a synthetic `handoff`. Leave project files and saved workflow state unchanged by cleanup.
|
|
335
|
+
Close child sessions and release progress subscriptions and session resources on completion, failure, or cancellation. Do not start another child while the previous
|
|
336
|
+
child remains active.
|
|
337
|
+
18. Store child sessions in a `subagents/` subdirectory of Pi's normal project session directory, normally `~/.pi/agent/sessions/--<project-path>--/subagents/`. Resolve
|
|
338
|
+
the parent directory through Pi's session-directory API rather than reimplementing project-path encoding. Use Pi's native `SessionManager` with this directory. Do not
|
|
339
|
+
create a `subagents/` directory inside the project repository.
|
|
340
|
+
19. Require Pi 1.5.0 or later for the SDK-based implementation. Update the declared Pi requirement and align implementation verification with this baseline. Do not add
|
|
341
|
+
compatibility fallbacks for earlier Pi versions. This minimum is a scope choice, not a claim that all earlier versions lack the required APIs.
|
|
342
|
+
20. Do not build an additional tool allowlist or exclusion list to prevent child delegation. Children may have delegation tools available, but their role instructions
|
|
343
|
+
forbid using them. This deliberately relies on instruction compliance rather than technical removal of delegation capabilities. The main `Maestro` extension remains
|
|
344
|
+
excluded.
|
|
345
|
+
21. Leave compatibility of external integrations to Pi and the `owner`. Do not add a preflight that compares parent and child tool availability, extension health checks,
|
|
346
|
+
special adapters, or a fallback system for incompatible integrations. This scope boundary does not suppress errors actually reported during launch or execution; those
|
|
347
|
+
follow the existing stop-and-report policy.
|
|
348
|
+
|
|
349
|
+
### Consequences
|
|
350
|
+
|
|
351
|
+
The replacement does not need supervisor request routing or a mechanism that makes the main model answer a child while waiting for it. Saved `handoffs` remain the
|
|
352
|
+
communication boundary for completed work and `escalations`.
|
|
353
|
+
|
|
354
|
+
SDK sessions share a Node.js process. Separate conversation histories do not isolate module-level mutable state or project files. Child resource loading must account for
|
|
355
|
+
this distinction.
|
|
356
|
+
|
|
357
|
+
Automatic extension loading intentionally differs from the current foreground behavior of `pi-subagents` 0.78.0, which does not automatically load the parent's global and
|
|
358
|
+
project extensions. Shared working-tool access is provided through Pi's native environment, not an independent compatibility guarantee for every integration. The
|
|
359
|
+
replacement must use Pi's tool activation and support such as MCP and `codemode`, rather than assuming the SDK supplies the CLI's capabilities by default. There is no
|
|
360
|
+
custom parity check, health gate, or adapter layer for third-party integrations. Children do not inherit the parent's conversation, but they share the process and may
|
|
361
|
+
interact with process-wide mutable state. Loaded extensions can create additional connections, timers, and process-wide effects. Excluding the main `Maestro` extension
|
|
362
|
+
does not establish compatibility with every other extension or remove delegation tools supplied by other extensions. `Maestro` launches its own children sequentially;
|
|
363
|
+
compliance with the broader no-delegation rule relies on child instructions. A child that ignores those instructions could launch other agents. This accepted limitation
|
|
364
|
+
avoids maintaining tool classifications and exclusion lists and does not claim a sandbox; even ordinary shell access can launch processes.
|
|
365
|
+
|
|
366
|
+
Pi's standard tool-progress presentation replaces FleetView's live activity display, not its full transcript inspector. `Maestro` owns the progress data, not a new
|
|
367
|
+
rendering system or a guaranteed panel size. Displaying text already produced by the child requires no additional model generation and does not add that text to the main
|
|
368
|
+
model's context. Full transcript inspection uses saved session files and Pi's existing export capability rather than a replacement inspector. The main tool must connect
|
|
369
|
+
cancellation to the child SDK session and perform session cleanup; selecting the SDK alone does not wire these operations together.
|
|
370
|
+
|
|
371
|
+
Native session files retain child messages, tool calls, and tool results beyond the lifetime of the child session. They may contain project data present in those messages
|
|
372
|
+
and results. Persistence is separate from the live progress display and does not add the transcript to the main model's context. The dedicated `subagents/` subdirectory
|
|
373
|
+
keeps child session files separate from the main session files without adding transcript files to the project repository or introducing a custom storage format.
|
|
374
|
+
|
|
375
|
+
Removing the configured deadline simplifies child execution but permits indefinitely running work until manual interruption. This is a breaking configuration change:
|
|
376
|
+
files that still contain `timeoutMinutes` fail existing configuration validation until the `owner` removes the obsolete fields. Document the removal without adding legacy
|
|
377
|
+
compatibility code.
|
|
378
|
+
|
|
379
|
+
Manual cancellation uses Pi's in-process cancellation lifecycle, not termination of a separate operating-system process. It does not undo completed writes or introduce a
|
|
380
|
+
final model turn. `Maestro` uses Pi's cancellation and cleanup lifecycle; behavior of third-party integrations remains outside its compatibility contract.
|
|
381
|
+
|
|
382
|
+
The Pi minimum increases from the currently documented 1.0.0 to 1.5.0. Earlier hosts are outside the new compatibility contract. At decision time, the project has Pi
|
|
383
|
+
1.0.3 installed locally and the active harness uses Pi 1.5.0; the implementation must be verified against the selected baseline rather than treating the older local
|
|
384
|
+
installation as sufficient verification. This ADR changes no installed dependencies.
|
|
385
|
+
|
|
386
|
+
### Evidence
|
|
387
|
+
|
|
388
|
+
During the architecture discussion, the `owner` selected the SDK and task-and-handoff communication, then clarified the tool-access contract: the same working tools as
|
|
389
|
+
`Maestro`, plus child handoff tools, with the main `Maestro` extension excluded. The `owner` subsequently accepted that delegation tools from other extensions may remain
|
|
390
|
+
available, with their use forbidden by instructions rather than additional tool filters. The `owner` also confirmed that all three roles continue receiving global and
|
|
391
|
+
automatically discovered project instructions, as declared by `inheritGlobalContext: true` and `inheritProjectContext: true` in the existing role definitions. All three
|
|
392
|
+
roles also retain access to the skill catalog and can load relevant skill instructions, consistent with their existing `inheritSkills: true` setting and subject to role
|
|
393
|
+
and tool restrictions. After discussing bounded display sizes, the `owner` selected Pi's standard tool-progress presentation rather than custom rendering, while retaining
|
|
394
|
+
recent assistant text without sending intermediate text to the main model. The `owner` selected persistent transcripts in Pi's native session format, while keeping each
|
|
395
|
+
child conversation fresh. The `owner` chose to receive the saved session path and use direct file inspection or Pi's native HTML export, without a `Maestro` transcript
|
|
396
|
+
inspector. The `owner` chose the simplest execution option: no automatic child deadline, with the timeout settings removed from configuration. The `owner` accepted that
|
|
397
|
+
existing TypeBox-based validation rejects configurations retaining `timeoutMinutes`, without migration or compatibility handling, and confirmed the existing
|
|
398
|
+
execution-error policy: stop and report, retain files, and leave follow-up to the `owner`, without automatic retries, repair, or rollback. The `owner` selected manual
|
|
399
|
+
interruption through `session.abort()` followed by session cleanup, without a final model turn or synthetic `handoff`, and placed saved child sessions in `subagents/`
|
|
400
|
+
beneath Pi's project session directory, not inside the repository. The `owner` chose Pi 1.5.0 as the minimum supported version, without fallbacks for earlier hosts. The
|
|
401
|
+
`owner` explicitly excluded compatibility handling for external integrations from scope; no custom checks, adapters, or reduced-capacity fallback system are required.
|
|
402
|
+
Existing boundaries are described in [subagent integration](docs/subagent-integration.md), [delegation](src/tools/utils/pi-subagent-delegation.ts),
|
|
403
|
+
[builder execution](src/tools/main/run-builder.ts), and the [child extension](extensions/maestro-subagent.ts). These links describe the current implementation, not the
|
|
404
|
+
planned SDK replacement.
|
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
This file summarizes meaningful changes to the codebase, including behavior, data formats, architecture, and development tools. Git tags identify version boundaries;
|
|
4
4
|
GitHub Releases are not required.
|
|
5
5
|
|
|
6
|
+
## 0.17.0
|
|
7
|
+
|
|
8
|
+
1. Added a standalone internal Pi SDK executor. Each invocation starts a fresh conversation with supplied model, thinking level, role guidance, working directory, and
|
|
9
|
+
additional tools. Native resource discovery loads instructions, skills, enabled extensions, and configured MCP, codemode, and tool search support, excluding the main
|
|
10
|
+
`Maestro` extension.
|
|
11
|
+
2. Added native child session persistence in `subagents/` beneath Pi's project session directory.
|
|
12
|
+
3. Replaced the `acceptance criterion` `probe` and `expected result` fields with `GIVEN`, `WHEN`, and `THEN`, keeping the concrete example. Requirement bodies now use a
|
|
13
|
+
named actor followed by `MUST` in the requirement heading. Added an optional bullet-list `## Assumptions` section to `spec.md`.
|
|
14
|
+
|
|
15
|
+
The `builder`, `verifier`, and `simplifier` still use `pi-subagents`. Workflow migration and dependency removal remain separate work.
|
|
16
|
+
|
|
17
|
+
## 0.16.0
|
|
18
|
+
|
|
19
|
+
1. Required Pi 1.5.0 or later and pinned the development Pi dependencies to that baseline, so type checks and tests run against the declared host. The extension now uses
|
|
20
|
+
TypeBox `Type.Enum` with an explicit string type instead of the `StringEnum` helper, calls `before_agent_start` with Pi's message object, and expects the `truncated`
|
|
21
|
+
field on `exec` results. See [PR #46](https://github.com/emilioSp/pi-maestro/pull/46).
|
|
22
|
+
2. Breaking: removed `timeoutMinutes` from the agent configuration. Configuration files that still contain the field fail validation until the `owner` removes it; no
|
|
23
|
+
migration or legacy handling is provided.
|
|
24
|
+
3. Replaced the configured per-agent timeout with a fixed, non-configurable deadline passed to `pi-subagents` for every `run`. A `run` is no longer bounded by a
|
|
25
|
+
configured duration.
|
|
26
|
+
4. Updated `ADR.md`, `ROADMAP.md`, `README.md`, and `docs/` for the new baseline and the removed timeout settings. `MAESTRO-FREE-1` is recorded as completed.
|
|
27
|
+
|
|
6
28
|
## 0.15.0
|
|
7
29
|
|
|
8
30
|
1. Added per-agent `required` booleans in `.pi/maestro.json`, all defaulting to `true`. Disabling `builder` completes the workflow at `spec` approval without agents;
|
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ The following official sources document the conceptual references. The links poi
|
|
|
45
45
|
2. **Describe behavior, not routine implementation choices.** [OpenSpec's schema][openspec-schema] defines a `specification` as a behavior contract, not an implementation
|
|
46
46
|
plan. `Maestro` records required behavior, constraints, and approved architectural decisions in the `spec`, leaving routine implementation choices to the `builder`.
|
|
47
47
|
3. **Use concrete, testable scenarios.** [OpenSpec's schema][openspec-schema] pairs requirements with scenarios; [Spec Kit's template][spec-kit-template] uses
|
|
48
|
-
Given/When/Then acceptance scenarios. Each `Maestro` `acceptance criterion` includes a `
|
|
48
|
+
Given/When/Then acceptance scenarios. Each `Maestro` `acceptance criterion` includes a `GIVEN`, a `WHEN`, a `THEN`, and a concrete example.
|
|
49
49
|
4. **Clarify requirements progressively.** [Spec Kit's clarify command][spec-kit-clarify] asks one question at a time and integrates accepted answers into the
|
|
50
50
|
`specification`. `Maestro` likewise asks one focused question, waits for the owner's answer, and updates the `spec` before asking the next question.
|
|
51
51
|
5. **Review requirements separately from testing code.** [Spec Kit's checklist command][spec-kit-checklist] evaluates requirements for completeness, clarity, consistency,
|
|
@@ -54,7 +54,7 @@ The following official sources document the conceptual references. The links poi
|
|
|
54
54
|
6. **Separate motivation, behavior, and design.** [OpenSpec's schema][openspec-schema] separates these concerns and calls for `design.md` only when significant technical
|
|
55
55
|
decisions need recording, including reasons, alternatives, and risks.
|
|
56
56
|
7. **Make requirement changes explicit.** [OpenSpec's schema][openspec-schema] distinguishes added, modified, removed, and renamed requirements. `Maestro` adapts this
|
|
57
|
-
concept with one `Delta` field per requirement: `added`, `modified`, or `removed`. Each requirement states the
|
|
57
|
+
concept with one `Delta` field per requirement: `added`, `modified`, or `removed`. Each requirement heading states the required outcome with a named actor and `MUST`.
|
|
58
58
|
8. **Make requirement coverage traceable.** [Spec Kit's analyze command][spec-kit-analyze] maps requirements to implementation tasks and identifies coverage gaps.
|
|
59
59
|
`Maestro` applies a related principle to verification: each requirement has a `Verified by` field linking to its `acceptance criteria`, existing tests covering exact
|
|
60
60
|
scenarios, or both. The mapping connects requirements to verification.
|
|
@@ -83,7 +83,7 @@ An `escalation` asks the `owner` to decide an implementation question. A `findin
|
|
|
83
83
|
|
|
84
84
|
1. macOS.
|
|
85
85
|
2. Node.js 26 or later.
|
|
86
|
-
3. Pi 1.
|
|
86
|
+
3. Pi 1.5.0 or later.
|
|
87
87
|
4. `pi-subagents` installed and enabled in Pi when `builder` is enabled.
|
|
88
88
|
5. Access to the models for enabled agents.
|
|
89
89
|
6. A project directory that Pi trusts.
|
|
@@ -151,9 +151,9 @@ files do not automatically restore or resume an incomplete workflow. The `owner`
|
|
|
151
151
|
## Configuration
|
|
152
152
|
|
|
153
153
|
`Maestro` uses default values when `.pi/maestro.json` is absent from the project root. The `owner` can add this file to change the `spec` directory, models, thinking
|
|
154
|
-
levels,
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
levels, or selected phases. Each agent has a `required` boolean that defaults to `true`. Set flags before activation and keep configuration unchanged during the workflow.
|
|
155
|
+
With `builder.required: false`, approval finishes with only an approved `spec` for implementation elsewhere. Otherwise `verifier` and `simplifier` can be disabled
|
|
156
|
+
independently. Skipped work is identified in the final summary and is not claimed as completed. See [Configuration](docs/configuration.md#phase-selection).
|
|
157
157
|
|
|
158
158
|
## Documentation
|
|
159
159
|
|
|
@@ -161,7 +161,7 @@ The reading order is:
|
|
|
161
161
|
|
|
162
162
|
1. [Glossary](docs/glossary.md): terms and identifiers used in `specs`, reports, and `Maestro` messages. Read this before the first workflow.
|
|
163
163
|
2. [Workflow](docs/workflow.md): approvals, decisions, and how each `run` produces `artifacts`.
|
|
164
|
-
3. [Configuration](docs/configuration.md): project paths, models, and
|
|
164
|
+
3. [Configuration](docs/configuration.md): project paths, models, and thinking levels.
|
|
165
165
|
4. [Subagent integration](docs/subagent-integration.md): agent context, execution, and activity tracking.
|
|
166
166
|
|
|
167
167
|
## Project constitution
|
package/ROADMAP.md
CHANGED
|
@@ -10,30 +10,38 @@ reaching `candidate-ready`. Linear onboarding and test issues are not project ro
|
|
|
10
10
|
|
|
11
11
|
## Overview
|
|
12
12
|
|
|
13
|
-
| ID
|
|
14
|
-
|
|
|
15
|
-
| MAESTRO-6
|
|
16
|
-
| MAESTRO-7
|
|
17
|
-
| MAESTRO-8
|
|
18
|
-
| MAESTRO-9
|
|
19
|
-
| MAESTRO-10
|
|
20
|
-
| MAESTRO-11
|
|
21
|
-
| MAESTRO-12
|
|
22
|
-
| MAESTRO-13
|
|
23
|
-
| MAESTRO-14
|
|
24
|
-
| MAESTRO-15
|
|
25
|
-
| MAESTRO-16
|
|
26
|
-
| MAESTRO-17
|
|
27
|
-
| MAESTRO-18
|
|
28
|
-
| MAESTRO-19
|
|
29
|
-
| MAESTRO-20
|
|
30
|
-
| MAESTRO-21
|
|
31
|
-
| MAESTRO-22
|
|
32
|
-
| MAESTRO-23
|
|
33
|
-
| MAESTRO-24
|
|
34
|
-
| MAESTRO-25
|
|
35
|
-
| MAESTRO-26
|
|
36
|
-
| MAESTRO-27
|
|
13
|
+
| ID | Item | Status |
|
|
14
|
+
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
15
|
+
| MAESTRO-6 | [Display specs in a browser](#maestro-6-display-specs-in-a-browser) | Backlog |
|
|
16
|
+
| MAESTRO-7 | [Route builder failures through owner escalations](#maestro-7-route-builder-failures-through-owner-escalations) | Completed |
|
|
17
|
+
| MAESTRO-8 | [Store escalations and owner decisions in builder handoffs](#maestro-8-store-escalations-and-owner-decisions-in-builder-handoffs) | Completed |
|
|
18
|
+
| MAESTRO-9 | [Format glossary terms consistently](#maestro-9-format-glossary-terms-consistently) | Completed |
|
|
19
|
+
| MAESTRO-10 | [Improve status presentation and activation feedback](#maestro-10-improve-status-presentation-and-activation-feedback) | Completed |
|
|
20
|
+
| MAESTRO-11 | [Introduce Maestro at activation](#maestro-11-introduce-maestro-at-activation) | Completed |
|
|
21
|
+
| MAESTRO-12 | [Verify code quality against AGENTS.md instructions](#maestro-12-verify-code-quality-against-agentsmd-instructions) | Completed |
|
|
22
|
+
| MAESTRO-13 | [Check subagent extensions at activation](#maestro-13-check-subagent-extensions-at-activation) | Completed |
|
|
23
|
+
| MAESTRO-14 | [Rename the test support directory](#maestro-14-rename-the-test-support-directory) | Completed |
|
|
24
|
+
| MAESTRO-15 | [Match handoff criteria to the approved spec](#maestro-15-match-handoff-criteria-to-the-approved-spec) | Completed |
|
|
25
|
+
| MAESTRO-16 | [Route finding-driven spec revisions through drafting-spec](#maestro-16-route-finding-driven-spec-revisions-through-drafting-spec) | Completed |
|
|
26
|
+
| MAESTRO-17 | [Keep acceptance criterion numbering continuous](#maestro-17-keep-acceptance-criterion-numbering-continuous) | Completed |
|
|
27
|
+
| MAESTRO-18 | [Record escalation resolutions when the spec changes](#maestro-18-record-escalation-resolutions-when-the-spec-changes) | Completed |
|
|
28
|
+
| MAESTRO-19 | [Guide initial configuration](#maestro-19-guide-initial-configuration) | Backlog |
|
|
29
|
+
| MAESTRO-20 | [Rename the npm package](#maestro-20-rename-the-npm-package) | Backlog |
|
|
30
|
+
| MAESTRO-21 | [Label acceptance criterion coverage](#maestro-21-label-acceptance-criterion-coverage) | Completed |
|
|
31
|
+
| MAESTRO-22 | [Avoid acceptance criteria already covered by tests](#maestro-22-avoid-acceptance-criteria-already-covered-by-tests) | Completed |
|
|
32
|
+
| MAESTRO-23 | [Change agent models before a builder run](#maestro-23-change-agent-models-before-a-builder-run) | Backlog |
|
|
33
|
+
| MAESTRO-24 | [Add a simplifier with one clear purpose per agent](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) | Completed |
|
|
34
|
+
| MAESTRO-25 | [Define workflow reconciliation](#maestro-25-define-workflow-reconciliation) | Backlog |
|
|
35
|
+
| MAESTRO-26 | [Exit Maestro mode automatically at workflow completion](#maestro-26-exit-maestro-mode-automatically-at-workflow-completion) | Completed |
|
|
36
|
+
| MAESTRO-27 | [Make all implementation phases optional](#maestro-27-make-all-implementation-phases-optional) | Completed |
|
|
37
|
+
| MAESTRO-FREE-1 | [Require Pi 1.5.0](#maestro-free-1-require-pi-150) | Completed |
|
|
38
|
+
| MAESTRO-FREE-2 | [Remove Maestro run timeouts](#maestro-free-2-remove-maestro-run-timeouts) | Completed |
|
|
39
|
+
| MAESTRO-FREE-PRE-3 | [Implement internal SDK delegation](#maestro-free-pre-3-implement-internal-sdk-delegation) | In progress |
|
|
40
|
+
| MAESTRO-FREE-3 | [Run the builder through the Pi SDK](#maestro-free-3-run-the-builder-through-the-pi-sdk) | Backlog |
|
|
41
|
+
| MAESTRO-FREE-4 | [Run the verifier through the Pi SDK](#maestro-free-4-run-the-verifier-through-the-pi-sdk) | Backlog |
|
|
42
|
+
| MAESTRO-FREE-5 | [Run the simplifier through the Pi SDK](#maestro-free-5-run-the-simplifier-through-the-pi-sdk) | Backlog |
|
|
43
|
+
| MAESTRO-FREE-6 | [Show SDK agent activity through Pi](#maestro-free-6-show-sdk-agent-activity-through-pi) | Backlog |
|
|
44
|
+
| MAESTRO-FREE-7 | [Remove the pi-subagents dependency](#maestro-free-7-remove-the-pi-subagents-dependency) | Backlog |
|
|
37
45
|
|
|
38
46
|
## Backlog
|
|
39
47
|
|
|
@@ -90,8 +98,193 @@ Explore how `Maestro` can reconcile saved `artifacts` and workflow state. The re
|
|
|
90
98
|
|
|
91
99
|
Not yet defined. The `owner` must define the intended outcome, recovery boundaries, and completion condition before this item can move forward.
|
|
92
100
|
|
|
101
|
+
### MAESTRO-FREE-PRE-3: Implement internal SDK delegation
|
|
102
|
+
|
|
103
|
+
#### Implementation and evidence
|
|
104
|
+
|
|
105
|
+
The standalone executor is implemented under `src/delegation/` against the [approved specification](.specs/20261105-212231-implement-internal-pi-sdk-delegation/spec.md).
|
|
106
|
+
Execution orchestration, session lifecycle, and pure reply interpretation are separated into `executeTask`, `SubSession`, and `readTaskResult`. Manual verification on Pi
|
|
107
|
+
1.5.0 exercised fresh context, native and additional tools, MCP through tool search and codemode, sequential waiting, failure, cancellation, cleanup, and native session
|
|
108
|
+
persistence. See [manual evidence](docs/subagent-integration.md#manual-verification). The three workflow roles still use `pi-subagents`. Final `owner` acceptance and
|
|
109
|
+
completion are not recorded. The caller's message is named `prompt`, execution is inlined in `executeTask`, and cancellation comments explain Node.js `AbortError`. At the
|
|
110
|
+
owner's request, cancellation is forwarded only by the signal listener, without checks before or after the prompt or a retry at `agent_start`. An already cancelled signal
|
|
111
|
+
does not prevent submission, and an aborted signal alone does not turn a normal Pi result into an interruption.
|
|
112
|
+
|
|
113
|
+
#### Objective
|
|
114
|
+
|
|
115
|
+
Implement and verify one internal execution operation using `createAgentSession()`, following [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation).
|
|
116
|
+
The operation is independent of the `builder`, `verifier`, and `simplifier` roles. Callers supply the task, role instructions, model settings, working directory, and
|
|
117
|
+
additional tools needed for that execution.
|
|
118
|
+
|
|
119
|
+
#### Scope and dependencies
|
|
120
|
+
|
|
121
|
+
Requires [MAESTRO-FREE-1](#maestro-free-1-require-pi-150) and [MAESTRO-FREE-2](#maestro-free-2-remove-maestro-run-timeouts). This item implements the execution mechanism
|
|
122
|
+
without switching existing workflow tools away from `pi-subagents`. FREE-3, FREE-4, and FREE-5 connect the three roles to it together after it is verified.
|
|
123
|
+
|
|
124
|
+
The executor manages child sessions, not the workflow. It does not select phases, interpret role outcomes, or validate `handoffs`. Those responsibilities remain with the
|
|
125
|
+
callers and existing workflow operations. Communication remains task-and-`handoff`, without shared in-memory workflow state or a live supervisor dialogue. This is not a
|
|
126
|
+
new public tool or a general-purpose orchestration framework. Live progress presentation remains in [MAESTRO-FREE-6](#maestro-free-6-show-sdk-agent-activity-through-pi).
|
|
127
|
+
|
|
128
|
+
#### Completed when
|
|
129
|
+
|
|
130
|
+
1. The operation executes a supplied task in a fresh SDK conversation with the supplied model and thinking level, role guidance, global and project instructions, skills,
|
|
131
|
+
working tools, and caller-supplied additional tools. It does not depend on any of the three workflow roles.
|
|
132
|
+
2. Enabled global and project extensions and native Pi tool support load as defined in ADR-010, excluding the main `Maestro` extension. The main session retains its
|
|
133
|
+
`Maestro` mode while the child executes. No compatibility adapters, integration health gates, or delegation-prevention tool filters are added.
|
|
134
|
+
3. Execution waits for the child to finish, fail, or be interrupted before another child starts. The executor imposes no automatic deadline and does not start a new
|
|
135
|
+
session to retry or repair failed work.
|
|
136
|
+
4. Manual cancellation reaches `session.abort()` and waits for interruption. Sessions, subscriptions, and owned resources are released on every exit, without rollback,
|
|
137
|
+
workflow changes, or synthetic `handoffs`. Execution errors propagate to the caller.
|
|
138
|
+
5. Native Pi sessions are persisted in `subagents/` beneath Pi's project session directory, resolved through Pi's API. The saved path is available to the caller on
|
|
139
|
+
completion or failure when a file exists. Every execution starts fresh; no automatic resumption is introduced.
|
|
140
|
+
6. Successful execution, execution failure, cancellation, context and tool loading, and session persistence are verified independently of the workflow migration. The
|
|
141
|
+
existing three role tools still use `pi-subagents` at the end of this item.
|
|
142
|
+
|
|
143
|
+
### MAESTRO-FREE-3: Run the builder through the Pi SDK
|
|
144
|
+
|
|
145
|
+
#### Objective
|
|
146
|
+
|
|
147
|
+
Connect `builder` delegation to the internal SDK executor delivered by [MAESTRO-FREE-PRE-3](#maestro-free-pre-3-implement-internal-sdk-delegation), following
|
|
148
|
+
[ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Preserve the existing role instructions, `handoffs`, and workflow behavior.
|
|
149
|
+
|
|
150
|
+
#### Scope and dependencies
|
|
151
|
+
|
|
152
|
+
Requires [MAESTRO-FREE-PRE-3](#maestro-free-pre-3-implement-internal-sdk-delegation). Implement FREE-3, [FREE-4](#maestro-free-4-run-the-verifier-through-the-pi-sdk), and
|
|
153
|
+
[FREE-5](#maestro-free-5-run-the-simplifier-through-the-pi-sdk) as one migration of all three roles. Their identifiers retain the role-specific verification scope, not
|
|
154
|
+
separate execution mechanisms or releases. Do not introduce temporary mixed-engine routing or an engine selector. Verify each role and the supported optional-phase
|
|
155
|
+
combinations before completing the migration. Human documentation must describe the resulting SDK execution. Live progress remains in
|
|
156
|
+
[MAESTRO-FREE-6](#maestro-free-6-show-sdk-agent-activity-through-pi); existing workflow-phase status remains available in the meantime.
|
|
157
|
+
|
|
158
|
+
#### Completed when
|
|
159
|
+
|
|
160
|
+
1. An approved `spec` can be implemented by an SDK `builder` with fresh conversation history, the configured model and thinking level, role guidance, global and project
|
|
161
|
+
instructions, skills, working tools, and existing `handoff` tools.
|
|
162
|
+
2. It reuses the established executor's context and tool loading without another execution mechanism. Role instructions continue to forbid further delegation.
|
|
163
|
+
3. `done` and `escalation` outcomes preserve existing saved `handoffs`, validation, phase transitions, and subsequent workflow routes. A later `builder` `pass` starts
|
|
164
|
+
fresh and reads saved decisions rather than restoring the previous conversation.
|
|
165
|
+
4. Errors stop the workflow without rollback or repair. Manual cancellation reaches `session.abort()`, and child sessions and subscriptions are cleaned up on every exit.
|
|
166
|
+
5. Native Pi session files are saved beneath the project's Pi session directory in `subagents/`. The `owner` receives the saved path on completion or failure when a file
|
|
167
|
+
exists; it can be inspected or exported with Pi, without automatic resumption.
|
|
168
|
+
6. Existing trust, configuration, and model checks remain applicable. Activation and execution no longer require `pi-subagents` ping or launch-contract checks for any
|
|
169
|
+
role. A `builder`-only workflow uses the SDK without requiring a `pi-subagents` availability reply.
|
|
170
|
+
7. Each `run` waits for its child to finish or be interrupted before another starts. Existing optional-phase behavior remains intact.
|
|
171
|
+
|
|
172
|
+
### MAESTRO-FREE-4: Run the verifier through the Pi SDK
|
|
173
|
+
|
|
174
|
+
#### Objective
|
|
175
|
+
|
|
176
|
+
Connect the `verifier` to the SDK executor delivered by [MAESTRO-FREE-PRE-3](#maestro-free-pre-3-implement-internal-sdk-delegation), following
|
|
177
|
+
[ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Implement this role's switch together with FREE-3 and FREE-5 under the
|
|
178
|
+
[shared migration scope](#maestro-free-3-run-the-builder-through-the-pi-sdk). Do not redesign verification or its reports.
|
|
179
|
+
|
|
180
|
+
#### Completed when
|
|
181
|
+
|
|
182
|
+
1. The SDK `verifier` independently checks the approved `spec` and saves existing numbered `handoffs`, preserving criterion validation, `finding` decisions, and phase
|
|
183
|
+
transitions.
|
|
184
|
+
2. It reuses the established fresh-session context, tools, persistence, cancellation, cleanup, and error policy without a second execution mechanism.
|
|
185
|
+
3. Activation and execution no longer use `pi-subagents` for the `verifier`.
|
|
186
|
+
4. Workflows with verification enabled or disabled retain their existing routes, with all enabled roles using the common SDK executor.
|
|
187
|
+
|
|
188
|
+
### MAESTRO-FREE-5: Run the simplifier through the Pi SDK
|
|
189
|
+
|
|
190
|
+
#### Objective
|
|
191
|
+
|
|
192
|
+
Connect the `simplifier` to the SDK executor delivered by [MAESTRO-FREE-PRE-3](#maestro-free-pre-3-implement-internal-sdk-delegation), following
|
|
193
|
+
[ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Implement this role's switch together with FREE-3 and FREE-4 under the
|
|
194
|
+
[shared migration scope](#maestro-free-3-run-the-builder-through-the-pi-sdk). Keep its existing purpose and Git-only scope.
|
|
195
|
+
|
|
196
|
+
#### Completed when
|
|
197
|
+
|
|
198
|
+
1. The SDK `simplifier` preserves the current Git readiness decision, skip behavior, and entry routes. No Git readiness check moves into activation or an earlier phase.
|
|
199
|
+
2. Successful execution saves the existing unnumbered `S.json` `handoff` and reaches `candidate-ready`; optional-phase behavior remains unchanged.
|
|
200
|
+
3. It reuses the established context, tools, persistence, cancellation, cleanup, and error policy.
|
|
201
|
+
4. Activation and execution no longer use `pi-subagents` for the `simplifier`. All roles migrate together, so no workflow path requires its ping, launch preflight, or
|
|
202
|
+
fixed delegation deadline.
|
|
203
|
+
|
|
204
|
+
### MAESTRO-FREE-6: Show SDK agent activity through Pi
|
|
205
|
+
|
|
206
|
+
#### Objective
|
|
207
|
+
|
|
208
|
+
Show activity for SDK-based agent `runs` through Pi's standard `onUpdate` presentation, as decided in
|
|
209
|
+
[ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Requires the shared migration covered by
|
|
210
|
+
[MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk), FREE-4, and FREE-5, and applies to all three roles through the common executor.
|
|
211
|
+
|
|
212
|
+
#### Completed when
|
|
213
|
+
|
|
214
|
+
1. Progress reports the role, elapsed time, current tool, and recent normal assistant text, including activity while the agent produces no text.
|
|
215
|
+
2. Pi controls layout, truncation, and expansion. There is no custom renderer, fixed line count, transcript inspector, or artificial progress prompting.
|
|
216
|
+
3. Intermediate text stays out of the main model's context. Final workflow results, saved session contents, and cancellation behavior remain unchanged.
|
|
217
|
+
4. Progress subscriptions are released when the child finishes, fails, or is interrupted.
|
|
218
|
+
|
|
219
|
+
### MAESTRO-FREE-7: Remove the pi-subagents dependency
|
|
220
|
+
|
|
221
|
+
#### Objective
|
|
222
|
+
|
|
223
|
+
Finish [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation) by removing the package dependency, bundling, and remaining integration metadata after
|
|
224
|
+
[MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk), [MAESTRO-FREE-4](#maestro-free-4-run-the-verifier-through-the-pi-sdk), and
|
|
225
|
+
[MAESTRO-FREE-5](#maestro-free-5-run-the-simplifier-through-the-pi-sdk). This is dependency removal, not another execution-engine switch.
|
|
226
|
+
|
|
227
|
+
#### Completed when
|
|
228
|
+
|
|
229
|
+
1. `Maestro` neither imports nor bundles `pi-subagents`, and package metadata, role frontmatter, tests, installation instructions, and current human documentation no
|
|
230
|
+
longer require it. Historical records remain historical evidence.
|
|
231
|
+
2. A clean installation can activate and complete workflows without `pi-subagents` installed or enabled, including the supported optional-phase combinations.
|
|
232
|
+
3. Existing workflow and `handoff` formats remain unchanged. No compatibility framework, engine-selection flags, or migration of interrupted workflows is added.
|
|
233
|
+
|
|
93
234
|
## Implemented, acceptance not confirmed
|
|
94
235
|
|
|
236
|
+
### MAESTRO-26: Exit Maestro mode automatically at workflow completion
|
|
237
|
+
|
|
238
|
+
Implemented in `0.13.0`. `Maestro` automatically turns off after successfully delivering the final summary of a completed workflow, including when Git is unavailable and
|
|
239
|
+
simplification is skipped. Live tools, status, instructions, and active `spec` selection are cleared; saved workflow files and other extensions remain unchanged.
|
|
240
|
+
Intermediate phases and interrupted workflows do not trigger automatic exit.
|
|
241
|
+
|
|
242
|
+
Linear marks this item Done, but its description still says final `owner` acceptance is pending. Acceptance is not inferred from that status or the release.
|
|
243
|
+
|
|
244
|
+
#### Evidence
|
|
245
|
+
|
|
246
|
+
[Changelog](CHANGELOG.md#0130), [merged PR #43](https://github.com/emilioSp/pi-maestro/pull/43),
|
|
247
|
+
[specification](.specs/20261030-145712-automatically-exit-maestro-mode-at-workflow-completion/spec.md), and
|
|
248
|
+
[original issue](https://linear.app/emilio-spatola/issue/MAESTRO-26/feat-exit-maestro-mode-automatically-at-workflow-completion).
|
|
249
|
+
|
|
250
|
+
## Completed
|
|
251
|
+
|
|
252
|
+
Completed entries include historical records imported from Linear and work explicitly accepted by the `owner`. Historical verification evidence alone does not establish
|
|
253
|
+
final `owner` acceptance.
|
|
254
|
+
|
|
255
|
+
### MAESTRO-FREE-1: Require Pi 1.5.0
|
|
256
|
+
|
|
257
|
+
#### Objective
|
|
258
|
+
|
|
259
|
+
Adopt Pi 1.5.0 as the minimum supported host and verification baseline for [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation), without changing the
|
|
260
|
+
delegation engine or adding compatibility fallbacks.
|
|
261
|
+
|
|
262
|
+
#### Completed when
|
|
263
|
+
|
|
264
|
+
1. Declared requirements and the development verification environment use the selected Pi baseline consistently.
|
|
265
|
+
2. The existing extension and `pi-subagents` workflow continue to work on Pi 1.5.0.
|
|
266
|
+
|
|
267
|
+
#### Implementation and evidence
|
|
268
|
+
|
|
269
|
+
The `owner` confirmed completion. `README.md` declares Pi 1.5.0 as the minimum host. Development dependencies for the four Pi packages are pinned to 1.5.0, so type checks
|
|
270
|
+
and tests run against that baseline. Schema enums use TypeBox `Type.Enum` with an explicit string type. `npm run check` passes on 1.5.0, including the extension and
|
|
271
|
+
`pi-subagents` integration tests.
|
|
272
|
+
|
|
273
|
+
### MAESTRO-FREE-2: Remove Maestro run timeouts
|
|
274
|
+
|
|
275
|
+
#### Recorded outcome
|
|
276
|
+
|
|
277
|
+
The `owner` confirmed completion of the timeout configuration removal implemented in `0.16.0`. The three `timeoutMinutes` settings, their defaults, and their
|
|
278
|
+
configuration documentation were removed. Existing TypeBox validation rejects configuration retaining those fields, without migration or compatibility handling.
|
|
279
|
+
|
|
280
|
+
The current `pi-subagents` integration still receives a fixed deadline of 9,999 minutes. This is not unlimited execution. Removal of that remaining deadline belongs to
|
|
281
|
+
the SDK delegation replacement under [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation), not a separate prerequisite for it.
|
|
282
|
+
|
|
283
|
+
#### Evidence
|
|
284
|
+
|
|
285
|
+
[Changelog](CHANGELOG.md#0160), [PR #46](https://github.com/emilioSp/pi-maestro/pull/46), [configuration schema](src/config/schema.ts), and
|
|
286
|
+
[current delegation deadline](src/tools/utils/pi-subagent-delegation.ts).
|
|
287
|
+
|
|
95
288
|
### MAESTRO-27: Make all implementation phases optional
|
|
96
289
|
|
|
97
290
|
#### Objective
|
|
@@ -114,10 +307,10 @@ remain required.
|
|
|
114
307
|
|
|
115
308
|
#### Implementation and evidence
|
|
116
309
|
|
|
117
|
-
Implemented under the [specification](.specs/20261103-161424-maestro-27-make-implementation-phases-optional/spec.md)
|
|
118
|
-
boolean in `.pi/maestro.json` defaults to `true`. Flags are set before activation and remain unchanged during the workflow. Disabling `builder` skips all three
|
|
119
|
-
otherwise `verifier` and `simplifier` are independently optional. `Spec` preparation and approval remain required. The activation notice lists only enabled agents
|
|
120
|
-
agents when `builder` is disabled.
|
|
310
|
+
Implemented under the [specification](.specs/20261103-161424-maestro-27-make-implementation-phases-optional/spec.md). The `owner` confirmed completion. Each agent's
|
|
311
|
+
`required` boolean in `.pi/maestro.json` defaults to `true`. Flags are set before activation and remain unchanged during the workflow. Disabling `builder` skips all three
|
|
312
|
+
agents; otherwise `verifier` and `simplifier` are independently optional. `Spec` preparation and approval remain required. The activation notice lists only enabled agents
|
|
313
|
+
and no agents when `builder` is disabled.
|
|
121
314
|
|
|
122
315
|
The [README](README.md#the-idea) presents the two uses of `Maestro`: writing and approving a `spec` only, or also implementing it through optional agent phases.
|
|
123
316
|
|
|
@@ -127,24 +320,6 @@ The [README](README.md#the-idea) presents the two uses of `Maestro`: writing and
|
|
|
127
320
|
choice. This item originally made only the post-`builder` phases optional. The `owner` expanded the scope to include the `builder`, so `Maestro` can also be used solely
|
|
128
321
|
for writing and approving a `spec`.
|
|
129
322
|
|
|
130
|
-
### MAESTRO-26: Exit Maestro mode automatically at workflow completion
|
|
131
|
-
|
|
132
|
-
Implemented in `0.13.0`. `Maestro` automatically turns off after successfully delivering the final summary of a completed workflow, including when Git is unavailable and
|
|
133
|
-
simplification is skipped. Live tools, status, instructions, and active `spec` selection are cleared; saved workflow files and other extensions remain unchanged.
|
|
134
|
-
Intermediate phases and interrupted workflows do not trigger automatic exit.
|
|
135
|
-
|
|
136
|
-
Linear marks this item Done, but its description still says final `owner` acceptance is pending. Acceptance is not inferred from that status or the release.
|
|
137
|
-
|
|
138
|
-
#### Evidence
|
|
139
|
-
|
|
140
|
-
[Changelog](CHANGELOG.md#0130), [merged PR #43](https://github.com/emilioSp/pi-maestro/pull/43),
|
|
141
|
-
[specification](.specs/20261030-145712-automatically-exit-maestro-mode-at-workflow-completion/spec.md), and
|
|
142
|
-
[original issue](https://linear.app/emilio-spatola/issue/MAESTRO-26/feat-exit-maestro-mode-automatically-at-workflow-completion).
|
|
143
|
-
|
|
144
|
-
## Completed
|
|
145
|
-
|
|
146
|
-
These entries were recorded as Done in Linear. Their historical verification evidence does not independently establish final `owner` acceptance.
|
|
147
|
-
|
|
148
323
|
### MAESTRO-7: Route builder failures through owner escalations
|
|
149
324
|
|
|
150
325
|
Route reportable `builder` problems through `owner` `escalations` instead of a terminal failure phase.
|
package/agents/builder.md
CHANGED
|
@@ -51,17 +51,17 @@ discoveries without an owner decision in handoff `notes`. Do not turn notes into
|
|
|
51
51
|
|
|
52
52
|
## Prove every acceptance criterion
|
|
53
53
|
|
|
54
|
-
Run every
|
|
55
|
-
examples. Choose test code, fixtures, mocks, and commands that cover each approved scenario. These execution details are your responsibility, not missing owner
|
|
56
|
-
Follow any explicit execution constraints in the approved spec. Run each
|
|
57
|
-
|
|
58
|
-
the contract and repeat the proof for affected criteria. If the contract needs clarification or revision, escalate instead of inventing a replacement
|
|
54
|
+
Run every GIVEN, WHEN, and THEN scenario, including on repair passes. Previous evidence does not replace this pass's results. The spec defines those scenarios and
|
|
55
|
+
concrete examples. Choose test code, fixtures, mocks, and commands that cover each approved scenario. These execution details are your responsibility, not missing owner
|
|
56
|
+
decisions. Follow any explicit execution constraints in the approved spec. Run each scenario against the implementation and compare the observed result with the THEN
|
|
57
|
+
outcome. Do not change approved GIVEN, WHEN, and THEN scenarios, examples, or design decisions to obtain passing results. If the implementation fails, repair it within
|
|
58
|
+
the contract and repeat the proof for affected criteria. If the contract needs clarification or revision, escalate instead of inventing a replacement scenario. For visual
|
|
59
59
|
claims, use the specified reproducible procedure and compare with prototypes when required. Run applicable repository checks. If subsequent changes invalidate earlier
|
|
60
60
|
evidence, rerun the affected checks and proofs.
|
|
61
61
|
|
|
62
|
-
For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`. Use `probeStatus: passed` when the observed result matches the
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`. Use `probeStatus: passed` when the observed result matches the THEN
|
|
63
|
+
outcome. Use `failed` for an observed failure and `not-run` for a check that did not run. Include every spec criterion once. Do not omit unrun criteria, fabricate
|
|
64
|
+
evidence, or include secrets or full logs.
|
|
65
65
|
|
|
66
66
|
## Record exactly one outcome
|
|
67
67
|
|
package/agents/verifier.md
CHANGED
|
@@ -40,28 +40,28 @@ candidate to make verification succeed.
|
|
|
40
40
|
## Regenerate every proof
|
|
41
41
|
|
|
42
42
|
Verify every acceptance criterion from the candidate, including criteria checked in earlier runs. Do not trust the builder's results or silently change the approved
|
|
43
|
-
behavior,
|
|
43
|
+
behavior, GIVEN, WHEN, and THEN scenarios, or examples. Read executable checks from the candidate and builder handoff. Independently check that they cover the approved
|
|
44
44
|
scenarios. The spec need not prescribe test code, fixtures, mocks, commands, or exact code edits. Missing execution details alone are not a contract gap. Use temporary
|
|
45
45
|
verification files when needed to execute an approved scenario. Do not repair existing tests or weaken their coverage. If the builder's checks miss required behavior,
|
|
46
|
-
record a finding even if your own
|
|
47
|
-
|
|
48
|
-
execute, record the limitation as a finding. Continue with other criteria that can be checked safely. Do not stop the entire review at the first finding.
|
|
49
|
-
files only as needed for the specified
|
|
50
|
-
prototype comparisons when required.
|
|
46
|
+
record a finding even if your own check passes. Follow any explicit execution constraints in the approved spec. Run each scenario against the candidate and compare the
|
|
47
|
+
observed result with the THEN outcome. If the observed result does not match, record a finding. Do not repair the candidate. If a scenario is unsafe, undefined, or
|
|
48
|
+
impossible to execute, record the limitation as a finding. Continue with other criteria that can be checked safely. Do not stop the entire review at the first finding.
|
|
49
|
+
Use temporary files only as needed for the specified scenarios. Remove them before handoff. For visual claims, produce reproducible evidence through the spec's procedure,
|
|
50
|
+
including prototype comparisons when required.
|
|
51
51
|
|
|
52
52
|
Follow applicable repository commands and technical rules. Do not invent required commands. Inspect check scripts before execution. Do not use automatic fixes to repair
|
|
53
53
|
the candidate. If a required check changes files, record that effect and restore those changes before further verification. A result obtained only after an automatic fix
|
|
54
54
|
does not prove that the candidate passes.
|
|
55
55
|
|
|
56
|
-
For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`. Use `probeStatus: passed` when the observed result matches the
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`. Use `probeStatus: passed` when the observed result matches the THEN
|
|
57
|
+
outcome. Use `failed` for an observed failure and `not-run` for a check that did not run. Include every spec criterion once. Never omit unrun criteria or fabricate
|
|
58
|
+
evidence.
|
|
59
59
|
|
|
60
60
|
## Record findings, not decisions
|
|
61
61
|
|
|
62
|
-
Record technical issues supported by fresh evidence. Do not add requirements, style preferences, or unrelated improvements. Give every criterion with a
|
|
63
|
-
`passed` at least one related finding. Report required repository check failures as findings, even when every acceptance criterion passes. Do not copy an
|
|
64
|
-
rejection into a new finding. Only the owner can reject current findings through Maestro.
|
|
62
|
+
Record technical issues supported by fresh evidence. Do not add requirements, style preferences, or unrelated improvements. Give every criterion with a `probeStatus`
|
|
63
|
+
other than `passed` at least one related finding. Report required repository check failures as findings, even when every acceptance criterion passes. Do not copy an
|
|
64
|
+
earlier rejection into a new finding. Only the owner can reject current findings through Maestro.
|
|
65
65
|
|
|
66
66
|
For each finding, follow the tool schema:
|
|
67
67
|
|