Persona
A persona is the file that is your agent. Edit it, the agent updates. Delete it, the agent disappears. Git tracks every change.
The whole agent — name, model, schedule, system prompt — sits in one file at .agents/<slug>/persona.md. Hover the fields below to see what each one controls.
The minimum viable persona
---
name: Inbox Triager
emoji: "📥"
role: Email triage
type: specialist
model: claude-haiku-4-5
---
You read /inbox/ every weekday at 9am, tag urgency, and write a one-line summary to /briefings/today.md.
That's a working agent. Three lines of frontmatter and a system prompt. Cabinet picks up the file the next time the app boots.
Every field
| Field | Type | Default | What it does |
|---|---|---|---|
name | string | — | Display name in the AI team panel and @-mentions. |
emoji | string | "🤖" | Quick visual identifier in lists, mentions, and the org chart. |
role | string | — | One-line subtitle. Keep it ≤3 words. |
type | "lead" | "specialist" | specialist | Leads can dispatch work to other agents. Specialists do focused work. |
model | string | inherits cabinet default | Default provider+model. Override per task or per heartbeat. |
canDispatch | boolean | true for leads, false for specialists | Allow LAUNCH_TASK / SCHEDULE_JOB proposals. |
heartbeats | array | [] | Recurring check-ins. See Heartbeats. |
memory | string | object | "memory.md" | Where the agent's learned context lives. |
skills | string[] | [] | Skill slugs to attach by default. See Skills. |
tools | string[] | inherits | Allow-list of tool names. Empty = inherit cabinet defaults. |
visibility | "all" | "cabinet" | "folder" | cabinet | How far up/down the tree this agent can read. |
budget | object | inherits | Token / dollar caps per run, per day. |
The body of the file (everything after the second ---) is the system prompt. Write it like you're onboarding a new hire: who they are, what they own, where their workspace is, what they should never do.
Patterns that work
A specialist who lives in a folder
---
name: Pipeline Tracker
emoji: "📈"
role: CRM keeper
type: specialist
model: gpt-4.1
visibility: folder
---
You watch /sales/pipeline.csv. Whenever a row's status changes,
write a one-line note to /sales/changelog.md with the date.
Why it works: narrow scope (visibility: folder), boring model (cheap, fast), one job, output goes to a durable page.
A lead who orchestrates
---
name: GTM Lead
emoji: "🎯"
role: Launch strategy
type: lead
model: claude-opus-4-7
canDispatch: true
heartbeats:
- cron: "0 9 * * 1" # Mon 9am
prompt: "Open the launch room and report what changed."
- cron: "0 17 * * 5" # Fri 5pm
prompt: "Draft Monday's launch checklist."
---
You translate positioning notes into channels, offers, and launch
risks. You always work in /marketing/. When you see a research gap,
dispatch a LAUNCH_TASK to the Research Lead.
Why it works: opinionated model (Opus for strategy), explicit dispatch permission, two heartbeats that frame the week.
A heartbeat-only agent
---
name: Stale Sweep
emoji: "🧹"
role: Weekly cleanup
type: specialist
model: claude-haiku-4-5
heartbeats:
- cron: "0 18 * * 5"
prompt: "Find pages in /tasks/ not touched in 30 days. Suggest archive or delete."
---
Why it works: no chat surface, no dispatch, just a Friday-evening sweeper that gets out of your way.
Memory
A persona's memory file is a markdown page the agent reads at the start of every run and writes to at the end. Think of it as their notebook.
.agents/gtm-lead/
├── persona.md ← who they are
└── memory.md ← what they've learned
You can read or edit memory.md like any other page. If the agent learns something wrong, just open the file and fix it.
Sharing a persona
A persona is a folder. To share one:
# Copy out a single agent
cp -r .agents/gtm-lead/ ~/Desktop/
# Or commit + push as part of a [template cabinet](../../../templates/) on cabinets.sh
git add .agents/gtm-lead/
git commit -m "Add GTM Lead persona"
When you publish a template to cabinets.sh, the personas come with it. Anyone who installs the template gets your team, ready to run.
Read on
- Heartbeats — the recurring check-in field, in detail.
- Skills — pluggable instruction packs you attach to a persona.
- Delegating — what
canDispatch: trueactually unlocks. - Persona schema reference — every field, every type, every default.