Cloudflare Think Workspace Empty After an Upgrade? Migrate the Files

After upgrading Think, your agent opens an empty workspace, though nothing was deleted. Where are the old files, and how do you bring them over?

Cloudflare Think Workspace Empty After an Upgrade? Migrate the Files
TLDR
  • Think now uses @cloudflare/computer, which reads different filesystem tables from @cloudflare/shell.
  • Old files remain in their original storage. Copy them into the new workspace, under /workspace for Think.
  • Record completion so the copy runs once; original timestamps and per-file MIME metadata are not preserved.

An empty new workspace does not mean the old table was deleted

For a Think application switching workspace implementations, check data migration before resetting anything. Cloudflare’s October 20 announcement explicitly says the new implementation does not import existing files. Without a copy, the agent starts with an empty workspace while the original data remains.

Older Think files live in cf_workspace_default. Computer uses vfs_ and _vfs_ tables. Both formats can coexist in one Durable Object, so changing the package does not make the new tools read the old records.

Copy into Think’s working root

The official migration helper reads the old workspace and writes through workspace.fs. Use that API rather than inserting into the new tables: chunk hashes and filesystem bookkeeping must remain consistent.

For Think, copy /notes.md to /workspace/notes.md. Review application code that still refers to the old absolute path.

Old setupCheck before migration
Default Think workspaceCopy files from the old default table into the new root.
Shell with R2-backed filesSupply the original R2 bucket and naming or prefix options to read the bytes.
Multiple Shell namespacesComputer currently supports one workspace per Durable Object storage.

The storage tradeoff matters for R2 users. Computer currently keeps writable file content in SQLite; R2 offloading remains a feature request. Likewise, workspace namespaces are proposed functionality, not a drop-in replacement for Shell’s separation.

Run the copy once, then check content and paths

The helper’s example records shellMigrated after copying and checks it on later starts. Do not run the copy unconditionally each time the agent wakes. If the new workspace already contains edits, decide how to reconcile them before bringing the old files across again.

The copy assigns new timestamps and does not retain per-file MIME metadata. An application that sorts by modification time or depends on stored MIME values needs more than a byte-content check.

A practical handover is to verify representative file contents, link targets and application paths before retiring the old storage. The official cleanup instructions also place verification first and distinguish exact R2 keys from a potentially shared prefix.

Migrating files does not restore the old bash tool

The current Think tools include file operations automatically, with ls replacing list. The default workspace has no execution backend, so it does not expose exec.

JavaScript execution requires a WorkerJavaScriptBackend and Worker Loader binding. If files are visible but code no longer runs, check that configuration instead of repeating the data migration. Working paths and the tools your application uses are both part of a complete upgrade.