paseo-room 0.11.0 → 0.13.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
@@ -311,6 +311,7 @@ still required where Paseo launch state outranks the agent's own configuration:
311
311
  | `disableAgentView: true` + `CLAUDE_CODE_DISABLE_AGENT_VIEW=1` | Claude | Disables Claude's separate background-agent control plane across settings scopes and at launch. |
312
312
  | `disableWorkflows: true` + `CLAUDE_CODE_DISABLE_WORKFLOWS=1` | Claude | Disables dynamic workflows through every entry point, beyond denying the `Workflow` tool. |
313
313
  | `crossSessionInbound: "refuse"` | Claude | Prevents another Claude session from injecting a turn into a room seat. |
314
+ | `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. |
314
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. |
315
316
  | `paseoTools: {enabled}` | all | Room tools for Supervisor and Lead, never for Peer. |
316
317
 
@@ -353,10 +354,11 @@ list is written to both provider `disallowedTools` and every role's `settings.js
353
354
  `permissions.deny`. The role file is minimal, deterministic room policy: it does not copy operator
354
355
  env, hooks, permissions, or auth helpers. The room does not write `permissions.defaultMode`:
355
356
  Paseo passes the profile's mode as a command-line session setting, which outranks that file. The two
356
- Claude disable environment keys are likewise pinned in both the provider and generated
357
- `settings.json`, because Claude applies settings-file environment values after launch values.
358
- The generated top-level `disableAgentView` and `disableWorkflows` settings are also forced to
359
- `true`; their restrictive value cannot be weakened by another ordinary settings scope.
357
+ Claude disable environment keys, `ENABLE_CLAUDEAI_MCP_SERVERS=0` among them, are likewise pinned in
358
+ both the provider and generated `settings.json`, because Claude applies settings-file environment
359
+ values after launch values. The generated top-level `disableAgentView`, `disableWorkflows` and
360
+ `disableClaudeAiConnectors` settings are also forced to `true`; their restrictive value cannot be
361
+ weakened by another ordinary settings scope.
360
362
 
361
363
  No default model is pinned. The profile schema supports `model`, but leaving it absent lets
362
364
  each provider use its current default and avoids silently choosing a cost/capability tier for
@@ -656,6 +658,10 @@ npx paseo-room verify
656
658
  daemon restart, so Claude compacts at that share instead of near the end of a 1M window. An open
657
659
  session keeps what it opened with. Codex and Pi seats show their context and keep their own
658
660
  compaction.
661
+ - A mark applies to a seat only where it comes to at least 150k tokens on its window: at 30%, a
662
+ Lead on a 1M model is reported at 300k, but one on a 272k Codex or Pi model, or a 200k Claude
663
+ model, is not reported and keeps its agent's own compaction. The hints show what each mark comes
664
+ to per window.
659
665
  - **A runtime-dispatched Peer** is titled `<Disposition> · <outcome gist> · <assignment id>` (for
660
666
  example `Reviewer · Review the Docker Compose dev env… · asg_…`), and the runtime's notices to Lead
661
667
  name the assignment the same way. It gets exactly two tools, `ask` and `handoff`, for its own
@@ -715,12 +721,19 @@ learn only when you ask it to check.
715
721
  incident on one beginning `INCIDENT:`. The first wakes the Supervisor and the second pages it,
716
722
  even for a turn it prompted, once per line, and the letter quotes those lines rather than the
717
723
  message's end.
724
+ - A Lead turn that read the Supervisor's `message_lead` answers it. The answer goes to the
725
+ Supervisor as soon as it is idle, with up to 1,500 characters of the Lead's message, even with
726
+ letters off, and no later turn replaces it.
727
+ - A Lead turn that began with the runtime's notices and left a Peer working is progress. It goes
728
+ with the Supervisor's next letter and never wakes it alone; once the loop leaves nothing
729
+ running, its next turn is news again.
718
730
  - Letters are held until the Supervisor is idle, batched into digests, and limited to a few wakes
719
- an hour. They are never sent while the Supervisor holds a permission, because a send would
720
- deny it.
721
- - Each item has an id for `attention_feedback`, and a letter's own id rates every item in it. A
722
- letter is evidence, not an instruction: the Supervisor contract has it ask or nudge the Lead, or
723
- relay a question to you, and never direct a Peer.
731
+ an hour; a `NEEDS-HUMAN` line and an answer are never held back by that limit. Letters are never
732
+ sent while the Supervisor holds a permission or a question to you, because a send would deny it.
733
+ - Each item has an id for `attention_feedback`, and a letter's own id rates every item in it. The
734
+ Supervisor rates only noise; an item it leaves unrated counts as useful. A letter is evidence,
735
+ not an instruction: the Supervisor contract has it ask or nudge the Lead, or relay a question to
736
+ you, and never direct a Peer.
724
737
  - **Starting seats.** From the **Room** view, **New Supervisor** opens one in an existing directory
725
738
  outside every repository. **Add repository** checks a repository, opens its Lead under the
726
739
  Supervisor you pick, and sends a fixed kickoff with your first directive verbatim; it also offers
@@ -749,10 +762,10 @@ learn only when you ask it to check.
749
762
  Lead is not running, when Paseo would take none.
750
763
  - **The Supervisor may do the same**, but only for a Lead of its own project that is past its
751
764
  rotation mark, through the runtime's `lead_replace_*` tools. The runtime refuses a Lead below
752
- the mark and applies the same quiet-point checks. The Supervisor reviews the handoff against the
753
- repository, confirms it, and tells you which Lead now owns the project. The panel shows a
754
- replacement the Supervisor started, and you may cancel it until it completes. Any other reason to
755
- replace a Lead stays yours.
765
+ the mark, or on a window where the mark does not apply, and applies the same quiet-point
766
+ checks. The Supervisor reviews the handoff against the repository, confirms it, and tells you
767
+ which Lead now owns the project. The panel shows a replacement the Supervisor started, and you
768
+ may cancel it until it completes. Any other reason to replace a Lead stays yours.
756
769
  - **Settings › Room attention.** Here you turn letters on or off, see what reached Supervisors in
757
770
  the last 24 hours (letters by level, incidents, Lead turns by what was decided, and the ratings you
758
771
  or a Supervisor gave), change when a Supervisor is told and how often, and configure the optional
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ var init_package = __esm({
15
15
  "package.json"() {
16
16
  package_default = {
17
17
  name: "paseo-room",
18
- version: "0.11.0",
18
+ version: "0.13.0",
19
19
  description: "One CLI that configures Codex, Claude Code, and Pi role homes in $HOME and registers them with your local Paseo daemon.",
20
20
  keywords: [
21
21
  "paseo",
@@ -1186,7 +1186,7 @@ function renderRoleSettings(role, secureStorageDir) {
1186
1186
  const settings = {
1187
1187
  // Claude applies settings.env after the launch environment, so repeat provider closures here.
1188
1188
  env: {
1189
- ...CONTROL_PLANE_ENV,
1189
+ ...LAUNCH_ENV,
1190
1190
  PASEO_ROOM_ROLE: role,
1191
1191
  ...secureStorageDir === void 0 ? {} : { [SECURE_STORAGE_ENV]: secureStorageDir }
1192
1192
  },
@@ -1195,6 +1195,7 @@ function renderRoleSettings(role, secureStorageDir) {
1195
1195
  // These restrictive settings cannot be weakened by another settings scope.
1196
1196
  disableAgentView: true,
1197
1197
  disableWorkflows: true,
1198
+ disableClaudeAiConnectors: true,
1198
1199
  crossSessionInbound: "refuse"
1199
1200
  };
1200
1201
  return JSON.stringify(settings, null, 2) + "\n";
@@ -1252,7 +1253,7 @@ function mcpDriftCheck(role, home, path, divergence) {
1252
1253
  `If this role should have the same servers, add them with: CLAUDE_CONFIG_DIR=${home} claude mcp add ... \u2014 or delete ${path} and run setup --apply to reseed it from your current Claude state, which discards that role's other runtime state.`
1253
1254
  );
1254
1255
  }
1255
- var SHARED, EXECUTABLE, RUNTIME_SKILLS, MCP_KEY, AUTH_ENV, CONTROL_PLANE_ENV, DISALLOWED_TOOLS, SECURE_STORAGE_ENV, SEEDED_KEYS, claudeAgent;
1256
+ var SHARED, EXECUTABLE, RUNTIME_SKILLS, MCP_KEY, AUTH_ENV, CONTROL_PLANE_ENV, CONNECTOR_ENV, LAUNCH_ENV, DISALLOWED_TOOLS, SECURE_STORAGE_ENV, SEEDED_KEYS, claudeAgent;
1256
1257
  var init_claude = __esm({
1257
1258
  "src/agents/claude.ts"() {
1258
1259
  "use strict";
@@ -1290,6 +1291,8 @@ var init_claude = __esm({
1290
1291
  CLAUDE_CODE_DISABLE_AGENT_VIEW: "1",
1291
1292
  CLAUDE_CODE_DISABLE_WORKFLOWS: "1"
1292
1293
  };
1294
+ CONNECTOR_ENV = { ENABLE_CLAUDEAI_MCP_SERVERS: "0" };
1295
+ LAUNCH_ENV = { ...CONTROL_PLANE_ENV, ...CONNECTOR_ENV };
1293
1296
  DISALLOWED_TOOLS = [
1294
1297
  "Task",
1295
1298
  "Agent",
@@ -1312,8 +1315,9 @@ var init_claude = __esm({
1312
1315
  id: "claude",
1313
1316
  label: "Claude Code",
1314
1317
  homeEnv: "CLAUDE_CONFIG_DIR",
1315
- // Agent View and dynamic workflows have entry points beyond model tool calls.
1316
- providerEnv: CONTROL_PLANE_ENV,
1318
+ // Agent View and dynamic workflows have entry points beyond model tool calls, and claude.ai
1319
+ // connectors arrive with the account rather than from any declaration the room inspects.
1320
+ providerEnv: LAUNCH_ENV,
1317
1321
  defaultModeId: "bypassPermissions",
1318
1322
  // Keep the legacy Task name and block current native orchestration,
1319
1323
  // shared task/cron coordination, and cross-session paths. Paseo alone owns