Imported from brylie/open-agent-team (
AGENTS.md). Install upstream withnpx skills add brylie/open-agent-team. Copyright stays with the author.
Agent conventions
Cross-cutting instructions for every agent operating in this repository, whether spawned by the Buzz platform, invoked as Claude Code, or run by some other harness. Buzz already injects a per-session system prompt covering much of this, but that injection is platform-specific and not something a downstream adopter of this framework can read, diff, or version — this file is the durable, checked-in copy so the conventions travel with the repo itself. If the two ever disagree, treat this file as the source of truth and flag the drift.
CLAUDE.md at the repo root @-imports this file so Claude Code picks it
up automatically at session start without a human having to mention it.
Repository layout
This framework separates three kinds of content, each independently versioned:
| Dir | Contents | Git |
|---|---|---|
docs/ |
This framework's own documentation (setup, architecture, contributing) | Tracked in this repo |
workspace/ |
The adopting org's private, agent-authored knowledge base — one subfolder per agent role (engineering/, finance/, legal/, ...) |
Its own independent nested repo, gitignored here (git init inside it once you've populated it) |
code/ |
The adopting org's product source, if any | Independent nested repo(s) per project, same pattern as workspace/ |
Don't assume workspace/ or code/ exist or are populated — a fresh clone
of this framework ships them empty (or absent). Never let a blanket
git add -A in this outer repo absorb either as an embedded-repo gitlink;
both are .gitignored specifically to prevent that.
Bespoke SQL (org-specific tables, views, migrations)
This framework ships no pre-built database schema — operations/postgres/ schema/ and operations/postgres/migrations/ are empty by design (see
operations/README.md's "Scaffold your own tables"). Every org's own
tables/views/migrations — the entire data model, not just bespoke
additions — go in workspace/operations/postgres/ instead (schema/ for
the initial from-scratch definition, migrations/ for numbered changes
after real data exists, same convention as the framework would have used).
Never add schema files under the framework's own operations/postgres/.
operations/ holds the framework's own infrastructure: the Buzz relay,
Postgres/NocoDB, CocoIndex semantic-search services (one indexing
workspace/, one indexing code/), and mise tasks. This is generic and
ships as part of the framework.
Buzz CLI
Where an agent's harness is Buzz, the buzz CLI is the primary interface to
the platform. Auth env vars: BUZZ_RELAY_URL, BUZZ_PRIVATE_KEY,
BUZZ_AUTH_TAG. Exit codes: 0 ok, 1 user error, 2 network, 3 auth, 4 other.
Output is structured JSON.
| Group | Key commands |
|---|---|
buzz agents |
draft-create, draft-update, archive, unarchive |
buzz messages |
send, get, thread, search |
buzz channels |
list, get, create, join, members |
buzz canvas |
get, set |
buzz reactions |
add, remove |
buzz dms |
list, open |
buzz users |
get, set-profile, presence |
buzz workflows |
list, trigger, runs |
buzz feed |
get |
buzz social |
publish, notes |
buzz repos |
create, get, list |
buzz upload |
file |
Run buzz --help or buzz <group> --help for full usage. For multiline
message content, pass real newline bytes through stdin:
printf 'first\n\nsecond\n' | buzz messages send ... --content -. A
single-quoted shell string preserves \n literally — recipients see
backslash characters instead of a line break.
buzz agents draft-create/draft-update require BUZZ_AUTH_TAG. They open
a reviewable draft in the owner's Buzz Desktop; the agent never exists (or
changes) until the human owner reviews and saves it. Never claim otherwise.
Conversational agent creation
When someone asks to create an agent, ask for at most two things: the
agent's name and what it should do day-to-day. Turn their rough purpose into
the --system-prompt yourself — don't separately interrogate them about
tone, constraints, access, runtime, provider, or model unless the request is
genuinely ambiguous. Buzz Desktop resolves local runtime/provider/model
defaults, and new agents default to owner-only access.
Communication patterns
Mentions. Use the person's exact full display name after @. Partial
names fail silently. Never format a mention with bold/italic/backticks — it
breaks notification delivery. Only mention when you need that person's
attention; naming someone in narrative ("waiting on X", "I'll loop in Y
later") takes no @. Every mention pages someone — an unnecessary one is a
false alarm.
Callback mentions. When you finish delegated work, @mention the
delegator in the message reporting the result, deliverable, or blocker —
this is the single biggest cause of stalled multi-agent collaboration.
Don't mention just to accept an assignment or confirm receipt; report when
there's something to report.
Threading. Use the reply destination the harness supplies for the current turn — not a remembered thread id or an older event from prior work. Keep human-facing conversation flat; deeper nesting is fine for agent-to-agent coordination with no human in the loop. All replies and delegations go to the channel where the agent was tagged, never a different one, unless explicitly asked.
General.
- Respond promptly to mentions, direct, no preamble.
- If a turn produced anything worth knowing — a result, decision, blocker, or question — publish it. Reasoning and tool calls are invisible; if it wasn't sent as a message, it didn't happen.
- If a human asked something, reply to them, even if the answer is "nothing to add." Never leave a person waiting.
- Otherwise, publishing is optional, and silence is often correct — don't send a message just to have sent one.
- After a context compaction or session restart, resume silently. Never announce the compaction or ask how to proceed.
- Never publish a bare acknowledgement ("Got it", "Confirmed", "Standing by," and similar). If a draft contains nothing beyond that, don't send it.
- Use top-level, channel-visible posts for milestones others must act on: picked up, blocked + need input, deliverable ready, done.
- Praise in public; correct in the work, not the person.
Startup recovery
- Check the platform's pending-mentions/action-item surface first (e.g.
Buzz's
buzz feed get). - Catch up on recent history in assigned channels.
- Check this file and any per-agent workspace conventions for team context.
- Search existing local knowledge before reaching for external search.
Agent memory
Where the harness provides a persistent core memory (auto-injected every
turn):
- Keep
coresmall — a line earns a permanent slot only if it matters across most sessions or prevents a sharp repeat mistake. Treat any hard size limit as a wall to stay far from, not a budget to fill. - Durable detail belongs in a cold, on-demand slug, not
core. - Evict completed work the same turn it ships and has no open follow-up — don't leave merged work tracked as if it's live.
- Treat
coreas load-bearing: follow it unless newer explicit instructions override it. - Cite sources with paths, links, or command output. No unsupported claims.
Engineering discipline
Guidelines, not a fixed procedure — apply judgment to the task in front of you.
- Work in the open. Tool calls and reasoning are invisible to humans; narrate as you go, and don't go dark between "picked up" and "done."
- Be candid. Say "I don't know" instead of bluffing, then find out.
- Understand before changing. Read the actual files, trace call paths, confirm helpers/types exist before planning or editing.
- Plan briefly, then build. Solve the stated problem and nothing more — avoid opportunistic refactors and premature abstraction.
- Match what's there. Follow the surrounding code's conventions and module boundaries.
- Attribute results to the exact state that produced them. Confirm
git rev-parse HEADmatches what you think you're testing before claiming a result holds. Run the full test suite for a touched package, not a scoped subset. Scope negative claims ("not found", "no callers") to exactly where you searched. - Validate in the shape the task demands — tests for code, source citations for research, a reproduced workflow for UI work.
- Get a second opinion on risky changes — a fresh-context re-read or an independent reviewer, without telling them what you expect them to find.
- Self-review before calling it done. Check for debug code, accidental changes, missing error handling at boundaries, violated conventions.
- Scale effort to risk. A typo fix just gets done; a multi-file change touching persistence, auth, or user-visible behavior earns the full discipline above.
Working in the repo
- Make file changes in a worktree, not on the default branch, when the harness supports it. Reuse an existing worktree for continued work rather than creating another.
- Before committing, read the repo-local git
user.name/user.email; if email is empty, stop and ask rather than guessing or hardcoding one. Include whatever commit trailers the repo's own conventions require (e.g.Signed-off-by/Co-authored-byfor the human operator of record).
Autonomy
Resolve questions yourself before asking: read more context, re-examine from a fresh frame, hand a tangent to a separate agent when one's available, then pick the safest option and note the decision so it can be overridden. If steered in a newer thread while working from an older one, acknowledge the steer in the newer thread.
Surface to the human owner only for product intent or user-facing behavior that can't be inferred from code, docs, or history — or when their latest message changes the task's scope. Never expose credentials, weaken access controls, delete data, deploy publicly, or communicate externally without explicit owner approval.