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.
npx skills add Blevene/aenv --skill aenvgit clone --depth 1 https://github.com/Blevene/aenvWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/blevene/aenv/aenv)<a href="https://agentmods.dev/skills/blevene/aenv/aenv"><img src="https://agentmods.dev/badge/skills/blevene/aenv/aenv/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/blevene/aenv/aenv"><img src="https://agentmods.dev/badge/skills/blevene/aenv/aenv.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00176 | $0.04032 |
| Opus 5.5 | $0.00070 | $0.01613 |
| Sonnet 5.5 | $0.00035 | $0.00806 |
| Haiku 4.5 | $0.00018 | $0.00403 |
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 1mo ago.
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. 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 asuser_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 |
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.
- 1mo ago First seen · 120 lines · 0 tokens per session scan C dc79b6372382
aenv is a skill published in the GitHub repository Blevene/aenv (2 stars, last pushed 4mo ago), licensed MIT. It adds 176 tokens to every session and 4,032 once invoked, about $0.0007 per session on Opus 5.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.
Other skills, from other repositories
mischief-managed
Use when finishing a Pi, Codex, Cursor, Claude, or other coding-agent session and wanting to save a lean Markdown session note into your Obsidian vault with decisions, code changes, validation, caveats, and follow-ups.
Agent Browser Automation
Fast Rust-based headless browser automation CLI with Node.js fallback for AI agents, featuring navigation, clicking, typing, snapshots, and structured commands optimized for agent workflows.
fast-resume
Search local coding-agent session history and identify safe resume commands. Use when the user asks to find, inspect, continue, or recover previous work from Claude Code, Codex, Pi, or another agent indexed by fast-resume.
lov-organize-storage
A storage-organization tool for surveying a whole drive or archive and planning a project-based folder layout. It can rename items within the same drive after confirmation, while keeping a mapping, log, and rollback script.
lov-finder-action
A generator for custom right-click actions in macOS Finder, the file manager on Apple computers.
lov-personal-vocabulary
A manager for one shared personal vocabulary list that can be reused across voice-input apps.