# Tool Workshop User Guide ## Overview The Tool Workshop lets you define and manage tool types — the blueprints for containers that run inside Headquarter. Each tool type specifies how to build and start a container (Docker image, Compose file, or a declarative manifest). ## Definition Types ### 1. Compose (Legacy) Write a raw Docker Compose template. Variable substitution is supported: - `${REPO_PATH}` — path to the mounted repository - `${TOOL_PORT}` — dynamically assigned free port - `${INSTANCE_NAME}` — generated instance name - `${USER_ID}`, `${PROJECT_ID}` — IDs for reference Best for: simple web services, databases, or anything that already has a Docker image. ### 2. Dockerfile (Legacy) Write a raw Dockerfile. Headquarter builds the image and generates a minimal Compose file automatically. Best for: custom environments where you need full control over the image build. ### 3. Manifest (Declarative) — **Recommended** Define your tool with structured JSON instead of raw Docker files: - **Base image** — pick a base definition (e.g. `ubuntu-24.04-dev`) - **Packages** — declare apt, npm global, pip, and Node.js version - **Scripts** — build scripts (run at image build time) and startup scripts (run when container starts) - **Mounts** — workspace, SSH keys, instance state, git-mounted dotfiles - **Runtime** — command, working directory, stdin/tty settings - **Live preview** — see generated Dockerfile and Compose as you edit Best for: reproducible, versioned, self-documenting tool definitions. ## Creating a Manifest-Based Tool 1. Go to **Settings → Tool Workshop** 2. Click **New Tool Type** 3. Select **Manifest (Declarative)** as the definition type 4. Choose a **Base Image** (e.g. `ubuntu-24.04-dev v1`) 5. Add packages: - Apt: `neovim`, `tmux`, `git` - NPM global: `@earendil-works/pi-coding-agent` - Node.js version: `20` 6. Add build scripts (e.g. configure git defaults) 7. Add startup scripts (e.g. fix workspace permissions) 8. Configure mounts: - Workspace → `/workspace` (writable) - SSH keys → `/home/user/.ssh` (readonly, mode 0700) 9. Set runtime: command `/bin/bash`, working dir `/workspace` 10. Click **Preview** to verify generated Dockerfile and Compose 11. Save ## Base Definitions Base definitions are versioned manifest templates that other tools extend. They are marked with the **Base** badge in the list. The default base `ubuntu-24.04-dev` provides: - Ubuntu 24.04 base image - Common build tools (curl, wget, git, build-essential) - A non-root `user` account (uid 1000) ## Migration from Legacy Existing tool types using Compose or Dockerfile continue to work unchanged. You can migrate a tool type to Manifest by: 1. Editing the tool type 2. Switching definition type to **Manifest** 3. Re-creating the configuration in the manifest editor 4. Saving (the old template is cleared automatically) ## Permissions For manifest-based tools, mount permissions are fixed automatically after the container starts. The system runs `chown` and `chmod` via `docker exec` as root, then drops back to the configured runtime user.