aenv

A command-line tool for managing named bundles of coding-agent settings, such as instruction files, skills, agents, and MCP connections. A project can switch between these bundles, or apply them globally.

In plain words
What is it for?
Use it to create or activate a configuration namespace, pin a project to one, inherit settings from another namespace, and manage project- or user-level files.
Why use it?
It avoids manually copying and restoring configuration when changing projects or working styles. Deactivation restores the files that were there before.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/blevene/aenv/aenv
Any agent
npx skills add Blevene/aenv --skill aenv
Clone the repo
git clone --depth 1 https://github.com/Blevene/aenv

Made for: Claude Code, Codex.

Per session 176 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 4,032 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00176 $0.04032
Opus 5 $0.00088 $0.02016
Sonnet 5 $0.00035 $0.00806
Haiku 4.5 $0.00018 $0.00403

Measured yesterday against content hash dc79b6372382, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade C, and why

aenv scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Recursive force deletehighDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

- `rm -rf ~/.aenv/envs/<ns>/` — manual, not aenv. Ask before running.
skills/aenv/SKILL.md · 120 lines

How it starts

The opening of the file, as written. The whole thing — 120 lines — stays where its author put it; the contents beside it link to each section on GitHub.

aenv

aenv is a CLI that manages named bundles of AI-coding-harness configuration (CLAUDE.md, .cursorrules, .mcp.json, skills, agents, etc.) — pin a project to a namespace, activate it, and the bundle materializes into the project as symlinks. Deactivate restores the project to its pre-activation state byte-for-byte.

Mental model in three sentences

Namespaces live at ~/.aenv/envs/<name>/ and own a manifest (aenv.toml) plus the actual files. A project gets pinned to a namespace via a one-line .aenv file at its root; aenv activate reads the pin, walks the extends chain, and materializes the resolved bundle. State lives in .aenv-state/state.json and the displaced originals (if any) sit in .aenv-state/backup/<timestamp>/ until aenv deactivate puts them back.

Two scopes: project vs global

aenv works at two scopes, and the verb prefix tells them apart:

  • Project scope (aenv <verb>) — materializes a namespace's project files into a pinned project directory (the section above). State under <project>/.aenv-state/.
  • Global scope (aenv global <verb>) — materializes a namespace's user-scope files (declared as user_files) into $HOME (~/.claude/, ~/.codex/, …). One global activation lives per user; activating another swaps it in a single transaction. State at ~/.aenv/global-state.json, displaced originals stashed under ~/.aenv/global-stash/<ts>/. This is how you swap your whole Claude Code / Codex setup. See the Global profiles section below.

User request → command map

User wants… Run this
Set up a new namespace from scratch aenv create <name> --adapter claude-code (also creates an empty CLAUDE.md; user edits it)
Build on top of an existing namespace aenv create <name> --extends <parent> (composition; child overrides win section-by-section)
Capture a hand-shaped project as a reusable namespace aenv snapshot <name> from inside the project
Pin + activate in a project aenv use <name> then aenv activate. (Avoid aenv activate <name> without use first — it activates without writing a .aenv pin, leaving the project in a half-state where aenv status works but no future invocation knows what namespace was intended.)
Switch active namespace in a project aenv deactivate && aenv use <other> && aenv activate
Restore project to pre-aenv state aenv deactivate (then aenv unpin if they want the .aenv pin file gone too)
Add a skill they wrote themselves aenv skill new <skill-name> --ns <namespace>
Install a skill from a public GitHub repo aenv skill import git+<url> --ns <ns> --pin <ref> [--path <subdir>] — see "Pin selection" below
Install MANY skills from a monorepo at once aenv skill import-all git+<url> --ns <ns> --base <dir> --pin <ref> [--only a,b] — clones once, imports every <base>/<subdir>/SKILL.md; malformed skills are warned + skipped, re-runs are idempotent
Copy non-skill content (agents, commands, reference docs) from a repo aenv vendor git+<url> --ns <ns> --pin <ref> --path <subtree> --as <dest> — copies into the namespace tree, declares it under the adapter's files, records [[vendored]] provenance. --force to overwrite, re-run to refresh + report drift
Remove a skill aenv skill remove <skill-name> --ns <ns>
Reclaim cache space (orphaned skill clones) aenv cache prune
See what's active in the current project aenv status
See where a managed file came from aenv which <project-relative-path>
Show the resolution chain + parameters + policies aenv status (text) or aenv status --json (structured)
Compare two namespaces aenv diff <ns_a> <ns_b>
Detect drift between project and active namespace aenv diff (no args; runs against active)
Bump a pinned skill ref edit ~/.aenv/envs/<ns>/aenv.toml, change ref = line, then re-activate in any project using the namespace
Auto-activate on cd between projects aenv init-shell <bash|zsh|fish> printed once into the user's rc file

Read the full file on GitHub · 120 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 120 lines · 0 tokens per session scan C dc79b6372382

Subscribe to this mod's changes

aenv is a skill published in the GitHub repository Blevene/aenv (2 stars, last pushed 2mo ago), licensed MIT. It adds 176 tokens to every session and 4,032 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

lov-app-generator

Use when the user asks for "App生成器", "生成 Web App", "生成 Tauri App", "生成原生 macOS App", "Finder Quick Action", "只创建 web", or to standardize an existing app with branding, CI/CD, native integration, and Lovinsp where applicable.

lovstudio/skills · 66 tokens

lov-maintain-partners

Maintain the Skill Publisher website's partners section AND align partner logo rows on event posters / hero strips: reuse lov-find-logo for brand logo discovery, normalize collected logos to a 240px-tall content canvas (retina-ready), rasterize SVGs via rsvg-convert before normalizing (so SVG viewBox padding gets…

lovstudio/skills · 294 tokens

dsh-plugin-publisher

Publish a validated DSH plugin package (@deepseek-ai/dsh- or @lovstudio/dsh-) to npm, git, or tarball channels and verify it loads in the DeepSeek Harness. Use when the user asks to publish, release, or ship a plugin. 触发:发布插件 / 上架插件 / release dsh 插件。.

lovstudio/skills · 82 tokens

lov-china-website-filing

面向中国大陆网站的一站式备案与上线 Skill Kit:当用户说“办 ICP 备案”“做公安联网备案”“备案后绑定域名”或 "handle China website filing" 时,按权威页面完成材料、审核、域名切换、合规展示与巡检留痕。.

lovstudio/skills · 75 tokens

deep-research

Use when the user needs multi-source research with citation tracking, evidence persistence, structured report generation, or an implementation landscape that includes GitHub and other open-source forges. Triggers on "deep research", "comprehensive analysis", "research report", "compare X vs Y", "analyze trends"…

lovstudio/skills · 101 tokens

lov-env-management

统一管理平台、账号与多组 API Key,维护有效期和启用状态,安全同步到 zsh 或用户会话环境,并提供脱敏 Dashboard;用户说“管理环境变量”“rotate API keys”时使用。.

lovstudio/skills · 53 tokens