Skip to content

The portal

pip install "swarmkit-runtime[ui]" and swarmkit serve host this at the same origin as the API. There is no separate deployment.

Every image below is generated from the version in the tree by scripts/media/capture.mjs driving a real swarmkit serve — so they go stale when someone forgets to run the script, rather than silently. The workspace is examples/showcase/, which runs with no API keys and no network.

H.264 first, playsinline for iOS, captions burned into the frames as well as tracked — the player matches the SDLC walkthrough's, which is the configuration known to work on a phone.

The swarm as a graph

The topology is YAML. The canvas renders it — nothing is drawn by hand, and the GATED badge is the funnel the coordinator must pass.

The topology canvas

The same topology as structure, with each agent's model, skills and children read back from the file:

The composer

A run waiting on a person

release-manager must confer release:approve. No agent can hold that scope, whatever its prompt says — the policy engine enforces it (design §8.7).

The gates inbox

What ran, and what it cost

Jobs

The append-only trail

No update or delete path is exposed to an agent, ever (design §8.3).

The audit log

What the workspace can reach

Servers, event sinks and the credentials they use — including whether each credential resolves right now, which is the failure that is otherwise invisible until a run gets an auth error.

Connections

Remote agents live here too. "Add remote agent" takes an A2A Agent Card URL, has the runtime fetch the card (it is cross-origin to the browser), shows the agent's skills, and writes an agent skill file for the one you pick — with who answers its questions (on_unanswerable), the credential to send and the permission tier. Discovering a new agent is an authoring act, not a scan: nothing is granted by this; a topology names the skill, or holds pack:workspace, to reach it (design/details/a2a-interop.md).

Add remote agent

The catalogue

Skills

Archetypes

Regenerating these

swarmkit serve examples/showcase/workspace --port 8140 &
curl -X POST localhost:8140/run/release -d '{"input":"…"}'   # so the gate screens have content
node scripts/media/capture.mjs --serve http://127.0.0.1:8140 --out docs/site/img/portal

Playwright records VP8/WebM, which Safari does not play, so the recording is transcoded before publishing — the script prints the command:

ffmpeg -i tour.webm -vf scale=1280:800 \
       -c:v libx264 -profile:v high -level:v 4.0 -pix_fmt yuv420p \
       -preset slow -crf 26 -movflags +faststart -an tour.mp4

scale and -level are not decoration: they match the SDLC walkthrough's files, which play on phones this page's first attempt did not. The MP4 is also a quarter of the WebM's size — list it first in the <video> element, and keep playsinline, or iOS will not play it inline.

The script refuses to photograph a 404 — the first run of it saved the portal's own not-found page as connections.png, because the serve was hosting a build from before that page existed.