Archon docker-extend

install
source · Clone the upstream repo
git clone https://github.com/coleam00/Archon
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/coleam00/Archon "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/docker-extend" ~/.claude/skills/coleam00-archon-docker-extend && rm -rf "$T"
manifest: .claude/skills/docker-extend/SKILL.md
source content

Docker Extend

Sets up personal Docker tool customization using the project's gitignored override pattern. Your

Dockerfile.user
and
docker-compose.override.yml
are yours — never committed to git.

Step 1: Detect Context

Determine if the user is in dev (source build) or deploy (GHCR) mode:

!

if [ -f docker-compose.yml ] && grep -q 'build: \.' docker-compose.yml 2>/dev/null; then echo "DEV_MODE: Building from source (root docker-compose.yml)"; elif [ -f deploy/docker-compose.yml ]; then echo "DEPLOY_MODE: Using GHCR image (deploy/docker-compose.yml)"; else echo "UNKNOWN_MODE: No docker-compose.yml found in root or deploy/"; fi

Decision:

  • DEV_MODE
    → work with
    Dockerfile.user
    +
    docker-compose.override.yml
    (repo root)
  • DEPLOY_MODE
    → work with
    deploy/Dockerfile.user
    +
    deploy/docker-compose.override.yml
  • UNKNOWN_MODE
    → ask the user which directory their
    docker-compose.yml
    lives in before proceeding

Step 2: Check Current State

DEV_MODE — check root files:

!

echo "=== Dockerfile.user ===" && (cat Dockerfile.user 2>/dev/null || echo "(not found — will create from example)") && echo "" && echo "=== docker-compose.override.yml ===" && (cat docker-compose.override.yml 2>/dev/null || echo "(not found — will create from example)")

DEPLOY_MODE — check deploy/ files:

!

echo "=== deploy/Dockerfile.user ===" && (cat deploy/Dockerfile.user 2>/dev/null || echo "(not found — will create from example)") && echo "" && echo "=== deploy/docker-compose.override.yml ===" && (cat deploy/docker-compose.override.yml 2>/dev/null || echo "(not found — will create from example)")

If both files already exist: Skip to Step 4 (add tools). If files are missing: Proceed to Step 3 (copy from examples). If example files are missing too: Tell the user the project hasn't added the example files yet and to check with the maintainers or the docs.

Step 3: Copy Example Files

Run only the copy commands for whichever files are missing. Do NOT overwrite existing files.

DEV_MODE:

# Only if Dockerfile.user does not exist:
cp Dockerfile.user.example Dockerfile.user

# Only if docker-compose.override.yml does not exist:
cp docker-compose.override.example.yml docker-compose.override.yml

DEPLOY_MODE:

# Only if deploy/Dockerfile.user does not exist:
cp deploy/Dockerfile.user.example deploy/Dockerfile.user

# Only if deploy/docker-compose.override.yml does not exist:
cp deploy/docker-compose.override.example.yml deploy/docker-compose.override.yml

After running the copy commands, confirm to the user which files were created.

Step 4: Add Tools

Parse

$ARGUMENTS
for tool names (space-separated, e.g.,
vim ripgrep jq
).

If tools were specified: Edit the appropriate

Dockerfile.user
to add (or uncomment) the
RUN apt-get install
block with the requested packages. Use the Edit tool — do not rewrite the entire file.

The block to add/modify:

RUN apt-get update && apt-get install -y --no-install-recommends \
    <tool1> \
    <tool2> \
 && rm -rf /var/lib/apt/lists/*

If no tools were specified: Show the user the file and ask which tools they want to add. Then edit the file accordingly.

Step 5: Rebuild

Show the user the rebuild command for their context. Do NOT run it automatically.

DEV_MODE:

docker compose build && docker compose up -d

DEPLOY_MODE:

cd deploy && docker compose build && docker compose up -d

Summary

Tell the user:

  1. Which files were created (if any)
  2. Which tools were added to
    Dockerfile.user
    (if any)
  3. The rebuild command to run when ready
  4. A reminder that
    Dockerfile.user
    and
    docker-compose.override.yml
    are gitignored — they're personal and won't be committed