Skip to content

Commit 780561c

Browse files
committed
docs(persona): separate MCP authoring from launch
Signed-off-by: KC <[email protected]>
1 parent 19d9f7b commit 780561c

1 file changed

Lines changed: 21 additions & 16 deletions

File tree

‎crates/buzz-persona/PERSONA_PACK_SPEC.md‎

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,14 @@ enforce required metadata fields (see PF-5).
426426
## 7. MCP Server Configuration
427427

428428
MCP servers provide external tool access (GitHub, Semgrep, databases, etc.). Configuration is
429-
defined at two levels: pack-level (shared across all agents) and per-persona (agent-specific).
430-
buzz-acp merges them and passes the result via the ACP protocol — no filesystem placement required.
429+
defined at two authoring levels: pack-level (shared across all agents) and per-persona
430+
(agent-specific). `buzz-persona` currently parses and merges these declarations, but
431+
`buzz-acp` does not yet consume the resolved persona MCP list. Persona MCP declarations
432+
therefore do not reach a running session in the current implementation.
431433

432-
> **Transport Warning**: Only `stdio` and `streamable_http` transports are supported. SSE transport
433-
> is rejected by the ACP runtime with the error `"SSE is unsupported, migrate to streamable_http"` and
434-
> will cause session startup to fail. Migrate any SSE-based MCP servers to streamable_http before
435-
> packaging.
434+
The runtime launch boundary is a separate, versioned MCP launch document. A future
435+
resolver must convert approved persona or template requirements and Project Connections
436+
into that document. Version 1 of the launch document supports stdio only.
436437

437438
### Pack-Level: `.mcp.json`
438439

@@ -469,21 +470,25 @@ mcp_servers:
469470
470471
1. Pack-level servers are the base set; per-persona servers merged on top.
471472
2. **Name collision**: per-persona entry wins entirely (no partial merge).
472-
3. The merged set is passed to the agent runtime via `NewSessionRequest.mcp_servers`.
473+
3. The merged set remains authoring output until an explicit launch resolver converts it
474+
into the runtime MCP launch document.
473475
474476
### Environment Variable Interpolation
475477
476478
> **Implementation note**: MCP env var interpolation (`${VAR_NAME}` resolution) is planned but not
477-
> yet implemented. In the current release, `${VAR_NAME}` strings are passed through as literals
478-
> to the agent runtime, which may resolve them via its own MCP server configuration handling.
479+
> yet implemented. In the current release, persona MCP declarations remain authoring data and
480+
> do not reach the agent runtime.
479481

480482
When implemented, all `env` values will be scanned for `${VAR_NAME}`. buzz-acp will resolve
481483
from the process environment **before** passing to the agent runtime. Unresolved variables will
482484
cause a startup error.
483485

484486
### Delivery
485487

486-
buzz-acp passes the merged config via `NewSessionRequest.mcp_servers`. **No `.mcp.json` is written to the agent's working directory.**
488+
Persona MCP delivery is not wired yet. The launch resolver must validate and bind the
489+
authoring declarations before `buzz-acp` passes the resulting servers through
490+
`NewSessionRequest.mcp_servers`. No `.mcp.json` should be written into the agent's
491+
working directory.
487492

488493
---
489494

@@ -935,7 +940,7 @@ How each pack component reaches the running agent:
935940
| Component | Delivery Method | Mechanism | Filesystem Write? |
936941
|-----------|----------------|-----------|-------------------|
937942
| Skills | Copy at deploy time (planned) | buzz-acp will copy `skills/` → `$AGENT_CWD/.agents/skills/` | ✅ Yes (only one) |
938-
| MCP servers | ACP protocol | `NewSessionRequest.mcp_servers` | ❌ No |
943+
| MCP servers | Not wired | Parsed by `buzz-persona`; requires an explicit resolver into the MCP launch document | ❌ No |
939944
| Persona prompt | User message prefix | `[System]` block prepended to user message text by buzz-acp | ❌ No |
940945
| Pack instructions | User message prefix | Appended to `[System]` block in user message text | ❌ No |
941946
| Lifecycle hooks | Harness internal | buzz-acp fires shell commands directly | ❌ No |
@@ -987,7 +992,7 @@ The `[System]` prefix re-sends the full persona prompt on every turn. True syste
987992
| `rules/*.mdc` files | Agent runtimes typically don't read `.mdc` files |
988993
| `skills/` at pack root (without copying) | Agent runtimes scan `.agents/skills/`, not `skills/` |
989994
| Hooks in goose config | Agent runtimes have no hook system; hooks are a harness feature |
990-
| SSE transport in `.mcp.json` | ACP runtime rejects SSE; use stdio or streamable_http |
995+
| Assuming `.mcp.json` is live runtime configuration | Persona MCP declarations are parsed but are not yet connected to the ACP launch path |
991996
| SKILL.md without `name:` or `description:` | Skill silently skipped; no fallback |
992997
| Setting `GOOSE_MODEL` on parent process (multi-persona) | Affects all agents; use per-subprocess injection via `extra_env` |
993998
| Expecting `defaults` sub-key inheritance | No deep merge; object/array fields replaced entirely |
@@ -999,10 +1004,10 @@ The `[System]` prefix re-sends the full persona prompt on every turn. True syste
9991004
### Secret Management
10001005

10011006
Never embed secrets in pack files. Use `${VAR_NAME}` references in all `env` blocks. Currently,
1002-
`${VAR_NAME}` strings are passed through as literals to the agent runtime (see Section 7). When
1003-
harness-side interpolation is implemented, buzz-acp will resolve them from the process
1004-
environment at startup and refuse to start if any are unresolved. Inject secrets via your
1005-
deployment mechanism (systemd env files, Vault, Kubernetes secrets, etc.).
1007+
persona MCP declarations are not delivered to the agent runtime (see Section 7). When an
1008+
approved launch resolver and harness-side interpolation are implemented, unresolved references
1009+
must fail startup rather than becoming literal credentials. Inject secrets through the
1010+
target-local deployment mechanism rather than embedding them in the pack.
10061011

10071012
### Pack Integrity
10081013

0 commit comments

Comments
 (0)