paseo-room 0.4.1 → 0.5.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/README.md +122 -70
- package/dist/index.js +338 -217
- package/dist/index.js.map +1 -1
- package/dist/prompts/contract/lead.md +152 -0
- package/dist/prompts/contract/peer.md +62 -0
- package/dist/prompts/contract/shared-authority.md +33 -0
- package/dist/prompts/contract/shared-seat-identity.md +18 -0
- package/dist/prompts/contract/supervisor.md +89 -0
- package/dist/skills/paseo-project-onboarding/SKILL.md +122 -0
- package/dist/skills/paseo-project-onboarding/references/workspace-protocol-template.md +56 -0
- package/package.json +2 -2
- package/dist/prompts/contract/lead/complete-peer-brief.md +0 -32
- package/dist/prompts/contract/lead/independent-review.md +0 -9
- package/dist/prompts/contract/lead/moving-write-ownership.md +0 -13
- package/dist/prompts/contract/lead/peer-seat-lifecycle.md +0 -39
- package/dist/prompts/contract/lead/project-technical-ownership.md +0 -12
- package/dist/prompts/contract/lead/technical-acceptance.md +0 -6
- package/dist/prompts/contract/peer/assignment-scope.md +0 -10
- package/dist/prompts/contract/peer/bounded-outcome.md +0 -13
- package/dist/prompts/contract/peer/independent-judgment.md +0 -11
- package/dist/prompts/contract/peer/no-orchestration.md +0 -5
- package/dist/prompts/contract/peer/no-self-acceptance.md +0 -5
- package/dist/prompts/contract/peer/reproducible-handoff.md +0 -17
- package/dist/prompts/contract/shared/evidence-and-event-waiting.md +0 -7
- package/dist/prompts/contract/shared/human-authority.md +0 -8
- package/dist/prompts/contract/shared/scope-and-unrelated-work.md +0 -4
- package/dist/prompts/contract/shared-supervisor-lead/workspace-protocol-precedence.md +0 -18
- package/dist/prompts/contract/supervisor/directive-integrity.md +0 -5
- package/dist/prompts/contract/supervisor/escalation-boundaries.md +0 -5
- package/dist/prompts/contract/supervisor/lead-discovery-and-recovery.md +0 -52
- package/dist/prompts/contract/supervisor/observation-and-advice.md +0 -13
- package/dist/prompts/contract/supervisor/technical-non-interference.md +0 -8
- package/dist/prompts/documents/workspace.md +0 -6
- package/dist/prompts/workspace/repository-conventions.md +0 -7
- package/dist/prompts/workspace/review.md +0 -4
- package/dist/prompts/workspace/topology.md +0 -13
- package/dist/prompts/workspace/verification.md +0 -10
- /package/dist/prompts/contract/{shared-lead-peer/challenge-signals.md → challenge-signals.md} +0 -0
package/README.md
CHANGED
|
@@ -89,7 +89,9 @@ starts, its exit code is preserved; a signal is returned using the conventional
|
|
|
89
89
|
~/.paseo-room/
|
|
90
90
|
room.json # what this CLI created; verify and remove read it
|
|
91
91
|
AUTHENTICATION.md # exact per-role login commands; contains no secrets
|
|
92
|
-
room/
|
|
92
|
+
room/skills/paseo-project-onboarding/ # Lead-only Agent Skill: draft a repository protocol
|
|
93
|
+
SKILL.md, references/ # procedure plus a scaffold loaded only when the skill runs
|
|
94
|
+
room/skill-projections/<agent>/lead/ # exact Lead skill aggregate for each seated agent
|
|
93
95
|
plugin/ # Claude only: trusted creation-time system-prompt append carrier
|
|
94
96
|
paseo-plugin.json # accepts Paseo >=0.8.0 <0.9.0
|
|
95
97
|
index.server.ts, server/ # exact provider map + generated role contracts
|
|
@@ -98,20 +100,20 @@ starts, its exit code is preserved; a signal is returned using the conventional
|
|
|
98
100
|
role-instructions.md # readable copy of what this seat was told
|
|
99
101
|
model-catalog.json # generated copy of your catalog, native multi-agent metadata removed
|
|
100
102
|
auth.json # created and owned by Codex after role login, if file-backed
|
|
101
|
-
AGENTS.md, skills, plugins, hooks.json →
|
|
103
|
+
AGENTS.md, skills, plugins, hooks.json → shared resources (Lead/Peer: see below)
|
|
102
104
|
roles/claude/<role>/
|
|
103
105
|
CLAUDE.md # your global memory + role instructions (contract omitted with --no-claude-memory-contract)
|
|
104
|
-
settings.json #
|
|
106
|
+
settings.json # minimal room-owned env, deny and control-plane policy
|
|
105
107
|
.claude.json # seeded once from yours, then owned by Claude
|
|
106
108
|
.credentials.json # created and owned by Claude after role login, if file-backed
|
|
107
109
|
skills, plugins, commands, hooks, rules, output-styles,
|
|
108
|
-
keybindings.json, themes →
|
|
110
|
+
keybindings.json, themes → shared resources (Lead/Peer: see below)
|
|
109
111
|
roles/pi/<role>/
|
|
110
112
|
settings.json # your settings minus package/extension declarations
|
|
111
113
|
APPEND_SYSTEM.md # your append + style/runtime capsules + role instructions
|
|
112
114
|
auth.json # created and owned by Pi after role login, if used
|
|
113
115
|
models.json, AGENTS.md, skills, prompts, themes,
|
|
114
|
-
keybindings.json, mcp.json →
|
|
116
|
+
keybindings.json, mcp.json → shared resources (Lead/Peer: see below)
|
|
115
117
|
```
|
|
116
118
|
|
|
117
119
|
Each seat gets its own file-backed credential path, sessions, history and projects inside its
|
|
@@ -125,7 +127,14 @@ file. Anything else at a managed path — a directory where a file belongs, an u
|
|
|
125
127
|
symlink — makes setup stop and name the path for you to move aside. Nothing is deleted
|
|
126
128
|
recursively on your behalf.
|
|
127
129
|
|
|
128
|
-
###
|
|
130
|
+
### How Lead and Peer receive skills
|
|
131
|
+
|
|
132
|
+
Lead's `skills` remains a symlink, but now points to a room-owned managed aggregate containing
|
|
133
|
+
links to every noncolliding operator skill plus the room-owned `paseo-project-onboarding` skill.
|
|
134
|
+
This adds the room skill without writing into your agent home, while keeping the role path
|
|
135
|
+
replaceable by an older package during rollback. An operator skill whose name collides
|
|
136
|
+
case-insensitively remains untouched but is shadowed in the aggregate by the room-owned copy,
|
|
137
|
+
avoiding duplicate names on case-insensitive filesystems.
|
|
129
138
|
|
|
130
139
|
Peer has no room tools, so the room also stops handing it orchestration surfaces:
|
|
131
140
|
|
|
@@ -138,9 +147,9 @@ Peer has no room tools, so the room also stops handing it orchestration surfaces
|
|
|
138
147
|
removing one of your skills is drift `verify` reports and `setup --apply` reconciles.
|
|
139
148
|
|
|
140
149
|
Your own skills directory is never modified: `paseo*` skills stay exactly where they are.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
150
|
+
On the next `setup --apply`, an existing Lead `skills` symlink is retargeted to its room aggregate,
|
|
151
|
+
while a legacy Peer symlink becomes its managed directory. Setup only replaces or unlinks those
|
|
152
|
+
aliases, never your skills, and stops with an actionable message for an unrecognized Peer shape.
|
|
144
153
|
|
|
145
154
|
This is capability hygiene, not a sandbox. Peer still has shell access.
|
|
146
155
|
|
|
@@ -170,8 +179,8 @@ and environment-variable names. They never read credential contents, query a key
|
|
|
170
179
|
a token over the network, or claim OAuth freshness. Authentication findings are warnings and
|
|
171
180
|
do not turn an otherwise valid setup or verify into a failure:
|
|
172
181
|
|
|
173
|
-
- **configured structurally** — a regular role credential file
|
|
174
|
-
|
|
182
|
+
- **configured structurally** — a regular role credential file exists; validity and freshness
|
|
183
|
+
were not checked;
|
|
175
184
|
- **login-required** — no role credential artifact or safely recognizable alternative exists;
|
|
176
185
|
- **legacy-shared-risk** — an older room has a credential symlink, including one whose target
|
|
177
186
|
may now be missing; only its stored link text is read, it is preserved, and the output gives
|
|
@@ -206,12 +215,12 @@ argv. No login path reads, copies, links, replaces, validates, or deletes a cred
|
|
|
206
215
|
|
|
207
216
|
Codex diagnostics recognize an explicit `cli_auth_credentials_store` of `file`, `ephemeral`,
|
|
208
217
|
`auto`, or `keyring`. An `OPENAI_API_KEY` name in the setup shell does not count as stored role
|
|
209
|
-
auth; Codex's API-key login must create that role's native store. Claude
|
|
210
|
-
documented cloud selectors,
|
|
211
|
-
`
|
|
212
|
-
provider API-key environment names. Names found only in the setup process
|
|
213
|
-
unverifiable because their values are not copied into Paseo providers; other
|
|
214
|
-
authentication may exist but is not validated.
|
|
218
|
+
auth; Codex's API-key login must create that role's native store. Claude role settings do not
|
|
219
|
+
import operator auth helpers; diagnostics recognize only ambient documented cloud selectors,
|
|
220
|
+
`ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_API_KEY`, and `CLAUDE_CODE_OAUTH_TOKEN` by name. Pi recognizes a
|
|
221
|
+
bounded list of built-in provider API-key environment names. Names found only in the setup process
|
|
222
|
+
are ambient and unverifiable because their values are not copied into Paseo providers; other
|
|
223
|
+
ambient provider authentication may exist but is not validated.
|
|
215
224
|
|
|
216
225
|
## What the room changes
|
|
217
226
|
|
|
@@ -286,13 +295,13 @@ attribute `/mcp` to `source: "extension"` at that same canonical path. Missing,
|
|
|
286
295
|
path-escaped or wrongly attributed adapters fail closed. The probe and setup do not write the
|
|
287
296
|
operator or planned role homes.
|
|
288
297
|
|
|
289
|
-
Each seat
|
|
290
|
-
agent's own configuration:
|
|
298
|
+
Each seat combines generated agent configuration with Paseo provider pins. Provider fields are
|
|
299
|
+
still required where Paseo launch state outranks the agent's own configuration:
|
|
291
300
|
|
|
292
301
|
| Pin | Applies to | Why |
|
|
293
302
|
|---|---|---|
|
|
294
303
|
| `params: {sandbox_mode, approval_policy}` | Codex | Without it Paseo sends its own mode preset (default `auto-review`) to the Codex app-server, and that outranks the generated `config.toml`. |
|
|
295
|
-
| `disallowedTools` for `Task`, `Agent`, `Workflow`, coordination, task-list, cron and team tools | Claude | Blocks legacy/current subagents, dynamic workflows, cross-session coordination and agent teams. |
|
|
304
|
+
| provider `disallowedTools` + role `permissions.deny` for `Task`, `Agent`, `Workflow`, coordination, task-list, cron and team tools | Claude | Blocks legacy/current subagents, dynamic workflows, cross-session coordination and agent teams at both Paseo and Claude's role settings. |
|
|
296
305
|
| `disableAgentView: true` + `CLAUDE_CODE_DISABLE_AGENT_VIEW=1` | Claude | Disables Claude's separate background-agent control plane across settings scopes and at launch. |
|
|
297
306
|
| `disableWorkflows: true` + `CLAUDE_CODE_DISABLE_WORKFLOWS=1` | Claude | Disables dynamic workflows through every entry point, beyond denying the `Workflow` tool. |
|
|
298
307
|
| `crossSessionInbound: "refuse"` | Claude | Prevents another Claude session from injecting a turn into a room seat. |
|
|
@@ -302,7 +311,8 @@ agent's own configuration:
|
|
|
302
311
|
`verify` compares each provider's `command`, `env`, `paseoTools` and pins against what the
|
|
303
312
|
room would write, and fails if one has been dropped — a pin that can be silently removed is
|
|
304
313
|
not a guarantee. The `env` map is compared whole rather than as a subset, because an added key
|
|
305
|
-
can re-enable exactly what a pin closes. Unrelated top-level provider fields stay yours.
|
|
314
|
+
can re-enable exactly what a pin closes. Unrelated top-level provider fields stay yours. Claude
|
|
315
|
+
role `settings.json` is compared separately as a managed file, including `permissions.deny`.
|
|
306
316
|
|
|
307
317
|
It also saves one **agent profile** per seat, which is what the Paseo picker lists under
|
|
308
318
|
Profiles. A profile is a preset, not a constraint: it decides where a seat *starts*.
|
|
@@ -332,10 +342,12 @@ stale room-owned value from an existing Pi profile. Pi has no sandbox or approva
|
|
|
332
342
|
its permissive runtime is necessary for headless operation but grants no additional authority.
|
|
333
343
|
|
|
334
344
|
Claude starts in Paseo's `bypassPermissions` mode, while Codex starts in its equivalent
|
|
335
|
-
`full-access` mode. Claude deny rules still apply in bypass mode, so native
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
345
|
+
`full-access` mode. Claude deny rules still apply in bypass mode, so the canonical native-tool
|
|
346
|
+
list is written to both provider `disallowedTools` and every role's `settings.json` under
|
|
347
|
+
`permissions.deny`. The role file is minimal, deterministic room policy: it does not copy operator
|
|
348
|
+
env, hooks, permissions, or auth helpers. The room does not write `permissions.defaultMode`:
|
|
349
|
+
Paseo passes the profile's mode as a command-line session setting, which outranks that file. The two
|
|
350
|
+
Claude disable environment keys are likewise pinned in both the provider and generated
|
|
339
351
|
`settings.json`, because Claude applies settings-file environment values after launch values.
|
|
340
352
|
The generated top-level `disableAgentView` and `disableWorkflows` settings are also forced to
|
|
341
353
|
`true`; their restrictive value cannot be weakened by another ordinary settings scope.
|
|
@@ -349,18 +361,18 @@ the operator.
|
|
|
349
361
|
Names are not identity. A matching cwd, title, or provider label does not make an existing
|
|
350
362
|
agent a room Lead or Peer. The exact eligibility procedure is model-facing wording and lives
|
|
351
363
|
in the contract itself —
|
|
352
|
-
[
|
|
353
|
-
|
|
354
|
-
[
|
|
355
|
-
than being restated here. In
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
+
the shared [Room Seat Identity](src/room/prompts/contract/shared-seat-identity.md) evidence,
|
|
365
|
+
with the role-specific procedures in
|
|
366
|
+
[the Supervisor contract](src/room/prompts/contract/supervisor.md) and
|
|
367
|
+
[the Lead contract](src/room/prompts/contract/lead.md) — rather than being restated here. In
|
|
368
|
+
outline: the seat's evidence is the current live configuration. Both seats read the exact current
|
|
369
|
+
`room-<agent>-<role>` profile from `list_profiles`, materialize every field it defines (agent
|
|
370
|
+
creation takes no profile id), then inspect the live seat's provider, workspace and mode.
|
|
371
|
+
Supervisor additionally uses `list_agents(cwd)` for discovery and corroborates Lead ownership by
|
|
372
|
+
parentage or known Human-opened history. For `room-<agent>-peer`, Lead copies provider, mode and
|
|
373
|
+
features exactly, keeps the profile's model unless a repository protocol routes models,
|
|
374
|
+
chooses the thinking effort under that repository protocol's policy, and requires the live seat's
|
|
375
|
+
daemon-added `paseo.parent-agent-id` to name itself. An ambiguous Lead candidate goes to
|
|
364
376
|
duplicate recovery and Human escalation instead of being adopted.
|
|
365
377
|
|
|
366
378
|
Current Paseo agent sessions do not retain `profileId`. A direct launch with the exact
|
|
@@ -370,9 +382,10 @@ provider ids or claim that the daemon enforces this procedural eligibility check
|
|
|
370
382
|
|
|
371
383
|
## Keeping the room current
|
|
372
384
|
|
|
373
|
-
Role homes are generated once, at `setup` time. After you edit `~/.codex/config.toml
|
|
374
|
-
|
|
375
|
-
|
|
385
|
+
Role homes are generated once, at `setup` time. After you edit `~/.codex/config.toml` or Pi's
|
|
386
|
+
`settings.json` / `APPEND_SYSTEM.md`, run setup again to fold the change into every seat. Claude's
|
|
387
|
+
operator `settings.json` is not an input to its minimal room settings. The same applies after
|
|
388
|
+
upgrading `paseo-room`; a release
|
|
376
389
|
that changes generated headings or prompt assets produces expected one-time managed-file
|
|
377
390
|
drift.
|
|
378
391
|
|
|
@@ -392,16 +405,20 @@ seat after the apply; sending another turn to an already-running seat is not a r
|
|
|
392
405
|
context reloaded them. Only a newly launched seat context is expected to ingest the
|
|
393
406
|
regenerated instructions.
|
|
394
407
|
|
|
395
|
-
`room.json` records a short `contract` digest of the role documents
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
408
|
+
`room.json` records a short `contract` digest of the three rendered role documents this room
|
|
409
|
+
was installed from. When it differs from what the installed package renders — or is absent,
|
|
410
|
+
because the room predates the field — setup and verify warn that the seats are holding older
|
|
411
|
+
text and ask for `setup --apply` plus a restart. It is provenance you compare by eye, not a
|
|
412
|
+
security claim. Rooms written before the field still parse.
|
|
413
|
+
|
|
414
|
+
The room-owned skill files are live managed entries instead: `verify` compares their exact bytes,
|
|
415
|
+
so a skill update is not reported as stale seat instructions.
|
|
400
416
|
|
|
401
|
-
|
|
402
|
-
the room-owned projection described above. Only
|
|
403
|
-
|
|
404
|
-
it
|
|
417
|
+
On the first upgraded apply, each Lead `skills` symlink is retargeted to its room-owned aggregate
|
|
418
|
+
and an existing Peer `skills` symlink becomes the room-owned projection described above. Only
|
|
419
|
+
aliases are replaced or unlinked, never your skills. Lead retains the symlink shape the prior
|
|
420
|
+
package expects, so package-level rollback can retarget it without a reverse migration; setup
|
|
421
|
+
still stops rather than guessing if the Peer path has become something it does not recognize.
|
|
405
422
|
|
|
406
423
|
To roll back, run the prior package version with the same agent selection and `setup --apply`,
|
|
407
424
|
then restart the affected seats again:
|
|
@@ -422,8 +439,7 @@ There are three separate evidence boundaries:
|
|
|
422
439
|
- `setup --apply` and `verify`, backed by regression tests, prove the generated/live
|
|
423
440
|
configuration chain: each room profile points to its exact role provider and owned mode,
|
|
424
441
|
each provider points to the exact role home, and each provider-selected role home carries
|
|
425
|
-
the exact prompt input with the applicable role contract
|
|
426
|
-
sections.
|
|
442
|
+
the exact prompt input with the applicable role contract.
|
|
427
443
|
- Delivery of those files and arguments into a newly launched model context relies on the
|
|
428
444
|
documented Codex, Claude Code and Pi configuration contracts for
|
|
429
445
|
`developer_instructions`, `CLAUDE.md`, and `--append-system-prompt`.
|
|
@@ -446,8 +462,10 @@ command again.
|
|
|
446
462
|
## The role contract
|
|
447
463
|
|
|
448
464
|
The exact model-facing wording every seat reads lives in the canonical Markdown under
|
|
449
|
-
[`src/room/prompts/`](src/room/prompts/)
|
|
450
|
-
|
|
465
|
+
[`src/room/prompts/`](src/room/prompts/), organised by who reads it: one shared authority body
|
|
466
|
+
for every role, shared room-seat identity evidence for Supervisor and Lead, the shared challenge
|
|
467
|
+
vocabulary for Lead and Peer, and exactly one body per role. TypeScript selects those layers with
|
|
468
|
+
`instructionKeys()`; it does not duplicate their prose. In short:
|
|
451
469
|
|
|
452
470
|
- **Supervisor** routes Human directives to Lead and observes. Before opening a seat it checks
|
|
453
471
|
for and reuses the project's existing Lead, including an idle or resumable Lead. It observes
|
|
@@ -457,8 +475,9 @@ The exact model-facing wording every seat reads lives in the canonical Markdown
|
|
|
457
475
|
- **Lead** is the durable owner of one project across turns. It owns framing, decomposition,
|
|
458
476
|
routing, integration and technical acceptance. A brief states the outcome and the evidence
|
|
459
477
|
that settles it rather than pre-solving the work; any plan or file list in it is provisional.
|
|
460
|
-
One moving write scope has exactly one owner, and at most one Peer is writable at a time.
|
|
461
|
-
|
|
478
|
+
One moving write scope has exactly one owner, and at most one Peer is writable at a time. It
|
|
479
|
+
explicitly requests native Paseo completion/error/permission notification for Peer creation and
|
|
480
|
+
every background follow-up, then waits for events rather than polling. Room tools: on.
|
|
462
481
|
- **Peer** owns one bounded assignment — writable inside an assigned scope, or read-only
|
|
463
482
|
against a named candidate, question or area — under exactly one disposition Lead names in the
|
|
464
483
|
brief (Engineer, Architect, Reviewer or Scout), forms its own technical position from the code
|
|
@@ -485,24 +504,57 @@ Two further limits are deliberately conservative. **One writable Peer per projec
|
|
|
485
504
|
per moving scope: the room gives you no writer isolation, so separate scopes are not evidence
|
|
486
505
|
of separate working trees, and no workspace protocol relaxes the limit. Concurrent writable
|
|
487
506
|
Peers in isolated worktrees are a deferred decision, not an oversight. And a seat's **model and
|
|
488
|
-
reasoning effort are not one knob**: the model stays the profile's default unless
|
|
489
|
-
|
|
507
|
+
reasoning effort are not one knob**: the model stays the profile's default unless a repository
|
|
508
|
+
protocol explicitly supplies model routing, while the thinking effort is Lead's
|
|
490
509
|
per-brief choice on task risk, uncertainty, context size and verification burden — lowest that
|
|
491
510
|
reliably answers the task, higher for architecture-sensitive or weakly observable work, only an
|
|
492
511
|
option the live Paseo and provider context establishes as supported, and never up to a tier
|
|
493
512
|
advertising automatic delegation. Provider, mode, workspace, parent and feature values are
|
|
494
513
|
eligibility evidence and copied exactly.
|
|
495
514
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
515
|
+
The room ships **no default workspace protocol**. A repository's root `WORKSPACE_PROTOCOL.md`
|
|
516
|
+
is optional, and when it exists it is that repository's complete workflow policy — there is no
|
|
517
|
+
hidden room document behind it to reconcile point by point, and no unstated rule survives where
|
|
518
|
+
it is silent. It stays subordinate to the authority floor: repository workflow directs how work
|
|
519
|
+
is done and can never enlarge or weaken role authority. The file lives at the repository root
|
|
520
|
+
because it is agent guidance rather than project documentation. The CLI never writes into a
|
|
521
|
+
repository.
|
|
522
|
+
|
|
523
|
+
Reading it goes to **Lead alone**, the only standing reader of workflow policy: Lead resolves
|
|
524
|
+
the repository root, reads the file in full when the repository ships one, and quotes what bears
|
|
525
|
+
on an assignment into the brief, including the exact verification command. Supervisor reads a
|
|
526
|
+
repository's protocol only under an explicit Human audit, update or maintenance mandate;
|
|
527
|
+
ordinary routing and observation need none of it, and it may propose a change with causal
|
|
528
|
+
evidence but never impose one. Peer is never told the filename at all, so it spends its attention
|
|
529
|
+
on one brief rather than on deciding which repository rules apply — what it needs unconditionally
|
|
530
|
+
is in its own contract, including the floor that no repository or workspace instruction can
|
|
531
|
+
enlarge or weaken its authority, with conflicts routed to Lead.
|
|
532
|
+
|
|
533
|
+
Lead's own contract carries a short, visible **operating baseline**, not another workspace
|
|
534
|
+
policy: compact Engineer/Architect/Reviewer/Scout assignment vocabulary; exact profile model and
|
|
535
|
+
thinking defaults absent explicit repository routing; the obligation to name and run the
|
|
536
|
+
repository's own verification gate; and fresh read-only review when Human or a repository
|
|
537
|
+
protocol requires it, or when Lead sees material technical risk. These stated contract rules
|
|
538
|
+
remain visible when a repository protocol is silent; no generic topology matrix, anti-pattern
|
|
539
|
+
catalog, or protocol-evolution policy survives in any prompt.
|
|
540
|
+
|
|
541
|
+
To write a protocol, Lead has one room-owned **Agent Skill**, `paseo-project-onboarding`,
|
|
542
|
+
delivered to Lead's `skills` directory from `~/.paseo-room/room/skills/` and to no other seat.
|
|
543
|
+
It inspects what the repository actually contains — agent instructions, README/CONTRIBUTING,
|
|
544
|
+
build manifests and scripts, CI, test configuration, architecture and operations docs — and
|
|
545
|
+
returns an evidence map, one standalone complete draft, and the decisions Human still owns,
|
|
546
|
+
separating observed facts from proposals rather than guessing. It is proposal-first: it writes
|
|
547
|
+
nothing by default, and writes the repository's root `WORKSPACE_PROTOCOL.md` only under an
|
|
548
|
+
explicit Human instruction to apply the draft, refusing any non-regular shape at that path and
|
|
549
|
+
leaving unrelated work alone. It cannot change authority, tool policy, the writer limit,
|
|
550
|
+
provider identity or credentials, and cannot make Peer a protocol reader. Its bundled template
|
|
551
|
+
is a scaffold loaded while the skill runs, never appended to a session.
|
|
552
|
+
|
|
553
|
+
Lead's visible skill inventory is therefore an exact room-owned aggregate behind the role-home
|
|
554
|
+
symlink: one link per skill in your own agent home, plus a link to the room's skill. Your own home
|
|
555
|
+
is never modified, and an operator skill whose name matches `paseo-project-onboarding` under a
|
|
556
|
+
case-insensitive comparison is left exactly where it is — the room-owned copy owns that name
|
|
557
|
+
inside the aggregate only.
|
|
506
558
|
|
|
507
559
|
## Working the room
|
|
508
560
|
|
|
@@ -541,9 +593,9 @@ that review; Supervisor must route the request to Lead rather than opening a fre
|
|
|
541
593
|
|
|
542
594
|
## Documentation
|
|
543
595
|
|
|
544
|
-
- [docs/orchestration-
|
|
545
|
-
tool implements: roles, authority, instruction layers, invariants,
|
|
546
|
-
operating checklists. Tool-agnostic; useful on its own.
|
|
596
|
+
- [docs/demonthorn-agent-orchestration-deep-dive.md](docs/demonthorn-agent-orchestration-deep-dive.md)
|
|
597
|
+
— the reference model this tool implements: roles, authority, instruction layers, invariants,
|
|
598
|
+
anti-patterns and operating checklists. Tool-agnostic; useful on its own.
|
|
547
599
|
- [docs/design.md](docs/design.md) — how and why this tool implements that model, and what
|
|
548
600
|
it deliberately does not do. Read this before changing an override.
|
|
549
601
|
- [AGENTS.md](AGENTS.md) — working rules for contributors and coding agents.
|