What Is Nodus?
Nodus is a package manager for repo-scoped AI tooling.
If a package publishes content under folders like skills/, agents/, rules/, or commands/, Nodus can:
- add it from GitHub, Git, or a local path
- pin what you asked for in
nodus.toml - lock the exact resolved revision in
nodus.lock - write managed files into
.codex/,.claude/,.cursor/,.agents/,.github/, or.opencode/ - prune stale generated files without touching unmanaged ones
For most users, the main command is:
Install
Install from crates.io:
Install the latest prebuilt binary on macOS or Linux:
|
Install with Homebrew:
Install the latest prebuilt binary on Windows with PowerShell:
irm https://raw.githubusercontent.com/WendellXY/nodus/main/install.ps1 | iex
If the command fails (for example, pwsh is not recognized), install PowerShell 7, restart your terminal, then run with pwsh:
winget install --id Microsoft.PowerShell --source winget
# Restart terminal first so `pwsh` is available on PATH.
pwsh -NoProfile -Command "irm https://raw.githubusercontent.com/WendellXY/nodus/main/install.ps1 | iex"
Quick Start
Install a package for Codex:
That one command:
- creates
nodus.tomlif your repo does not have one yet - records the dependency in
nodus.toml - resolves the latest tag by default
- locks the exact resolved revision in
nodus.lock - writes managed runtime files for the selected adapter
Validate the result:
Typical output files look like this:
.codex/skills/<skill-id>_<source-id>/
.claude/skills/<skill-id>_<source-id>/
.github/skills/<skill-id>_<source-id>/
.github/agents/<agent-id>_<source-id>.agent.md
.cursor/rules/<rule-id>_<source-id>.mdc
nodus add
Add from GitHub:
Add from a local path:
Pin a tag, branch, commit, or semver range:
Install only part of a package:
Add a dev-only dependency:
Start tools with automatic sync:
Preview changes without writing them:
Common Tasks
Inspect a package without changing your repo:
See what can be updated:
Update dependencies and rewrite managed files:
Rebuild managed files from what is already recorded:
Use these in CI:
Remove a dependency:
Check that your manifest, lockfile, store, and managed files are consistent:
Generate shell completions:
Advanced
Supported platforms:
- macOS (
x86_64,arm64) - Linux (
x86_64,arm64/aarch64) - Windows (
x86_64,arm64)
By default, Nodus stores shared mirrors, checkouts, and snapshots here:
macOS: ~/Library/Application Support/nodus/
Linux: ~/.local/state/nodus/ (or $XDG_STATE_HOME/nodus/)
Windows: %LOCALAPPDATA%\nodus\
Override that location for any command with --store-path <path>.
Install a specific release with the Unix installer script:
|
Install a specific release on Windows:
$env:NODUS_VERSION='v0.1.0'; irm https://raw.githubusercontent.com/WendellXY/nodus/main/install.ps1 | iex
If this command fails on Windows, install PowerShell 7, restart your terminal, then run through pwsh:
$env:NODUS_VERSION='v0.1.0'
pwsh -NoProfile -Command "irm https://raw.githubusercontent.com/WendellXY/nodus/main/install.ps1 | iex"
When To Use sync vs update
Use nodus sync when you want Nodus to make the repo match your current manifest and lockfile.
Use nodus update when you want Nodus to look for newer allowed versions first, then sync to those newer results.
Use nodus sync --locked in CI when the lockfile must not change.
Use nodus sync --frozen when installs must use the exact revisions already recorded in nodus.lock.
Adapters
Nodus writes outputs only for the adapters your repo uses.
Supported adapters today:
agentsclaudecodexcopilotcursoropencode
You can choose adapters explicitly with --adapter, persist them in nodus.toml, or let Nodus detect them from existing repo roots such as .codex/, .claude/, or .github/skills.
copilot manages GitHub Copilot project assets under .github/skills/ and .github/agents/. In v1 it supports skills and custom agents only; rules and commands are not emitted for Copilot.
Manifest
The smallest useful consumer manifest looks like this:
[]
= ["codex"]
[]
= { = "WendellXY/nodus", = "v0.3.2" }
Common dependency forms:
[]
= { = "vendor/playbook" }
= { = "owner/tooling", = "^1.2.0" }
= { = "owner/shared", = "v1.4.0", = ["skills"] }
= { = "owner/paused", = "v1.0.0", = false }
[]
= { = "vendor/internal" }
Set enabled = false to keep a dependency declared in nodus.toml without resolving it, syncing its managed outputs, or tracking it in nodus.lock.
Direct dependencies can also map files or directories into the consuming repo:
[]
= "vendor/shared"
[[]]
= "prompts/review.md"
= ".github/prompts/review.md"
For a fuller example, see examples/nodus.toml.
Package Layout
Nodus discovers package content from these conventional paths:
skills/<id>/SKILL.mdagents/<id>.mdrules/<id>.*commands/<id>.md
Packages can also declare:
content_rootsto publish additional folderspublish_root = trueto emit the root package itselfcapabilitiesfor privileged behavior such as high-sensitivity actions
If a package declares high sensitivity capabilities, install or update with:
Relay
nodus relay is for package maintainers who edit generated runtime files in a consumer repo and want to copy those edits back into the source checkout.
This is an advanced workflow. Most users only need add, info, outdated, update, sync, remove, and doctor.
Why Teams Use Nodus
- one command to add repo-scoped AI tooling
- exact revisions locked in
nodus.lock - generated files stay managed and pruneable
- unmanaged files are never overwritten
- mirrors, checkouts, and snapshots are shared across repos
Contributing
See CONTRIBUTING.md for local development and release checks.
License
Licensed under Apache-2.0.