paseo-room 0.1.0 → 0.3.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 CHANGED
@@ -64,9 +64,12 @@ starts, its exit code is preserved; a signal is returned using the conventional
64
64
  ## Requirements
65
65
 
66
66
  - Node 22 or newer, macOS or Linux.
67
- - A running Paseo daemon with CLI and daemon on the same version. Codex and Claude require
68
- **0.8.0-beta.1 or newer**; any selection containing Pi requires **0.8.0 or newer**.
69
- `paseo-room` checks this before touching anything, and never installs or upgrades Paseo.
67
+ - A running Paseo daemon with CLI and daemon on the same version. Codex requires
68
+ **0.8.0-beta.1 or newer**; any selection containing Claude or Pi requires **0.8.0 or newer**.
69
+ Claude also requires Paseo plugins to be enabled explicitly: the generated trusted server plugin
70
+ is the strong contract carrier, and `paseo-room` never enables plugins for you. The plugin is
71
+ version-bounded to `>=0.8.0 <0.9.0`. `paseo-room` checks compatibility before touching anything,
72
+ and never installs or upgrades Paseo.
70
73
  - An initialised Codex home (`~/.codex/config.toml`) and/or Claude Code home (`~/.claude`).
71
74
  Codex must be new enough for `codex debug models` to print its JSON model catalog: the room
72
75
  seats Codex only if it can generate the scrubbed catalog copy.
@@ -85,7 +88,10 @@ starts, its exit code is preserved; a signal is returned using the conventional
85
88
  ~/.paseo-room/
86
89
  room.json # what this CLI created; verify and remove read it
87
90
  AUTHENTICATION.md # exact per-role login commands; contains no secrets
88
- room/WORKSPACE_PROTOCOL.md # the default protocol every seat carries, as one readable file
91
+ room/WORKSPACE_PROTOCOL.md # the default protocol Lead and Supervisor carry, as one readable file
92
+ plugin/ # Claude only: trusted creation-time system-prompt append carrier
93
+ paseo-plugin.json # accepts Paseo >=0.8.0 <0.9.0
94
+ index.server.ts, server/ # exact provider map + generated role contracts
89
95
  roles/codex/<role>/
90
96
  config.toml # your config.toml + the room's overrides
91
97
  role-instructions.md # readable copy of what this seat was told
@@ -237,18 +243,20 @@ holding older contract text.
237
243
 
238
244
  **The room never replaces an agent's base prompt.** Codex's `model_instructions_file`,
239
245
  Claude's `--system-prompt` and Pi's `SYSTEM.md` / `--system-prompt` all *replace* the vendor
240
- system prompt; using them would mean
241
- vendoring a full copy of that prompt and re-vendoring it on every agent release. The role
242
- contract is additive instead: `developer_instructions` for Codex, `CLAUDE.md` for Claude,
243
- and the generated Pi `APPEND_SYSTEM.md` passed with `--append-system-prompt` for Pi. Pi keeps
244
- normal project `AGENTS.md` / `CLAUDE.md` context loading.
245
-
246
- Claude's carrier is the weakest of the three, and knowingly so. `CLAUDE.md` is user memory,
247
- which a project-level `CLAUDE.md` can dilute, and Paseo runs Claude through the Claude Agent
248
- SDK rather than as a plain CLI process — so there is no provider-owned command line to append
249
- a stronger prompt through, and no CLI flag is proposed here. The real fix is a
250
- provider-owned SDK append field in Paseo itself. Until that exists, the room keeps the
251
- contract short and states the limit instead of implying parity with Codex.
246
+ system prompt; using them would mean vendoring a full copy of that prompt and re-vendoring it
247
+ on every agent release. The role contract is additive instead: `developer_instructions` for
248
+ Codex, a room-owned Paseo creation hook that writes `config.systemPrompt` for Claude, and the
249
+ generated Pi `APPEND_SYSTEM.md` passed with `--append-system-prompt` for Pi. Pi keeps normal
250
+ project `AGENTS.md` / `CLAUDE.md` context loading.
251
+
252
+ For Claude, Paseo maps `config.systemPrompt` to the Claude Code preset's SDK `append` field,
253
+ so the native prompt remains intact while the generated role contract enters the instruction
254
+ layer. The trusted plugin targets only exact `claude-supervisor`, `claude-lead`, and
255
+ `claude-peer` room providers and skips internal agents; existing caller prompt text is
256
+ preserved. `CLAUDE.md` remains unchanged as a degraded and resume fallback. `verify` fails if
257
+ the plugin is absent, disabled, failed, registered from another path, or drifted, because a
258
+ silently missing carrier is not a guarantee. The hook runs for newly created sessions;
259
+ recreate an existing Claude session after setup or an update.
252
260
 
253
261
  Pi providers use a strict command tail:
254
262
 
@@ -340,7 +348,8 @@ Supervisor reads the exact current `room-<agent>-lead` profile from `list_profil
340
348
  materializes every field it defines (agent creation takes no profile id), uses `list_agents(cwd)`
341
349
  only to find candidates, then inspects each one's full status for the profile's provider, the
342
350
  intended workspace and its mode. For `room-<agent>-peer`, Lead copies provider, mode and
343
- features exactly, treats model and thinking as protocol-governed defaults, and additionally
351
+ features exactly, keeps the profile's model unless the root workspace protocol routes models,
352
+ chooses the thinking effort for the brief, and additionally
344
353
  requires the live seat's daemon-added `paseo.parent-agent-id` to name itself. Ownership must be
345
354
  corroborated by parentage or known Human-opened history; an ambiguous candidate goes to
346
355
  duplicate recovery and Human escalation instead of being adopted.
@@ -441,10 +450,12 @@ The exact model-facing wording every seat reads lives in the canonical Markdown
441
450
  that settles it rather than pre-solving the work; any plan or file list in it is provisional.
442
451
  One moving write scope has exactly one owner, and at most one Peer is writable at a time.
443
452
  Room tools: on.
444
- - **Peer** owns one bounded outcome, forms its own technical position from the code and its own
445
- verification, may challenge a failed premise with
446
- `REOPEN_REQUEST` / `DEPENDENCY_REQUEST` / `BLOCKED`, hands back a reproducible candidate,
447
- and never accepts its own difficult change. Room tools: off.
453
+ - **Peer** owns one bounded assignment — writable inside an assigned scope, or read-only
454
+ against a named candidate, question or area — under exactly one disposition Lead names in the
455
+ brief (Engineer, Architect, Reviewer or Scout), forms its own technical position from the code
456
+ and its own verification, may challenge a failed premise with
457
+ `REOPEN_REQUEST` / `DEPENDENCY_REQUEST` / `BLOCKED`, hands back reproducible evidence either
458
+ way, and never accepts its own difficult change. Room tools: off.
448
459
 
449
460
  Human keeps product goals, priority, material cost, external effects and irreversible risk.
450
461
 
@@ -465,18 +476,24 @@ Two further limits are deliberately conservative. **One writable Peer per projec
465
476
  per moving scope: the room gives you no writer isolation, so separate scopes are not evidence
466
477
  of separate working trees, and no workspace protocol relaxes the limit. Concurrent writable
467
478
  Peers in isolated worktrees are a deferred decision, not an oversight. And a seat's **model and
468
- reasoning effort are defaults**: Lead varies them for a brief only where the repository's
469
- workspace protocol supplies an explicit task-risk policy, and never up to a tier advertising
470
- automatic delegation. Provider, mode, workspace, parent and feature values are eligibility
471
- evidence and copied exactly.
472
-
473
- Every seat also carries a **default workspace protocol** — topology by difficulty,
474
- verification, review, repository conventions — so a project has that layer without doing
475
- anything. Each seat gets the sections that bear on its own work; topology goes to Lead and
476
- Supervisor, not to Peer. A repository that needs different rules writes
477
- `docs/WORKSPACE_PROTOCOL.md`, which wins wherever it speaks while the default holds
478
- wherever it is silent. `~/.paseo-room/room/WORKSPACE_PROTOCOL.md` is the whole default as
479
- one file, so you can read what is in force and start from it.
479
+ reasoning effort are not one knob**: the model stays the profile's default unless the root
480
+ `WORKSPACE_PROTOCOL.md` explicitly supplies model routing, while the thinking effort is Lead's
481
+ per-brief choice on task risk, uncertainty, context size and verification burden — lowest that
482
+ reliably answers the task, higher for architecture-sensitive or weakly observable work, only an
483
+ option the live Paseo and provider context establishes as supported, and never up to a tier
484
+ advertising automatic delegation. Provider, mode, workspace, parent and feature values are
485
+ eligibility evidence and copied exactly.
486
+
487
+ Every seat that owns workflow also carries a **default workspace protocol** — topology by
488
+ difficulty, verification, review, repository conventions — so a project has that layer without
489
+ doing anything. It goes to Lead and Supervisor, not to Peer: Lead reads the protocol and quotes
490
+ what bears on an assignment into the brief, including the exact verification command, so a Peer
491
+ spends its attention on one brief rather than on deciding which repository rules apply. A
492
+ repository that needs different rules writes `WORKSPACE_PROTOCOL.md` at its root, which wins
493
+ wherever it speaks while the default holds wherever it is silent — the root, because it is
494
+ agent guidance rather than project documentation. `~/.paseo-room/room/WORKSPACE_PROTOCOL.md` is
495
+ the whole default as one file, so you can read what is in force and start from it. The CLI
496
+ never writes into a repository.
480
497
 
481
498
  ## Working the room
482
499