Meshfleet v0.8.7 — Templates, dashboard, and a complete v0.8.x series
v0.8.5–0.8.7 add fleet template versioning, portable export/import sharing, and a live dashboard TUI. The full v0.8 series: 8 releases, 181 tests, all open issues closed.
The first two v0.8.x posts covered the resilience push (v0.8.0) and the smart routing work (v0.8.1–0.8.4). This post wraps up the series with the three releases that close it out: v0.8.5, v0.8.6, and v0.8.7. Together they add versioned templates, portable sharing, and a live dashboard. After v0.8.7, every open GitHub issue is resolved.
v0.8.5 — Fleet template versioning
Before v0.8.5, save_fleet_template(name, agents) would throw if the name already existed. That was the safe behavior, but it made templates effectively write-once: a tweak meant either renaming or wiping the old one. v0.8.5 introduces versioning.
saveFleetTemplate(name, agents, description?, version?) now creates a new version on each save. If version is omitted, it defaults to max(existing) + 1. The internal ledger key is ${name}@v${version} so versions coexist in the same templates dict without collision.
The new API surface:
// Save v1
const v1 = saveFleetTemplate("code-review", agents, "initial");
// → { name: "code-review", version: 1, ... }
// Save v2 (auto-increment)
const v2 = saveFleetTemplate("code-review", agentsV2, "improved prompts");
// → { name: "code-review", version: 2, ... }
// Get specific version
const t1 = getFleetTemplate("code-review", 1);
const tLatest = getFleetTemplate("code-review"); // latest
// List all versions
const all = listFleetTemplateVersions("code-review");
// → sorted newest-first
// Delete one version (or all)
deleteFleetTemplate("code-review", 1);
deleteFleetTemplate("code-review"); // removes every version
The FleetTemplate interface gained a version: number field. spawnFromTemplate(name, version?) respects the version argument. Closes #6.
v0.8.6 — Fleet template sharing
v0.8.6 adds portable export/import. You can now move a fleet template between machines — or back it up, or share it in a Git repo.
exportFleetTemplate(name, file_path, version?) writes a portable JSON file with the schema marker meshfleet-template-v1:
{
"schema": "meshfleet-template-v1",
"name": "code-review",
"version": 1,
"description": "3-agent code review pipeline",
"agents": [...],
"exported_at": 1762137600000
}
importFleetTemplate(file_path, rename?) reads, validates the schema, and inserts. If the name already exists and no rename is given, a timestamp suffix is appended (e.g. code-review-2026-07-02T17-50-00) so existing work is never silently clobbered. Throws on missing file, unparseable JSON, unknown schema, or missing required fields.
// On machine A
exportFleetTemplate("code-review", "./code-review.json");
// On machine B
const imported = importFleetTemplate("./code-review.json");
// → { name: "code-review", version: 1, ... }
// Or rename on import
const renamed = importFleetTemplate("./code-review.json", "code-review-v2");
// → { name: "code-review-v2", version: 1, ... }
Closes #7.
v0.8.7 — Fleet dashboard TUI
The last open issue (#8) was a request for a TUI showing running fleets, messages, and agent status. v0.8.7 ships exactly that as a new bin entry:
npx agent-mesh-dashboard # refresh every 1s (default)
npx agent-mesh-dashboard --interval 500 # custom interval
npx agent-mesh-dashboard --once # one-shot inspection
The dashboard reads the same JSON ledger as the MCP server — no IPC, no daemon, just polls the ledger and event log on the configured interval. ANSI cursor moves for in-place updates; Ctrl+C to exit. Verified against a live ledger with 13 fleets, including interrupted agents (proving the v0.8.0 recovery feature is working in production).
The view:
Meshfleet Dashboard — 2026-07-02 22:53:11 (Ctrl+C to exit)
Fleets (13)
✓ bc34d339 complete agents= 3 (run=0 done=3 fail=0) 34m46s
✗ 5db4167a failed agents= 2 (run=0 done=0 fail=2) 567ms
◐ eeeb4e7f running agents= 3 (run=0 done=0 fail=0) 41m16s
...
Recent Agents (last 10)
896d0605 cfb1ce9e hool-dev-canon interrupted 2s
...
Recent Events (last 20)
22:53:08 agent_retry_scheduled a2 f1 (attempt 2)
22:53:10 agent_failed_permanent a2 f1
...
The v0.8.x series at a glance
| Version | Theme | Highlights |
|---|---|---|
| v0.8.0 | Hardening push | Retry with exponential backoff, partial result recovery, ledger schema versioning, route_work top_n |
| v0.8.1 | Skill taxonomy | Hierarchical skill matching with ancestor/descendant decay |
| v0.8.2 | Routing feedback loop | record_routing_outcome + Wilson-style score adjustment |
| v0.8.3 | Synonym expansion | Curated synonym table for 30+ dev terms |
| v0.8.4 | Performance benchmarks | Self-contained suite; v1.0 gates verified |
| v0.8.5 | Template versioning | Re-saving creates a new version; get/list/delete(version?) |
| v0.8.6 | Template sharing | Portable meshfleet-template-v1 JSON export/import |
| v0.8.7 | Dashboard TUI | npx agent-mesh-dashboard — live fleets, agents, events |
By the numbers
- 8 releases on GitHub (v0.7.0 through v0.8.7)
- 181 tests across 17 files, all passing on the 3 OS × 3 Node CI matrix
- 10/10 GitHub issues closed (every starter issue is shipped or documented)
- 3 OS × 3 Node CI green on every release
- 17 pages on meshfleet.app, including 5 blog posts
- 15 MCP tools + 5 supporting modules (
retry,recovery,taxonomy,feedback,synonyms) - One npm command away from public:
npm install -g agent-mesh(ready, blocked on usernpm login)
What the v0.8 series unblocks
The original v0.8 plan from the ROADMAP called for “smart routing” as the headline. We delivered that and more:
- Reliability: retry + recovery means the mesh survives transient failures and crashes.
- Intelligence: taxonomy + feedback + synonyms mean routing gets the right agent, not just the agent whose role contains the exact keyword.
- Observability: dashboard + benchmarks + events mean the user can see what’s happening and the v1.0 perf promises are measurable.
- Reusability: versioning + sharing mean templates are first-class artifacts that can be versioned, shared, and rolled back.
The next milestone is v0.9 — batch writes (fixing the 3.8ms/message sendMessage bottleneck), and then v1.0 with API freeze, distributed ledger option, and the npm publish that turns npm install -g agent-mesh into reality.
Try it
git clone https://github.com/johnmwhitman/agent-mesh.git \
~/.config/opencode/mcp-servers/agent-mesh
cd ~/.config/opencode/mcp-servers/agent-mesh
npm install && npm run build
Or once published: npm install -g agent-mesh.
Add to ~/.config/opencode/opencode.jsonc and restart OpenCode. Then try:
npx agent-mesh-dashboardto watch your fleet livesave_fleet_templatewith thecode-review-trioexample fromexamples/route_work("audit authentication security", top_n=3)to see the fan-out routing
Full release notes: GitHub releases Roadmap: ROADMAP.md Compat: COMPATIBILITY.md Benchmarks: BENCHMARKS.md
Built this. Open-sourced it. Would love your feedback.