Skip to content

Team format

How a team is made.

A Brainwrite team is one Markdown file plus the library entry the app reads. The quickest start is the template repository: it holds one complete, working example team, the same layout as the library, and the library’s own validator.

Repository layout

catalog.json                          the listing for your team
packages/<team-id>.md                 the team itself (Brainwrite Markdown v1)
teams/<team-id>/
  team.brainwriteteam.json            members and room, for the app's library
  README.md                           a short human description
  skills/<playbook-key>/SKILL.md      one file per playbook
FORMAT.md                             the Markdown format, in full
schema/team.schema.json               JSON schema for team.brainwriteteam.json
scripts/validate.mjs                  the library's validator
LICENSE                               the license your team is shared under

<team-id> is your team’s id: lower-case letters, digits and hyphens, for example weekly-sales-review. It must be the same everywhere: the file name in packages/, the folder name in teams/, id in the package, and slug in catalog.json. It must not already be used by a team in the library.

packages/<team-id>.md: the team

This is the file Brainwrite installs, and the one people read. It is a Markdown file with YAML frontmatter:

  • Frontmatter: it starts with brainwrite: 1, then the team’s id, release (semver, e.g. 1.0.0), name, tagline, summary, category, author, license, outcomes, setupMinutes, requirements (the apps it uses), agents, chiefOfStaff, rooms, routines and playbooks.
  • Body: it must have these seven sections, as ## headings: Activation, Mission, Outcomes, Connections, Team, Chief of Staff and Completion rule.
  • Agents: each has a key, name, title, description and an appearance with a color. The colors are green, blue, red, orange, purple, cyan, pink, yellow, teal, coral, white and gray.
  • Routines: always install paused, so set enabledAfterInstall: false.
  • Requirements: name the apps a team connects to. A team never contains credentials; people connect their own accounts in Brainwrite.

teams/<team-id>/: the app’s library entry

These files describe the same team for the app’s library, and they must agree with the package:

  • team.brainwriteteam.json: the same members, in the same order, with the same key, name, title and color; and one room, with the same name as the package’s first room. Its JSON schema is published at /schema/team.schema.json.
  • skills/<playbook-key>/SKILL.md: one per playbook in the package, with the folder named after the playbook’s key.
  • README.md: a short description of the team, its members and its skills.

The validator reports any difference between these files and the package.

catalog.json: the listing

It has one entry for your team: slug, name, summary (up to 300 characters), category, outcome, setupMinutes, package, manifest, readme, members (the number of agents), skills (the paths of the SKILL.md files) and requires.apps. The library decides which teams are featured, so leave featured out.

Validate

npm install
npm run validate

It prints Validated 1 catalog teams when everything is in order. Submitting runs the same checks on your repository, plus text files only within the size limits, no passwords, API keys, tokens or hidden content in any file, and a license file.

The Markdown format

Brainwrite Markdown v1

The format is intentionally one normal Markdown file.

---
brainwrite: 1
id: example-team
release: 1.0.0
name: Example Team
tagline: The outcome in one sentence.
# listing, roles, rooms, playbooks, connections, and paused routines
---

# Example Team

> Give this file to your Chief of Staff.

## Activation
...

## Team
...

The frontmatter is required for a playbook published on Brainwrite because it powers the listing and optional one-click imports. General-purpose agent products can ignore it completely. The Markdown body is authoritative for people and Chief-of-Staff agents, and must stand on its own when pasted into an agent conversation.

The proof block (optional)

A playbook whose approach has a public money claim behind it may carry a proof block. The figure is always the creator's own claim, and it must link a public source — Brainwrite verifies that the post exists, never the revenue.

proof:
  amount: "$4,200"        # dollar figure as claimed, e.g. "$4,200" or "$12K"
  period: monthly         # monthly | weekly | daily | total
  source:
    url: https://x.com/handle/status/1234567890
    author: "@handle"
    date: 2026-07-14      # optional, YYYY-MM-DD
    quote: "exact sentence from the post containing the claim"  # optional
  credibility: claimed    # claimed | receipts (screenshots/proof shown in the source)

Never publish a proof block without a working public source, and never restate someone's claim as a bigger or rounder number than they used.

Required body sections are Activation, Mission, Outcomes, Connections, Team, Chief of Staff, and Completion rule. Add shared rooms, routines, playbooks, and examples only when the team needs them.

Products that cannot create sub-agents should perform each role sequentially and keep the work clearly separated. Products must never treat a connector name as authorization, and routines must stay paused until the user explicitly enables them.

Ready to share yours?

Start from the template, validate it, then submit the repository.