docker — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited docker (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Execute all package installations and code execution inside Docker containers. This keeps the host machine clean and ensures consistent environments across projects.
Type: Autonomous Execution
Directive: EXECUTE, DON'T ASK
This skill enforces Docker-first development automatically. When you request npm/node operations, commands are executed inside Docker without asking for permission.
Enforcement Behavior:
docker execFor new projects, see [setup.md](setup.md) for the complete first-time setup guide.
Minimal setup:
# 1. Start container
docker compose --profile dev up -d
# 2. Verify running
docker ps --filter "name=my-project"
# 3. Run commands in container
docker exec my-project-dev-1 npm install
docker exec my-project-dev-1 npm test
docker exec my-project-dev-1 npm run buildThese commands are BLOCKED on the host machine:
npm install, npm ci, npm run, npm test, npm exec
npx <anything>
yarn add, yarn install, yarn run
pnpm add, pnpm install, pnpm run
node <script>
tsx <script>
bun <script>Why? Installing packages on the host:
All Node.js commands MUST use this prefix:
docker exec <container-name> <command>Note: Use docker exec WITHOUT the -it flag in Claude Code:
# Correct (works in Claude Code)
docker exec my-project-dev-1 npm run build
# Wrong (fails with "not a TTY")
docker exec -it my-project-dev-1 npm run buildBefore running ANY npm/node command, verify the container is running.
docker ps --filter "name=<container-name>" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"Expected output:
NAMES STATUS PORTS
my-project-dev-1 Up X minutes 0.0.0.0:3000->3000/tcpIf container is NOT running:
cd /path/to/project
docker compose --profile dev up -d
docker ps --filter "name=<container-name>"If container shows "Exited":
docker logs <container-name> --tail 20
docker compose --profile dev down
docker compose --profile dev up -ddocker ps --filter "name=<container-name>"
docker logs <container-name> --tail 50
curl -s http://localhost:<port> > /dev/null && echo "Running" || echo "Not running"docker compose --profile dev up -d # Start
docker compose --profile dev down # Stop
docker compose --profile dev restart dev # Restart
docker compose --profile dev up -d --build # Rebuilddocker exec <container> npm install <package> # Install package
docker exec <container> npm install -D <package> # Install dev dependency
docker exec <container> npm test # Run tests
docker exec <container> npm run typecheck # Type checking
docker exec <container> npm run lint # Linting
docker exec <container> npm run build # Build
docker exec <container> /bin/sh # Shell (use -it for interactive)| Operation | Use docker exec? | Reason |
|---|---|---|
npm install | Always | Packages install in container only |
npm run dev | No | Already running via docker-compose |
npm test | Yes | Tests run in container environment |
npm run build | Yes | Build happens in container |
git commands | No | Git runs on host (manages files) |
| File editing | No | Volume mount syncs automatically |
| Database migrations | Yes | Uses container's Node environment |
┌─────────────────────────────────────────────────────────────┐
│ HOST (macOS/Linux/Windows) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Docker Container (my-project-dev-1) │ │
│ │ │ │
│ │ Node 20 (Slim or Alpine) │ │
│ │ └── node_modules/ (container-only, NOT on host) │ │
│ │ └── Dev server (port 3000) │ │
│ │ │ │
│ │ Volume Mounts: │ │
│ │ └── .:/app (source code sync) │ │
│ │ └── node_modules:/app/node_modules (persist deps) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Port mapped │
│ │ │
│ ▼ │
│ http://localhost:<port> │
└─────────────────────────────────────────────────────────────┘Key Point: node_modules exists ONLY in the container. The host machine stays clean.
volumes:
- .:/app # Source code (synced)
- node_modules:/app/node_modules # Dependencies (container-only)What this means:
node_modules/ lives in a named Docker volume, NOT on host filesystemdocker ps -a --filter "name=<container-name>"
docker logs <container-name>
docker compose --profile dev up -dlsof -i :<port>
# Kill the process or change port in docker-compose.ymldocker compose --profile dev down
docker compose --profile dev build --no-cache
docker compose --profile dev up -d
docker exec <container> npm installdocker inspect <container-name> | grep -A 10 "Mounts"
docker compose --profile dev restart devIf you see platform warnings:
# Add to docker-compose.yml service
platform: linux/amd64 # or linux/arm64See [setup.md](setup.md) for the complete native module troubleshooting guide including:
ERR_DLOPEN_FAILED resolutionpackage.json or DockerfileFor automated health monitoring and CI integration, see [health-checks.md](health-checks.md):
| Task | Action |
|---|---|
| Install dependency | docker exec <container> npm install <pkg> |
| Run tests | docker exec <container> npm test |
| Check types | docker exec <container> npm run typecheck |
| Build project | docker exec <container> npm run build |
| Start dev server | Container already runs it via docker-compose |
| Edit files | Edit directly (volume mount syncs) |
| Git operations | Run on host (not in container) |
For complete Docker development support, use with these complementary skills:
| Skill | Purpose |
|---|---|
| docker-enforce | Automatically blocks/transforms host commands to run inside Docker |
| docker-optimizer | Analyzes Dockerfiles for optimization opportunities |
| docker-guard | Prevents hangs when Docker daemon is unresponsive |
Provides automated enforcement of Docker-first policy:
npm, npx, yarn, pnpm, node, tsx, bun commandsdocker execInstall: git clone https://github.com/wrsmith108/docker-enforce.git ~/.claude/skills/docker-enforce
| Document | Contents |
|---|---|
| setup.md | First-time setup, native module troubleshooting, project configuration |
| health-checks.md | Container healthchecks, monitoring scripts, NPM integration |
Last updated: January 2026
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.