Worktree Environment Setup

SkillDev tools

Sets up an isolated per-worktree Python environment for attention-gym development using nightly PyTorch and the CI-mirroring uv flow. Use when creating a new git worktree or when a worktree lacks a local .venv.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Worktree Environment Setup skill

What this skill tells your AI

The instructions your AI receives, as published by meta-pytorch/attention-gym in .agents/skills/worktree-env-setup/SKILL.md and read by ahel’s review.

Each attention-gym worktree gets its own .venv so editable installs, concurrent agents, and test runs never cross-import another checkout. Never reuse a shared env's editable install across worktrees, and never ln -s another worktree's .venv as a shortcut: an editable install is a .pth file naming one checkout, so a shared env makes every other worktree run that checkout's sources. A fresh uv venv plus hard-linked wheels costs seconds; a wrong import costs hours. If .venv already exists as a symlink, rm .venv and rebuild it below.

Setup

From the worktree root (mirrors .github/workflows/test.yml):

uv venv --python 3.13
source .venv/bin/activate
uv pip install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu132
uv pip install --prerelease allow -e '.[tests,linear,dev]'

Notes:

  • uv hard-links wheels from its cache, so after the first nightly download this takes seconds and costs almost no extra disk per worktree.
  • Activate .venv before installing so an already-active foreign environment is not modified.
  • --prerelease allow is required for the flash-attn-4 beta in [tests]. [tests] omits FlashAttention on aarch64, so its transitive CuTeDSL pin does not apply there or to linear-only installs. When updating CuTeDSL, run pytest -n 6 test/test_kda_bwd_wy_compile.py to catch NVVM binding changes without a Blackwell GPU, then validate forward/backward numerics on supported hardware.
  • A .venv symlink into another worktree is not isolation: its editable .pth still points at that worktree, so pytest imports the other checkout's attn_gym. Replace it with a real per-worktree env.
  • Do not use uv sync/uv.lock: nightly torch churns daily and CI uses the imperative uv pip flow above, not a lockfile.
  • Drop [linear] if CuTeDSL/TVM-FFI kernels are not needed (CPU-only work).
  • [tests] and [cudnn] are declared conflicting extras in pyproject.toml; keep them in separate environments. For cuDNN worktrees, install -e '.[cudnn,dev]' pytest pytest-xdist instead; cuDNN tests import-skip optional FlashAttention coverage.

Running commands

Prefer the worktree's own interpreter — either activate .venv first, or use uv run --no-sync pytest test (matches CI exactly). Never invoke a Python from another worktree or a shared ~/.venvs/* env for attn_gym imports.

Verifying isolation

cd /tmp && python -c "import attn_gym; print(attn_gym.__file__)"

The printed path must be inside the current worktree. If it points at another checkout, the editable install is wrong — rerun the -e '.[tests,linear,dev]' install from this worktree root.

Run the check from outside the repo root. From the root, python -c puts the current directory first on sys.path and masks a wrong editable install, while python agent_space/script.py and pytest (whose test/ has no __init__.py) put the script directory first and silently import the other checkout. A .venv symlinked to another worktree's env fails exactly this way: edits appear to have no effect because the kernels compile from the other tree.

Signals

GitHub stars
1k
Forks
79
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
worktree-env-setup
Source
github.com/meta-pytorch/attention-gym