Jvsl.Env.Agents.Code Server banner
TheHefty TheHefty

Jvsl.Env.Agents.Code Server

DevOps community

Description

A code-server dev container for agent work: the Claude Code CLI sandboxed by default with ai-jail, opt-in ai-memory, the GitHub CLI, a nested rootless Docker daemon, and selectable tech stacks. Vendored into a monorepo as a git submodule at .code-server/

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

jvsl.env.agents.code-server

Reusable template for a [code-server](https://github.com/coder/code-server)-based dev container, meant to be added to a monorepo as a git submodule at `.code-server/`. It ships code-server itself, the Claude Code CLI, `ai-jail`, and a nested rootless Docker daemon already set up, plus a selectable set of tech stacks.

It is **not** an application — there's no product code here, only the tooling that builds and launches the dev environment.

Adding this to a monorepo

git submodule add https://github.com/TheHefty/jvsl.env.agents.code-server.git .code-server

The one piece of state that lives outside the submodule, at the consuming repo's own root, is `.code-server.stack.json` — the per-project stack selection, written by `setup` (see "Manifest" in [`docs/overview/setup.md`](docs/overview/setup.md) for why it can't live inside the submodule itself). See [`jvsl.monorepo.agents.template`](https://github.com/TheHefty/jvsl.monorepo.agents.template) for a reference consumer.

Quick start

.code-server/init

Checks the host — Linux desktop or WSL, and on WSL that WSLg is actually running — names anything missing and offers to install it, builds the image, builds the launcher, and leaves you a `dev`:

.code-server/dev

which rebuilds the launcher when its source has changed and opens the environment.

`cargo` is the one thing `init` will not install: a packaged Rust is usually too old for the Tauri crates and says so only as a compile error inside a dependency, so it points you at `rustup` instead.

Working on the template itself

git config core.hooksPath .githooks

Runs the fast half of CI before every push — shell syntax, the package table, the settings merge, the title bar, the launcher's tests — and refuses a push straight to `main`. The image builds stay in CI, where they cannot be skipped.

The same thing by hand

Prerequisites on the host: `jq`, `whiptail`, `docker` (for `set