{
  "schema_version": 1,
  "type": "skill",
  "slug": "remote-bootstrap",
  "title": "Remote Bootstrap",
  "brief": "Bootstrap a new Adom container from an existing one entirely over SSH.",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "source_path": "SKILL.md",
  "readme": "# Remote Bootstrap\n\nSet up a new Adom container from an existing one entirely over SSH -- zero browser interaction required. Auth credentials (GitHub + Claude) are copied from the current container.\n\n## When to use\n\n- You already have a working Adom container and want to set up a new one\n- You don't want to go through interactive browser auth flows\n- You need to bootstrap a container created via `adom-cli carbon containers create`\n\n## Prerequisites\n\nOn the **source container** (the one you're running this from):\n- SSH key registered with Adom (`adom-cli carbon user ssh-keys` returns at least one key)\n- GitHub authenticated (`gh auth status` succeeds)\n- Claude Code authenticated (`~/.claude/.credentials.json` exists)\n- gallia cloned (`~/gallia` exists)\n\n## Quick start\n\n```bash\nbash ~/gallia/scripts/remote-bootstrap.sh <ssh-target>\n```\n\nExample:\n```bash\nbash ~/gallia/scripts/remote-bootstrap.sh [email protected]\n```\n\nThe script handles everything:\n1. Copies GitHub + Claude auth credentials (no browser auth needed)\n2. Installs Claude Code extension + CLI\n3. Installs adom-cli + skills\n4. Copies and registers the adom-vscode extension\n5. Configures VS Code settings (disables Copilot, configures Claude Code)\n6. Clones gallia and runs `npm install` + `install.mjs`\n7. Fixes project directory permissions\n\nAfter the script completes, open the editor URL and reload VS Code once.\n\n## Full workflow: create + bootstrap a container\n\n```bash\n# 1. Create repo (if needed)\nadom-cli carbon user repos  # check if repo exists\n# If not: create via Carbon API (see adom-repo-management skill)\n\n# 2. Create container with SSH\nadom-cli carbon containers create \\\n  --image-id 69b43b3458d13e5ce628cdc4 \\\n  --class large \\\n  --ssh \\\n  --repo-id <ADOM_REPO_ID>\n# Note the ssh_credentials.command from the response\n\n# 3. Wait for container to provision (~15-30 seconds)\nsleep 20\n\n# 4. Bootstrap it\nbash ~/gallia/scripts/remote-bootstrap.sh <username>@adom.cloud\n\n# 5. Open the editor\n# https://hydrogen.adom.inc/<owner>/<repo>/edit\n# Reload VS Code: Ctrl+Shift+P > Developer: Reload Window\n```\n\n## What the script does NOT do\n\n- **Claude Squad** -- not launched (use the Claude Code panel in VS Code instead)\n- **Service startup** -- services start on next container boot or editor open (install.mjs skips startup without `VSCODE_PROXY_URI`)\n- **Entrypoint patching** -- handled by install.mjs, takes effect on next boot\n\n## Script location\n\n`~/gallia/scripts/remote-bootstrap.sh`\n\n## Key implementation details\n\n- **scp is slow through the SSH gateway** -- the script pipes files through SSH (`cat file | ssh target \"cat > dest\"`) instead of using scp for large files\n- **adom-vscode must be registered in extensions.json** -- code-server only loads extensions listed in `~/.local/share/code-server/extensions/extensions.json`. Just copying the extension directory is not enough.\n- **Claude OAuth tokens are short-lived** -- copy credentials right before bootstrapping. The VS Code extension auto-refreshes using the refresh token once running.\n\n## Troubleshooting\n\n| Symptom | Fix |\n|---------|-----|\n| Claude Code \"Failed to authenticate\" | Token expired. Recopy `~/.claude/.credentials.json` from source and reload VS Code |\n| adom-vscode not in sidebar | Reload VS Code. If still missing, check `extensions.json` has `adom.adom-vscode` entry |\n| `scp` hangs | Known issue with SSH gateway. Script uses pipe approach to avoid this |\n| `gh repo clone` fails | Verify `gh auth status` on target. Token may have expired -- recopy `~/.config/gh/hosts.yml` |\n| Services not running | Open the editor URL -- services start when `VSCODE_PROXY_URI` is available |",
  "author": {
    "name": "Kyle Bergstedt",
    "email": "[email protected]"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:29:52.646Z",
  "updated_at": "2026-05-28T05:29:52.646Z",
  "sub_skills": [],
  "parent_app": null,
  "org": "adom"
}