Aube
Use when managing a Node.js project's dependencies or scripts with aube (https://aube.jdx.dev/), or migrating a project from pnpm, npm, or bun to aube — including its lockfile, CI, lifecycle-script jail, and Dependabot handling.From its SKILL.md
npx -y skills add akunzai/agent-skills --skill aubeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.9 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
aube
Use aube as the Node.js package manager, installed and pinned through mise. aube is jdx's fast, security-first package manager (https://aube.jdx.dev/); this skill captures the how we use it here decisions, not the official reference.
Quick start
Install and pin aube via mise (not standalone). Daily work goes through
aubr <script> (= aube run); CI uses aube ci (frozen lockfile). Keep a
Dependabot-compatible lockfile, keep one version source in mise.toml, and
accept aube's strict supply-chain defaults.
Core conventions
- Install through mise —
mise use aubeand pin in[tools](e.g.aube = "1.25.1"); never install aube standalone. Seemise. - Single version source —
mise.tomldrives both node and aube; after migrating, remove thepackageManagerfield frompackage.jsonso versions do not fork. - Keep a Dependabot-compatible lockfile — aube reads and writes an existing
pnpm-lock.yamlorpackage-lock.jsonin place, so keep that committed rather than switching toaube-lock.yaml. Dependabot has no aube ecosystem and cannot maintainaube-lock.yaml; staying on a compatible lockfile lets Dependabot keep bumping dependencies. Adoptaube-lock.yamlonly when you do not rely on Dependabot. - Accept supply-chain defaults — aube denies lifecycle scripts by default, holds new releases behind a 24h cooling window, checks typosquats, and downgrades trust. Keep these; allow only the specific builds you need.
- Phased migration — pilot in one project or subcomponent before committing; do not replace wholesale.
Commands
| Command | Use |
|---|---|
aubr <script> (= aube run) | Daily driver: aubr build, aubr test, aubr dev, aubr preview. On PATH via mise. |
aube ci | Frozen-lockfile install for CI (replaces pnpm install --frozen-lockfile); runs no scripts by default. |
aube install | Local setup / Docker layers. |
aube add <pkg> | Add a dependency (malware-checked by default). |
aubx <tool> (= aube dlx) | Run a one-off tool without installing. |
aube exec [--] <cmd> | Run a binary from deps; bypasses third-party tooling that auto-detects the package manager. Put -- before the binary so aube does not swallow its flags (see Gotchas). |
CI (GitHub Actions)
Replace pnpm/action-setup + actions/setup-node with jdx/mise-action@v4,
then install and test through aube. mise-action's cache: true caches only the
mise-installed tool binaries (aube/node), not aube's package store — without
an explicit store cache every aube ci re-downloads all packages. Add an
actions/cache step keyed on the lockfile, with the path from aube store path
(it carries a vN suffix, e.g. ~/.local/share/aube/store/v1):
- uses: jdx/mise-action@v4
with:
install_args: aube node # install only these tools; versions come from mise.toml
cache: true # caches the tool binaries, not the aube store
- name: Cache aube store
uses: actions/cache@v6
with:
path: ~/.local/share/aube/store # from `aube store path`
key: ${{ runner.os }}-aube-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: ${{ runner.os }}-aube-store-
- run: aube ci
- run: aubr test
Lifecycle scripts
aube jails lifecycle (build) scripts by default. Allow only the packages that
genuinely need them via the pnpm.allowBuilds config (read from the
pnpm-style config / lockfile), e.g. esbuild, workerd, miniflare. Verify
locally (aube ci plus the test suite) before relying on CI.
Gotchas
- Third-party actions auto-detect the package manager — e.g.
wrangler-actionseespnpm-lock.yamland picks pnpm, which is no longer installed, so the build breaks. Drop the action and call the binary directly:aube exec wrangler deploywithCLOUDFLARE_API_TOKENin env. aube execswallows global flags —aube exec tsc --versionprints aube's own version because aube intercepts--version/-v/-r/-Fbefore the binary sees them. Put--before the binary so its flags pass through:aube exec -- tsc --version,aube -F <name> exec -- wrangler --version.- Lifecycle-script jail — the first
aube ciwill not run build scripts (esbuild/workerd/…) until allowed viapnpm.allowBuilds; test locally first. - Dependabot has no aube ecosystem — it cannot read or update
aube-lock.yaml. Keep a compatible lockfile (pnpm-lock.yaml/package-lock.json, which aube reads and writes in place) and the matchingnpmecosystem independabot.yml, so Dependabot keeps maintaining the lockfile. Switch toaube-lock.yamlonly if you accept that Dependabot will stop updating it. Re-check this if aube support lands later — the authoritative list is GitHub's supported ecosystems. - bun -> aube is also a runtime migration — dropping bun means migrating the
runtime (
node:child_process, etc.) and the test framework (bun test -> Vitest); scope that separately from the package-manager switch. - starship
nodejs/packagemodules loop under aube — starship's default-enablednodejsandpackagemodules probe Node / the package manager on every prompt; with aube active this can spiral into acommand not foundloop that makes the shell impossible to type into. Setdisabled = trueunder both[nodejs]and[package]in~/.config/starship.toml.
Related
mise— installs and pins aube; provides the single version source and the CI action.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.