Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
cc0b0cc
feat(projects): introduce multi-repository project model
thomaspblock Jul 24, 2026
efd2b36
feat(projects): enable multi-repository project navigation
thomaspblock Jul 24, 2026
eef840f
feat(projects): create projects with initial repositories
thomaspblock Jul 24, 2026
fc30af2
Merge origin/main into feat/multi-repository-projects
thomaspblock Jul 24, 2026
dfec053
feat(projects): add multi-repository management
thomaspblock Jul 25, 2026
4ca6657
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Jul 25, 2026
07db523
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Jul 27, 2026
30b5b71
fix(desktop): preserve Inbox actions for multi-repository projects
thomaspblock Jul 27, 2026
1ff331d
Merge origin/main into feat/multi-repository-projects
thomaspblock Jul 30, 2026
0a6864a
feat(desktop): show PR author identity rollover
thomaspblock Jul 31, 2026
2a63e4f
feat(desktop): clarify repository hosting and availability
thomaspblock Jul 29, 2026
1be45fb
fix(desktop): preserve multi-repository project context
thomaspblock Jul 31, 2026
39d9e3b
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Jul 31, 2026
3c786a6
fix(desktop): remove stale Vite type suppression
thomaspblock Jul 31, 2026
31394d0
fix(mobile): align iOS scheme app name
thomaspblock Jul 31, 2026
d52f247
feat(desktop): match issue author identity rollover
thomaspblock Jul 31, 2026
beb5097
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Jul 31, 2026
51c05a8
Merge origin/main into feat/multi-repository-projects
thomaspblock Aug 2, 2026
b3705ed
feat(desktop): add issue comment timeline
thomaspblock Aug 2, 2026
53b4fec
Merge origin/main into feat/multi-repository-projects
thomaspblock Aug 2, 2026
0099eaa
fix(projects): align desktop grouping with NIP-MP
thomaspblock Aug 3, 2026
026bf58
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Aug 3, 2026
d6ebe4e
feat(projects): attach existing repositories
thomaspblock Aug 3, 2026
403da66
feat(desktop): add Project connection setup
wolfyy970 Aug 3, 2026
e4bd812
fix(desktop): harden Project connection lifecycle
wolfyy970 Aug 3, 2026
362846c
buzz-acp: add structured MCP server configuration
wolfyy970 Aug 1, 2026
cf126c9
buzz-acp: suppress serialized MCP config echoes
wolfyy970 Aug 1, 2026
a94b456
refactor(acp): tag structured MCP transports
wolfyy970 Aug 2, 2026
693e20d
docs(acp): include MCP transport in example
wolfyy970 Aug 3, 2026
cd13211
fix(acp): redact MCP credentials from diagnostics
wolfyy970 Aug 3, 2026
dbf1cc4
docs(acp): describe the MCP transport field
wolfyy970 Aug 3, 2026
15fd859
Merge origin/main into codex/project-connections
wolfyy970 Aug 4, 2026
63bdecd
fix(projects): preserve repository access and agent origins
thomaspblock Aug 4, 2026
774c253
refactor(desktop): keep agent display env within size guard
thomaspblock Aug 4, 2026
38c0406
Merge remote-tracking branch 'origin/main' into feat/multi-repository…
thomaspblock Aug 4, 2026
fe0011c
test(desktop): align deploy fixture with agent display name
thomaspblock Aug 4, 2026
60a7eff
fix(projects): align smoke coverage with current UI
thomaspblock Aug 4, 2026
e10b6e1
fix(desktop): scope connections to Projects
wolfyy970 Aug 4, 2026
5fd07f5
Merge origin/main into codex/project-connections
wolfyy970 Aug 4, 2026
c40469f
Merge origin/main into feat/acp-structured-mcp-servers
wolfyy970 Aug 4, 2026
969bbea
Merge remote-tracking branch 'origin/main' into feat/acp-structured-m…
wolfyy970 Aug 4, 2026
92fc7bb
Merge remote-tracking branch 'origin/main' into codex/project-connect…
wolfyy970 Aug 4, 2026
c972719
Merge remote-tracking branch 'origin/main' into feat/acp-structured-m…
wolfyy970 Aug 4, 2026
393a8a1
Merge remote-tracking branch 'origin/main' into codex/project-connect…
wolfyy970 Aug 4, 2026
d2f0bb7
Merge branch 'codex/project-connections' into codex/project-connectio…
wolfyy970 Aug 4, 2026
5865589
Merge branch 'codex/upstream-multi-repository-projects' into codex/pr…
wolfyy970 Aug 4, 2026
a9af7c8
feat(desktop): bind agent tools to Project connections
wolfyy970 Aug 4, 2026
5a68b09
Merge remote-tracking branch 'origin/main' into codex/project-connect…
wolfyy970 Aug 4, 2026
9bafcb6
Merge remote-tracking branch 'origin/main' into codex/project-connect…
wolfyy970 Aug 4, 2026
6acdcd8
Merge remote-tracking branch 'origin/main' into codex/project-connect…
wolfyy970 Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ RUST_LOG=buzz_relay=debug,buzz_datastore=info,buzz_db=debug,buzz_auth=debug,buzz
# Binary for an optional MCP server sidecar (e.g. buzz-dev-mcp for buzz-agent).
# BUZZ_ACP_MCP_COMMAND=

# Path to an optional version 1 JSON file defining additional stdio MCP servers.
# This file may contain credentials. Keep it out of Git and restrict it to
# its owner.
# BUZZ_ACP_MCP_CONFIG=/absolute/path/to/mcp-servers.json

# Number of parallel agent subprocesses (1–32).
# BUZZ_ACP_AGENTS=1

Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/buzz-acp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ reqwest = { workspace = true }
# Serialization
serde = { workspace = true }
serde_json = { workspace = true }
aho-corasick = "1.1"

# IDs
uuid = { workspace = true }
Expand Down
56 changes: 56 additions & 0 deletions crates/buzz-acp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ All configuration is via environment variables (or CLI flags — every env var h
| `BUZZ_ACP_AGENT_COMMAND` | no | `goose` | Agent binary to spawn. |
| `BUZZ_ACP_AGENT_ARGS` | no | `acp` | Agent arguments (comma-separated). |
| `BUZZ_ACP_MCP_COMMAND` | no | `""` (empty) | Path to an optional MCP server binary to provide to the agent subprocess. |
| `BUZZ_ACP_MCP_CONFIG` | no | `""` (empty) | Path to a version 1 JSON file defining additional stdio MCP servers. |
| `BUZZ_ACP_IDLE_TIMEOUT` | no | `620` | Idle timeout: max seconds of silence before cancelling a turn. Resets on any agent stdout activity. |
| `BUZZ_ACP_MAX_TURN_DURATION` | no | `7200` | Absolute wall-clock cap per turn (safety valve). |
| `BUZZ_API_TOKEN` | no | — | API token (required if relay enforces token auth). |
Expand All @@ -119,6 +120,61 @@ All configuration is via environment variables (or CLI flags — every env var h

**Legacy env vars:** `BUZZ_ACP_PRIVATE_KEY`, `BUZZ_ACP_API_TOKEN`, and `BUZZ_ACP_TURN_TIMEOUT` (replaced by `BUZZ_ACP_IDLE_TIMEOUT`) are still accepted as fallbacks.

### Multiple MCP servers

Use `--mcp-config <path>` or `BUZZ_ACP_MCP_CONFIG` to add named stdio MCP
servers:

```json
{
"version": 1,
"servers": [
{
"name": "analytics",
"transport": "stdio",
"command": "/opt/mcp/analytics-server",
"args": ["--stdio"],
"env": {
"ANALYTICS_TOKEN": "replace-me"
}
}
]
}
```

The JSON is strict. The only top-level fields are `version` and `servers`.
Each server has `name`, `transport`, `command`, `args`, and `env`. Version 1
supports the `stdio` transport. Server names must be unique, contain 1 to 128
ASCII bytes using only letters, digits, `_`, or `-`, and cannot contain `__`.
Names are checked across both structured entries and the legacy server.

The config file is limited to 64 KiB. A harness can have at most 16 MCP
servers in total, including the server from `BUZZ_ACP_MCP_COMMAND`. An
unreadable file, malformed JSON, an unsupported version, an unknown field, or
an invalid server entry stops startup. Buzz does not silently drop a server.

`BUZZ_ACP_MCP_COMMAND` keeps its current behavior. It defines one privileged
Buzz companion and receives the relay URL and Buzz identity credentials.
For a structured server, Buzz puts only the values listed in its `env` object
into the ACP `env` list. Protected Buzz identity and authentication keys are
rejected. Buzz sends the list to the ACP adapter in `session/new`, and the
adapter controls the MCP processes. Treat the adapter as a credential broker
and use one you trust.

The adapter still inherits the harness environment so its shell tools can use
the `buzz` CLI. Some adapters may propagate inherited variables to MCP child
processes. Per-server `env` entries are explicit configuration, not a process
isolation boundary. Use a separate account, container, or credential-brokered
service when the MCP process must not inherit adapter credentials.

If the JSON contains secrets, keep it outside Git and restrict the file to its
owner. On Unix:

```bash
chmod 600 /absolute/path/to/mcp-servers.json
buzz-acp --mcp-config /absolute/path/to/mcp-servers.json
```

### Parallel Agents & Heartbeat

| Flag | Env Var | Default | Description |
Expand Down
Loading