symphony-orchestrator 0.2.3 → 0.2.5
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/README.md +299 -46
- package/apps/frontend/dist/assets/index-C21W0LEY.css +1 -0
- package/apps/frontend/dist/assets/index-GFjF0ETE.js +17 -0
- package/apps/frontend/dist/index.html +2 -2
- package/package.json +12 -1
- package/vendor/symphony-darwin-arm64 +0 -0
- package/vendor/symphony-darwin-x64 +0 -0
- package/vendor/symphony-linux-x64 +0 -0
- package/vendor/symphony-win32-x64.exe +0 -0
- package/apps/frontend/dist/assets/index-C8630kgD.css +0 -1
- package/apps/frontend/dist/assets/index-IO86k1y1.js +0 -17
package/README.md
CHANGED
|
@@ -7,9 +7,13 @@ its own repository-owned Runtime Contract under `.symphony/`.
|
|
|
7
7
|
|
|
8
8
|
## Prerequisites
|
|
9
9
|
|
|
10
|
-
- GitHub CLI: `gh`
|
|
11
|
-
- A GitHub personal access token available as `GITHUB_TOKEN` or `GH_TOKEN`
|
|
12
10
|
- `codex` CLI available on `PATH` when running real agent sessions
|
|
11
|
+
- For the default GitHub Tracker: GitHub CLI `gh` and a GitHub personal access token available as
|
|
12
|
+
`GITHUB_TOKEN` or `GH_TOKEN`
|
|
13
|
+
- For the minibeads Local Issue Tracker: the `mb` CLI and a local issue store in the Workspace
|
|
14
|
+
Repository
|
|
15
|
+
- For the Compozy-backed Local Issue Tracker: a Compozy PRD Run directory under
|
|
16
|
+
`.compozy/tasks/<task_name>/` in the Workspace Repository
|
|
13
17
|
|
|
14
18
|
## Install
|
|
15
19
|
|
|
@@ -48,9 +52,42 @@ Environment files:
|
|
|
48
52
|
/workspaces/
|
|
49
53
|
```
|
|
50
54
|
|
|
51
|
-
Edit `.symphony/settings.json` to
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
Edit `.symphony/settings.json` to choose an Issue Tracker, set tracker-specific fields, configure
|
|
56
|
+
status states, and set runtime commands. Runtime Settings reference secrets by environment variable
|
|
57
|
+
name; secret values belong only in the Local Environment.
|
|
58
|
+
|
|
59
|
+
### Default Terminal Console
|
|
60
|
+
|
|
61
|
+
Run `symphony` from the Workspace Repository root to start the default read-first Terminal Console.
|
|
62
|
+
It is the foreground surface for normal local orchestration and renders Runtime State snapshots for
|
|
63
|
+
active work, retrying work, task attention, Readiness Gaps, Ordered Queue progress, Logs progress, Agent Worktree details,
|
|
64
|
+
and Task Branch context.
|
|
65
|
+
Compozy PRD Run progress appears when Compozy tracking is selected.
|
|
66
|
+
|
|
67
|
+
The Terminal Console is safe to keep open while Symphony runs. Its MVP safe local aids are limited to
|
|
68
|
+
refreshing the latest in-memory Runtime State snapshot, navigating and filtering tabs, showing the
|
|
69
|
+
Web Dashboard handoff command, and inspecting validated local paths such as the Workspace Repository
|
|
70
|
+
or Runtime Home. These aids do not retry tasks, pause or resume dispatch, update tracker status, merge
|
|
71
|
+
or push Task Branches, open pull requests, change Runtime Contract files, or otherwise mutate task
|
|
72
|
+
lifecycle state.
|
|
73
|
+
|
|
74
|
+
Use Web Dashboard mode when browser-level inspection is more useful:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
symphony --web --port 8080
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The Web Dashboard keeps using the Live Dashboard Connection as a Runtime State stream. It is not a
|
|
81
|
+
Terminal Console command channel.
|
|
82
|
+
|
|
83
|
+
For a non-interactive check, use `symphony --once`; it prints terminal output and exits without
|
|
84
|
+
starting the foreground Terminal Console loop.
|
|
85
|
+
|
|
86
|
+
### Issue Tracker Selection
|
|
87
|
+
|
|
88
|
+
GitHub is the default Issue Tracker. It uses GitHub Issues as issue records and GitHub Projects
|
|
89
|
+
status values as dispatch state. Omitted `tracker.kind` values are treated as `"github"`, but new
|
|
90
|
+
Workspace Repositories should set it explicitly:
|
|
54
91
|
|
|
55
92
|
```json
|
|
56
93
|
{
|
|
@@ -64,37 +101,199 @@ variable name; secret values belong only in the Local Environment:
|
|
|
64
101
|
}
|
|
65
102
|
```
|
|
66
103
|
|
|
67
|
-
Choose
|
|
68
|
-
|
|
104
|
+
Choose minibeads when you want issue records to live in repository-owned Local Issue Files and you do
|
|
105
|
+
not want Symphony issue dispatch or tracker status updates to require GitHub API access. minibeads is
|
|
106
|
+
first-class when explicitly selected, but it is not a migration requirement for existing GitHub
|
|
107
|
+
Tracker users:
|
|
69
108
|
|
|
70
109
|
```json
|
|
71
110
|
{
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
111
|
+
"tracker": {
|
|
112
|
+
"kind": "minibeads",
|
|
113
|
+
"root": ".beads",
|
|
114
|
+
"command": "mb"
|
|
76
115
|
}
|
|
77
116
|
}
|
|
78
117
|
```
|
|
79
118
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
119
|
+
`tracker.root` is resolved from the Workspace Repository root and defaults to `.beads`.
|
|
120
|
+
`tracker.command` defaults to `mb`; set it only when the executable name or path differs in your
|
|
121
|
+
environment. Symphony runs minibeads commands from the Workspace Repository root and treats Local
|
|
122
|
+
Issue Files as repository-owned user data.
|
|
123
|
+
|
|
124
|
+
Choose the Compozy-backed Local Issue Tracker when you want Symphony to run a Compozy PRD Run from
|
|
125
|
+
`.compozy/tasks/<task_name>/` as one user-facing work item. This tracker is opt-in with
|
|
126
|
+
`tracker.kind = "compozy_tasks"`; GitHub remains the default Issue Tracker when the field is omitted
|
|
127
|
+
or set to `"github"`:
|
|
83
128
|
|
|
84
129
|
```json
|
|
85
130
|
{
|
|
86
|
-
"
|
|
131
|
+
"tracker": {
|
|
132
|
+
"kind": "compozy_tasks",
|
|
133
|
+
"compozy": {
|
|
134
|
+
"root": ".compozy/tasks",
|
|
135
|
+
"maxTaskStepRetries": 2
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`tracker.compozy.root` is resolved from the Workspace Repository root and defaults to
|
|
142
|
+
`.compozy/tasks`. Each direct child directory, such as `.compozy/tasks/compozy-tasks-run-integration/`,
|
|
143
|
+
is treated as one Compozy PRD Run. The `task_NN.md` files inside that directory are Compozy Task Steps
|
|
144
|
+
in the same Agent Worktree and Task Branch; they are not separate Symphony issues. When
|
|
145
|
+
present, `_prd.md` and `_techspec.md` are included in each task-step Agent Prompt.
|
|
146
|
+
|
|
147
|
+
Symphony persists Compozy Task Step progress in task file frontmatter. During a run, task steps move
|
|
148
|
+
through statuses such as `pending`, `in_progress`, `completed`, `failed`, and `skipped`, with retry
|
|
149
|
+
metadata recorded alongside the status. `tracker.compozy.maxTaskStepRetries` controls how many times
|
|
150
|
+
Symphony retries a failed task step before recording the failed or skipped state and advancing to the
|
|
151
|
+
next runnable task step. Runtime State, the Terminal Console, and the Web Dashboard show the selected
|
|
152
|
+
tracker kind, Compozy PRD Run identifier, current task step, completed count, failed count, skipped
|
|
153
|
+
count, and total count when Compozy tracking is selected.
|
|
154
|
+
|
|
155
|
+
Compozy tracking has four related status layers:
|
|
156
|
+
|
|
157
|
+
| Layer | Runtime State field or source | What it answers |
|
|
158
|
+
| --- | --- | --- |
|
|
159
|
+
| Compozy Task Step progress | `current_step`, `completed`, `failed`, `skipped`, `total` from `task_NN.md` frontmatter | Which ordered step is selected and how many steps are terminal. |
|
|
160
|
+
| Compozy PRD Run lifecycle | `lifecycle_state` | What phase the whole run is in from the operator perspective. |
|
|
161
|
+
| Dispatch state | `dispatch_state` and `stage_agent` | Which configured tracker status and Stage Agent routing state Symphony is using. |
|
|
162
|
+
| Compozy PR Readiness | `pr_readiness`, `handoff_status`, and `reason` | Whether the completed run is eligible for one aggregate Batch Pull Request or why it is not. |
|
|
163
|
+
|
|
164
|
+
Runtime State, the Terminal Console, and the Web Dashboard render these layers from the same
|
|
165
|
+
`compozy_progress` payload. The Terminal Console and Web Dashboard use compact labels such as
|
|
166
|
+
`Lifecycle`, `Dispatch state`, `Stage agent`, `PR readiness`, `Handoff`, and `Reason`, but those
|
|
167
|
+
labels do not merge the layers. Compozy Task Step progress remains the source for current-step and
|
|
168
|
+
count truth; lifecycle and readiness explain the run around that progress.
|
|
169
|
+
|
|
170
|
+
Compozy PRD Run lifecycle meanings:
|
|
171
|
+
|
|
172
|
+
| Lifecycle state | Meaning |
|
|
173
|
+
| --- | --- |
|
|
174
|
+
| `pending` | The run exists but has not entered active Stage Agent work. |
|
|
175
|
+
| `in_planning` | Planner-stage work is active. |
|
|
176
|
+
| `in_execution` | Engineer-stage work or active task-step execution is in progress. |
|
|
177
|
+
| `in_review` | Reviewer-stage work is active. |
|
|
178
|
+
| `blocked` | Symphony needs operator attention and the run is not progressing normally. |
|
|
179
|
+
| `completed` | The run completed successfully from the lifecycle perspective. |
|
|
180
|
+
| `failed` | The run ended with failed work and is not ready for a Batch Pull Request. |
|
|
181
|
+
| `skipped` | The run ended with skipped work and is not ready for a Batch Pull Request. |
|
|
182
|
+
| `not_pr_ready` | The run is stopped or terminal but cannot open a Batch Pull Request; this is the not-PR-ready lifecycle and `Reason` explains why. |
|
|
183
|
+
| `pr_handoff` | Batch Pull Request handoff for the aggregate Batch Pull Request is attempting, completed, or failed. |
|
|
184
|
+
|
|
185
|
+
PR readiness is separate from both lifecycle and task-step counts:
|
|
186
|
+
|
|
187
|
+
| PR readiness | Meaning |
|
|
188
|
+
| --- | --- |
|
|
189
|
+
| `disabled` | The Pull Request Policy does not enable automatic Batch Pull Requests. |
|
|
190
|
+
| `not_ready` | The run is in the not-ready outcome for a Batch Pull Request; `Reason` describes the broad blocker. |
|
|
191
|
+
| `ready` | The run completed successfully and is eligible for one aggregate Batch Pull Request. |
|
|
192
|
+
| `handoff_attempting` | Symphony is attempting the Batch Pull Request handoff. |
|
|
193
|
+
| `handoff_completed` | Symphony opened, completed, or reused the aggregate Batch Pull Request. |
|
|
194
|
+
| `handoff_failed` | Batch Pull Request handoff failed and may be retried after the cause is fixed. |
|
|
195
|
+
|
|
196
|
+
Representative Compozy PRD Run examples:
|
|
197
|
+
|
|
198
|
+
| Scenario | Task-step progress | `lifecycle_state` | `dispatch_state` / `stage_agent` | `pr_readiness` / `handoff_status` | Operator meaning |
|
|
199
|
+
| --- | --- | --- | --- | --- | --- |
|
|
200
|
+
| Review active | Current Compozy Task Step and counts still come from task files. | `in_review` | `In review` / `reviewer` | `not_ready` / none | Reviewer work is active; the run is not ready for Batch Pull Request handoff. |
|
|
201
|
+
| Retrying execution | The current step remains selected while retry context is visible in Runtime State. | `in_execution` | Current configured run state / `engineer` | `not_ready` / none | Retry does not create a new lifecycle value; `Reason` explains the retry. |
|
|
202
|
+
| Blocked attention | Counts may show failed, skipped, or unavailable task-step progress. | `blocked` | `Human attention` / current Stage Agent when known | `not_ready` / none | Operator action is required before normal progress or handoff can continue. |
|
|
203
|
+
| Failed or skipped terminal | Task-step truth shows failed or skipped terminal work. | `failed` or `skipped` | Terminal configured run state | `not_ready` / none | Terminal progress is visible, but it is not Batch Pull Request-ready. |
|
|
204
|
+
| Completed and batch-ready | All task steps completed and final integration is safe. | `completed` | `Done` / current Stage Agent when known | `ready` / none | The Compozy PRD Run is eligible for one aggregate Batch Pull Request when the Pull Request Policy enables batch handoff. |
|
|
205
|
+
| Completed with pull requests disabled | All task steps completed and final integration is safe. | `completed` | `Done` / current Stage Agent when known | `disabled` / none | The run completed, but automatic Batch Pull Requests are disabled by Pull Request Policy. |
|
|
206
|
+
| Handoff failure | The completed run entered aggregate Batch Pull Request handoff. | `pr_handoff` | `Done` / current Stage Agent when known | `handoff_failed` / `handoff_failed` | The run is in handoff phase, and the failed handoff is a readiness outcome with a `Reason`, not successful review readiness. |
|
|
207
|
+
|
|
208
|
+
Terminal task-step progress does not imply Batch Pull Request readiness. A run with failed, skipped,
|
|
209
|
+
blocked, or otherwise terminal Compozy Task Steps remains `not_ready` unless the Compozy PRD Run
|
|
210
|
+
completed successfully, final integration is safe, and the Pull Request Policy allows handoff.
|
|
211
|
+
In `batch` Pull Request Mode, Compozy tracking preserves aggregate Batch Pull Request behavior:
|
|
212
|
+
Symphony never opens one pull request per Compozy Task Step. At most one Batch Pull Request is
|
|
213
|
+
eligible for the completed Compozy PRD Run, using the Loop-Start Branch as the pull-request head.
|
|
214
|
+
If the completed Compozy Task Steps move the run into another configured Stage Agent state, Symphony
|
|
215
|
+
dispatches that next Stage Agent with completed-run context first. Pull request handoff happens only
|
|
216
|
+
after there is no configured next Stage Agent.
|
|
217
|
+
|
|
218
|
+
When the selected Issue Tracker is `tracker.kind = "compozy_tasks"`, `--queue` accepts bare Compozy
|
|
219
|
+
PRD Run slugs from `.compozy/tasks/<task_name>/`:
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
symphony --queue compozy-tasks-run-integration,queue-docs-refresh
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Symphony keeps those queue identifiers as typed in Runtime State and uses the same raw sequence when
|
|
226
|
+
deciding whether a restart resumes an Ordered Queue. Restarting with canonical selectors such as
|
|
227
|
+
`compozy:compozy-tasks-run-integration,compozy:queue-docs-refresh` starts a different queue run than
|
|
228
|
+
the bare-slug command above, even though dispatch resolves both forms to the same Compozy PRD Runs.
|
|
229
|
+
|
|
230
|
+
The bare-slug shortcut is only for `--queue` with the Compozy-backed Issue Tracker. If GitHub or
|
|
231
|
+
minibeads tracking is selected, a bare Compozy slug in `--queue` is reported as a startup Readiness
|
|
232
|
+
Gap; use GitHub identifiers such as `20` or `#20`, minibeads identifiers such as `mb-20`, or switch
|
|
233
|
+
Runtime Settings to `tracker.kind = "compozy_tasks"`. Canonical Compozy queue selectors such as
|
|
234
|
+
`--queue compozy:compozy-tasks-run-integration` remain accepted for compatibility, but a single
|
|
235
|
+
Compozy queue must use either bare slugs or canonical selectors, not both.
|
|
236
|
+
|
|
237
|
+
Where selector-based flows outside the `--queue` shortcut support Compozy tracking, use the stable
|
|
238
|
+
identifier form `compozy:<task_name>`. For example, `.compozy/tasks/compozy-tasks-run-integration/`
|
|
239
|
+
is selected as `compozy:compozy-tasks-run-integration` in Manual Task Merge flows.
|
|
240
|
+
|
|
241
|
+
Define execution backends under `harnesses` and logical agent roles under `agents`. Harnesses own
|
|
242
|
+
provider commands and loop capability. Logical agents select a Harness and may override model,
|
|
243
|
+
reasoning, and timeout fields for planner, engineer, or reviewer work:
|
|
244
|
+
|
|
245
|
+
```json
|
|
246
|
+
{
|
|
247
|
+
"harnesses": {
|
|
87
248
|
"codex": {
|
|
88
249
|
"kind": "codex",
|
|
89
250
|
"command": "codex exec",
|
|
90
|
-
"
|
|
91
|
-
|
|
251
|
+
"loop": {
|
|
252
|
+
"enabled": true,
|
|
253
|
+
"command": "/goal"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"claude": {
|
|
257
|
+
"kind": "claude",
|
|
258
|
+
"command": "claude -p --model <model> --output-format stream-json",
|
|
259
|
+
"loop": {
|
|
260
|
+
"enabled": false,
|
|
261
|
+
"command": ""
|
|
262
|
+
}
|
|
92
263
|
},
|
|
93
264
|
"pi": {
|
|
94
265
|
"kind": "pi",
|
|
95
266
|
"command": "pi --model <model> --thinking <reasoning> --print --no-session",
|
|
96
|
-
"
|
|
97
|
-
|
|
267
|
+
"loop": {
|
|
268
|
+
"enabled": false,
|
|
269
|
+
"command": ""
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"agents": {
|
|
274
|
+
"planner": {
|
|
275
|
+
"harness": "codex",
|
|
276
|
+
"model": "gpt-5.5",
|
|
277
|
+
"reasoningEffort": "medium",
|
|
278
|
+
"turnTimeoutMs": 3600000,
|
|
279
|
+
"readTimeoutMs": 5000,
|
|
280
|
+
"stallTimeoutMs": 300000
|
|
281
|
+
},
|
|
282
|
+
"engineer": {
|
|
283
|
+
"harness": "claude",
|
|
284
|
+
"model": "opus-4.7",
|
|
285
|
+
"reasoningEffort": "xhigh",
|
|
286
|
+
"turnTimeoutMs": 3600000,
|
|
287
|
+
"readTimeoutMs": 5000,
|
|
288
|
+
"stallTimeoutMs": 300000
|
|
289
|
+
},
|
|
290
|
+
"reviewer": {
|
|
291
|
+
"harness": "pi",
|
|
292
|
+
"model": "openai-codex/gpt-5.5",
|
|
293
|
+
"reasoningEffort": "high",
|
|
294
|
+
"turnTimeoutMs": 3600000,
|
|
295
|
+
"readTimeoutMs": 5000,
|
|
296
|
+
"stallTimeoutMs": 300000
|
|
98
297
|
}
|
|
99
298
|
},
|
|
100
299
|
"stageAgents": {
|
|
@@ -102,24 +301,50 @@ stage that should use PI at that harness with `harness`:
|
|
|
102
301
|
"stages": [
|
|
103
302
|
{
|
|
104
303
|
"states": ["Todo", "To-Do", "In progress", "In Progress"],
|
|
105
|
-
"agent": "engineer"
|
|
106
|
-
"harness": "pi"
|
|
304
|
+
"agent": "engineer"
|
|
107
305
|
}
|
|
108
306
|
]
|
|
109
307
|
}
|
|
110
308
|
}
|
|
111
309
|
```
|
|
112
310
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
the `pi` executable on `PATH` and provider authentication for the configured model.
|
|
311
|
+
PI and Claude are not prerequisites for Codex-only dispatch. Symphony validates install and
|
|
312
|
+
authentication readiness only for Harnesses selected by enabled Stage Agent routes. A selected PI
|
|
313
|
+
Harness requires the `pi` executable on `PATH` and provider authentication for the configured model. A
|
|
314
|
+
selected Claude Harness requires the `claude` executable and Claude Code authentication, such as
|
|
315
|
+
`ANTHROPIC_API_KEY` or Claude's configured login state. Runtime Settings must reference only
|
|
316
|
+
environment variable names, never secret values.
|
|
317
|
+
|
|
318
|
+
Legacy settings that place Harness definitions under `agents.*`, such as `agents.pi.kind`, are
|
|
319
|
+
migration input. When the new Runtime Settings shape is in use, Symphony reports a blocking Readiness
|
|
320
|
+
Gap that tells you to move execution fields into `harnesses.*` and keep `agents.*` for logical agent
|
|
321
|
+
definitions. Stage-level `stageAgents.stages[].harness` is also legacy input; move Harness selection to
|
|
322
|
+
`agents.<logical-agent>.harness`.
|
|
116
323
|
|
|
117
324
|
If setup is incomplete, the Terminal Console still starts and prints Readiness Gaps with remediation
|
|
118
325
|
steps. Dispatch remains disabled until those gaps are resolved.
|
|
119
326
|
|
|
327
|
+
For the GitHub Tracker, readiness includes the configured owner, Workspace Repository name, GitHub
|
|
328
|
+
Project number, status field, and token environment variable. For Local Issue Tracker runs,
|
|
329
|
+
GitHub owner, repo, Project, and token settings are not required. The local tracker readiness checks
|
|
330
|
+
include tracker-specific local files and commands:
|
|
331
|
+
|
|
332
|
+
- `tracker.minibeads.command`: install minibeads or update `tracker.command` so Symphony can run the
|
|
333
|
+
configured command.
|
|
334
|
+
- `tracker.minibeads.store`: create the local issue store at `tracker.root` or update `tracker.root`
|
|
335
|
+
to the existing minibeads store.
|
|
336
|
+
- `tracker.compozy.root`: create the Compozy tasks root at `tracker.compozy.root` or update the
|
|
337
|
+
setting to the existing `.compozy/tasks` directory.
|
|
338
|
+
- `tracker.compozy.tasks`: add at least one valid `.compozy/tasks/<task_name>/task_NN.md` file with
|
|
339
|
+
task-step frontmatter.
|
|
340
|
+
|
|
120
341
|
## Project Status Workflow
|
|
121
342
|
|
|
122
|
-
Symphony moves the
|
|
343
|
+
Symphony moves the selected Issue Tracker status as work progresses. With the GitHub Tracker, this is
|
|
344
|
+
the configured GitHub Projects `Status` field. With the minibeads Local Issue Tracker, Symphony maps
|
|
345
|
+
the same Runtime Settings state names to minibeads statuses and writes them through `mb`. With the
|
|
346
|
+
Compozy-backed Local Issue Tracker, the Compozy PRD Run is the work item and Symphony records
|
|
347
|
+
task-step status in each `task_NN.md` file's frontmatter:
|
|
123
348
|
|
|
124
349
|
- `startStatus`: applied before launching an agent, default `In progress`.
|
|
125
350
|
- `reviewStatus`: applied after the agent exits successfully, default `In review`.
|
|
@@ -146,6 +371,7 @@ Configure these in `.symphony/settings.json`:
|
|
|
146
371
|
|
|
147
372
|
The token needs GitHub Projects write access for status moves and status option creation. If
|
|
148
373
|
`reviewStatus` is not listed in `activeStates`, completed issues stop being picked up on later polls.
|
|
374
|
+
The token requirement applies to GitHub Tracker runs only.
|
|
149
375
|
|
|
150
376
|
## Stage Agents
|
|
151
377
|
|
|
@@ -239,24 +465,31 @@ skill files and does not include Stage Skill Load in Stage Goal Context. Missing
|
|
|
239
465
|
duplicate skill identifiers are Readiness Gaps; Symphony checks all configured stages before
|
|
240
466
|
dispatch, resolving Workspace Repository skills before Codex Home skills.
|
|
241
467
|
|
|
242
|
-
Rendered Agent Prompts include
|
|
468
|
+
Rendered Agent Prompts include issue comments as issue context when the selected Issue Tracker
|
|
469
|
+
provides comments. minibeads Local Issue Tracker comments are not included in V1. Compozy-backed
|
|
470
|
+
Local Issue Tracker prompts include the current Compozy Task Step plus `_prd.md` and `_techspec.md`
|
|
471
|
+
from the same Compozy PRD Run when those files exist.
|
|
243
472
|
|
|
244
|
-
Set `goal.enabled` to `true` on a specific stage to
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
473
|
+
Set `goal.enabled` to `true` on a specific stage to allow Stage Goal Handoff for that stage only.
|
|
474
|
+
The selected Harness decides whether a loop command is actually sent. The Bootstrap default Codex
|
|
475
|
+
Harness has `loop.enabled: true` and `loop.command: "/goal"`, so Codex receives `/goal` with
|
|
476
|
+
deterministic Stage Goal Context before the normal Agent Prompt. The Bootstrap default Claude and PI
|
|
477
|
+
Harnesses have loop disabled, so those Harnesses run the normal prompt even when a stage has
|
|
478
|
+
`goal.enabled: true`. Stage Goal Context includes issue identifier, title, description, comments, URL,
|
|
479
|
+
current tracker status, labels, priority when present, blocker references when present,
|
|
480
|
+
attempt, and stage agent name. It omits issue creation and update timestamps.
|
|
249
481
|
|
|
250
|
-
|
|
482
|
+
Codex loop handoff requires a Codex command that accepts the configured Harness loop command from
|
|
483
|
+
standard input. For Codex goals, enable goals in `~/.codex/config.toml`:
|
|
251
484
|
|
|
252
485
|
```toml
|
|
253
486
|
[features]
|
|
254
487
|
goals = true
|
|
255
488
|
```
|
|
256
489
|
|
|
257
|
-
If a
|
|
258
|
-
Goal Usage reported by Codex is stored in Runtime State for running, retrying, and
|
|
259
|
-
task details when available; missing or unparseable Goal Usage does not fail a task.
|
|
490
|
+
If a selected loop-enabled Codex Harness cannot accept the configured loop command, Symphony reports a
|
|
491
|
+
Readiness Gap. Goal Usage reported by Codex is stored in Runtime State for running, retrying, and
|
|
492
|
+
attention-needed task details when available; missing or unparseable Goal Usage does not fail a task.
|
|
260
493
|
|
|
261
494
|
Stage commits run after an agent exits successfully and before Symphony moves the issue to the
|
|
262
495
|
stage's `successStatus`. Set `commit.enabled` per stage to control which transitions create commits;
|
|
@@ -325,9 +558,10 @@ The `title` and `body` fields are deterministic templates. They support `<head_b
|
|
|
325
558
|
|
|
326
559
|
## GitHub Token Permissions
|
|
327
560
|
|
|
328
|
-
|
|
329
|
-
when
|
|
330
|
-
|
|
561
|
+
This section applies to the GitHub Tracker. Symphony Orchestrator reads GitHub Issues and GitHub
|
|
562
|
+
Projects when `tracker.kind` is `"github"`. Use a **personal access token (classic)** when the
|
|
563
|
+
GitHub Project is owned by a user account, such as `@your-user's Kanban`. GitHub fine-grained
|
|
564
|
+
personal access tokens currently cannot access Projects owned by a user account.
|
|
331
565
|
|
|
332
566
|
Recommended classic PAT scopes:
|
|
333
567
|
|
|
@@ -364,8 +598,12 @@ Symphony still reports Workspace Repository or GitHub Project access gaps, remov
|
|
|
364
598
|
- `apps/backend`: OCaml service, workflow loader, GitHub tracker boundary, workspace manager, HTTP
|
|
365
599
|
state API, CLI, and tests.
|
|
366
600
|
- `apps/frontend`: ReScript React/Vite dashboard that consumes the backend state API.
|
|
601
|
+
- `apps/tui`: reusable OCaml terminal UI toolkit packaged with Dune/opam as
|
|
602
|
+
`symphony-orchestrator-tui`. Its
|
|
603
|
+
`@symphony-orchestrator/tui` package.json is a private pnpm workspace label, not the publishing
|
|
604
|
+
target.
|
|
367
605
|
- `.github/ISSUE_TEMPLATE`: issue template for work items Symphony can dispatch.
|
|
368
|
-
- `.github/project-tracking.md`:
|
|
606
|
+
- `.github/project-tracking.md`: GitHub Tracker setup and workflow notes.
|
|
369
607
|
- `WORKFLOW.example.md`: legacy/developer fixture for the earlier root workflow format.
|
|
370
608
|
- `bin/symphony.js`: npm `bin` launcher that runs a packaged platform binary or the local dune
|
|
371
609
|
executable in Product Repository development.
|
|
@@ -376,14 +614,16 @@ Product Repository development is separate from Workspace Repository operation.
|
|
|
376
614
|
actual orchestration belong in the Workspace Repository where `symphony init` is run; this source
|
|
377
615
|
repository keeps code, tests, packaging scripts, fixtures, and documentation.
|
|
378
616
|
|
|
379
|
-
Product Repository development requires `pnpm` 10.x and an OCaml toolchain with `opam`,
|
|
380
|
-
`cmdliner`, `yojson`,
|
|
381
|
-
|
|
617
|
+
Product Repository development requires `pnpm` 10.x and an OCaml toolchain with `opam`, OCaml
|
|
618
|
+
`>= 5.1`, Dune `>= 3.19`, `cmdliner`, `yojson`, `alcotest`, the local `apps/tui` package, `uutf`,
|
|
619
|
+
and `toffee`. The local scripts run OCaml commands through `opam exec`, so make sure the active opam
|
|
620
|
+
switch has the required packages installed.
|
|
382
621
|
|
|
383
622
|
Install dependencies:
|
|
384
623
|
|
|
385
624
|
```sh
|
|
386
625
|
pnpm install
|
|
626
|
+
opam install . ./apps/tui --deps-only --with-test --yes
|
|
387
627
|
```
|
|
388
628
|
|
|
389
629
|
Run the backend test suite:
|
|
@@ -392,6 +632,12 @@ Run the backend test suite:
|
|
|
392
632
|
pnpm test
|
|
393
633
|
```
|
|
394
634
|
|
|
635
|
+
Run documentation validation:
|
|
636
|
+
|
|
637
|
+
```sh
|
|
638
|
+
pnpm docs:test
|
|
639
|
+
```
|
|
640
|
+
|
|
395
641
|
Run frontend live-state tests:
|
|
396
642
|
|
|
397
643
|
```sh
|
|
@@ -429,9 +675,13 @@ pnpm backend:dev
|
|
|
429
675
|
|
|
430
676
|
The backend serves:
|
|
431
677
|
|
|
432
|
-
-
|
|
678
|
+
- Backend/API root: `http://127.0.0.1:8080/`
|
|
433
679
|
- Runtime state JSON: `http://127.0.0.1:8080/api/v1/state`
|
|
434
|
-
|
|
680
|
+
|
|
681
|
+
The backend binds to `127.0.0.1` by default. To expose the Web Dashboard on Tailscale or a LAN,
|
|
682
|
+
set `"server": {"host": "0.0.0.0", "port": 8080}` in `.symphony/settings.json`; non-loopback
|
|
683
|
+
binds print a one-time `symphony_auth` URL token and require that token for Runtime State HTTP and
|
|
684
|
+
Live Dashboard Connection access.
|
|
435
685
|
|
|
436
686
|
Start the Web Dashboard dev server in another terminal:
|
|
437
687
|
|
|
@@ -458,6 +708,7 @@ symphony --web --port 8080
|
|
|
458
708
|
```sh
|
|
459
709
|
pnpm install
|
|
460
710
|
pnpm test
|
|
711
|
+
pnpm docs:test
|
|
461
712
|
pnpm frontend:test
|
|
462
713
|
pnpm frontend:build
|
|
463
714
|
pnpm backend:build
|
|
@@ -474,8 +725,10 @@ opam exec -- dune exec symphony -- init
|
|
|
474
725
|
opam exec -- dune exec symphony -- --web --port 8080
|
|
475
726
|
```
|
|
476
727
|
|
|
477
|
-
If no GitHub token is configured, the runtime still starts, but readiness
|
|
478
|
-
token and live issue dispatch is disabled.
|
|
728
|
+
If no GitHub token is configured for the GitHub Tracker, the runtime still starts, but readiness
|
|
729
|
+
gaps report the missing token and live issue dispatch is disabled. For Local Issue Tracker runs,
|
|
730
|
+
dispatch does not require a GitHub token; unresolved minibeads command or local issue store gaps, or
|
|
731
|
+
missing Compozy PRD Run task files, disable dispatch instead.
|
|
479
732
|
|
|
480
733
|
## Package Distribution
|
|
481
734
|
|