Quiver Bootstrap Stack
Configure the three-layer bootstrap that turns a bare Quiver bolt into a
personalized dev environment. This skill scaffolds and encrypts the three repos,
produces a bolt.yaml, and hands off the exact command to create the bolt.
Quiver in brief (end-user view)
- A bolt is an ephemeral Ubuntu container running in Kubernetes with a
persistent home and workspace. Reach it via a browser terminal, VSCode, or
kubectl. - A fresh bolt has no SSH keys, dotfiles, or code. The three-layer bootstrap delivers them at startup from three git repos plus one age key.
- The bootstrap repo plus the dotfiles repo form a reusable persona. The workspace repo is the swappable per-task input. Rebuilding a bolt from the same inputs reproduces the same environment.
| Layer | Repo | Visibility | Delivers |
|---|---|---|---|
| 1 | bootstrap | public | SSH key, SSH config, DOTFILES_KEY (age) |
| 2 | dotfiles | private | dotbot install, GPG-decrypted secrets |
| 3 | workspace | private | project code cloned into /workspace |
The bootstrap repo is public but safe: its bootstrap.age payload is
age-encrypted, and the dotfiles repo's secrets.gpg is GPG-encrypted.
Prerequisites
The bundled builder needs node, age, age-keygen, gpg, git,
ssh-keygen, and tar on PATH. Adding --push also needs gh.
Run the preflight first and stop if anything is missing:
node scripts/build-stack.mjs --check
Install hints by OS:
- macOS:
brew install age gnupg git openssh(andbrew install gh) - Linux:
apt install age gnupg git openssh-client(or the distro equivalent) - Windows:
winget install FiloSottile.age GnuPG.GnuPG Git.Git(ssh and tar ship with Windows 10+;winget install GitHub.cliforgh)
Build the stack
Confirm inputs with the user: the GitHub org or user, the three repo names (defaults
bootstrap,dotfiles,workspace), the login shell, and any secret env vars to embed. Ask before choosing values.Run the builder. Use
--dry-runfirst to inspect artifacts without touching the network:node scripts/build-stack.mjs --org <github-org> --dry-runRun for real to build the artifacts under
~/quiver-bootstrap(override with--work-dir):node scripts/build-stack.mjs --org <github-org> \ --shell /bin/bash \ --secret MY_API_TOKEN=xxxxxAdd
--pushto create and push all three repos withghand register the generated SSH public key with GitHub. Without--push, the builder prints the exactgh/gitcommands to run.
The builder writes the age private key to age-key.txt and prints it once. It is
the single secret the user must keep. It is never committed.
Key flags: --work-dir, --org, --bootstrap-repo, --dotfiles-repo,
--workspace-repo, --git-host, --shell, --ssh-key (reuse an existing key),
--dotfiles-key, --secret KEY=VALUE (repeatable), --dotfiles-public,
--workspace-public, --push, --dry-run. Run --help for the full list.
Create the bolt
The builder prints a ready-to-run command:
quiver create <name> --config ~/quiver-bootstrap/bolt.yaml \
--age-key "AGE-SECRET-KEY-..."
If the user has no CLI set up, the quiver-cli skill covers install and auth, or
they can create the bolt from the dashboard by uploading bolt.yaml and pasting
the age key.
Verify
Once the bolt is ready, open its terminal and confirm each layer:
env | grep MY_SECRET # Layer 2: GPG secrets decrypted and sourced
cat /workspace/README.md # Layer 3: workspace cloned
Guardrails
bootstrap_repomust be anhttps://URL. The bolt clones it without credentials, so that repo must be public.- Private dotfiles and workspace repos are cloned over SSH (
git@host:org/repo.git) using the key delivered by Layer 1. Register the SSH public key with the git host or the private clones fail. - The
.ssh/configIdentityFilemust name the same key file shipped in the bootstrap tarball. The builder keeps these aligned. - All layers are optional. See
reference/stack-layout.mdfor partial configurations and the exact files the bolt expects.
Rotating later
New bolts pick up repo changes automatically; existing bolts do not. To rotate,
rebuild with the same inputs and push. See reference/stack-layout.md.
Installing this skill
npx skills add ./skills/quiver-bootstrap # from a local checkout
npx skills add <your-quiver-repo-git-url> # from the hosted repo
Add -g for a global install and -a claude-code (or another agent) to target a
specific agent.