Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Coordinate fleets of coding agents sharing one repo+branch: publish typed intents, classify edit episodes, and resolve conflicts before they collide. Use FIRST when multiple agents work the same repo+branch, before reading/planning/editing, when joining a fleet or handing work off, and when the user says two agents are changing the same thing, asks who should proceed, has a decision waiting, or asks you to mediate a Class C conflict. Covers branch-scoped publish-edit-record plus verdict, human-r
.claude/skills/syncable-dev-memtrace-fleet-first/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 127% | 0% |
The coordination layer for fleets of coding agents working the same repo at the same time. It stops agents from silently clobbering each other's edits, and turns unsafe overlaps into a clear decision instead of a merge-time surprise.
IN A FLEET → FLEET TOOLS BEFORE EDITS. NO EXCEPTIONS.
1. fleet_publish_intent (declare what you'll touch; get blast radius + conflicts)
2. edit (your normal edit loop)
3. fleet_record_episode (classify A/B/C; if C, the loop resolves it)A typed intent serializes to ~20 tokens; a prose "I'm going to change X" averages 200+. A 10-agent fleet × 100 edits = tens of thousands of tokens saved per fleet-turn — and zero silent overwrites — when the protocol is followed.
Coordination is branch-scoped. Two agents only coordinate when they're on the same (repo, branch). The branch name is the fleet identifier: a session branch is how a group of agents opts into one coordinating fleet.
session/auth-revamp)? Pass branch on everyfleet call. Your fleet coordinates together and stays isolated from agents on other branches.
branch only for the shared default pool (single, unnamed fleet).whether branches merge isn't guaranteed, so the fleet never reasons across them.
jsonc{ "repo_id": "myrepo", "branch": "session/auth-revamp", "agent_id": "agent-a", "touched": ["auth::verify_token"], "intent": {"refactor": {"pattern": "change_signature"}}, "assignment": "widen verify_token signature for pagination" }
Always include assignment — your natural-language task. When a conflict happens, that's what the judge (another agent) or a human reads to reconcile.
Set a stable identity before any fleet call:
MEMTRACE_AGENT_ID=<your-agent-id> # required in fleet / hosted environmentsfleet_branch_context({repo_id, branch, agent_id})
→ you, peers[], pending_escalations, recent_peer_episodes, graph_revision
fleet_status() → live_intents, active_agents, pending_escalations, mediator_modeCall fleet_branch_context at session start and after idle periods so you do not confuse peer WIP with settled graph truth. If fleet tools respond, coordination is active — follow this skill for every edit. An empty peer list is not permission to skip: it just means you're the first agent in this window.
fleet_preflight({repo_id, branch, agent_id, touched, intent})(read-only) or go straight to fleet_publish_intent(...). You get the blast radius, any overlapping live intents on your branch, and a coordination block that may already suggest who owns a contested symbol.
fleet_record_episode({repo_id, branch, agent_id, touched, intent}).It returns a conflict_class:
shared symbols so you build on current state.
work. This does not auto-resolve — see below.
A Class C means two edit paths can't both land safely. fleet_record_episode returns an escalation_id and a mediation_request (when mediation is enabled). What happens next depends on who judges:
mediation_request carries every agent'sassignment — including the other side's. Read them and submit a verdict with fleet_submit_verdict({escalation_id, agent_id, verdict}), where verdict is one of:
{"kind":"reconcile","merge_plan":"…"} — the changes combine; here's how.{"kind":"recommend","winner":"<agent_id>","rationale":"…","confidence":0.0-1.0} —one path should continue.
{"kind":"defer_to_human","question":"…"} — a real product call; ask a human.to you.
fleet_get_escalation({escalation_id, agent_id}) untilyour_directive is no longer wait:
proceed — you were chosen; continue.defer — another path won; stand down and rebase your work onto it.review — read the free-text resolution.The daemon is a deterministic referee: it never auto-applies a destructive removal (delete/move) without a human, and only auto-applies when it's safe (a clear machine case, or independent agent consensus). So the judge being wrong degrades to "a human reviews a suggestion," never a silent bad merge.
| You're about to… | Do this | |---|---| | Start any edit in a fleet | fleet_publish_intent (declare it) — never skip | | Check before declaring | fleet_preflight (read-only "is the coast clear?") | | Finish an edit | fleet_record_episode (get A/B/C) | | Got a Class C as the judge | fleet_submit_verdict (reconcile/recommend/defer) | | Blocked on a Class C | poll fleet_get_escalation until your_directive ≠ wait | | A human chose the outcome | fleet_resolve_escalation (record the decision) | | See the needs-human queue | fleet_list_escalations | | See who's in the fleet | fleet_status (active_agents, pending decisions) | | Inspect a symbol's coordination state | fleet_get_node_state |
intent as JSON (externally-tagged, snake_case):{"refactor":{"pattern":"rename_symbol"}}, {"bug_fix":{"defect":"logic_error"}}. Destructive kinds: refactor/change_signature, refactor/move_symbol, cleanup/dead_code — these are what trigger Class C over shared symbols.
touched is a list of qualified symbol identities (e.g. "module::Symbol").branch (your session branch) and assignment (your task).Full parameter spec for every Memtrace tool: references/mcp-parameters.md (bundled at the memtrace-skills plugin root).
Skip the protocol only for a genuinely solo session (you're the only agent and no one else shares your branch) or pure docs-only edits where coordination has zero value. Everything else in a fleet goes through the protocol.
Key return shapes (fields documented above):
jsonc// fleet_record_episode → { "conflict_class": "C", "escalation_id": "…", "mediation_request": { /* every agent's assignment */ } } // fleet_get_escalation → { "your_directive": "wait | proceed | defer | review", "resolution": "free text (read on review)" } // fleet_status → { "live_intents": [ /* … */ ], "active_agents": [ /* … */ ], "pending_escalations": [ /* … */ ], "mediator_mode": "…" }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,250 | 7,232 | -0% | 1 | 1 | 0% | 1,368 | 2,433 | +78% | 0 | 0 | — |
case-02 | fail→fail | 16,856 | 8,121 | -52% | 1 | 1 | 0% | 2,817 | 2,463 | -13% | 0 | 0 | — |
case-03 | fail→fail | 10,513 | 9,102 | -13% | 1 | 1 | 0% | 1,390 | 2,462 | +77% | 0 | 0 | — |
case-04 | pass→pass | 5,572 | 2,794 | -50% | 1 | 1 | 0% | 882 | 2,360 | +168% | 0 | 0 | — |
case-10 | fail→pass | 9,787 | 2,096 | -79% | 1 | 1 | 0% | 1,390 | 2,262 | +63% | 0 | 0 | — |
case-05 | pass→pass | 8,295 | 4,858 | -41% | 1 | 1 | 0% | 1,332 | 2,774 | +108% | 0 | 0 | — |
case-06 | pass→pass | 11,570 | 4,111 | -64% | 1 | 1 | 0% | 1,648 | 2,494 | +51% | 0 | 0 | — |
case-07 | fail→pass | 11,876 | 6,485 | -45% | 1 | 1 | 0% | 1,828 | 2,900 | +59% | 0 | 0 | — |
case-08 | fail→pass | 13,136 | 6,107 | -54% | 1 | 1 | 0% | 1,890 | 2,930 | +55% | 0 | 0 | — |
case-09 | fail→pass | 7,232 | 5,284 | -27% | 1 | 1 | 0% | 1,160 | 2,878 | +148% | 0 | 0 | — |
case-11 | fail→fail | 5,068 | 10,805 | +113% | 1 | 1 | 0% | 909 | 3,094 | +240% | 0 | 0 | — |
case-12 | fail→fail | 4,649 | 9,219 | +98% | 1 | 1 | 0% | 681 | 2,434 | +257% | 0 | 0 | — |
case-13 | fail→pass | 5,903 | 1,481 | -75% | 1 | 1 | 0% | 925 | 2,099 | +127% | 0 | 0 | — |
case-14 | fail→pass | 2,936 | 3,444 | +17% | 1 | 1 | 0% | 512 | 2,554 | +399% | 0 | 0 | — |
case-15 | fail→pass | 9,212 | 1,515 | -84% | 1 | 1 | 0% | 1,509 | 2,141 | +42% | 0 | 0 | — |
case-16 | fail→pass | 12,505 | 2,105 | -83% | 1 | 1 | 0% | 1,800 | 2,238 | +24% | 0 | 0 | — |
case-17 | pass→pass | 3,637 | 2,511 | -31% | 1 | 1 | 0% | 740 | 2,418 | +227% | 0 | 0 | — |
case-18 | fail→pass | 12,116 | 2,602 | -79% | 1 | 1 | 0% | 1,934 | 2,368 | +22% | 0 | 0 | — |
case-19 | fail→pass | 7,832 | 1,956 | -75% | 1 | 1 | 0% | 1,291 | 2,224 | +72% | 0 | 0 | — |
case-20 | fail→pass | 8,778 | 2,493 | -72% | 1 | 1 | 0% | 1,324 | 2,354 | +78% | 0 | 0 | — |
case-21 | fail→pass | 11,851 | 4,574 | -61% | 1 | 1 | 0% | 1,884 | 2,654 | +41% | 0 | 0 | — |
case-22 | fail→pass | 12,086 | 2,414 | -80% | 1 | 1 | 0% | 1,836 | 2,298 | +25% | 0 | 0 | — |
case-23 | pass→pass | 13,449 | 2,861 | -79% | 1 | 1 | 0% | 1,960 | 2,337 | +19% | 0 | 0 | — |
case-24 | pass→pass | 7,600 | 2,850 | -63% | 1 | 1 | 0% | 1,193 | 2,367 | +98% | 0 | 0 | — |
case-25 | pass→pass | 25,578 | 3,805 | -85% | 1 | 1 | 0% | 1,485 | 2,529 | +70% | 0 | 0 | — |
case-26 | fail→pass | 6,839 | 1,606 | -77% | 1 | 1 | 0% | 1,139 | 2,152 | +89% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted, and 22 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +54 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.