A framework for defining persistent AI personas with memory, file ownership, and cross-team protocols.
Concrete recipes for common workflows. Each recipe is self-contained — read the one you need, skip the rest.
When: Your project has grown a new domain that doesn’t fit cleanly into any existing teammate’s ownership.
Steps:
.teammates/TEMPLATE.md into a new folder:
.teammates/<name>/
SOUL.md
WISDOM.md
memory/
weekly/
monthly/
Fill in every section of SOUL.md with project-specific details. Use template/example/SOUL.md as a reference for tone and detail level.
Leave WISDOM.md in its initial empty state — wisdom emerges after the first compaction.
.teammates/README.md — add to the roster table, routing guide, and dependency flow.teammates/CROSS-TEAM.md — add a row to the Ownership Scopes table.teammates/PROTOCOL.md — update the conflict resolution table if the new domain introduces new conflict typesUpdate existing teammates’ SOUL.md Boundaries sections to reference the new teammate where relevant.
Tip: Start broad. A new teammate with wide ownership that narrows over time is better than one with gaps from day one.
When: A domain has been removed, merged into another teammate, or is no longer actively maintained.
Steps:
Decide: merge (transfer ownership to another teammate) or archive (remove entirely).
memory/ into the receiving teammate’s memory/.Delete the retired teammate’s folder: .teammates/<name>/
.teammates/README.md — remove from roster, routing guide, dependency flow.teammates/CROSS-TEAM.md — remove from Ownership Scopes table.teammates/PROTOCOL.md — remove from conflict resolution tableretire @<name>: merged into @<other> or archive @<name>: domain removed.When: Your current task requires changes to files you don’t own.
Steps:
Do as much work as you can within your own domain first.
```handoff
@<teammate>
<What you need done, why, and any relevant context or constraints.
Include file paths, function names, or specs if applicable.>
```
Rules:
When: A task spans multiple repositories that each have their own .teammates/ directory.
Steps:
Complete all work in the current repository first.
Example:
The API contract changed:
GET /usersnow returns{ items: User[], cursor: string }instead ofUser[]. The frontend repo’s@pixelteammate needs to update the API client atsrc/api/users.tsto handle the new shape.
When: After a significant milestone, a rough week, or on a regular cadence (e.g., bi-weekly).
Steps:
Ask a teammate to run /retro (or prompt them to reflect).
Review the proposed SOUL.md changes. Approve, modify, or reject each one.
See .teammates/scribe/docs/RETRO-FORMAT.md for the full format specification.
When: A teammate’s memory/ directory is getting large (20+ daily logs), or on a regular cadence.
Steps:
Ask the teammate to run /compact.
The command runs two pipelines:
Episodic compaction:
memory/weekly/YYYY-Wnn.mdmemory/monthly/YYYY-MM.mdSemantic compaction:
Verify: WISDOM.md entries are principled and actionable, not just summaries of events.
Tip: Run episodic compaction weekly and semantic compaction monthly for best results.
When: The team makes a choice that future sessions should know about — architecture, convention, tool selection, or scope decisions.
Steps:
Add an entry to .teammates/DECISIONS.md:
## DDDD — <Title>
**Date:** YYYY-MM-DD
**Decided by:** <who was involved>
**Status:** accepted
### Context
<Why did this decision come up?>
### Decision
<What was decided?>
### Alternatives considered
- <Option A> — <why not>
- <Option B> — <why not>
Number decisions sequentially (D001, D002, …).
If a decision is later reversed, update its status to superseded by DDDD and add the new decision.
See the decision log template for the full format.
When: You want to enable an optional service beyond the built-in recall search.
Note: Recall (semantic memory search) is bundled with the CLI and works automatically — no setup needed. This recipe is for adding other optional services.
Steps:
cd <service-dir> && npm install && npm run build
.teammates/services.json:
{
"<service-name>": {}
}
services.json and injects their capabilities into teammate prompts.When: The upstream template/ files have changed (new template version) and your project’s .teammates/ files need to catch up.
Steps:
Check the current template version in your project files — look for <!-- template-version: N --> comments.
Check the upstream template version in the template/ directory.
If versions differ, compare with the upstream template/ files and apply changes manually.
After updating, bump the <!-- template-version: N --> comment in each updated file.
When: Two teammates both believe they should handle a task, or a file falls in an ambiguous ownership zone.
Steps:
Check .teammates/PROTOCOL.md — the Conflict Resolution table has explicit rules for common conflict types.
.teammates/DECISIONS.md.When: A new person joins the project and needs to understand the teammates system.
Steps:
Point them to README.md for the project overview and .teammates/README.md for the roster and routing guide.
Have them fill in .teammates/USER.md with their role, preferences, and current focus. (This file is gitignored — it stays local.)
@mention a teammate by name to route work directlydocs/adoption-guide.md for a deeper walkthrough of how to work with the system.