Continue DeepSeek Harness sessions in a Blaxel sandbox
Move a DeepSeek Harness session to Blaxel, continue while your laptop is offline, then review and return the conversation and code changes.
Move your current DeepSeek Harness (DSH) Web session into a private Blaxel sandbox so the agent can keep working while your computer is offline. In this walkthrough, you add invoice status filters, bring the tested changes back to your local repository, and move the same session again.
Node.js 22.19.0 or newer in Node.js 22, or Node.js 24 or newer
Git, npm, and pnpm on your computer
A portable API key for the native DeepSeek or pi-ai model you select in DSH
A local Git worktree; the steps below create one from the Invoice Desk example
The commands select the current plugin release. The launcher selects its compatible DSH runtime. DSH is in developer preview.Tested with plugin 0.1.4 and DSH 0.1.2-rc.1.
Wait for installation to finish, then open the Web interface:
npx --yes --package @blaxel/dsh-sandbox@latest dsh-blaxel web
The launcher prepares the compatible runtime, including native conversation import support. Its first run downloads dependencies. Later runs reuse the cache. Use this launcher for subsequent visits, and keep the same DSH_HOME if you configure a custom profile.Read the first-launch notice and continue. If you use a DeepSeek model, configure its key when prompted. To choose a different supported provider, select Configure later and use Settings > Models in step 3.
The Invoice Desk starter already has CSV export and ten tests. Copy it into a small repository of its own so the handoff contains the application you are changing:
git clone https://github.com/blaxel-ai/deepseek-harness-blaxel-sandbox.git deepseek-blaxel-sourcecp -R deepseek-blaxel-source/examples/invoice-desk invoice-deskcd invoice-deskgit initnpm test
The starter tests should pass. In DSH, select Add workspace, choose the invoice-desk directory, and open it. Start a conversation in that workspace.The directory-selection image uses DSH’s browser-based folder picker. A desktop installation can show the native operating-system picker instead; choose the same project directory.
Open Settings > Models and configure the provider you intend to use. Select that model in the conversation’s model picker. The captured run uses GPT-4.1 mini through the native OpenAI provider with a portable API key.Open Settings > Blaxel. Select Sign in to Blaxel and complete browser authorization, then choose your workspace and Verify connection. An existing bl login profile also appears here. Use an API key instead exposes the workspace and API-key form when you need that sign-in method.Under Sandbox defaults, choose 4 GB memory. Expand Advanced settings, select Typescript App, leave Region on Automatic, and choose a maximum lifetime suitable for the task. This run uses 1 hour. Select Save defaults when you change a value.These defaults affect new sandboxes. Cloud sessions otherwise use a 24-hour maximum lifetime. Choose enough time to return the work before the sandbox expires.
The selected model’s portable API key enters the private cloud host so the agent can run independently. Blaxel credentials stay on your computer. Local OAuth grants, laptop-only model endpoints, external skills, and host MCP configuration do not migrate.
The cloud agent has full access inside its dedicated VM without per-tool approval. Use a model and project tools you trust with the model API key. Keep credentials out of the project files.
Read README.md, server.mjs and invoices.mjs. I want an invoice status filter with All, Paid and Pending options, keeping Export CSV. Give me a short implementation plan. Do not edit files yet. Do not read credentials or environment variables. Do not delegate.
After the plan, paste the implementation prompt below into the composer. Leave it unsent so you can see the draft travel with the conversation:
Implement that invoice status filter now. Add All, Paid and Pending links to the billing page using a status query parameter, and have the CSV export respect the selected status. Keep the existing layout and amount formatting. Add focused node:test checks for filtering without mutating the input and for unknown status values. Run npm test and verify the HTTP page and CSV routes using Node fetch against a temporary server. Stop that server afterward. Give a concise summary of the changed files and actual checks. Do not read credentials or environment variables. Do not delegate or ask follow-up questions.
Select Move to Blaxel. The launch panel reports workspace preparation, sandbox startup, and conversation restoration. Wait for the private cloud page to open and show Your session is on Blaxel.The plugin copies tracked files and unignored untracked files, including current edits. It restores the native conversation, referenced images, and pending draft. A running root task can move at a safe tool boundary; wait for local child agents to finish before moving.
Git-ignored files, .git, .dsh-blaxel, common credential files, and private keys are excluded from the snapshot. Install any project dependencies required inside the sandbox. Invoice Desk needs no extra packages.
Confirm the implementation prompt is still in the cloud composer, then send it. Model requests, tools, and new conversation history now run in the sandbox. Once the cloud page is ready, closing the original DSH process does not stop that cloud agent.The local conversation is read-only while Blaxel owns execution:Copy private link provides access to the cloud session from another browser. Treat the link as a credential. Links expire after 24 hours; reopening through Open cloud session on the original computer renews access. Link renewal does not extend the sandbox’s lifetime.
If access fails, reopen the session through the original DSH launcher and use its fresh private link. If Chrome still blocks it, investigate the browser restriction; do not make the sandbox public to bypass the error.
Read the agent’s actual test output before returning. The example started with ten tests; the captured run finishes with thirteen passing tests, including the new filter and HTTP checks. An agent can stop with an incomplete result, so verify its output rather than assuming the first response means success.In this run, the first response imported an unavailable fetch library. Start by asking the agent to use Node’s built-in fetch:
Finish the requested verification now. Use Node's built-in global fetch, with no fetch-library imports and no new dependencies. Read the test files first, fix any failed test or route, run npm test until it passes, and stop any temporary server. Do not inspect credentials or environment variables. Do not delegate or ask follow-up questions. Report only the actual passing test count and changed files.
The HTTP tests also needed an explicit loopback host and port for their temporary server, instead of inheriting the cloud host’s port. Status assertions needed to check table rows because the navigation contains every status label. We corrected those issues and verified all thirteen tests independently.Review the changed source as well. If a text file unexpectedly appears as a binary patch, cancel the return and have the agent inspect and correct it before proceeding.
On your original computer, start DSH with the same profile and launcher. Select Move back to local in the cloud page or the local Blaxel settings. Review the changed paths and actual patch, then select Apply changes and move back.The example review above comes from the second handoff’s README update. Your first return lists the application and test changes. The review always reflects the current sandbox’s changes.The return checks the patch against the current local worktree before writing. It checkpoints the cloud root, waits for active child agents, imports the conversation and supported child histories, restores the pending draft and original local permissions, then stops the sandbox after the files and history are durable locally.In a terminal inside invoice-desk, run:
npm testnpm start
Open http://localhost:3000. Select Pending and confirm only the pending invoice appears. Select Paid and All to check the other views. Export CSV follows the chosen filter.You can inspect the filtered CSV response independently in another terminal:
Expect a header and one pending invoice. The captured checks also verified three rows for All and two for Paid. If Chrome blocks an attachment download, keep browser download verification separate from a passing HTTP check. Stop the example server with Ctrl+C when finished.
Add a short local checkpoint to README.md and save it. For example:
## Local checkpointThe status filter and filtered CSV export are working locally.
In the same returned conversation, paste this prompt and leave it unsent:
Read README.md and add a short Status filters section explaining All, Paid and Pending and that Export CSV follows the selection. Preserve the existing Local checkpoint section. Run npm test. Do not change application code, inspect credentials or environment variables, or delegate. Summarize in one sentence.
Select Move to Blaxel again. The new sandbox starts with the earlier cloud changes, your new local checkpoint, and the same conversation. Send the prompt from the cloud page. After the tests pass, review and return the README change. Check that both the Status filters section and Local checkpoint remain locally.Reopening an existing sandbox reconnects to its current files. It does not upload newer local edits. Files transfer when you move and return the session; this is not continuous synchronization.
If local edits conflict with the return patch, the plugin keeps both copies, leaves the sandbox available, and identifies a recovery patch under the repository’s private Git directory. Preserve your local edits, resolve the conflicting file changes, and retry Move back to local.Restarting the original DSH host does not require a new sandbox. Reopen the same profile and session, then use Open cloud session or retry the return. If an import was interrupted, retry from that original profile so the durable transfer receipts can resume completed work.After a successful return, Settings > Blaxel no longer lists an active sandbox for that session:
Discard permanently removes unreturned cloud work. Sandbox expiry also makes remote-only work unavailable. Return the changes you need before discarding the sandbox or reaching its maximum lifetime.
For transfer limits, supported session data, and additional recovery cases, read the cloud handoff contract.