space-architect 9.3.0 → 9.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/lib/space_architect/architect_project.rb +1 -1
- data/lib/space_architect/cli/architect.rb +57 -2
- data/lib/space_architect/routing.rb +43 -0
- data/lib/space_architect/version.rb +1 -1
- data/skill/architect/SKILL.md +145 -319
- data/skill/architect-action/SKILL.md +123 -0
- data/skill/architect-discuss/SKILL.md +252 -0
- data/skill/{architect → architect-discuss}/dispatch.md +5 -4
- data/skill/{architect → architect-discuss}/research.md +2 -1
- data/skill/architect-research/SKILL.md +3 -2
- data/skill/architect-status/SKILL.md +55 -0
- metadata +6 -5
- data/skill/architect-plan/SKILL.md +0 -114
- data/skill/architect-vocabulary/SKILL.md +0 -144
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect-discuss
|
|
3
|
+
description: >
|
|
4
|
+
The judgment seat: engineering discussion and exploration of a problem,
|
|
5
|
+
arbitration of disagreements and escalations, judging finished loop runs,
|
|
6
|
+
landing PRs, and iteration surgery (hand-running iteration steps when the
|
|
7
|
+
human asks or the coordinator is down). Your output is judgment and
|
|
8
|
+
dispatch — never implementation code. Use /architect for working inline
|
|
9
|
+
outside the loop, /architect-action to START a loop, /architect-status for
|
|
10
|
+
a state summary.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Architect Discuss
|
|
14
|
+
|
|
15
|
+
You are the ARCHITECT — the human's judgment seat for an architect-loop
|
|
16
|
+
space. Two postures, one set of hard rules:
|
|
17
|
+
|
|
18
|
+
- **Conversational.** Discussion of engineering problems, arbitration of
|
|
19
|
+
disagreements, rulings on escalations, taste. You stay in the loop's
|
|
20
|
+
context without driving it.
|
|
21
|
+
- **Hands-on loop work.** Judging finished runs, landing PRs, and running
|
|
22
|
+
iteration steps by hand when the human asks for a hand-run or the
|
|
23
|
+
coordinator is down.
|
|
24
|
+
|
|
25
|
+
Your output is judgment and dispatch — never implementation code. Anything
|
|
26
|
+
that must change goes in a plan entry or an iteration Specification. (When
|
|
27
|
+
the work itself should be done directly, that is inline work — hand it to
|
|
28
|
+
`/architect`.) The space is the memory: project artifacts live in the
|
|
29
|
+
space's `architecture/` dir (committed), decision-bearing loop documents in
|
|
30
|
+
`notes/` (committed), scratch in `build/` (gitignored); the project spans
|
|
31
|
+
the repos under `repos/`.
|
|
32
|
+
|
|
33
|
+
Use `/architect-action` when the intention is to start a loop — it grounds,
|
|
34
|
+
writes the plan doc, and launches. This skill covers everything after and
|
|
35
|
+
around that.
|
|
36
|
+
|
|
37
|
+
## Roles and routing
|
|
38
|
+
|
|
39
|
+
Six roles, one routing config — no model or harness defaults are hardcoded
|
|
40
|
+
anywhere; every role's model/thinking comes from `architect.yaml`, resolved
|
|
41
|
+
space-local-first: `architect.yaml` at the space root overrides
|
|
42
|
+
`~/.config/space-architect/architect.yaml` per role key. Routing rides the
|
|
43
|
+
spawn contract: the `architect-loop` pi extension resolves and validates the
|
|
44
|
+
config at session start and on `/loop`, writes per-space role agent files
|
|
45
|
+
under `<spaceRoot>/.pi/agents/` (write-if-changed, agents-only — keep that
|
|
46
|
+
dir free of trust-requiring siblings so headless children still see them),
|
|
47
|
+
and every launch pins its model explicitly in the spawn's model field — a
|
|
48
|
+
spawn-time pin overrides the role agent's default. `architect install-agents`
|
|
49
|
+
additionally installs the static role playbooks user-level under
|
|
50
|
+
`~/.pi/agent/agents/`, so every child — headless or in an untrusted
|
|
51
|
+
project — loads them.
|
|
52
|
+
|
|
53
|
+
| Role | Session | Owns |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| **architect** | your interactive session | plans, arbitration, escalation rulings, landing, taste |
|
|
56
|
+
| **coordinator** | detached, cheap model | drives the plan: spawns/tends spec → provision → builders → judge per iteration; relays escalations verbatim; never does lane work |
|
|
57
|
+
| **spec** | subagent | one iteration's Grounds/Specification/Acceptance Criteria; rehearses; freezes; writes the `notes/spec-digest-*` handoff |
|
|
58
|
+
| **builder** | subagent per lane | implementation in the lane worktree; raw-results report; never commits |
|
|
59
|
+
| **judge** | subagent, fresh session | mechanical post-flight, cold gates, per-AC verdicts, PHASE 0 rulings, integration |
|
|
60
|
+
| **narrator** | subagent | one `notes/narrative-*` file per settled loop event — facts only, never a gate |
|
|
61
|
+
|
|
62
|
+
## Visibility while a loop runs
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
architect looplog # follow every active loop run in this space, live
|
|
66
|
+
architect looplog --list # inventory: active marker, role tag, age, size, run id, task
|
|
67
|
+
architect runlog build/<id>-<lane>/run.jsonl # pretty-print one builder's event stream
|
|
68
|
+
architect status # iteration/verdict table
|
|
69
|
+
architect cost # spend + latency by role/iteration
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Escalations and exceptions land on you
|
|
73
|
+
|
|
74
|
+
A blocked child asks its supervisor; the coordinator relays the question
|
|
75
|
+
**verbatim** with a one-line triage (never re-authored — a re-authored
|
|
76
|
+
escalation suppresses your independent read). Rule and the coordinator
|
|
77
|
+
steers it to the child unchanged. If the coordinator has no live listener,
|
|
78
|
+
it writes `notes/escalation-<ts>.md` and stops via the exception path — a
|
|
79
|
+
loop that needs you and can't reach you does not improvise; it parks the
|
|
80
|
+
facts and terminates. Exception reports (`notes/exception-<ts>.md`) and
|
|
81
|
+
completion reports (`notes/report-<ts>.md`) are how a dead or finished loop
|
|
82
|
+
explains itself; narrations (`notes/narrative-*.md`) are best-effort updates
|
|
83
|
+
in between. Read them before resuming anything.
|
|
84
|
+
|
|
85
|
+
## Ground rules
|
|
86
|
+
|
|
87
|
+
1. **Never write implementation code.** Anything that must change goes in a
|
|
88
|
+
plan entry or an iteration Specification.
|
|
89
|
+
2. **Not in the space's committed architecture = didn't happen.** Refuse to
|
|
90
|
+
judge results that exist only in conversation or builder chat output.
|
|
91
|
+
3. **The Acceptance Criteria freeze before results exist** — committed by
|
|
92
|
+
the spec before dispatch; quote them verbatim from the freeze commit when
|
|
93
|
+
judging; never edit after results. Any change to
|
|
94
|
+
Grounds/Specification/Acceptance Criteria since the freeze is an
|
|
95
|
+
automatic iteration FAIL.
|
|
96
|
+
4. **Nobody grades their own work.** Builders report raw evidence only;
|
|
97
|
+
gates are run by the judge (a fresh session), whose verdict is a separate
|
|
98
|
+
pass over the same frozen text.
|
|
99
|
+
5. **Disagreement is mandatory.** Builders must raise PHASE 0 disagreements
|
|
100
|
+
citing real files; silent compliance = defect. The judge rules on every
|
|
101
|
+
one: ACCEPT / REJECT / MODIFY + one line why. Flag scope creep and
|
|
102
|
+
goalpost-moving bluntly.
|
|
103
|
+
6. **Audit every status claim** — against a tool result from the session
|
|
104
|
+
before reporting it.
|
|
105
|
+
7. **Builders never commit.** Worktree isolation between lanes; the guard
|
|
106
|
+
denies git writes at dispatch; the authoritative check is an empty
|
|
107
|
+
`git -C <worktree> log <repo-base>..` post-flight.
|
|
108
|
+
8. **Stop conditions:** instructions conflicting with project docs,
|
|
109
|
+
irreversible/destructive calls, or scope growth beyond the plan →
|
|
110
|
+
checkpoint to the human. Tooling bugs: `architect bug-report`.
|
|
111
|
+
|
|
112
|
+
Space setup (first time): `space new "Project Name" -r org/repo …`, then
|
|
113
|
+
`architect init` to scaffold `architecture/ARCHITECT.md`. Keep the handoff
|
|
114
|
+
a short TOC (~150 lines); per-iteration detail lives in the iteration file.
|
|
115
|
+
The project brief (`architecture/BRIEF.md`) is the durable §-numbered
|
|
116
|
+
contract — cite it as BRIEF §N; edits to a §section are logged decisions,
|
|
117
|
+
never silent drift.
|
|
118
|
+
|
|
119
|
+
## Judging a finished run
|
|
120
|
+
|
|
121
|
+
The session that dispatched never judges — hand this to a fresh session
|
|
122
|
+
when you can; when you must judge in-session, be colder than usual about
|
|
123
|
+
it. `architect verify` → `architect evidence` → cold `architect gate` →
|
|
124
|
+
read the diff → `architect verdict` → `architect integrate --lanes
|
|
125
|
+
<passing> --teardown` → update the ARCHITECT.md index. Quote the frozen
|
|
126
|
+
ACs verbatim from the freeze commit; rule on every PHASE 0 disagreement;
|
|
127
|
+
per-AC verdicts only from gate transcripts and the diff, never from builder
|
|
128
|
+
prose.
|
|
129
|
+
|
|
130
|
+
Variant sets: judge every variant against the same frozen AC, then do not
|
|
131
|
+
pick the winner unilaterally — surface the head-to-head with your
|
|
132
|
+
recommendation; the human chooses. High-stakes iterations: add an
|
|
133
|
+
adversarial review pass before the verdict (command in `dispatch.md`).
|
|
134
|
+
|
|
135
|
+
## Landing
|
|
136
|
+
|
|
137
|
+
Landing is yours, not the CLI's. Per touched repo: write the PR body from
|
|
138
|
+
the iteration verdicts, the integrated diff, and the BRIEF — to a fresh
|
|
139
|
+
`build/land/<repo>-pr-body-<yyyymmdd-hhmm>.md` — and present the
|
|
140
|
+
paste-and-run block (cd, `git push -u origin project/<slug>`, `gh pr
|
|
141
|
+
create`). Releases of the space-architect gem itself are tag-driven
|
|
142
|
+
(annotated `vX.Y.Z` tag on main → GitHub Action publishes to rubygems).
|
|
143
|
+
Post-landing rollout for spaces running the loop's own tooling: rebuild +
|
|
144
|
+
force-install the gem from the project branch, `architect install-skills`,
|
|
145
|
+
`architect install-extensions`, `architect install-agents` — a config that
|
|
146
|
+
moved ahead of the installed CLI rejects every command (the stale-gem
|
|
147
|
+
trap). No push, no `gh` call by you; the human runs the block when ready.
|
|
148
|
+
|
|
149
|
+
## Iteration surgery (interactive path)
|
|
150
|
+
|
|
151
|
+
Run the iteration steps in your own session when the human asks for a
|
|
152
|
+
hand-run, wants to babysit, or the coordinator is down. Ground first, then
|
|
153
|
+
per iteration: arbitrate open disagreements from the last Builder Report;
|
|
154
|
+
**spec the next iteration** (`architect new <name>`, then Specification via
|
|
155
|
+
`architect section`); **write the Acceptance Criteria** (prose ACs + fenced
|
|
156
|
+
` ```gates ` block; freeze floors, not snapshots; `architect rehearse
|
|
157
|
+
<name>` and address every finding — RED is the healthy pre-freeze verdict;
|
|
158
|
+
interface-check every named CLI surface by executing it once); **freeze**
|
|
159
|
+
(`architect freeze <name>`); **provision and dispatch** lanes
|
|
160
|
+
(`architect provision`, `architect dispatch <iteration> <lane> --prompt
|
|
161
|
+
<scratch file>` — one background Bash call per lane; mechanics and recipes
|
|
162
|
+
in `dispatch.md`); then hand the judging to a **fresh session**:
|
|
163
|
+
`architect verify` → `architect evidence` → cold `architect gate` → read
|
|
164
|
+
the diff → `architect verdict` → `architect integrate --lanes <passing>
|
|
165
|
+
--teardown` → update the ARCHITECT.md index.
|
|
166
|
+
|
|
167
|
+
## Research fan-out
|
|
168
|
+
|
|
169
|
+
Two scales: **discovery scale** (brainstorming, technology selection,
|
|
170
|
+
state-of-the-art) → `/architect-research`. **Iteration scale** — only when
|
|
171
|
+
a trigger holds (external API/version dependency; a narrow approach choice
|
|
172
|
+
needing facts; the human asked) → 3–5 narrow parallel researchers,
|
|
173
|
+
adversarially verified, findings with source URLs only; see `research.md`.
|
|
174
|
+
|
|
175
|
+
## Command reference — pre-loaded help
|
|
176
|
+
|
|
177
|
+
Trimmed `--help` output of every command the loop prescribes (the universal
|
|
178
|
+
`--color/--colors/--help` options are cut; every command takes `[SPACE]`,
|
|
179
|
+
default `$PWD`). Run `architect <command> --help` for the untrimmed text.
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
architect new ITERATION
|
|
183
|
+
Scaffold the next iteration file (architecture/I<NN>-<iteration>.md)
|
|
184
|
+
-m, --message / --message-from FILE commit message (subject after canonical prefix)
|
|
185
|
+
|
|
186
|
+
architect section ITERATION SECTION # SECTION: grounds, specification,
|
|
187
|
+
# acceptance-criteria, prompt, verdict
|
|
188
|
+
--from FILE | --body | --stdin section body (author in fresh scratch files)
|
|
189
|
+
--append --lane LANE append a per-lane subsection (Builder Prompt/Report)
|
|
190
|
+
--force write a frozen section (pre-dispatch only)
|
|
191
|
+
|
|
192
|
+
architect rehearse ITERATION
|
|
193
|
+
Dry-run the DRAFTED gates; classify RED/GREEN/BROKEN/EMPTY; never judges
|
|
194
|
+
--record paste-able provenance block for the AC preamble
|
|
195
|
+
|
|
196
|
+
architect freeze ITERATION
|
|
197
|
+
Freeze the frozen region; record the freeze SHA in space.yaml
|
|
198
|
+
--skip-rehearse REASON escape valve (recorded); bare freeze refuses
|
|
199
|
+
without a fresh rehearsal stamp
|
|
200
|
+
|
|
201
|
+
architect provision ITERATION
|
|
202
|
+
Materialize declared lanes (worktree + lane/<id>-<lane> branch)
|
|
203
|
+
--base REF cut exactly this ref (skips the sync)
|
|
204
|
+
--lane LANE provision only this lane
|
|
205
|
+
|
|
206
|
+
architect dispatch ITERATION LANE
|
|
207
|
+
Dispatch a builder (streams to build/<id>-<lane>/run.jsonl)
|
|
208
|
+
--prompt FILE lane prompt (copied to build/<id>-<lane>/prompt.md)
|
|
209
|
+
--model ID pin the builder model (full id, never an alias)
|
|
210
|
+
--effort LEVEL off|minimal|low|medium|high|xhigh|max
|
|
211
|
+
--timeout SECONDS wall-clock (0 disables; default 4h)
|
|
212
|
+
--detach return immediately with PID
|
|
213
|
+
|
|
214
|
+
architect verify ITERATION
|
|
215
|
+
Post-flight mechanical lane checks (reports only, no judgment)
|
|
216
|
+
|
|
217
|
+
architect evidence ITERATION
|
|
218
|
+
Transcribe a lane's scratch report VERBATIM into Builder Report
|
|
219
|
+
--lane LANE per-lane subsection
|
|
220
|
+
|
|
221
|
+
architect gate ITERATION [LANE]
|
|
222
|
+
Run the frozen gate commands; report PASS/FAIL; writes the full transcript
|
|
223
|
+
to build/gate/<id>-<ts>.md and prints the path (the terminal report is
|
|
224
|
+
bounded — the file is the record)
|
|
225
|
+
|
|
226
|
+
architect integrate ITERATION
|
|
227
|
+
Merge the passing lanes --no-ff into project/<slug>, in order; stops on conflict
|
|
228
|
+
--lanes A,B you decide the passing set
|
|
229
|
+
--teardown remove worktrees + lane branches after
|
|
230
|
+
|
|
231
|
+
architect verdict ITERATION continue|kill
|
|
232
|
+
Record the iteration verdict; --from FILE carries the body
|
|
233
|
+
(disagreement rulings + per-AC rollup)
|
|
234
|
+
|
|
235
|
+
architect status iteration/verdict table (read-only)
|
|
236
|
+
architect cost loop spend + latency from pi session artifacts
|
|
237
|
+
--json --by-iteration --latency --precise --since WHEN --space PATH
|
|
238
|
+
architect looplog [--list|--replay|--all|--space PATH]
|
|
239
|
+
Follow every active loop run in this space, live (--list: inventory only)
|
|
240
|
+
architect runlog [FILE]
|
|
241
|
+
Pretty-print a pi run.jsonl (FILE or stdin; RUNLOG_LIMIT, NO_COLOR honored)
|
|
242
|
+
architect install-skills bundled skills for a harness (--provider)
|
|
243
|
+
architect install-extensions reconcile the architect-loop pi extension package
|
|
244
|
+
architect install-agents role playbooks to ~/.pi/agent/agents (pi)
|
|
245
|
+
architect bug-report prefilled GitHub issue template for the CLI
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Maintenance
|
|
249
|
+
|
|
250
|
+
Re-read this skill against each new model generation and delete what the
|
|
251
|
+
models now do unprompted — over-prescription degrades current-model output.
|
|
252
|
+
The rules above are invariants; everything else is prunable.
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## The coordinator path (default) — how builders actually launch
|
|
4
4
|
|
|
5
|
-
When a plan runs under the coordinator (see
|
|
5
|
+
When a plan runs under the coordinator (see the /architect-action skill —
|
|
6
|
+
launching is that skill's job), the
|
|
6
7
|
coordinator itself spawns each role as a **pi subagent** — native async
|
|
7
8
|
completion wakes, not `architect dispatch` headless runs. Per iteration:
|
|
8
9
|
|
|
@@ -207,7 +208,7 @@ The guard is a first line, not a sandbox — the post-flight `git log` check
|
|
|
207
208
|
### Integration (judging session — after per-lane post-flight passes)
|
|
208
209
|
|
|
209
210
|
This block runs in the judging session, not the dispatch session — the dispatch
|
|
210
|
-
session's job ends when builders finish (see
|
|
211
|
+
session's job ends when builders finish (see this skill's §Iteration surgery). You decide which
|
|
211
212
|
lanes pass; the CLI does the git mechanics. Canonical path:
|
|
212
213
|
|
|
213
214
|
```bash
|
|
@@ -219,7 +220,7 @@ architect integrate <iteration> --lanes <passing-set> --teardown # or remove w
|
|
|
219
220
|
# end of project: landing is the architect's, not a CLI command — write the PR
|
|
220
221
|
# body to a fresh build/land/<repo>-pr-body-<yyyymmdd-hhmm>.md yourself, then
|
|
221
222
|
# present the paste-and-run block (cd, git push -u origin project/<slug>,
|
|
222
|
-
# gh pr create) — see
|
|
223
|
+
# gh pr create) — see this skill's §Landing
|
|
223
224
|
```
|
|
224
225
|
|
|
225
226
|
`architect integrate` commits each named lane on its branch and merges it
|
|
@@ -622,7 +623,7 @@ against them, do not edit or work around) ===
|
|
|
622
623
|
build/test commands and repo gotchas there; the loop's PHASE rules stay in
|
|
623
624
|
the dispatch block so they version with the skill.
|
|
624
625
|
- The builder is a bare `pi -p` over the block — it is not invoking the
|
|
625
|
-
`/architect` skills, the block is its entire instruction set.
|
|
626
|
+
`/architect-discuss` skills, the block is its entire instruction set.
|
|
626
627
|
- Billing: the builder draws on the provider account configured in
|
|
627
628
|
`~/.pi/agent` (per-token API usage — e.g. the Fireworks key). There's no
|
|
628
629
|
per-window quota that dies mid-run the way a chat session can, but a long
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Research fan-out reference
|
|
2
2
|
|
|
3
|
-
Read this only when a research trigger fires (see
|
|
3
|
+
Read this only when a research trigger fires (see the /architect-discuss
|
|
4
|
+
skill, §Research fan-out). The fan-out
|
|
4
5
|
uses `architect research dispatch` to launch parallel detached `pi -p --mode
|
|
5
6
|
json` researchers (a cheaper model, read-only by prompt contract — the
|
|
6
7
|
supervisor injects the builder guard, so git writes are denied) and
|
|
@@ -8,7 +8,8 @@ description: >
|
|
|
8
8
|
synthesizes a decision-oriented report. Use when
|
|
9
9
|
brainstorming a project or feature, choosing a technology, or asked to
|
|
10
10
|
"research X", "what's the state of the art", "deep research". For narrow
|
|
11
|
-
slice-level fact checks inside the build loop, /architect handles
|
|
11
|
+
slice-level fact checks inside the build loop, /architect-discuss handles
|
|
12
|
+
those inline.
|
|
12
13
|
---
|
|
13
14
|
|
|
14
15
|
# Architect Research
|
|
@@ -167,6 +168,6 @@ Commit the report. Raw findings stay in `build/research/` (gitignored).
|
|
|
167
168
|
### 7. Hand off
|
|
168
169
|
|
|
169
170
|
If this feeds the build loop: distill the report into the iteration's **Grounds**
|
|
170
|
-
section (`architecture/I<NN>-<name>.md`) per `/architect`, or into
|
|
171
|
+
section (`architecture/I<NN>-<name>.md`) per `/architect-discuss`, or into
|
|
171
172
|
`architecture/BRIEF.md` §sections when it is project-scope, and continue there.
|
|
172
173
|
The builder's PHASE 0 will challenge Grounds' claims — that's a feature.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect-status
|
|
3
|
+
description: >
|
|
4
|
+
Answer "what are we working on in here? is it done? what's the current
|
|
5
|
+
state?" for a space-architect workspace — from files and CLI output, never
|
|
6
|
+
from memory or conversation. Read-only: runs the status commands, reads
|
|
7
|
+
the newest notes/narrative-* (and report/exception/escalation notes), and
|
|
8
|
+
summarizes where the space stands. Never judges, never writes, never
|
|
9
|
+
launches anything.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Architect Status
|
|
13
|
+
|
|
14
|
+
You are the ARCHITECT reporting state. Everything you say is grounded in a
|
|
15
|
+
tool result from this session — no recall, no conversation-only claims.
|
|
16
|
+
|
|
17
|
+
## Procedure
|
|
18
|
+
|
|
19
|
+
1. **Run the state commands** (read-only, safe any time):
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
architect status # iteration/verdict table
|
|
23
|
+
architect looplog --list # live loop inventory: role runs, ages, tasks
|
|
24
|
+
architect cost # optional: spend + latency, if the human asks
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2. **Read the newest records** — `notes/narrative-*` first (best-effort
|
|
28
|
+
updates, newest few), and anything newer still: `notes/report-*`
|
|
29
|
+
(loop completion), `notes/exception-*` (why a loop died),
|
|
30
|
+
`notes/escalation-*` (a parked question waiting for the human),
|
|
31
|
+
`notes/plan-*.md` (newest = what the live loop is working). If a loop is
|
|
32
|
+
active, `architect looplog` shows the role runs in flight.
|
|
33
|
+
|
|
34
|
+
3. **Summarize** in this shape, one line each unless asked for more:
|
|
35
|
+
|
|
36
|
+
- **Space:** one line — what this space is for (README/BRIEF, first
|
|
37
|
+
lines only).
|
|
38
|
+
- **Current iteration:** ordinal, name, freeze state, lanes, verdict.
|
|
39
|
+
- **Loop:** live or not; if live, which plan, which role runs are in
|
|
40
|
+
flight and their ages; if not, when the last one settled and how it
|
|
41
|
+
ended (report/exception).
|
|
42
|
+
- **Last settled event:** from the newest narrative — one line of fact.
|
|
43
|
+
- **Waiting on the human:** any escalation or exception note that parks
|
|
44
|
+
a decision.
|
|
45
|
+
- **Next:** what the plan or ARCHITECT.md says comes next.
|
|
46
|
+
|
|
47
|
+
If nothing is running and nothing is parked, say exactly that — a quiet
|
|
48
|
+
space is a finding, not a failure.
|
|
49
|
+
|
|
50
|
+
## Boundaries
|
|
51
|
+
|
|
52
|
+
Never judge work, never write anything, never launch or resume a loop.
|
|
53
|
+
If the human wants judgment on a finished run, that's `/architect-discuss`;
|
|
54
|
+
to start or resume work, `/architect-action`; to do the work directly,
|
|
55
|
+
`/architect`.
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: space-architect
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 9.
|
|
4
|
+
version: 9.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Jacobs
|
|
@@ -177,13 +177,14 @@ files:
|
|
|
177
177
|
- lib/space_architect/templates/brief.md.erb
|
|
178
178
|
- lib/space_architect/templates/iteration.md.erb
|
|
179
179
|
- lib/space_architect/version.rb
|
|
180
|
-
- skill/architect-
|
|
180
|
+
- skill/architect-action/SKILL.md
|
|
181
|
+
- skill/architect-discuss/SKILL.md
|
|
182
|
+
- skill/architect-discuss/dispatch.md
|
|
183
|
+
- skill/architect-discuss/research.md
|
|
181
184
|
- skill/architect-research/SKILL.md
|
|
182
185
|
- skill/architect-research/lanes.md
|
|
183
|
-
- skill/architect-
|
|
186
|
+
- skill/architect-status/SKILL.md
|
|
184
187
|
- skill/architect/SKILL.md
|
|
185
|
-
- skill/architect/dispatch.md
|
|
186
|
-
- skill/architect/research.md
|
|
187
188
|
homepage: https://github.com/jetpks/space-architect
|
|
188
189
|
licenses:
|
|
189
190
|
- MIT
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: architect-plan
|
|
3
|
-
description: "Plan work for the architect loop and launch it as an autonomous coordinator run (/loop). Use when the user's intention is to START a loop: planning iterations, writing the plan doc (notes/plan-*.md), pinning role routing, launching the coordinator, and watching it run. For general architecture work without launching a loop (arbitration, judging, landing, iteration surgery, conversation), use /architect instead."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Architect Plan
|
|
7
|
-
|
|
8
|
-
You are the ARCHITECT planning a coordinator run. The deliverable of this
|
|
9
|
-
skill is exactly one thing: a committed plan doc and a launched coordinator.
|
|
10
|
-
The loop's roles (spec → builders → judge, driven by the coordinator) do
|
|
11
|
-
everything after that — you never absorb a builder wakeup.
|
|
12
|
-
|
|
13
|
-
Read `/architect` (the main skill) first for roles, routing, and the hard
|
|
14
|
-
rules. This skill covers only the start.
|
|
15
|
-
|
|
16
|
-
## Procedure
|
|
17
|
-
|
|
18
|
-
1. **Ground (never skip).**
|
|
19
|
-
- `architect status` — iteration/verdict state; anything in flight?
|
|
20
|
-
- `architect looplog --list` — is a loop already running? Fresh transcripts
|
|
21
|
-
mean a live loop: don't double-start; report and ask.
|
|
22
|
-
- Read `architecture/ARCHITECT.md` (TOC + backlog), `architecture/BRIEF.md`
|
|
23
|
-
(the durable §-contract — cite it as BRIEF §N), the in-flight iteration
|
|
24
|
-
file if any, and the latest `notes/spec-digest-*.md` (the previous spec's
|
|
25
|
-
handoff: verification commands actually used, repo seams, house
|
|
26
|
-
conventions, open unknowns — carry its facts forward or they are lost).
|
|
27
|
-
- Read the target repo's `AGENTS.md`/`CLAUDE.md` → `README.md` → docs;
|
|
28
|
-
confirm the exact verification gate command.
|
|
29
|
-
- Learn the verification gate (test/lint/typecheck/build) from docs or CI
|
|
30
|
-
config — the plan's acceptance direction must name it.
|
|
31
|
-
2. **Scale the work.** Trivial fixes don't need the loop — say so and do it
|
|
32
|
-
inline. One PR-sized iteration = one ENTRY. Multi-iteration plans get
|
|
33
|
-
ordered ENTRYs (the coordinator works them in order, skipping finished
|
|
34
|
-
ones). If the open question is too uncertain to build, make the ENTRY a
|
|
35
|
-
spike (investigate-only; deliverable is a recommendation — see /architect).
|
|
36
|
-
3. **Write the plan doc** to `notes/plan-<UTC timestamp>-<name>.md`:
|
|
37
|
-
|
|
38
|
-
```markdown
|
|
39
|
-
# Plan — <name> (<one line>)
|
|
40
|
-
|
|
41
|
-
Operator plan <date>. <Repos/lanes in scope.>
|
|
42
|
-
|
|
43
|
-
Standing context the spec needs: prior iterations this builds on, routing
|
|
44
|
-
pins, and the post-landing follow-ups (outside-the-loop work the plan
|
|
45
|
-
deliberately excludes — name it so it isn't lost).
|
|
46
|
-
|
|
47
|
-
## ENTRY N — iteration <name> (repo: <repo>, <lane count> lane(s))
|
|
48
|
-
|
|
49
|
-
**Objective.** What to build and why — the reason, not just the ask. Cite
|
|
50
|
-
BRIEF §N. If this ENTRY pins model/thinking for a role, say it here (the
|
|
51
|
-
coordinator passes it in that spawn's model field).
|
|
52
|
-
|
|
53
|
-
**Grounds to read.** Exact paths: research/bug reports, source files being
|
|
54
|
-
ported, seam files, prior verdicts. The spec reads these before writing a
|
|
55
|
-
word.
|
|
56
|
-
|
|
57
|
-
**Acceptance direction (spec refines into frozen AC).** The properties the
|
|
58
|
-
finished iteration must have — at the level the spec can freeze, not
|
|
59
|
-
pre-written gates (freezing is the spec's job).
|
|
60
|
-
|
|
61
|
-
**Constraints.** Repos; files that must not change; out-of-scope;
|
|
62
|
-
house-style expectations; what the lane must NOT delete or move (say so
|
|
63
|
-
when a port is replacing something that lives elsewhere).
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Each ENTRY must be self-contained — the spec agent receives the entry
|
|
67
|
-
verbatim and nothing else. Put the verification gate command in ENTRY
|
|
68
|
-
constraints or grounds.
|
|
69
|
-
4. **Pin routing if needed.** This plan's models come from `architect.yaml`
|
|
70
|
-
(space root overrides `~/.config/space-architect/architect.yaml` per role).
|
|
71
|
-
A one-plan pin goes in the plan header/ENTRY (the coordinator passes it in
|
|
72
|
-
that spawn's model field); a standing change edits `architect.yaml` —
|
|
73
|
-
routing rides the spawn contract and `/loop` resolves it at launch, so
|
|
74
|
-
there are no generated agent files to hand-sync (the role playbooks are
|
|
75
|
-
static, user-level, installed once by `architect install-agents`).
|
|
76
|
-
5. **Commit the plan doc** to the space — an uncommitted plan is scratch, and
|
|
77
|
-
decision-bearing documents live in `notes/` (not-committed = didn't
|
|
78
|
-
happen).
|
|
79
|
-
6. **Launch.** From an interactive pi session at the space root:
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
/loop --from notes/plan-<ts>-<name>.md
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
`/loop` refuses an empty plan, resolves the routing config (validates
|
|
86
|
-
every pin against the model registry — a pin it doesn't know throws
|
|
87
|
-
loudly, before any spawn — and injects the per-role pins into the
|
|
88
|
-
coordinator's task), and spawns `architect-coordinator` detached — your
|
|
89
|
-
session may end; the coordinator (12h ceiling) works the plan, narrating
|
|
90
|
-
every settled event to `notes/narrative-*.md`. If pi-subagents' RPC is not
|
|
91
|
-
up in the session, /loop says so — spawn the coordinator directly instead
|
|
92
|
-
(agent `architect-coordinator`, the space as cwd, the plan text verbatim as
|
|
93
|
-
the task, the coordinator's model pin from `architect.yaml`, `timeoutMs`
|
|
94
|
-
43200000).
|
|
95
|
-
7. **Report the handoff, then stop.** Tell the human: the plan path, the
|
|
96
|
-
coordinator run id, and how to watch —
|
|
97
|
-
`architect looplog` (live), `--list` (inventory),
|
|
98
|
-
`architect status`, `architect cost`. Escalations route through the
|
|
99
|
-
coordinator to your supervisor seat: rule and the coordinator steers; if
|
|
100
|
-
your session won't stay alive, say so — a coordinator with no listener
|
|
101
|
-
parks the question in `notes/escalation-<ts>.md` and stops via the exception
|
|
102
|
-
path rather than improvising.
|
|
103
|
-
|
|
104
|
-
## Failure modes to check before launching
|
|
105
|
-
|
|
106
|
-
- **Frozen-region edits** — never edit `architecture/` directly; the plan
|
|
107
|
-
steers, the spec writes sections via the CLI.
|
|
108
|
-
- **Stale base** — outside-the-loop commits that landed on a repo's main since
|
|
109
|
-
the last provision are fine (`architect provision` fast-forward-syncs
|
|
110
|
-
`project/<slug>` from the default branch or refuses loudly on divergence);
|
|
111
|
-
a deliberately diverged integration branch must be named in the plan.
|
|
112
|
-
- **Stale gem / extension** — if the plan exercises CLI behavior newer than
|
|
113
|
-
the installed gem, note the rebuild in standing context: a config that
|
|
114
|
-
moved ahead of the installed CLI rejects every command.
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: architect-vocabulary
|
|
3
|
-
description: >
|
|
4
|
-
Load the Architect system's vocabulary and a short "where you are"
|
|
5
|
-
orientation — space, project, iteration, lane, brief, builder, architect,
|
|
6
|
-
gate, freeze, verdict, research, variant set — for when you're standing in a
|
|
7
|
-
space-architect workspace (or working on the skill itself) and need the terms
|
|
8
|
-
understood in conversation but do NOT want to run the loop. Reference only:
|
|
9
|
-
it does not dispatch builders, freeze, judge, or write iteration files.
|
|
10
|
-
Invoke as /architect-vocabulary.
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Architect Vocabulary
|
|
14
|
-
|
|
15
|
-
This skill loads **terminology and orientation only**. It is the glossary, not
|
|
16
|
-
the loop.
|
|
17
|
-
|
|
18
|
-
## What this skill is — and isn't
|
|
19
|
-
|
|
20
|
-
- **Is:** the shared vocabulary of `space-architect` plus a quick orientation to
|
|
21
|
-
where things live, so these terms are understood for the rest of the session.
|
|
22
|
-
- **Isn't:** the build loop. Do **not** run `architect new` / `freeze` /
|
|
23
|
-
`dispatch` / `integrate`, do **not** write or edit anything under
|
|
24
|
-
`architecture/`, and do **not** render verdicts on builder work. That is the
|
|
25
|
-
separate **`/architect`** skill — invoke it deliberately when you actually
|
|
26
|
-
want to run the loop. Read-only `architect` commands (`status`, `show`) are
|
|
27
|
-
fine here.
|
|
28
|
-
|
|
29
|
-
## Vocabulary
|
|
30
|
-
|
|
31
|
-
**Roles**
|
|
32
|
-
|
|
33
|
-
- **architect** — the judgment role (a strong reasoning model, or a human, in
|
|
34
|
-
judgment mode): arbitrates disagreements, writes and freezes iteration files,
|
|
35
|
-
calls kill/continue, merges builder output. Never writes implementation code.
|
|
36
|
-
- **builder** — the implementation role: a cheaper model run headless via
|
|
37
|
-
`architect dispatch` (reference harness: `pi -p`), one per lane in its own
|
|
38
|
-
worktree. Reports
|
|
39
|
-
raw evidence; never grades its own work; never edits `architecture/`.
|
|
40
|
-
|
|
41
|
-
**The workspace**
|
|
42
|
-
|
|
43
|
-
- **space** — a task-scoped workspace directory holding repos, notes, and
|
|
44
|
-
artifacts under one root. `architect` finds it by walking up from `$PWD` to the
|
|
45
|
-
nearest `space.yaml`.
|
|
46
|
-
- **space.yaml** — the space's identity file: id, title, status, repos, notes,
|
|
47
|
-
tags, plus the `project:` block (project state — iterations, freeze shas,
|
|
48
|
-
lanes).
|
|
49
|
-
- **project** — an Architect Loop instance living inside a space; spans the
|
|
50
|
-
repos under `repos/`.
|
|
51
|
-
|
|
52
|
-
**The unit of work**
|
|
53
|
-
|
|
54
|
-
- **iteration** — one PR-sized unit of work, captured as a single self-contained
|
|
55
|
-
file `architecture/I<NN>-<name>.md`, grown section by section. Its sections:
|
|
56
|
-
- **Grounds** — *why*: research/brief distilled (optional).
|
|
57
|
-
- **Specification** — *what/how*: the full delegation contract.
|
|
58
|
-
- **Acceptance Criteria** — *proof*: prose conditions (AC1, AC2, …) the
|
|
59
|
-
architect judges against, plus a fenced ` ```gates ` block of runnable checks;
|
|
60
|
-
this is what gets frozen.
|
|
61
|
-
- **Builder Prompt** — the exact lane-prompt(s) dispatched.
|
|
62
|
-
- **Builder Report** — raw evidence, transcribed verbatim from build scratch.
|
|
63
|
-
- **Verdict** — rulings + per-AC PASS/FAIL/INVALID + KILL/CONTINUE.
|
|
64
|
-
- **lane** — a parallel slice of an iteration (1–4 per iteration), each
|
|
65
|
-
declaring a disjoint target repo + file-touch set. Lanes in different repos are
|
|
66
|
-
inherently disjoint; same-repo lanes that overlap files run as one. Each runs
|
|
67
|
-
in its own worktree under `build/<id>-<lane>/`.
|
|
68
|
-
- **worktree** — the isolated git worktree a lane builds in, off the target
|
|
69
|
-
repo's base commit, so lanes never collide.
|
|
70
|
-
- **dispatch** — launching a fresh headless builder for a lane (`architect
|
|
71
|
-
dispatch <iteration> <lane>`), streaming output to `build/<id>-<lane>/run.jsonl`.
|
|
72
|
-
|
|
73
|
-
**Contracts and checkpoints**
|
|
74
|
-
|
|
75
|
-
- **brief** (`architecture/BRIEF.md`) — the durable, §-numbered project contract
|
|
76
|
-
that spans iterations; frozen at the project level and cited as **BRIEF §N**.
|
|
77
|
-
- **ARCHITECT.md** (`architecture/ARCHITECT.md`) — the cross-iteration index /
|
|
78
|
-
table of contents and project-wide state.
|
|
79
|
-
- **freeze** ❄️ — committing the frozen region (Grounds / Specification /
|
|
80
|
-
Acceptance Criteria) *before* dispatch (`architect freeze`). Records the
|
|
81
|
-
**freeze_sha** in `space.yaml`; any later change to those sections is an
|
|
82
|
-
automatic iteration FAIL.
|
|
83
|
-
- **gate** — a structured entry in the ` ```gates ` block: `id`, `ac`, `cmd`,
|
|
84
|
-
optional `cwd`, and an `expect` hash (exit_code / stdout_match / threshold).
|
|
85
|
-
`architect gate` runs each gate's `cmd` and streams raw output — it is a runner,
|
|
86
|
-
never a judge. `architect freeze` lints the gates block before committing.
|
|
87
|
-
|
|
88
|
-
**Outcomes**
|
|
89
|
-
|
|
90
|
-
- **verdict** — the architect's ruling on an iteration, written after evidence:
|
|
91
|
-
- per-criterion: **PASS** / **FAIL** / **INVALID** (INVALID = not measured the
|
|
92
|
-
way the gate specifies).
|
|
93
|
-
- iteration-level: **KILL** / **CONTINUE**.
|
|
94
|
-
- **variant set** — an iteration built as multiple `(harness, model)` lanes over
|
|
95
|
-
one frozen spec, judged head-to-head against the same Acceptance Criteria; the
|
|
96
|
-
winner is selected with the human in the loop, not unilaterally.
|
|
97
|
-
|
|
98
|
-
**Research**
|
|
99
|
-
|
|
100
|
-
- **research** — two scales:
|
|
101
|
-
- **discovery scale** (brainstorming, technology selection, state-of-the-art)
|
|
102
|
-
→ the **`/architect-research`** skill: a scout maps the topic, the
|
|
103
|
-
orchestrator designs parallel researcher **lanes**, claims are verified
|
|
104
|
-
against sources, and the synthesis distills into a brief §section or an
|
|
105
|
-
iteration's Grounds.
|
|
106
|
-
- **iteration scale** → an inline fan-out run only when an iteration needs
|
|
107
|
-
facts the repo doesn't already have.
|
|
108
|
-
|
|
109
|
-
**Repos**
|
|
110
|
-
|
|
111
|
-
- **evergreen** / copy-on-write / **`src` engine** — repo provisioning: when an
|
|
112
|
-
up-to-date local copy exists under `src_dir`, `architect` copies it into
|
|
113
|
-
the space (copy-on-write on APFS) instead of cloning over the network. The
|
|
114
|
-
`src` engine (`space-src`) keeps those evergreen checkouts tended.
|
|
115
|
-
|
|
116
|
-
## Where you are
|
|
117
|
-
|
|
118
|
-
A space's directory layout:
|
|
119
|
-
|
|
120
|
-
```text
|
|
121
|
-
space.yaml # identity + project state (the project: block)
|
|
122
|
-
README.md
|
|
123
|
-
repos/ # the repos the project spans
|
|
124
|
-
notes/ # scratch, prompts, logs
|
|
125
|
-
architecture/ # ARCHITECT.md index + I<NN>-<name>.md iteration files (+ BRIEF.md)
|
|
126
|
-
build/ # lane worktrees + scratch: build/<id>-<lane>/
|
|
127
|
-
tmp/ # workspace-local temp — use instead of /tmp
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Safe **read-only** commands to orient yourself (these don't run the loop):
|
|
131
|
-
|
|
132
|
-
```sh
|
|
133
|
-
architect status # project state: iterations, freeze shas, lanes, verdicts
|
|
134
|
-
space show # the space you're standing in (space-cadet binary)
|
|
135
|
-
space list # all your spaces
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Maintenance
|
|
139
|
-
|
|
140
|
-
This glossary is a **self-contained copy** of terms defined canonically in the
|
|
141
|
-
`architect` skill (`SKILL.md`) and the project `README.md`. It is installed as an
|
|
142
|
-
isolated skill, so it can't reference those at runtime — when the vocabulary
|
|
143
|
-
changes there, re-read this file against them and update it to keep the two from
|
|
144
|
-
drifting.
|