# On your server

At the end, a runner works on a Linux machine of yours, your team opens it from the portal, and Slack is connected if you want it.

## At a glance

**Time:** 30 minutes in one sitting.

**You need:**

- Your Loopgate sign-in as an org owner or admin
- A Linux machine with Docker, or an account on [AWS](aws.md), [Google Cloud](gcp.md), [Azure](azure.md) or [a VPS](vps.md)
- A GitHub account with access to your repository
- A ChatGPT or Claude plan you already pay for
- A Slack admin, for step 5

## Set this up with your agent

Copy this to a coding agent on your laptop. It runs the commands on your server and checks each step with you; what you sign in to, press or paste stays yours.

```text
This is for a coding agent that can run commands on my laptop (Claude Code, Codex, Cursor), not a chat website.
Help me set up Loopgate's runner, one step at a time, following https://loopgate.dev/docs/server.md and the pages it links to, each beside it ending in .md.
Ask me which Linux server with Docker it runs on: one of mine, or a new one on AWS, Azure, Google Cloud or a VPS, whose page you walk me through.
Over SSH, check that the box answers `docker compose version`.
I press Add a runner on the portal's Devices page and paste you its line; its token works once, for an hour. Run it on the box over SSH.
Then read `cd ~/loopgate && docker compose logs runner` and tell me when it says `Registered as` and `Runner ready at`.
Then walk me through the runner's page: engines, GitHub and a workspace (sign-in.md), then Slack (slack-connect.md).
These are mine: tell me when it is my turn, wait for me, and never ask me to type them into this chat. Signing in to anything (the portal, a cloud console, the runner's page, Slack, GitHub), pressing Add a runner, every token and password, my AI subscription's device code, and making the Slack app.
```

## Steps

1. **Sign in to the portal** at app.loopgate.dev.

   You should see: your org's pages, with **Devices** among them. A new org starts a fourteen-day trial for five seats.

2. **Pick a Linux machine with Docker:** one of yours, or a new one on [AWS](aws.md), [Google Cloud](gcp.md), [Azure](azure.md) or [a VPS](vps.md), the cheapest with the fewest screens.

   You should see: `docker compose version` answering on it.

3. **On Devices, press Add a runner and paste its one line on the machine:** [Any Linux box](any-box.md) has every step. The line installs the runner, signs it in to your org and gives it an address.

   You should see: `Registered as` and `Runner ready at` in `docker compose logs runner`, and the runner under Runners on Devices.

4. **Open the runner from Devices**, then sign in your engines, set GitHub and add a workspace: [Engines, GitHub and a repository](sign-in.md).

   You should see: an engine Ready on Settings → Engines and your repository in the sidebar.

5. **Connect Slack** on Settings → Slack, if you want it: [Connect Slack](slack-connect.md). Then your team says tasks there: [From Slack](slack.md).

   You should see: `Connected to <workspace>` on the page.

The runner's first address ends `trycloudflare.com` and changes when the box restarts; **Open** on Devices always uses the current one. For an address that stays: [Cloudflare Tunnel](address-cloudflare.md), open from anywhere, or [Tailscale](address-tailscale.md), open only to your team's laptops.

## What is yours

- **The machine and the code.** Your repository, the agents' changes, what they were told and said stay on it. The pull request goes from it to your GitHub.
- **The sign-ins.** The agents use the ChatGPT or Claude plan you already have, signed in on the machine. No API key to buy, none to give us.
- **The switch.** Revoke the runner on Devices and within a minute nobody reaches it.

## What Loopgate's servers receive

A heartbeat, your team's member list, and one line per finished run: who, when, how it ended, what it cost. Never code, diffs, prompts, transcripts or the task: [What leaves your box](what-leaves.md).

## Good to know

- Anyone in your org opens the runner from Devices and reads the same runs: [Share a run](share.md).
- Every file and line, set up by hand: [By hand](by-hand.md). Keeping it running: [Updates and backups](care.md).

## If something is off

- **The script says `The runner did not register within two minutes.`** The line `The install token was refused: …` under it says why; a token works once, for an hour. Press Add a runner again and paste the new line.
- **Open on Devices does not load the runner.** Read `docker compose logs runner` on the machine for its current address; a quick tunnel's address changes on restart.

## Next

- [Engines, GitHub and a repository](sign-in.md)
- [Share a run](share.md)
