From lab-skills
Conda environment activation for Python commands. Use when running Python scripts, pip, or conda-dependent tools.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lab-skills:conda-envThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Claude Code runs in a non-interactive shell where conda isn't automatically initialized. Always source the conda setup script before activating environments.
Claude Code runs in a non-interactive shell where conda isn't automatically initialized. Always source the conda setup script before activating environments.
The activation command depends on the environment:
Local (macOS):
source ~/miniconda3/etc/profile.d/conda.sh && conda activate ENV_NAME && YOUR_COMMAND
Cluster (HPC — Bouchet/McCleary):
module load miniconda && source $(conda info --base)/etc/profile.d/conda.sh && conda activate ENV_NAME && YOUR_COMMAND
How to detect which to use: Check if the module command exists:
type module &>/dev/null && echo "cluster" || echo "local"
On the cluster, conda is provided via module load miniconda — there is no ~/miniconda3.
On local macOS, module doesn't exist.
Customize: On macOS, replace
~/miniconda3with your actual conda installation path if different (e.g.,~/miniforge3). Find it withconda info --base.
Check if the project has a conda environment:
environment.yml, environment.yaml, or conda env name in project's .claude/CLAUDE.mdList available environments:
source ~/miniconda3/etc/profile.d/conda.sh && conda env list
If the project specifies a conda environment, always activate it before running:
Always install packages into the project's conda environment, never into the system Python or base env.
Prefer conda install — it resolves dependencies against the full environment:
source ~/miniconda3/etc/profile.d/conda.sh && conda activate ENV_NAME && conda install PACKAGE
Fall back to pip only within the active conda env — if a package isn't available via conda/conda-forge:
source ~/miniconda3/etc/profile.d/conda.sh && conda activate ENV_NAME && pip install PACKAGE
Never run bare pip install without first activating the project's conda environment. This would install into the wrong Python and cause confusion.
When suggesting install commands to users (e.g., for students or collaborators), always include the conda activation step.
Record pip installs in environment.yml. When you fall back to pip, add the package under a pip: subsection (and ensure pip is listed as a conda dependency). conda env export --from-history does not capture pip-installed packages, so they are otherwise silently lost:
dependencies:
- python=3.11
- pip # required for the pip: section below
- numpy
- pip:
- some-pip-only-package==1.2.3
Detect what was pip-installed (channel shows as pypi):
conda list | awk 'NR>3 && $NF=="pypi" {print $1"=="$2}'
Run once on a new machine to ensure consistent package resolution:
conda config --set channel_priority strict
conda config --set solver libmamba
conda config --add channels conda-forge
defaults.environment.yml is hand-curated and portable. Use --from-history for the conda
packages — it records only explicitly installed packages, not platform-specific transitive
deps:
conda env export --from-history # conda packages — does NOT include pip installs
--from-history silently omits pip-installed packages. Capture those separately and
record them under a pip: subsection (with pip listed as a conda dependency):
conda list | awk 'NR>3 && $NF=="pypi" {print $1"=="$2}' # pip-installed packages
Prefer reconciling the existing hand-curated environment.yml (add new conda packages
to dependencies:, new pip packages to the pip: subsection) over overwriting it — a full
conda env export produces pinned, platform-specific build strings that aren't portable.
Hygiene — keep out of environment.yml:
prefix: line — machine-specific absolute path, not portabledefaults channel — conflicts with bioconda strict channel priorityconda-forge is listed as a channellab-general — shared environment for general projectsAll general-type projects (documentation sites, infrastructure tools, Quarto books, utility scripts) use the shared lab-general conda environment by default, regardless of whether they currently use Python. This ensures a consistent environment is always available if Python is needed later.
Contents: python 3.11, ipykernel, pyyaml, requests, pandas
When to use lab-general:
project-type: general project without complex dependenciesWhen to create a project-specific env instead:
lab-generalIdentifying which env a project uses: Check the project's .claude/CLAUDE.md — it will say either lab-general (shared) or {project_name} (project-specific) in the Environment section.
base environment — always use a named environmentlab-general by default — use the shared environment unless the project needs specialized dependencies, in which case create a project-specific oneipykernel — required for Quarto to execute Python chunksconda install over pip install — conda resolves dependencies holistically. Use pip only as a fallback for packages not available via conda/conda-forge~/miniconda3 or ~/miniforge3.module load miniconda — no local install.npx claudepluginhub musserlab/lab-claude-skills --plugin lab-skillsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.