paseo-room 0.17.0 → 0.19.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
@@ -54,7 +54,7 @@ interactive stdin/stdout/stderr, and targets exactly one selected agent and role
54
54
  | `--room-home <path>` | `~/.paseo-room` | Where role homes are written. |
55
55
  | `--codex-home <path>` | `~/.codex` | Source Codex configuration. |
56
56
  | `--claude-home <path>` | `~/.claude` | Source Claude Code configuration. |
57
- | `--pi-home <path>` | `~/.pi/agent` | Source Pi configuration and global adapter package. |
57
+ | `--pi-home <path>` | `~/.pi/agent` | Source Pi configuration and the packages `--pi-extension` selects. |
58
58
  | `--codex-bin`, `--claude-bin`, `--pi-bin`, `--paseo-bin` | found on `PATH` | Executable overrides. |
59
59
 
60
60
  Environment equivalents: `PASEO_ROOM_HOME`, `CODEX_HOME`, `CLAUDE_CONFIG_DIR`, `PASEO_HOME`,
@@ -71,7 +71,9 @@ starts, its exit code is preserved; a signal is returned using the conventional
71
71
 
72
72
  - Node 22 or newer, macOS or Linux.
73
73
  - A running Paseo daemon with CLI and daemon on the same version. Codex requires
74
- **0.8.0-beta.1 or newer**; any selection containing Claude or Pi requires **0.8.0 or newer**.
74
+ **0.8.0-beta.1 or newer**; any selection containing Claude requires **0.8.0 or newer**, and
75
+ any selection containing Pi **0.11.1 or newer**, the first Paseo that hands a Pi seat its tools
76
+ through Pi's built-in MCP extension.
75
77
  Claude also requires Paseo plugins to be enabled explicitly: the generated trusted server plugin
76
78
  is the strong contract carrier, and `paseo-room` never enables plugins for you. The plugin
77
79
  requires Paseo `>=0.8.0` and has no upper bound. `paseo-room` checks compatibility before
@@ -84,9 +86,9 @@ starts, its exit code is preserved; a signal is returned using the conventional
84
86
  pins both `CLAUDE_CONFIG_DIR` and `CLAUDE_SECURESTORAGE_CONFIG_DIR` per role. It does not
85
87
  query Keychain state, and reports older-runtime Keychain isolation as unverifiable. See
86
88
  Anthropic's [credential-management reference](https://code.claude.com/docs/en/authentication#credential-management).
87
- - An initialised Pi home (`~/.pi/agent`) and an operator-installed global
88
- `pi-mcp-adapter` package under its `npm/node_modules`. The package version is diagnostic,
89
- not a compatibility constraint. The room never installs or upgrades Pi or the adapter.
89
+ - An initialised Pi home (`~/.pi/agent`) and Pi 1.1.0 or newer. Seats use Pi's built-in `mcp`
90
+ and `codemode` extensions; `pi-mcp-adapter` is not needed, and the room never loads it. The
91
+ room never installs or upgrades Pi.
90
92
 
91
93
  ## What gets created
92
94
 
@@ -172,10 +174,9 @@ configuration.
172
174
  Pi role homes deliberately do not link `extensions`, `npm`, `git`, `trust.json`, runtime
173
175
  caches or session state. Their copied `settings.json` removes `packages` and `extensions`,
174
176
  so startup cannot install configured packages or discover unrelated configured extensions.
175
- The intended adapter remains in the operator's Pi package store and is loaded by canonical
176
- path. Every Pi provider pins `PI_MCP_CONFIG_MODE=exclusive`, making the role home's linked
177
- `mcp.json` the adapter's only configuration source and excluding generic global and project
178
- MCP config discovery.
177
+ Pi's built-in MCP extension reads only the role home's linked `mcp.json` and, for a trusted
178
+ project, its `.pi/mcp.json`; seats run with `--no-approve`, so no project is trusted and the
179
+ role home's file is the only configuration source besides the servers Paseo registers.
179
180
 
180
181
  ### Role authentication diagnostics
181
182
 
@@ -215,7 +216,7 @@ a minimal interactive login session in that role's home, isolated from the calle
215
216
  `--no-extensions --no-approve --append-system-prompt ''` and visibly asks you to run `/login`.
216
217
  The explicit empty append override suppresses discovery of the generated role
217
218
  `APPEND_SYSTEM.md`, including its runtime capsule and role instructions. This direct launch
218
- does not load `pi-mcp-adapter`, Paseo's integration extension, or the room-equivalent provider
219
+ does not load Pi's MCP extension, Paseo's integration extension, or the room-equivalent provider
219
220
  argv. No login path reads, copies, links, replaces, validates, or deletes a credential store.
220
221
 
221
222
  Codex diagnostics recognize an explicit `cli_auth_credentials_store` of `file`, `ephemeral`,
@@ -285,21 +286,40 @@ but what the model actually reads is not proven, and `CLAUDE.md` is what covers
285
286
  Pi providers use a strict command tail:
286
287
 
287
288
  ```text
288
- --no-extensions --extension <canonical pi-mcp-adapter entry> --no-approve
289
+ --no-extensions --extension builtin:mcp --extension builtin:codemode
290
+ [--extension <canonical entry of each selected package>] --no-approve
289
291
  --append-system-prompt <role APPEND_SYSTEM.md>
290
292
  ```
291
293
 
294
+ Each Pi provider also pins `PASEO_ROOM_ROLE=<role>`, so an extension can tell it runs as a
295
+ seat. To load more of your own installed Pi packages in the seats, select them at setup:
296
+
297
+ ```bash
298
+ paseo-room setup --agent pi --pi-extension pi-blackbytes --pi-extension pi-provider-kiro=supervisor,lead,peer --apply
299
+ ```
300
+
301
+ Roles default to `supervisor,lead`; Peer gets an extension only when named, with a warning.
302
+ Packages load only from your Pi home's `npm/node_modules`, and every declared entry must
303
+ resolve inside the package; package prompts, skills and themes are not loaded. A package that is not
304
+ installed is a warning with its `pi install npm:<package>` command and the seat starts without
305
+ it; the room never installs one. Selecting a package states that it opens no second
306
+ multi-agent path in a seat (`pi-blackbytes` 3.1.0 turns its sub-agents off when
307
+ `PASEO_ROOM_ROLE` is set). The choice is recorded in `room.json`; a later `setup` without the
308
+ flag removes the extensions and warns which ones. See
309
+ [docs/design/pi-seat-extensions.md](docs/design/pi-seat-extensions.md).
310
+
292
311
  This is Paseo's core `pi` provider, not an OMP provider or compatibility layer.
293
312
  Paseo appends and owns its own generated temporary integration extension; `paseo-room` does
294
- not resolve, create or include it. Before planning any writes, the room validates the exact
295
- global package identity and canonical entry containment, then runs one bounded offline Pi RPC
296
- `get_commands` probe with `PI_CODING_AGENT_DIR=/dev/null`,
297
- `PI_MCP_CONFIG_MODE=exclusive`, and `HOME` set to a fresh temporary working directory that is
298
- removed afterwards. This prevents adapter startup from selecting operator-global or caller
299
- project MCP configs during the probe. The correlated response must
300
- attribute `/mcp` to `source: "extension"` at that same canonical path. Missing, malformed,
301
- path-escaped or wrongly attributed adapters fail closed. The probe and setup do not write the
302
- operator or planned role homes.
313
+ not resolve, create or include it. Paseo registers the seat's MCP servers through that extension
314
+ with `pi.registerMcpServer`, but only after it finds a `/mcp` command from `builtin:mcp`. Their
315
+ tools default to `codemode` exposure, which is why `builtin:codemode` loads too: without it a
316
+ seat would hold Paseo's tools and have no way to call them. Before planning any writes, the room
317
+ runs one bounded offline Pi RPC `get_commands` probe that loads the same built-in extensions and
318
+ every selected extension, with `PASEO_ROOM_ROLE=lead`, `HOME` set to a fresh temporary working
319
+ directory that is removed afterwards, and `PI_CODING_AGENT_DIR` an empty directory inside it, so
320
+ no operator or caller-project MCP configuration is read. The correlated response must attribute
321
+ exactly one `/mcp` to `source: "extension"` at `builtin:mcp`; anything else fails closed. The
322
+ probe and setup do not write the operator or planned role homes.
303
323
 
304
324
  Each seat combines generated agent configuration with Paseo provider pins. Provider fields are
305
325
  still required where Paseo launch state outranks the agent's own configuration:
@@ -312,7 +332,7 @@ still required where Paseo launch state outranks the agent's own configuration:
312
332
  | `disableWorkflows: true` + `CLAUDE_CODE_DISABLE_WORKFLOWS=1` | Claude | Disables dynamic workflows through every entry point, beyond denying the `Workflow` tool. |
313
333
  | `crossSessionInbound: "refuse"` | Claude | Prevents another Claude session from injecting a turn into a room seat. |
314
334
  | `disableClaudeAiConnectors: true` + `ENABLE_CLAUDEAI_MCP_SERVERS=0` | Claude | Keeps the signed-in account's claude.ai connectors (Canva, Claude Docs, …) out of every seat. They bypass the room's MCP check and reach Peer, and one that needs authorising makes each seat ask you to connect it. Your own Claude Code sessions keep them. |
315
- | strict argv + `PI_MCP_CONFIG_MODE=exclusive` + additive runtime capsule | Pi | Disables extension discovery and project trust, and restricts adapter config to the role-home `mcp.json`; forbids a second agent control plane without claiming sandboxing. |
335
+ | strict argv + additive runtime capsule | Pi | Disables extension discovery and project trust, so Pi's built-in MCP reads only the role-home `mcp.json`; forbids a second agent control plane without claiming sandboxing. |
316
336
  | `paseoTools: {enabled}` | all | Room tools for Supervisor and Lead, never for Peer. |
317
337
 
318
338
  `verify` compares each provider's `command`, `env`, `paseoTools` and pins against what the