| .. | ||
| ai-agent-studio | ||
| owner-cockpit-v02 | ||
| polish-dag-tiers-cost | ||
| repo-discovery-onboarding | ||
| second-brain-os-v01 | ||
| worker-closeout-docwriter | ||
| workspace-chat-foundation | ||
| .gitkeep | ||
| ai-agent-studio.md | ||
| model-provider-registry.md | ||
| owner-cockpit-v02.md | ||
| polish-dag-tiers-cost.md | ||
| README.md | ||
| repo-discovery-onboarding.md | ||
| second-brain-os-v01.md | ||
| worker-closeout-docwriter.md | ||
| workspace-chat-foundation.md | ||
Convoys (Echodo / tasks repo)
A convoy is a multi-PR work-stream coordinated by the agent pipeline. One convoy = one feature, bug fix, or epic slice. Each convoy is a Markdown file in this directory plus an optional sub-directory of implementer briefs.
Not Cursor Plan mode. Pipeline convoys live here (
.convoys/*.md). Cursor's native Plan feature writes to.cursor/plans/*.plan.md— a different artifact. For pipeline work, invokerole-conductor(when L2 roles are installed) and write.convoys/<slug>.md. See.cursor/rules/convoy-planning.mdc.
Product backlog items still live under plans/ and sync to Echodo via markdown import. Convoys track how a slice is executed (roles, briefs, gates) — not the canonical plan tree.
File layout
.convoys/
├── README.md (this file)
├── .metrics.jsonl (local analytics — gitignored)
├── <slug>.md (convoy file — role-conductor)
└── <slug>/
├── brief-1-<kebab-title>.md (role-architect)
└── ...
Convoy file format
Frontmatter (set by role-conductor, appended by other roles):
---
name: <kebab-slug>
classification: feature | hotfix | docs-only | infra-only | server-only | config-only
success_metric: <one sentence>
skip:
- ia
status: open | in-progress | merged | shipped | abandoned
created: <YYYY-MM-DD>
model_policy:
roles:
role-conductor: claude-planning
role-implementer: qwen-coder
escalate_to: claude-planning
---
Use registry alias names in model_policy (not Cursor model slugs). See docs/adr-model-routing.md.
Body sections (typical order):
## Why(Conductor)## Scope(Conductor)## Roles invoked(Conductor)## Todos(Conductor → Architect)## IA(IA Architect — skip ifiainskip:)## UX(UX Reviewer)## Architecture(Architect)
After Architect, briefs live in .convoys/<slug>/brief-N-*.md. Implementers read only their brief.
Skip flags
| Flag | Skips |
|---|---|
ia |
IA Architect |
ux |
UX Reviewer |
arch |
Architect (rare — use only for trivial hotfixes) |
test |
Component tests |
review |
Reviewer |
visual |
Visual diff |
a11y |
A11y auditor |
design |
Design-system auditor |
smoke |
Staging smoke |
qa |
Manual QA |
docs |
Doc Writer |
flag |
Flag rollout |
Never skipped (human gates): plan-approval, pr-merge, prod-promote.
Echodo server work often uses classification: server-only with skip: [ia, ux, design, a11y, visual, smoke].
Status lifecycle
open— convoy created; no briefs in flightin-progress— at least one brief active or PR openmerged— all briefs merged; release pendingshipped— in productionabandoned— closed without shipping
Kickoff ritual (this repo)
- Open Cursor in the
tasksrepo on a feature branch. - Prompt: "Start a new convoy: <idea>. Success = <metric>."
- Conductor writes
.convoys/<slug>.mdwithclassificationandskipflags. - Echodo dogfood: each implementer session should
claim_taskon the matchingplans/.../Task-*.md, implement, thencomplete_taskwithmodelAlias/modelTier. - Architect maps briefs 1:1 to tasks when possible.
Example (Epic 1 — done): model provider registry convoy with server-only, briefs aligned to Epic-model-provider-registry tasks.
Next convoys: orchestrator (Epic-apps-orchestrator), convoy lifecycle MCP (Epic-convoy-lifecycle-mcp), connected repos (Epic-connected-repos).
Self-analytics
Each L2 role appends one event via:
bash scripts/log-convoy-event.sh role=role-implementer convoy=<slug> brief=1 \
duration_s=120 model=qwen-coder model_tier=local outcome=complete
.convoys/.metrics.jsonl is gitignored by default (metadata only, no prompts). Remove that line from .gitignore if you want team-visible metrics in git.
Validate a line was written:
bash scripts/log-convoy-event.sh role=role-conductor convoy=test duration_s=1
tail -1 .convoys/.metrics.jsonl | python3 -m json.tool
Multitask (Cursor 3.2+)
Use /multitask for audit fan-out (role-reviewer + design + a11y) or parallel implementers when architect marks briefs as disjoint. Set multitask_group=audit-<convoy>-<pr> on log lines for wall-clock analytics.
Related docs
- Plan automation foundation
- ADR model routing
- AGENTS.md — repo commands and multitenancy rules