Topology
The manifest's topology is a small node/edge graph describing your orchestration shape. It is optional (validation warns if absent), but it is how your workflow shows itself: it drives the interactive diagram on the detail page, the mini-diagram on cards, and the social OG image.
Example
A plan → implement → review pipeline with a parallel fan-out on implementation, a review feedback loop, and a final non-agent git step:
"topology": {
"nodes": [
{ "id": "plan", "role": "planner", "label": "Plan" },
{ "id": "impl", "role": "implementer", "label": "Implement", "fanOut": true },
{ "id": "review", "role": "reviewer", "label": "Review" },
{ "id": "merge", "role": null, "label": "Merge", "kind": "git" }
],
"edges": [
{ "from": "plan", "to": "impl" },
{ "from": "impl", "to": "review" },
{ "from": "review", "to": "impl", "label": "fix", "loop": true },
{ "from": "review", "to": "merge" }
]
}Node fields
id(string, required) — unique identifier, referenced by edges.role(string | null, required) — the agent role this node represents. Usenullfor non-agent steps; they get a muted rendering.label(string, required) — display text. Long labels are truncated in diagrams.kind(string, optional) — node flavor, e.g."git"for repository operations.fanOut(boolean, optional) — marks a node that runs as parallel instances. Rendered as a stacked card with an×Nbadge.
Edge fields
from/to(string, required) — node ids.label(string, optional) — short annotation, e.g. a condition.loop(boolean, optional) — marks a feedback edge (e.g. reviewer sending work back). Rendered dashed and amber, animated in the interactive diagram.
Where the graph is rendered
- Detail page— an interactive, read-only React Flow diagram, laid out left-to-right. Clicking a node scrolls to that agent's prompt file.
- Cards — a static mini-SVG generated server-side at publish time and cached, so browse pages stay light.
- OG images — the same SVG renderer composes your topology into the social preview image for
/w/author/slug.
All three renderings treat node and edge text as untrusted content — it is escaped and truncated everywhere. See the security model for the full picture, and the manifest reference for the exact schema.