{"id":"1933ee0c-c7cc-4502-8fa1-2f0c289d7bec","slug":"spinup","kind":"skill","name":"spinup","summary":"Set up every machine you code with AI on (Claude Code, Codex, Tailscale, CLIProxyAPI) with one command, and keep them the same","owner":"darkyeg","repoUrl":"https://github.com/darkyeg/spinup","license":"MIT","licenseTier":"permissive","trust":"community","stars":4,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-10-02T17:42:38.000Z","addedAt":"2026-10-22T03:43:02.148Z","logoUrl":"https://avatars.githubusercontent.com/u/38569107?u=e8cf2fccd15470808d231e427d6b1e57ac4e2f76&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":[],"runtime":"go","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-25T19:15:17.528Z","sample":false,"url":"https://conduits.dev/tools/spinup","language":"Go","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<img src=\"assets/icon.svg\" width=\"64\" height=\"64\" alt=\"\">\n\n# spinup\n\n**Set up every computer you code with AI on, keep them the same, and share your Claude and Codex accounts between them.**\n\nYou have a desktop, a laptop, maybe a Mac. On each one you install the same tools, copy the same skills, and sign in to the same accounts — then watch them drift apart.\n\nspinup does that once, per machine:\n\n```sh\nspinup setup my-desktop --hub\n```\n\nThat installs your dev tools, joins your private network, installs your skills and agent settings, and ends with a health check.\n\nOne Go binary, no dependencies. Windows, macOS, Linux. Every command is safe to re-run — re-running is how you repair.\n\n## What you get\n\n**Your accounts, everywhere.** One machine holds your Claude and Codex logins. Every other machine uses them at `http://localhost:8317`. If the holder goes offline, a standby takes over and hands them back when it returns.\n\n**The same agents, everywhere.** Your skills and instructions live in one folder (`~/.spinup`) that spinup keeps identical on all your machines. Change it anywhere; the others follow within seconds.\n\n**A straight answer when something breaks.** `spinup doctor` checks everything and prints the command that fixes each problem.\n\n## Quick start\n\n### 1. Install\n\n```sh\n# macOS, Linux\ncurl -fsSL https://raw.githubusercontent.com/darkyeg/spinup/main/scripts/install.sh | sh\n```\n\n```powershell\n# Windows\nirm https://raw.githubusercontent.com/darkyeg/spinup/main/scripts/install.ps1 | iex\n```\n\nCheck it worked: `spinup --version`. Open a new terminal if the command isn't found.\n\n### 2. Set up the machine that holds your accounts\n\nThis is the **hub** — usually the desktop that's on most. The name you pick becomes its address on your network.\n\n```sh\nspinup setup my-desktop --hub\n```\n\nThen add your accounts in the dashboard it opens (`http://localhost:8317/management.html` → **OAuth Login**).\n\n### 3. Set up your other machines\n\nUse the **same Tailscale account** on every machine.\n\n```sh\nspinup setup my-laptop --standby   # takes over while the hub is off\nspinup setup my-mac                # just uses the accounts\n```\n\nEach asks for a key, which `spinup keys` prints on a machine you already set up.\n\n### 4. Use it\n\nRun `ccp` instead of `claude` to use Claude Code with the shared accounts. Plain `claude` keeps its own login.\n\n> **Prefer your agent to do all this?** Tell it *\"set up this machine with spinup\"* and it will follow [docs/SETUP.md](docs/SETUP.md).\n\n## Commands\n\n| | |\n|---|---|\n| `spinup setup <name> [--hub\\|--standby]` | Set up or repair the whole machine |\n| `spinup doctor` | Check everything; each problem comes with its fix |\n| `spinup update` | Update spinup, CLIProxyAPI, skills and Tailscale |\n| `spinup status` | Who holds the accounts, every login, every machine |\n| `spinup handoff <machine>` | Move the accounts to another machine, safely |\n| `spinup machines` | Every device on your network and its address |\n| `spinup skills` | Your skills for Claude Code and Codex — see below |\n| `spinup packages` | Complete plugins, pinned revisions, native installation and rollback |\n| `spinup agents` | Shared and personal instructions; preserves your model choices and settings by default |\n| `spinup repo <path> [--apply]` | Get a project ready for agents: stack skills, AGENTS.md, git remote |\n| `spinup tools` | Install the dev tools a machine lacks |\n| `spinup keys` | The API key here; the dashboard password on a hub or standby |\n\n`spinup <command> --help` explains each one.\n\n## Skills\n\nYour skills live in one folder, your **library** (`~/.spinup/skills`). spinup copies it to every machine and links it into Claude Code and Codex. Edit a skill on any machine; the others follow within seconds.\n\n```sh\nspinup skills        # see them all, and change them\n```\n\nIt opens a list with three tabs:\n\n| Tab | What's in it |\n|---|---|\n| **Shared** | Skills in your library. Shows which agents load each one. |\n| **Only here** | Skills on this machine that spinup doesn't share yet, such as a folder only Codex has. |\n| **Removed** | Everything you removed. Nothing is ever deleted. |\n\nArrows move, `space` marks, `tab` switches list, `q` quits. Then `d` remove, `a` keep everywhere, `r` restore, `m` auto/manual, `n` rename. Outside a terminal, or with `--plain`, it prints the list and changes nothing.\n\n### Bring a skill in\n\n| You have | Do |\n|---|---|\n| A skill that only exists on this machine (in Claude's or Codex's folder) | `spinup skills`, open **Only here**, press `a` |\n| A folder or `.zip` someone sent you | `spinup skills import <path>` |\n| A new idea | `spinup skills new <name>` |\n| A skill on GitHub | `spinup skills add <owner/repo> <skill>` |\n\n**Auto or manual?** An auto skill's description costs tokens in every session. A manual one costs nothing until you call it (`/name` in Claude Code, `$name` in Codex). Press `m` to switch.\n\nspinup installs for the agents it finds on the machine; you don't list them. More: [docs/LIBRARY.md](docs/LIBRARY.md).\n\n## Make it yours\n\nFor complete plugins such as Superpowers, use `spinup packages add obra/superpowers`. Spinup keeps the package intact, pins its revision and installs it through each tool's native plugin manager. `spinup packages plan`, `update`, `rollback` and `remove` manage its lifecycle. Existing standalone skills keep working. See [plugin packages](docs/PACKAGES.md) before enabling package synchronization across older machines.\n\nCreate the optional `~/.spinup/AGENTS.md` yourself, then run `spinup agents`. Spinup appends your instructions to both Claude Code and Codex, and the library service syncs them between your machines. Models, effort and limits stay in your local agent settings; spinup does not choose them or bundle subagents. See [agent configuration](docs/AGENT-CONFIG.md). To change shared guidelines or supply your own defaults (stack rules, `agents/`, `tools.json`), fork the repo: spinup uses the checkout it runs in, or `SPINUP_REPO`.\n\n## How it works\n\n```\n computer running spinup ── localhost:8317 ─────────┐\n phone on Tailscale ─────── <hub-or-standby>:8317 ──┴── current holder's CLIProxyAPI\n                         private Tailscale network\n```\n\nspinup runs on each machine and routes to whichever one currently holds the accounts.\n\n- **Names, not IPs.** [Tailscale](https://tailscale.com) gives each machine a fixed private address and the name you chose. At home, traffic goes straight over your router; away, over the internet.\n- **No machine list to keep.** Tailscale is the list; spinup reads it.\n- **One holder at a time.** A standby takes over only when Tailscale reports the holder offline and three minutes have passed — never just because it can't be reached. This is what stops two machines refreshing the same login and locking you out.\n- **Changes travel in seconds.** With a hub or standby online, your library reaches every machine; disconnected ones catch up when they return.\n\nPort `8317` is spinup's router; CLIProxyAPI uses `8327` internally, and only on the holder. Each machine has its own localhost, so the same port everywhere is fine.\n\nIn plain words: [docs/HOW-IT-WORKS.md](docs/HOW-IT-WORKS.md). The safety design: [docs/DESIGN.md](docs/DESIGN.md). Day-to-day: [docs/SERVICE.md](docs/SERVICE.md).\n\n## Good to know\n\n- **A Mac shouldn't be your hub.** Its service runs as a LaunchAgent, so it holds the accounts only while you're logged in. Use an always-on Linux or Windows machine.\n- **Agent settings are merged locally, not copied between machines.** Run `spinup agents` on each. Keep credentials and machine-specific paths local: [docs/AGENT-CONFIG.md](docs/AGENT-CONFIG.md).\n- **A phone** without spinup points at an online hub or standby by name (`http://my-desktop:8317`) with the API key. If that machine goes offline, point it at another; spinup doesn't move one address between machines.\n- **Before trusting a new build** across machines, follow the [validation guide](docs/VALIDATION.md). A local health check doesn't exercise failover.\n- **Building from source?** `go install ./cmd/spinup` from a checkout. Unreleased changes don't arrive through `spinup update`.\n- **Trying a nightly?** Main builds publish GitHub prereleases with a `-nightly` suffix. Download the matching binary and verify it against that release's `checksums.txt`. Normal installers and `spinup update` use stable releases; they do not subscribe a machine to nightlies. A nightly can update to the same version's stable release once published.\n\n## Security\n\n- **Nothing faces the internet.** The accounts are reachable only on your tailnet, and Tailscale traffic is end-to-end encrypted. On Windows a firewall rule limits the port to Tailscale addresses.\n- **Keys stay on your machines** (`secrets.json`, never committed). Machines prove they know the key before any login is sent to them.\n- **Downloads are checksum-verified**, both spinup's updates and CLIProxyAPI's.\n- Turn on 2FA for **GitHub** and **Tailscale**, and disable Tailscale key expiry for your machines — `doctor` warns you.\n- Found a problem? [SECURITY.md](SECURITY.md).\n\n## Important\n\nRouting subscription accounts through a proxy may conflict with your provider's terms. Read them and decide for yourself; you are responsible for how you use your accounts. spinup's own rule: use Claude accounts only through Claude Code (`ccp`, or T3 Code's Claude provider), never from other apps.\n\nThe accounts service keeps one holder active to avoid competing login refreshes. An abrupt failure just after a refresh can still mean logging that account in again: [the service limits](docs/SERVICE.md).\n\n## Contributing\n\nIdeas and fixes are welcome: [CONTRIBUTING.md](CONTRIBUTING.md). Terms used everywhere: [GLOSSARY.md](GLOSSARY.md).\n\n## License\n\n[MIT](LICENSE)\n"}