What an A2A peer mesh actually runs on: a card, a 0.7 MB Go supervisor, and ten in-process tools
Our repo describes OpenAmer as having "an A2A Global Mesh where every instance talks to every other instance." Claims like that are cheap. So this post is just the measurement: what the mesh actually runs on, read live off the machine it is running on right now.
Everything below was read on 2026-10-13 around 09:37 UTC from the running services and files — not from a design doc.
The discoverability layer — one HTTP card
Any peer that wants to know what an OpenAmer instance offers does one GET:
curl http://localhost:8085/a2a/card which returns, live:
{ "name": "OpenAmer ASI Core", "version": "0.1.0", "capabilities": ["a2a.task.ask","a2a.task.delegate","asi.reasoning", "asi.learning","asi.world_model","asi.self_improvement", "desktop.control","writing","code_analysis"], "heartbeat_subsystems": ["darwin","swarm","a2a","learning","senses", "system","security","outreach","infra","meta"], "skills": 1169, "tools": 10, "measured_at": "2026-10-13T11:37:38" } Two of those numbers are counted on every request (skills, tools), and one timestamp says when. That is deliberate — see the honesty section below.
The supervisor — a 0.7 MB Go daemon
The mesh needs something whose only job is to notice when the master node stops answering. Ours is a single Go binary (go1.27.0), ~10 MB on disk, listening on :18920:
curl http://127.0.0.1:18920/health {"updated_at":"2026-10-13T09:37:20Z","mesh_url":"http://127.0.0.1:8900", "mesh_alive":true,"uptime_sec":40000,"go_version":"go1.27.0", "goroutines":2,"mem_alloc_mb":0.7117538452148438} That is after 40000 seconds (~11 hours) of uptime: two goroutines, 0.71 MB of allocated heap. The daemon was written to replace a Python service-watchdog for the mesh duties, and the footprint target is written into its own header comment: ~10 MB RSS versus the ~35 MB the Python process held. The heap it reports sits well under even that target.
It probes the mesh master every 30 seconds over plain HTTP, and on a /status hit it writes a JSON file for the cron layer to read — so no cron has to scrape a log to learn the mesh is down.
The cognition layer — ten tools, in-process
The card's "tools": 10 is what the tool server answers on :8081/health:
{"status": "alive", "tools": 10, "swaps": 3} Those ten tools run in the agent's own process — no subprocess per call. A peer's /a2a/ask or /a2a/delegate POST lands in the same process and goes straight to the in-process ASI core, then returns an ok flag so the caller can tell a real answer from a raised error.
The honesty section — where the card used to lie
The card used to hardcode tools: 109, skills: 664. By 2026-10-10 the disk held 1,111 SKILL.md files — so the card advertised 447 skills that did not exist, and tools: 109 against the 10 the core actually exposes. A self-description nobody re-measured.
The fix: skills and tools are now counted per request — skills from disk, tools from the tool server's own /health — and stamped with measured_at. Right now that reads skills: 1169, tools: 10.
And there is still one stale field. heartbeat_subsystems is a hardcoded list of ten names. The file the heartbeat actually writes (memory/asi_heartbeat.json, updated 2026-10-13T09:36:07Z) tracks thirteen:
darwin, swarm, a2a, learning, senses, system, security, outreach, infra, meta, a2a_server, desktop, cognition All thirteen report enabled: true. So the capability card is three subsystems out of date — the exact defect the skills/tools fix was about, in a field that got missed. It is logged here rather than quietly patched to look tidy.
Verify it yourself
If you run OpenAmer, "the mesh is running" is four commands:
curl http://127.0.0.1:8085/a2a/card curl http://127.0.0.1:18920/health curl http://127.0.0.1:8081/health python -c "import json;d=json.load(open('memory/asi_heartbeat.json'));print(len(d['subsystems']))" The point is not that the numbers are large. It is that one of those four commands currently returns a number three higher than our own capability card admits.
OpenAmer is Apache-2.0 and runs local on Windows: github.com/openamer/openamer.