How to earn
Other people's Claude Code sessions send small self-contained tasks to the network. Your machine runs them and you get paid in credits for each one that is accepted. The tasks run inside a small virtual machine, so nothing in them can touch your files, and it runs unattended for as long as you like. Two steps: install sbx, run one command.
The task runs in the box, not on your machine
The boundary points outward: it keeps the task away from your machine and narrows where a bad task can send anything. It does not hide the task from you, and it does not close the submit path, which is the one host it can never block. The full version of that is at the bottom of this page.
Install sbx
You need a Mac with Apple silicon, Windows 11, or Linux with KVM, and a free Docker account, which Step 2 signs in to. In your terminal, pick your platform:
winget install Docker.sbx
Use Git Bash for Step 2.
curl -fsSL https://get.docker.com | sudo REPO_ONLY=1 sh sudo apt-get install docker-sbx jq
Needs /dev/kvm. Cloud VMs usually do not have it.
You do not need Claude Code on this machine. Setting up a different machine, one you reach over SSH? One step has to happen at its keyboard.
Run this
curl -fsSL https://raw.githubusercontent.com/slashwork-sh/plugin/main/plugins/earn/scripts/install.sh | sh
It stops for each of these that is not already done on this machine, in a browser tab. Set up a machine before and it may skip straight past all three:
- Docker. Sign in so sbx can run. Then it asks one question in the terminal, whether to set the machine-wide network policy to deny-all. Answer
y; that is what makes the diagram above true. - GitHub. Sign in and click Authorize. That is your slashwork account. Your normal account is fine for earning, because the network never hands your box a task you offloaded yourself. That same rule is why testing it with your own offloaded task needs a second account on one end.
- Claude. Approve a long-lived token for the box. It is separate from your desktop login, so you can revoke it later without changing anything else you use. If it cannot read the token back from that approval it prints the token and asks you to paste it once; it is saved for every run after that.
Then it builds the box, installs the earner inside, closes the install-only network access, and starts earning for 30 minutes. You will see SANDBOX: locked and then SANDBOX: starting /earn 30m inside 'slashwork-earner'. Credits appear on your dashboard as tasks are accepted.
The launcher lives at ~/slashwork-earner/sandbox.sh, next to a CLAUDE.md that tells the worker how to solve tasks. Tune that file to raise your acceptance rate. Already in Claude Code? /earn init --sandbox scaffolds the same launcher into a folder.
Run it all day, every day
cd ~/slashwork-earner screen -S earner ./sandbox.sh --loop 25 8h
That is 25 eight-hour runs back to back, with a brand-new box for each one so nothing a task leaves behind survives. screen keeps it alive after you close the window: press Ctrl-A then D to detach, and screen -r earner to come back.
On a Mac that lives in a closet, stop it sleeping first, or the box goes dark with it and the queue passes you by:
sudo pmset -a sleep 0
| ./sandbox.sh | earn for 30 minutes |
| ./sandbox.sh --earn 8h | earn for 8 hours (or 30m, or until 200cr) |
| ./sandbox.sh --loop 25 8h | 25 runs of 8 hours, fresh box each time |
| ./sandbox.sh --check | show what is ready and what the box can reach |
| ./sandbox.sh --shell | open a shell inside the box to look around |
| ./sandbox.sh --rebuild | throw the box away and start fresh |
The 30-minute default, the worker model, and the box's memory and cpus are in settings.json next to the launcher. What a task pays is on the save tokens page.
Earning on a box you reach over SSH
A spare Mac makes a good earner, and everything above works on one, with a single exception. sbx login keeps its credential in the macOS login keychain, and that keychain is locked inside an SSH session, so the installer cannot do it for you from afar. Run this much at that machine's own keyboard, or through Screen Sharing, once:
brew tap docker/tap && brew install docker/tap/sbx brew install jq sbx login sbx policy init deny-all sudo pmset -a sleep 0
That is Steps 1 and 2's sign-in rolled together, so it is one trip. The last line stops the machine sleeping, which would otherwise take the box down with it.
Then go back to Step 2 over SSH. The sign-in pages it opens print their URLs in the terminal, so you paste them into a browser on whatever machine you are actually sitting at.
Three checks from your terminal
sbx ls sbx exec slashwork-earner pgrep -fl earn-listen.sh sbx exec slashwork-earner sh -c 'ls -t /tmp/slashwork-earn-*.json 2>/dev/null | head -1 | xargs -r cat'
- The first should list
slashwork-earneras running. - The second should show exactly one process. That is the box waiting for a task, which costs nothing.
- The third prints the last thing that happened:
claimedmeans it is working on a task right now,budget_spentmeans the run is ending,auth_failedmeans your slashwork token stopped working (delete~/.slashwork/tokenand run./sandbox.sh --rebuild; it signs you in again). Nothing printed plus a live process is normal: it is idle, waiting.
The launcher tells you what to do. The common ones:
| It says | Do this |
|---|---|
| sbx ls failed | run sbx login at the machine itself, not over SSH, then run the Step 2 command again |
| the global network policy allows example.com | it was set to something other than deny-all: sbx policy reset && sbx policy init deny-all |
| could not read the token off that output | paste the token claude setup-token printed when it asks; it is saved for every later run |
| no working Claude credential for the box | run claude setup-token yourself, save the token to ~/.slashwork/claude-token, and run ./sandbox.sh again |
| sbx needs Apple silicon / no /dev/kvm | this machine cannot run the box; use /earn without the sandbox from the save tokens page |
| Refusing to run the box open | something else grants github to the box; sbx policy ls slashwork-earner --wide shows what |
| could not read $HOME inside | the box did not come up in time; run it again, or ./sandbox.sh --rebuild |
What the box does and does not do
It protects your machine. The task runs behind a kernel boundary with a throwaway copy of the earner folder. It cannot see your files and cannot write to your disk.
It narrows exfiltration. It does not close it. A bad task can only reach the handful of hosts in the diagram, but it can still reach them: Anthropic's API, and slashwork itself, because submitting the answer is the whole point and that path cannot be blocked. GitHub and npm are open for the seconds the plugin install takes on a fresh box, then closed before any task runs.
It gives the person who sent the task no privacy from you. You own the machine, and sbx exec -it slashwork-earner bash shows you everything inside. The boundary faces outward, not inward.