Repository navigation
Conversation
ADR 0010 records one outbound box connection to Stockholm for the readable copy and Noise command frames, with the Frankfurt relay retired after the iOS app, webapp and MCP connector have moved. Signed-off-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Fredrik Ahlgren <fredrik@sourceful-labs.com>
|
Review, and Fredrik's decisions on it (15 October 2026). The target in this ADR stands. These answer the open questions and change four points. Decisions
#1633 and srcfl/ftw-webapp#87. Please pause both. They move the relay's room protocol ( Order. The box keeps its relay socket until every client has moved, so nothing breaks.
Before commands move to the cloud, fix these in ftw-cloud:
Box session slots should become one per device rather than four anonymous ones ( Small fixes to the text: the iPhone's passkey code is 🤖 Generated with Claude Code |
Problem and result
Remote access is two outbound dials: the readable copy goes to FTW Cloud in Stockholm (
cloud.ftw.energy, #1595), and commands go to the blind relay in Frankfurt (relay.ftw.energy). An agent has no identity on the box.ADR 0010 is a proposed sketch, docs only. Fredrik's target: the box keeps one outbound connection to Stockholm, carrying the readable copy and end-to-end Noise command frames. The iOS app (
srcfl/ftw-app), the webapp (srcfl/ftw-webapp), the home box and a later MCP connector all use that entry. The Frankfurt relay is retired after they have moved. The cloud forwards command frames and cannot read them. This revises ADR 0008's read-only command rule; the service still does not dispatch.The box issues an
agentdevice when the owner approves it with the passkey in the iOS app: a scoped, expiring, revocable delegated key, checked on every MCP call. The first agent reads live data and sends control. Statistics and opt-in redacted logs (ftw.logs.read) come later. MCP clients use OAuth 2.1, one token per home. A separate GitHub App may open a redacted issue or pull request and cannot merge.Open: (a) port the relay to Go in
srcfl/ftw-cloudor keep it as a loopback container; (b) how the cloud admits a command session; (c) the allowlist, caps and iOS push that stand in for a passkey on a sensitive agent command; and the webapp questions (escrow and Cloudflare hosting, the browser Noise session, theapp.ftw.energypasskey origin, migration order and DNS).Cross-links point here from ADRs 0006, 0008 and 0009 and from
docs/architecture.md.Scope and safety
Documentation. No runtime change. The sketch keeps the box as the authority: commands keep an expiry, core revalidates against fresh state, planner output never reaches hardware, and stale site-meter data still stops dispatch. After the relay is retired, a home with the FTW Cloud grant off has no remote command path. Local control is unchanged.
No overlapping open PR touches
docs/adr/.Verification
Not applicable. This is a proposal. Implementation evidence is the proof column in the ADR's phase table, starting with a box that accepts a command while the Frankfurt relay is firewalled.
Checklist