Goal
Cross-node attach is now proven between physical fleet nodes. It is entirely unproven against a Daytona sandbox node. agent-relay node agent attach --node advertises itself as "Canonical authenticated fleet-node terminal attach (physical or Daytona)". The Daytona half has never completed once.
The model — read this before planning anything
Sandbox nodes are brought up ON DEMAND. They are JIT. There is no live Daytona node, and there is not supposed to be one. Khaliq, restated 2026-08-16 and several times before.
The absence of a running Daytona node is the designed state, not a blocker and not evidence of anything being broken. A sandbox is provisioned when work needs it, serves that work, and goes away. Khaliq's 2026-08-13 correction sharpened it further: provisioning is fresh sandbox per agent, not one reused long-lived box.
Two consequences that govern this issue:
- Uptime is the wrong criterion. Any acceptance bar phrased as "a node stays up for N hours" is measuring the model we moved away from. The right criterion is whether a sandbox is attachable within its own lifetime, between provision and teardown.
daytona-fleet-proof-0811 is a relic, not a starting point. It has been offline since 2026-08-13 on broker 11.4.1. Do not revive it, and do not count its absence as a finding.
What is already established, so nobody re-derives it
- View attach across physical nodes: works — relay#1521, broker 11.6.7, live VT screens both directions, with a control arm.
- Drive attach across physical nodes: works — proven 2026-08-16 against released
agent-relay@11.6.9, recipient-side: a unique nonce typed through drive appeared on the target's own screen, observed by a separate process, with the target reacting in-session.
- Attach requires the fixed broker on BOTH ends. A partial rollout fails between mismatched pairs and looks like the feature itself is broken.
The real blocking questions
1. Does the JIT provisioning path bring up a broker new enough to attach at all? This is the load-bearing question. The terminal transport fix landed in 11.6.7; drive needs 11.6.9. If the sandbox image, snapshot, or install step bakes an older agent-relay, then every on-demand sandbox is unattachable by construction — and no amount of proving will help until the provisioning path is pinned to a current version. Establish what version a freshly provisioned sandbox actually runs before attempting any attach. Read it off the running process, not off what the image claims to install.
2. Is the on-demand path even wired up? provisionFleetSandboxNode() (cloud, packages/web/lib/fleet/sandbox-bridge.ts:464) is a complete, tested function with zero production callers. It may be exactly the mechanism this model needs; it was simply never connected. Determine whether it is the intended entry point, and if not, what is.
3. A 2GB cgroup ceiling makes the obvious install path fail silently. Inside the sandbox, free -h reports the host's memory (377Gi), not the container's limit. The real constraint is /sys/fs/cgroup/memory.max = 2147483648 bytes, flat. npm install -g agent-relay at a high baseline was OOM-killed (exit 137), silently the first time because a pipeline swallowed the exit code, leaving the CLI half-installed and broken. Prefer npm pack for targeted fetches, and check memory.current against memory.max before anything memory-heavy. This matters more under JIT, not less — a provisioning step that OOMs produces a sandbox that looks up and cannot work.
4. Sessions die with the sandbox (cloud#2930 — sandbox agent history is never captured). Under fresh-per-agent this stops being an edge case and becomes the normal path, so it likely has to be solved alongside rather than after.
Definition of done
- A sandbox provisioned on demand, through the JIT path rather than by hand, running a broker ≥ 11.6.9 — with the version read back off the running process. State how it was provisioned and whether
provisionFleetSandboxNode() was the mechanism.
- View attach to an agent inside that sandbox, from a physical node, within the sandbox's own lifetime. Live VT screen, plus a control arm proving the instrument works.
- Drive attach to that agent, evidenced recipient-side — a unique nonce typed on one machine appearing on the target's own screen, observed by a separate process, with the target reacting. A sender-side receipt, an exit code, and a green workflow are each fully compatible with nothing having arrived.
- The reverse direction: attach from the sandbox to an agent on a physical node, or a written explanation of why that direction is not supported.
- Teardown behaviour stated: what happens to an in-flight attach when the sandbox goes away, and whether that failure is distinguishable from a broken attach. Under a JIT model this is a normal event, so it needs a defined answer rather than a surprise.
- Version parity stated per arm — which absolute binary each side ran.
PATH and ~/.agentworkforce/relay/bin have been different builds on these hosts all week; one host ran three different versions in a day.
Known interference
relay#1537 is unfixed: a drive session's TerminalSession is never removed on clean detach, so every drive attach costs that agent ~10 minutes of drive-unavailability and the next attempt re-arms the fence. Use a fresh target for every arm. If you hit already has an active driver on a target you drove earlier, that is #1537, not a Daytona finding.
Related: cloud#2918 (interchangeable Cloud/Daytona and Mac execution), cloud#2930 (sandbox history), cloud#2699 (hardcoded /home/daytona layout blocks non-Daytona providers).
mergePolicy: never. Open PRs in the owning repos, stop at review. Khaliq owns every merge.
Goal
Cross-node attach is now proven between physical fleet nodes. It is entirely unproven against a Daytona sandbox node.
agent-relay node agent attach --nodeadvertises itself as "Canonical authenticated fleet-node terminal attach (physical or Daytona)". The Daytona half has never completed once.The model — read this before planning anything
Sandbox nodes are brought up ON DEMAND. They are JIT. There is no live Daytona node, and there is not supposed to be one. Khaliq, restated 2026-08-16 and several times before.
The absence of a running Daytona node is the designed state, not a blocker and not evidence of anything being broken. A sandbox is provisioned when work needs it, serves that work, and goes away. Khaliq's 2026-08-13 correction sharpened it further: provisioning is fresh sandbox per agent, not one reused long-lived box.
Two consequences that govern this issue:
daytona-fleet-proof-0811is a relic, not a starting point. It has been offline since 2026-08-13 on broker 11.4.1. Do not revive it, and do not count its absence as a finding.What is already established, so nobody re-derives it
agent-relay@11.6.9, recipient-side: a unique nonce typed through drive appeared on the target's own screen, observed by a separate process, with the target reacting in-session.The real blocking questions
1. Does the JIT provisioning path bring up a broker new enough to attach at all? This is the load-bearing question. The terminal transport fix landed in 11.6.7; drive needs 11.6.9. If the sandbox image, snapshot, or install step bakes an older
agent-relay, then every on-demand sandbox is unattachable by construction — and no amount of proving will help until the provisioning path is pinned to a current version. Establish what version a freshly provisioned sandbox actually runs before attempting any attach. Read it off the running process, not off what the image claims to install.2. Is the on-demand path even wired up?
provisionFleetSandboxNode()(cloud,packages/web/lib/fleet/sandbox-bridge.ts:464) is a complete, tested function with zero production callers. It may be exactly the mechanism this model needs; it was simply never connected. Determine whether it is the intended entry point, and if not, what is.3. A 2GB cgroup ceiling makes the obvious install path fail silently. Inside the sandbox,
free -hreports the host's memory (377Gi), not the container's limit. The real constraint is/sys/fs/cgroup/memory.max= 2147483648 bytes, flat.npm install -g agent-relayat a high baseline was OOM-killed (exit 137), silently the first time because a pipeline swallowed the exit code, leaving the CLI half-installed and broken. Prefernpm packfor targeted fetches, and checkmemory.currentagainstmemory.maxbefore anything memory-heavy. This matters more under JIT, not less — a provisioning step that OOMs produces a sandbox that looks up and cannot work.4. Sessions die with the sandbox (cloud#2930 — sandbox agent history is never captured). Under fresh-per-agent this stops being an edge case and becomes the normal path, so it likely has to be solved alongside rather than after.
Definition of done
provisionFleetSandboxNode()was the mechanism.PATHand~/.agentworkforce/relay/binhave been different builds on these hosts all week; one host ran three different versions in a day.Known interference
relay#1537 is unfixed: a drive session's TerminalSession is never removed on clean detach, so every drive attach costs that agent ~10 minutes of drive-unavailability and the next attempt re-arms the fence. Use a fresh target for every arm. If you hit
already has an active driveron a target you drove earlier, that is #1537, not a Daytona finding.Related: cloud#2918 (interchangeable Cloud/Daytona and Mac execution), cloud#2930 (sandbox history), cloud#2699 (hardcoded
/home/daytonalayout blocks non-Daytona providers).mergePolicy: never. Open PRs in the owning repos, stop at review. Khaliq owns every merge.