Something went wrong. Try again.
A collaborative coding-agent orchestrator for atproto radl.app
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899# Radial — architecture overview (midway between -simple and the full diagram)# Render: d2 --sketch docs/architecture-overview.d2 docs/architecture-overview.svg
vars: { d2-config: { sketch: true pad: 50 layout-engine: elk }}
direction: down
human: Human { shape: person style: {fill: "#f4f1ea"; stroke: "#4b4b4b"; font-size: 18}}
ui: "Radial web UI" { style: {fill: "#fbfbfd"; stroke: "#333"; stroke-width: 3; font-size: 20} what: "in the browser,\nyour own account\n\ncreate goals,\nrequest artifacts" { shape: text style: {font-size: 15} }}
net: "atproto — the bus" { style: {fill: "#eef4ef"; stroke: "#3d6b4c"; stroke-width: 3; font-size: 20}
hrepo: "your repo" { shape: cylinder style: {fill: "#f7fbf8"; stroke: "#3d6b4c"; font-size: 16} } arepo: "each agent's repo" { shape: cylinder style: {fill: "#f7fbf8"; stroke: "#3d6b4c"; font-size: 16} } what: "goals · requests · artifacts\nreviews · messages" { shape: text style: {font-size: 15; italic: true} }}
daemon: "An agent operator's machine" { direction: down style: {fill: "#fdfbf7"; stroke: "#333"; stroke-width: 3; font-size: 20}
watch: "radiald folds the same records the UI does,\nand for every open request addressed to\none of its agents, launches a turn" { style: {fill: "#fff"; stroke: "#333"; font-size: 16} } write: "signs and publishes the agent's records\n— the keys never enter the container" { style: {fill: "#ffe9e9"; stroke: "#8a3324"; stroke-width: 2; font-size: 16} }
turn: "Turn — one container,\none request, then gone" { style: {fill: "#fff8e6"; stroke: "#8a6d1f"; stroke-width: 3; stroke-dash: 4; font-size: 18}
brief: "the goal, prior versions,\nreview findings, the docs,\na git checkout" { shape: text style: {font-size: 15} } agent: "coding agent\nClaude Code / Codex" { style: {fill: "#fff"; stroke: "#333"; font-size: 16} }
brief -> agent }
watch -> turn: "brief + checkout" {style.stroke-width: 2; style.font-size: 15} turn.agent -> write: "a plan, an implementation,\nor a review" {style.stroke: "#8a3324"; style.stroke-width: 2; style.font-size: 15}}
forge: "GitHub" { style: {fill: "#f5f0f6"; stroke: "#6b4b78"; stroke-width: 3; font-size: 20} pr: "branch · commit · PR" { style: {fill: "#fdfbfe"; stroke: "#6b4b78"; font-size: 16} } merge: "a human merges —\nRadial never does" { shape: text style: {font-size: 15; italic: true} }}
human -> ui: "ask for work" {style.font-size: 16}ui -> net.hrepo: "your request,\nsigned by you" {style.stroke: "#3d6b4c"; style.stroke-width: 2; style.font-size: 15}net -> ui: "everyone's records" {style.stroke: "#3d6b4c"; style.stroke-dash: 3; style.font-size: 15}
net -> daemon.watch: "everyone's records" {style.stroke: "#3d6b4c"; style.stroke-dash: 3; style.font-size: 15}
daemon.write -> net.arepo: "the agent's\nartifact" {style.stroke: "#8a3324"; style.stroke-width: 2; style.font-size: 15}
daemon.turn.agent -> forge.pr: "opens a PR" {style.font-size: 15}
caption: "Both sides fold the same records into the same view — neither is in charge.\nEvery turn starts from a human pressing a button, and every result lands as a signed, attributable record." { shape: text near: bottom-center style: {font-size: 17}}