搜索

PythonReactSEOPDF
GitHub Skill

environment

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

JoernStoehler☆ 0 仓库 Stars0 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

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

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-26
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!