// The training program

Onboarding, champion edition.

Three minutes from npx to a VM doing the splits between your terminal and the Claude apps. Jean-Claude has already stretched; you only bring the keyboard.

1Get a VM

One command. It signs you in, registers your SSH key, asks for a name and a region (the closest one is preselected), then drops you straight into your new VM.

your machine
$ npx jclaude up
🥐 Jean-Claude is doing the splits across a fresh VM...
hello-jc is up. The splits are holding. (1 vCPU / 2 GB · cdg)
Door is open. SSHing you in...
jc@hello-jc:~$

Everything is already installed: Claude Code, codex, opencode, Node 24, Python, git, gh, tmux, the lot. The disk is persistent, so your repos and dotfiles survive restarts and resizes.

🥐Closed your terminal? jclaude ssh brings you back. Interactive connections live inside tmux, so whatever you left running is still there, mid-rep.

2Connect Claude

Inside the VM, start claude and type /login. It prints a URL: open it on your own machine, approve, paste the code back. One time only.

jc@hello-jc
jc@hello-jc:~$ claude
> /login
Open https://claude.ai/oauth/authorize?... and paste the code here
Logged in. Enchanté.

Your VM now uses your claude.ai account, which means the integrations you have connected there (Slack, Google Drive, GitHub, the whole entourage) are available to sessions running on this VM too. Nothing to re-wire.

And that is the entire setup. The first-run questions (theme, workspace trust, the "Enable Remote Control?" prompt) were answered at the factory. The moment login completes, a supervised Remote Control server in the background connects your VM to claude.ai, and keeps it connected 24/7. You can quit claude right away; the background server does the holding.

3It appears in the Claude apps

Open claude.ai/code in a browser, or the Code tab in the Claude mobile app. Your VM is there under Remote Control, labeled hello-jc, ready to start sessions.

The claude.ai/code environment picker. Under a Remote Control heading, two VMs are listed and ready for sessions.
claude.ai/code environment picker with your VMs online

Sessions you start here run on the VM, not on your laptop. Kick off a refactor from the desktop, close the lid, then check on it from your phone in the elevator. Same session, same context, still working.

The Claude mobile app composing a session on a Jean-Claude VM, with the VM shown as the connected environment.
the same VM, from the Claude mobile app

4Sessions that spawn sessions

Any session on the VM can launch more sessions. Ask in plain language:

"Start a new remote control session in ~/my-app with auto permissions"

The VM ships with a built-in skill that knows the moves, and this road gives you more flexibility than the environment picker: choose the working directory (each directory shows up as its own environment on claude.ai), set the permission mode, or resume an older session by id. For the curious, this is roughly what it runs under the hood:

under the hood
$ tmux new-session -d -s my-app -c ~/my-app \
    'claude --rc "my-app" --permission-mode auto'
// the new session reports its claude.ai URL back to you

Each spawned session hands back a claude.ai/code/session_... URL. Open it on any device and take over.

5Remote-control your own sessions

The reverse move also works. SSH in, run claude in any directory, work as usual. When you want that exact session in your pocket, type /remote-control inside it:

jc@hello-jc · ~/my-app
> /remote-control
/remote-control is active · https://claude.ai/code/session_01XYZ...

Now, how to walk away without knocking it out. Important: Claude Code has no detach of its own. Quitting it (Ctrl+C or /exit) stops the process, and remote control goes down with it. The detach move lives one layer up, in tmux. Two graceful exits:

🥐On the free plan the VM naps when nobody is connected, and a napping VM is offline on claude.ai until something wakes it (an SSH connection or a request to its public URL). Paid VMs never nap.

🥋Black belt extras

🐳 Docker, on demand

Run jc-install-docker once and Docker lands on the persistent disk, daemon started, surviving restarts and resizes. After that, docker run like anywhere else.

🌍 Public ports

Anything on localhost:3000is already public at your VM's URL. Need more? From your machine, jclaude port open 8000 serves it at :8000. Heads up: each open or close restarts the VM for about 15 seconds.

That is the whole curriculum.

One command to enroll. Jean-Claude handles the warm-up, you keep the medals.

Questions? The FAQ has answers, and opinions.