Sandbox transparency - #47
Conversation
Expose sandbox snapshot and rewind tools for Exoclaw while preserving canonical sandbox lifecycle events during active turns. Add Docker backend selection fixes and adapter error hardening needed to exercise the workflow reliably. Co-authored-by: Cursor <cursoragent@cursor.com>
Bring the sandbox transparency branch up to date with main, preserving the Daytona backend refactor and the active-turn sandbox event handling. Co-authored-by: Cursor <cursoragent@cursor.com>
Bundle tool-round execution context so the active-turn sandbox event plumbing passes strict Clippy checks. Co-authored-by: Cursor <cursoragent@cursor.com>
ankrgyl
left a comment
There was a problem hiding this comment.
I made a change in #46 that I think is a better interface to the exoharness itself, which is to let it manage named sandboxes, and deal with how to give you back a handle to that sandbox inside the exoharness itself. That way, the notion of what the current agent has is irrelevant in the exoharness itself.
| #[derive(Clone)] | ||
| enum ActiveSandboxEventSink { | ||
| Turn(Arc<dyn TurnHandle>), | ||
| Suppressed, | ||
| } |
There was a problem hiding this comment.
this looks like it shuold be in basic.rs. Types defines stuff that any exoharness implementation could use/inherit.
| } | ||
|
|
||
| tokio::task_local! { | ||
| static ACTIVE_SANDBOX_EVENT_SINK: ActiveSandboxEventSink; |
There was a problem hiding this comment.
this looks like it belongs in the harness. Remember the exoharness may need to be exposed over HTTP. So 'thread local' shouldn't be part of it.
There was a problem hiding this comment.
Yup agree. Good point.
| .arg(&snap_tag) | ||
| .stdout(Stdio::piped()) | ||
| .stderr(Stdio::piped()) | ||
| .kill_on_drop(true) |
There was a problem hiding this comment.
why change these semantics?
There was a problem hiding this comment.
When testing with Docker, this prevented an orphaned, long-running docker save process (I exited right after issuing a snapshot).
Adopt main's reusable sandbox machinery while preserving Exoclaw's agent-owned sandbox controls. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep named sandbox reuse from replacing an active restored handle after rewind, and document that sandbox history remains append-only. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
SELF-CONTROL.mddocumenting Exoclaw’s tool, adapter, and sandbox control model.