123 lines
4.0 KiB
Markdown
123 lines
4.0 KiB
Markdown
# Architecture
|
|||
|
|
|
||
|
|
byre from the system down to its software layers. Open a box with the magnifier mark (Server Mac, byre serve, the Manager, Byre.app on Mac) to see the layer inside it. The diagram syntax is the `diagrams` knowledge-base article.
|
||
|
|
|
||
|
|
```diagram
|
||
|
|
row
|
||
|
|
user "You" "on your Macs and iPhone"
|
||
|
|
row
|
||
|
|
mac "Byre.app on Mac" "SwiftUI · two panes" blue
|
||
|
|
phone "Byre on iPhone" "same app, tab bar" blue
|
||
|
|
icloud "iCloud" "CloudKit sync of app prefs" green
|
||
|
|
dl "dl.byre.run" "Sparkle appcast + dmg" green
|
||
|
|
row
|
||
|
|
tailnet "Tailscale tailnet" "each app and server is its own node · identity = auth"
|
||
|
|
row
|
||
|
|
servermac "Server Mac" "launchd service run.fc.byre" amber
|
||
|
|
vendors "Agent vendors" "Anthropic · OpenAI · Google" green
|
||
|
|
origin "git remote" "origin: fetch · push" green
|
||
|
|
user -> mac
|
||
|
|
user -> phone
|
||
|
|
mac -> tailnet "REST · SSE · WebSockets"
|
||
|
|
phone -> tailnet
|
||
|
|
mac ..> icloud
|
||
|
|
mac ..> dl "updates"
|
||
|
|
tailnet -> servermac "HTTPS on byre's ts.net name"
|
||
|
|
servermac -> vendors "agent CLIs"
|
||
|
|
servermac -> origin "merge · push"
|
||
|
|
|
||
|
|
inside servermac
|
||
|
|
row
|
||
|
|
service "byre serve" "Contents/Helpers/byre" amber
|
||
|
|
row
|
||
|
|
clis "Agent CLIs" "one process group per session"
|
||
|
|
claude_cli "claude"
|
||
|
|
codex_cli "codex"
|
||
|
|
agy_cli "agy"
|
||
|
|
hands_srv "byre-hands" "screen · AX · Orion · Chrome, one copy per session"
|
||
|
|
row
|
||
|
|
repos "Project checkouts" "default branch + task worktrees" green
|
||
|
|
data "Data dir" "byre.db · loopback-token · codex home" green
|
||
|
|
service -> clis "spawn · stream-json / app-server"
|
||
|
|
clis -> service "MCP tools · hooks over loopback"
|
||
|
|
clis -> hands_srv "MCP stdio"
|
||
|
|
clis -> repos "edit · commit"
|
||
|
|
service -> repos "snapshots · merge"
|
||
|
|
service -> data
|
||
|
|
|
||
|
|
inside service
|
||
|
|
row
|
||
|
|
listen "Listeners" "cmd/byre serve"
|
||
|
|
tsnet "tsnet node" "Tailscale whois → user"
|
||
|
|
loop "loopback 127.0.0.1" "bearer token, scripts"
|
||
|
|
row
|
||
|
|
http "internal/server" "REST (api/openapi.yaml) · SSE hub · client & terminal WebSockets · preview ports" blue
|
||
|
|
aside store "internal/store" "SQLite WAL, migrations" green
|
||
|
|
row
|
||
|
|
mgr "internal/agents · Manager" "tasks · lead · reviews · workflows · merges" amber
|
||
|
|
row
|
||
|
|
vendor "Vendor adapters" "one session per agent"
|
||
|
|
claude "internal/claude" "stream-json"
|
||
|
|
codex "internal/codex" "app-server JSON-RPC"
|
||
|
|
agy "internal/antigravity" "stream-json · MCP proxy"
|
||
|
|
tools "Agent-facing"
|
||
|
|
mcp "internal/mcp" "byre tools over HTTP"
|
||
|
|
hook "internal/hookcmd" "hooks via curl"
|
||
|
|
row
|
||
|
|
infra "Infrastructure"
|
||
|
|
git "internal/git" "worktrees · snapshots · notes"
|
||
|
|
term "internal/terminal" "PTYs · OSC 133"
|
||
|
|
clients "internal/clients" "client Mac requests"
|
||
|
|
wf "internal/workflow · schedule · todo"
|
||
|
|
tsnet -> http
|
||
|
|
loop -> http
|
||
|
|
http -> mgr "start · message · merge"
|
||
|
|
mgr -> vendor
|
||
|
|
mgr -> tools
|
||
|
|
mgr -> infra
|
||
|
|
mgr -> store "writes"
|
||
|
|
store ..> http "events → SSE"
|
||
|
|
store ..> mgr "poke coordinator"
|
||
|
|
|
||
|
|
inside mgr
|
||
|
|
row
|
||
|
|
coord "coordinator" "level-triggered, one goroutine" amber
|
||
|
|
live "live sessions" "turns · inbox · turn-end commit"
|
||
|
|
row
|
||
|
|
lead "lead agent" "per user · notes"
|
||
|
|
tasks "tasks" "fork · subtasks · teams"
|
||
|
|
review "reviews · audits" "workflow runs"
|
||
|
|
row
|
||
|
|
workers "workers" "merge · push · snapshot · discard"
|
||
|
|
coord -> workers "start (in-progress column)"
|
||
|
|
live -> workers "turn end"
|
||
|
|
coord -> review
|
||
|
|
coord -> lead "deliveries"
|
||
|
|
|
||
|
|
inside mac
|
||
|
|
row
|
||
|
|
ui "Views" "Panes · Chat · Composer · Sheet · Switcher" blue
|
||
|
|
row
|
||
|
|
appstore "Store" "in-memory state of every task" amber
|
||
|
|
pages "Pages" "WKWebView tabs · drive_page"
|
||
|
|
row
|
||
|
|
stream "EventStream · EventCache" "SSE + per-server disk cache"
|
||
|
|
remote "Remote" "client WebSocket: shell · files · hands · signing"
|
||
|
|
fwd "Forwards" "*.localhost previews"
|
||
|
|
row
|
||
|
|
net "API · TailnetProxy" "ByreAPI client over libtailscale SOCKS5"
|
||
|
|
aside persist "Persistence · Updater" "SwiftData + CloudKit · Sparkle" green
|
||
|
|
ui -> appstore
|
||
|
|
ui -> pages
|
||
|
|
stream -> appstore "events"
|
||
|
|
appstore -> net "requests"
|
||
|
|
stream -> net
|
||
|
|
remote -> net
|
||
|
|
fwd -> net
|
||
|
|
pages ..> fwd
|
||
|
|
|
||
|
|
highlight "Event stream" store http tailnet stream appstore ui
|
||
|
|
highlight "Agent turn" mgr vendor clis tools hands_srv repos
|
||
|
|
highlight "Client Mac control" mgr clients http remote
|
||
|
|
```
|