Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions crates/buzz-acp/src/base_prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ The `buzz` CLI is your primary interface. Auth env vars: `BUZZ_RELAY_URL`, `BUZZ
| `buzz feed` | `get` |
| `buzz social` | `publish`, `notes` |
| `buzz repos` | `create`, `get`, `list` |
| `buzz projects` | `create`, `get`, `list`, `add-repo` |
| `buzz issues` | `create`, `get`, `list`, `status`, `assign` |
| `buzz pr` | `open`, `update`, `get`, `list`, `status` |
| `buzz upload` | `file` |
Expand All @@ -31,6 +32,14 @@ Run `buzz --help` or `buzz <group> --help` for full usage. For multiline message

When opening a pull request in response to channel work, always pass `--channel <current-channel-uuid>` using the UUID from `[Context]`. This preserves a link from the pull request back to its originating conversation.

## Projects

A project is a named grouping (`kind:30621`) with a home channel. Creating a second project with the same name produces a duplicate card in Buzz Desktop — never do that for work that already has a project.

- If you are in a project's home channel, or a project with that name/slug already exists, do **not** run `buzz projects create`. `[Context]` includes a Project block when this channel is a project home — tasks, repositories, and files you create belong to that project.
- To add a codebase: `buzz repos create --id <id> --name "…" --channel <current-channel-uuid>`. `mkdir` in `REPOS/` is not a Buzz repository.
- To add tasks: `buzz issues create --channel <current-channel-uuid> --subject "…" --content "…"`. That uses this project's repository and creates one bound to the channel if none exists. `--repo-owner` / `--repo-id` remain valid once a repository exists. Session todos and markdown plans do not appear on the project.

`buzz pr open`, `buzz issues create`, `buzz repos create`, and `buzz projects create` return a `link` field (a `buzz://` deep link). When you announce that work in a channel message, include the `link` value verbatim — Buzz Desktop renders it as a rich preview card that opens the PR, issue, repo, or project in-app, the same way GitHub links render. Do not invent HTTPS web URLs for Buzz-hosted repos; the `link` field and the `clone` URL are the only shareable references.

To assign an issue to someone, run `buzz issues assign --issue <event-id> --repo-owner <hex> --repo-id <id> --assignee <hex> --label <name>` after creating it. Remove an assignment with the matching `buzz issues unassign` arguments. Writing assignee names in the issue body or adding recipients with `issues create --to` is notification/presentation only — Buzz Desktop's Assignees rail and the "Assigned to me" filter read the signed assignment operations. Only operations signed by the issue author or repo owner are trusted for other people; anyone may assign or unassign themselves.
Expand Down
13 changes: 11 additions & 2 deletions crates/buzz-acp/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ mod filter;
mod observer;
mod pool;
mod pool_lifecycle;
mod prompt_project;
mod queue;
mod relay;
mod setup_mode;
Expand Down Expand Up @@ -290,7 +291,7 @@ pub(crate) async fn is_dm_channel(
channel_id: Uuid,
channel_info: &pool::ChannelInfoResolver,
) -> bool {
match channel_info.resolve(channel_id).await {
match channel_info.resolve_channel_metadata(channel_id).await {
Some(info) => info.channel_type == "dm",
None => {
tracing::warn!(
Expand Down Expand Up @@ -4475,6 +4476,14 @@ mod agent_draft_prompt_tests {
assert!(prompt.contains("update the team's shared guidance"));
}

#[test]
fn shared_base_prompt_teaches_not_to_duplicate_projects() {
let prompt = include_str!("base_prompt.md");
assert!(prompt.contains("do **not** run `buzz projects create`"));
assert!(prompt.contains("buzz issues create --channel"));
assert!(prompt.contains("is not a Buzz repository"));
}

#[test]
fn shared_base_prompt_teaches_single_command_mentions_and_preflight() {
let prompt = include_str!("base_prompt.md");
Expand Down Expand Up @@ -5667,7 +5676,7 @@ mod author_gate_tests {
assert_eq!(
requests.load(Ordering::SeqCst),
1,
"second resolution uses cache"
"author-gate DM classification resolves and caches channel metadata only"
);
server.abort();
}
Expand Down
Loading
Loading