Install Agent Skills into all 3 AI CLIs, and use Bun instead of npm

Adds scripts/install-skills.sh: pulls this repo's extensions/ skill
bundles (SKILL.md-format) at workspace startup and installs them into
Claude Code (~/.claude/skills), GitHub Copilot CLI (~/.copilot/skills),
and Antigravity CLI (~/.gemini/config/skills). Every env gets the common
awesome-skills-plugin bundle; COBOL/3D/TTRPG additionally get their
matching skill(s) from custom-specialty-plugin via a per-template
SPECIALTY_SKILLS value.

Each template also installs Bun via a coder_script and hooks ~/.bun/bin
onto PATH in .bashrc (the bun.sh installer doesn't reliably do this in a
scripted shell). The CLI setup wizard now uses `bun install -g` instead
of `npm install -g` for GitHub Copilot CLI and Claude Code CLI.

All six templates re-validated with terraform init/validate against the
real coder-server container on octo-winsrv.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 11:41:09 +02:00
parent 1beaac6e4f
commit f6c432d21d
9 changed files with 393 additions and 23 deletions
+41 -14
View File
@@ -17,8 +17,9 @@ templates/
web/main.tf # Web Applications
scripts/
cli-setup-wizard.sh # shared first-run wizard, see below
install-skills.sh # shared Agent Skills installer, see below
profile-templates/ # VS Code .code-profile exports, one per env
extensions/ # Claude Code plugin/skill bundles (see note below)
extensions/ # Agent Skills bundles, installed per env (see below)
```
Each `templates/<env>/main.tf` is a complete, independent Coder template
@@ -57,30 +58,56 @@ the actual `.code-profile` file extension, so settings never applied. That
bug (plus the single shared container) is why "one container, many envs"
never really worked.
### Bun
Every template installs [Bun](https://bun.sh) via a `coder_script`
(`curl -fsSL https://bun.sh/install | bash`) and hooks `~/.bun/bin` onto
`PATH` in `~/.bashrc` (the installer doesn't reliably do this itself in a
non-interactive/scripted shell). The CLI setup wizard below uses
`bun install -g <pkg>` instead of `npm install -g <pkg>` for everything it
installs.
### CLI setup wizard
`scripts/cli-setup-wizard.sh` is dropped onto every workspace and hooked
into `~/.bashrc`. It runs in every new interactive terminal - until the user
finishes it - and offers to install + log into:
- **GitHub Copilot CLI** (`npm install -g @github/copilot`, then `copilot login`)
- **GitHub Copilot CLI** (`bun install -g @github/copilot`, then `copilot login`)
- **Google Antigravity CLI** (`curl -fsSL https://antigravity.google/cli/install.sh | bash`, binary `agy`)
- **Claude Code CLI** (`npm install -g @anthropic-ai/claude-code`, then `claude`)
- **Claude Code CLI** (`bun install -g @anthropic-ai/claude-code`, then `claude`)
It does **not** ask about VS Code extensions, since those are handled by
Terraform (see above). Once the user confirms completion it writes a
sentinel file (`~/.cache/coder-cli-wizard/done`) and stops prompting. It can
always be re-run manually: `bash /opt/coder/cli-setup-wizard.sh --force`.
### `extensions/` directory
### `extensions/` directory -> Agent Skills
Heads up: `extensions/awesome-skills-plugin` and `extensions/custom-specialty-plugin`
are **Claude Code plugin/skill bundles** (`plugin.json` + `SKILL.md` files),
not actual VS Code extension packages. The old root `main.tf` copied this
folder straight into code-server's extensions directory, which would never
have worked as VS Code extensions regardless of the container bug above.
This rewrite doesn't wire `extensions/` into anything - it's left as-is
pending a decision on whether/how to install these as Claude Code plugins
inside each workspace (e.g. `custom-specialty-plugin/skills/cobol-teacher`
for the COBOL env, `openscad-parametric` for 3D, `ttrpg-lore-weaver` /
`foundryvtt-modding` for TTRPG).
`extensions/awesome-skills-plugin` and `extensions/custom-specialty-plugin`
are **Agent Skills bundles** (`plugin.json` + `SKILL.md` files) - the old
root `main.tf` copied this folder straight into code-server's VS Code
extensions directory, which never worked since these aren't VS Code
extension packages.
Each template now runs `scripts/install-skills.sh` (via a `coder_script`,
pulling a fresh zip of this repo from Gitea rather than embedding ~2.5MB
into Terraform state) to install skills into all three AI CLIs' personal
skills directories:
| CLI | Skills directory |
| --- | --- |
| Claude Code | `~/.claude/skills/<name>/` |
| GitHub Copilot CLI | `~/.copilot/skills/<name>/` |
| Antigravity CLI | `~/.gemini/config/skills/<name>/` (per antigravity.google/docs/skills - some third-party docs disagree on this path, worth a spot-check on a live workspace) |
Every environment gets the full `extensions/awesome-skills-plugin/skills/*`
bundle. On top of that, whichever env has a matching entry in
`extensions/custom-specialty-plugin/skills/` gets it installed too, set via
the `SPECIALTY_SKILLS` env var passed to the script from each template's
`install_skills` `coder_script`:
- COBOL -> `cobol-teacher`
- 3D Printing -> `openscad-parametric`
- TTRPG -> `foundryvtt-modding` and `ttrpg-lore-weaver`
- Default / Python / Web -> none (no matching specialty skill exists yet)