---
title: "The agent team — default roster, members & instances"
category: conventions
tags: [team, roster, agents, standard-v29, standard-v30, external]
updated: 2026-07-05
owner: rjj
status: stable
related:
  - https://meshkore.com/standard#25-agent-team-v29
---

# The agent team

Since **Standard v29 (§25)** every MeshKore cluster ships with a
**team**: a persistent roster of typed *members* from which working
agent *sessions* are spawned. The normative model, schema, and HTTP
surface live in the standard — read it, don't re-derive it:
<https://meshkore.com/standard#25-agent-team-v29>.

## What you get

- **Members** are typed profiles persisted at `.meshkore/team/<id>.md`
  (frontmatter + init-prompt body). Every member has a **`model`**
  (defaults to the strongest alias; `effort` is the tuning knob).
- **Instances** are chat conversations bound to a member — the actual
  sessions that do the work.
- The daemon **seeds the 9-member default team** the first time
  `.meshkore/team/` is missing, then the operator owns it.
- `.meshkore/team/` is **committed** — the roster travels with the repo.

## The default team

| Member | Kind | Does |
|---|---|---|
| `architect-master` | singleton (required) | Owns & manages the roadmap — the project "CEO". |
| `roadmap-orchestrator` | singleton (required) | Executes the roadmap queue on **Run All**. |
| `developer` | profile | Generic coder — the chat-rail **`+`** default. |
| `api-developer` | profile | Backend / API work. |
| `ui-developer` | profile | Frontend / UI work. |
| `deployer` | profile | Deploys & release ops. |
| `ui-reviewer` | profile | Visual / functional review. |
| `commit-pr-reviewer` | profile | Commit & PR review. |
| `consultant` | profile | Standing info point for **external** callers — answers about the project with cited facts; ships exposed with a ready token (v30). |

The two singletons cannot be deleted and run at most one live instance
each; profiles allow unlimited instances.

## External access & the consultant (v30)

Standard **v30** amends §25 with **external exposure** (§25.6): any
member can flip `exposure: internal → external` and be consumed as a
service by other software on the same machine via an async ask/poll
HTTP surface (`POST /team/<id>/ask` → poll `GET /team/requests/<rid>`),
authenticated by a per-member non-expiring bearer token (stored only
under `.meshkore/credentials/`, never committed; copy / rotate /
revoke from the Team UI). Exposed members also serve an A2A card at
`GET /team/<id>/.well-known/agent.json`. The daemon's loopback binding
is the v1 perimeter — nothing off-machine connects. The default
`consultant` member ships already exposed with a pregenerated token.
Full contract: <https://meshkore.com/standard#25-agent-team-v29>
(§25.6).

## How agent creation works now

- The chat-rail **`+`** button spawns a **`developer`** instance
  directly — **no modal**. The chat header shows a member picker
  (editable until the first message) plus model & effort pickers that
  stay editable for the whole conversation.
- The **Team tab** manages the roster: create / edit / delete members,
  edit init prompts, and pick each member's model. Every member must
  have a model.
- Manage the roster over HTTP: `GET/POST/PATCH/DELETE /team`,
  `POST /team/draft` (free-text → member draft), and `team.*` WS events.
  DELETE refuses the required singletons.

A conversation dispatched **without** a `member` falls back to the
legacy `AGENT_PROMPTS[agent_type]` behaviour, so older convs keep
working.

See also the cluster-side convention doc `agent-team.md` in your repo's
`.meshkore/docs/conventions/`.
