Connecting Claude Code
Your first session
A full walkthrough of a Claude Code session that launches a server, connects to it, and puts an app live.
This page follows one real session end to end, in Claude Code inside the Claude desktop app. Your prompts will differ; the shape won't.
1. Launch
Use Launchpad to spin up a server for the quoting tool and get it ready for a Node app. My key is in
launchpad-key.txt.
Claude reads the key, checks your account, launches a server on your plan and polls until it's ready. Expect a couple of minutes. It'll report the subdomain, for example brave-otter.asklaunchpad.com.
2. Connect
Open a session and install what the app needs.
Claude calls request_ssh_session for the new server. The connector returns:
- the host and username (
ubuntu); - a freshly generated private key;
- a certificate signed by Launchpad's certificate authority, valid for this server only for 30 minutes;
- the expiry time.
Claude writes the key and certificate to temporary files and connects with ordinary ssh. From here it's a normal Ubuntu box: it installs Node with apt, creates a MySQL database, creates a system user for the app, and so on. If the session expires mid-task, Claude simply requests another.
Servers come with nginx and MySQL. Node, PHP and Python are one apt install away and listed in get_service_catalog.
3. Deploy
Copy the app across, run it as a service behind nginx, and check the logs.
Claude copies the code (usually with scp or a tarball over the session), writes a systemd unit so the app restarts on reboot, points nginx at the app's port, restarts both, and reads the journal to confirm it's up. Then it fetches https://brave-otter.asklaunchpad.com to be sure.
4. Iterate
The totals on the quote page are wrong: they're ignoring VAT.
This is where building against a live server pays off. Claude fixes the code, pushes the change over a session, restarts the service and checks the page again. The URL your colleagues have doesn't change.
If Claude's environment can't open SSH
Some environments (notably sandboxed web sessions) can only make outbound HTTPS requests. Claude will notice the SSH connection failing and fall back to deploy_app, which sends the app as a small archive over HTTPS and lets the connector do the server-side work: unpack, npm install if there's a package.json, write the service unit, configure nginx. get_app_logs tails the journal afterwards. Same result, different transport.
Good habits
- One app per server. Keep things simple and self-contained; that's what the server is sized for.
- Don't run the app as root. Claude knows this, but it's worth saying in your prompt the first time.
- Keep secrets in a
.envon the server, not in the repository. - Ask for a health check any time:
get_server_healthdoesn't need a session.
That's a full launch. Next stop: Servers for the details on plans, subdomains and sessions.
Previous: Authenticating · Next: Servers