Claude Code Plugins

Community-maintained marketplace

Feedback

Understanding and maintaining the development environments for this thesis project. Use for environment architecture, troubleshooting, or modifying environment setup.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name environment
description Understanding and maintaining the development environments for this thesis project. Use for environment architecture, troubleshooting, or modifying environment setup.

Environment Skill

When to use this skill:

  • You need to understand the environment architecture (for troubleshooting, modifications, or curiosity)
  • You're modifying or extending the environment setup
  • You encounter environment-related errors and need deeper context than error messages provide

When NOT to use this skill:

  • Normal thesis work (build, test, commit) - error messages explain limitations
  • You encounter a "local devcontainer only" error - the error message is sufficient

Environment Architecture

This project supports two environments:

1. Local Devcontainer (Jörn's machine)

  • Defined by: .devcontainer/Dockerfile, .devcontainer/devcontainer.json, scripts/devcontainer-post-create.sh
  • What it does: Pre-installs all dependencies (TexLive, Rust, Python, Node.js, etc.) in a Docker image
  • Special features:
    • Bind mounts for cache persistence (/srv/devhome/*/home/vscode/*)
    • Worktrees support (/workspaces/worktrees for git worktree isolation)
    • Shared Rust build cache via CARGO_TARGET_DIR=/workspaces/worktrees/shared/target

2. Claude Code Web Environment

  • Defined by: Ubuntu 24.04 base with pre-installed language runtimes (see Claude Code docs)
  • What it does: Provides a clean environment accessible from anywhere via web browser
  • What's pre-installed: Rust, Python (with uv), Node.js, Git, build-essential
  • What's NOT pre-installed: TexLive, latexml
  • Key difference: No devcontainer files run, no bind mounts, no worktrees directory

Critical limitation (known bug as of Jan 2026):

  • apt-get does NOT work in web environment (DNS blocked by proxy architecture)
  • See: GitHub issue #14538
  • Consequence: TexLive cannot be installed, LaTeX builds are local-only
  • What works: cargo, uv/pip, npm (HTTP proxy compatible)
  • What doesn't work: apt-get, dpkg, any system packages

Dependency Installation

Progressive Disclosure Strategy

Level 1: Error messages explain the situation

  • Build/lint scripts check for dependencies and print clear errors
  • Example: pdflatex not found (TexLive is local devcontainer only)

Level 2: This skill (understanding)

  • Explains environment architecture
  • Documents conventions for modifications

Level 3: Detailed implementation

  • Devcontainer config files (.devcontainer/*)
  • Reference docs in references/ subdirectory (if any)

What's Available Where

Dependency Local Devcontainer Web Environment
TexLive (pdflatex, chktex) Pre-installed in Dockerfile NOT available (apt-get blocked)
latexml Pre-installed in Dockerfile NOT available (apt-get blocked)
Rust (cargo, rustc) Pre-installed Pre-installed
Python + uv Pre-installed Pre-installed
Python packages uv sync --extra dev uv sync --extra dev
gh CLI Pre-installed Auto-installed by .claude/hooks/web-env-setup.sh

Conventions for Modifying Environments

When you need to add dependencies or modify environment setup:

1. Document with Progressive Disclosure

  • CLAUDE.md: Add one-line note to Environment Dependencies section
  • This skill: Explain architecture changes if significant
  • Config files: Keep comments factual, avoid speculation

2. Install Script Conventions

If you create install scripts:

  • Make scripts idempotent (check before installing)
  • Print helpful messages about time/disk usage
  • Support --help flag
  • Point build/lint scripts to install script in error messages

3. Never Make False Claims

  • Future agents will believe documentation literally
  • Example: Don't call a 2GB install "slim"
  • Example: Don't say "everywhere" when you mean "in local devcontainer"
  • When uncertain, be explicit about what you don't know

4. Keep It Simple (KISS)

  • Follow standard patterns (cargo, npm, pip/uv; apt-get in local only)
  • Don't over-engineer for hypothetical future requirements
  • Don't add noise to config files that agents don't need

5. Maintain Both Environments

  • Local devcontainer: Bake dependencies into Dockerfile when reasonable
  • Web environment: Only cargo/uv/npm work (no apt-get due to DNS bug)
  • Test changes in both environments (or document what's untested)

6. DRY - Don't Repeat Yourself

  • Information should live in ONE canonical place
  • Link to that place rather than duplicating
  • Exception: Error messages can repeat key info (like "local devcontainer only") for convenience

Common Tasks

Detecting Which Environment You're In

# Web environment has this variable
if [[ -n "${CLAUDE_CODE_REMOTE:-}" ]]; then
  echo "Running in web environment"
else
  echo "Running in local environment (or other)"
fi

Adding a New Dependency

For Python packages (works in both environments):

  1. Add to packages/python_viterbo/pyproject.toml
  2. Run uv sync --extra dev

For system dependencies (local devcontainer only):

  1. Add to .devcontainer/Dockerfile
  2. Update build scripts to fail gracefully with clear error in web environment
  3. Update CLAUDE.md: Add one line to Environment Dependencies section

Fixing Environment-Specific Issues

Example: Rust builds depend on CARGO_TARGET_DIR=/workspaces/worktrees/shared/target in local, but that dir doesn't exist in web.

Approach:

  1. Identify the constraint (worktrees mount only exists in local)
  2. Make it environment-aware (unset CARGO_TARGET_DIR in web, or create dir)
  3. Document the difference in this skill if non-obvious
  4. Test both environments

Files to Read

  • .devcontainer/Dockerfile - What's baked into local devcontainer image
  • .devcontainer/devcontainer.json - Local devcontainer configuration
  • scripts/devcontainer-post-create.sh - Local environment initialization
  • .claude/CLAUDE.md - Top-level environment guidance for agents