Skip to content

Fuse mounts#351

Merged
breardon2011 merged 9 commits into
mainfrom
fuse-mounts
Jun 4, 2026
Merged

Fuse mounts#351
breardon2011 merged 9 commits into
mainfrom
fuse-mounts

Conversation

@breardon2011

Copy link
Copy Markdown
Contributor

Summary

Adds sandbox.mounts.* — first-class FUSE mounts inside sandboxes via rclone. Users mount S3, GCS, Azure Blob, SFTP, WebDAV, Dropbox (or anything rclone supports
via raw config) and read/write the path like a local filesystem.

await sandbox.mounts.add({
  path: "/mnt/data",
  remote: "s3:my-bucket",
  backend: "s3",
  creds: { access_key_id: "...", secret_access_key: "...", region: "us-east-1" },
});

await sandbox.exec.run("ls /mnt/data");

Design

Mounts survive hibernate/wake naturally  savevm captures the live FUSE state + rclone daemon, loadvm restores both. We lean on the platform's snapshot mechanism
rather than fighting it.

An earlier revision in this branch built encryption-at-rest + a persistent: true opt-in + an OnWake replay hook to "officially" support hibernate-survival. After
live testing on dev showed savevm/loadvm already handled it correctly, all that came back out  simpler implementation, same end-user behavior. Explicit
mounts.remove(path) runs fusermount3 -u when a user wants a mount gone.

What's in the box

- Rootfs: fuse3 + rclone baked into Dockerfile.default, plus /etc/fuse.conf with user_allow_other
- Shared service internal/mounts/  probe  write config to tmpfs (mode 0600)  exec rclone mount --daemon
- API POST/GET/DELETE /sandboxes/:id/mounts registered in both internal/api (combined mode) and internal/worker (server mode), same Service underneath
- SDKs TS + Python: mounts.add/list/remove
- CLI oc mounts add/list/rm
- Backend templates for s3, gcs, azureblob, sftp, webdav, dropbox; raw rcloneConfig escape hatch for anything else
- Docs docs/sandboxes/mounts.mdx

Test plan

- Unit tests for rclone config rendering (each backend, raw passthrough, deterministic ordering, error cases)
- Unit tests for the in-memory mount registry
- End-to-end on dev (app2.opensandbox.ai): real S3 bucket  add  read  hibernate  wake  read  remove all green
- CI integration against MinIO (deferred  local MinIO container in CI)

@2027-evals

2027-evals Bot commented Jun 4, 2026

Copy link
Copy Markdown

2027 — Eval complete for commit a58abf0

URL Mapping
digger.dev opensandbox-fuse-mounts.mintlify.app
opencomputer.dev opensandbox-fuse-mounts.mintlify.app

2027 // complete the getting started guide at https://opencomputer.dB 75.6/100

  ███████████████░░░░░
Time Cost Errors Interruptions
1m 30s ▼ -4m 18s $1.08 ▼ -$1.91 0 ▼ -2 1

Friction points:

  • 🟡 The primary domain (opencomputer — .dev) issues a 308 redirect to a Mintlify subdomain, requiring AI agents to make an extra round-trip before any content is accessible.
  • 🟡 The quickstart content is split across at least three pages (root, /quickstart, /introduction), forcing agents to issue multiple fetches to assemble the full onboarding flow — .
  • 🟡 No OpenAPI/Swagger specification is published, limiting programmatic exploration of the REST API surface by AI tools — .
  • 🟡 No official MCP server is available, reducing discoverability for AI coding agents that rely on MCP-based tool registries — .
Prompt

complete the getting started guide at https://opencomputer.dev

Commit a58abf0 · View report → · View trace →


Evaluating agent experience using 2027.dev · View dashboard

@breardon2011 breardon2011 merged commit 261e158 into main Jun 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants