Skip to main content

aru

Keep coding-agent instructions, skills, and MCP servers in sync across your project.

Aru gives your team one project manifest, one reproducible lockfile, and safe projections for every supported coding agent.

Documentation · Getting started · Command reference · Source

[!WARNING] Aru is under active development. Features, behavior, and file formats may change before 1.0.

Why aru?

Projects often repeat the same setup for Codex, Claude Code, GitHub Copilot, pi, OpenCode, and other agents.

Aru lets you declare that setup once:

  • Keep existing AGENTS.md files as the canonical instructions.
  • Install Agent Skills from Git repositories.
  • Configure MCP servers without storing secret values.
  • Reuse native aru packages that bundle instructions, skills, and trusted MCP declarations.
  • Pin exact revisions and projections in aru.lock.
  • Detect drift and unmanaged content before replacing anything.

Aru supports these project targets:

Target name Coding-agent layout
agents Generic Agents-compatible project files
codex OpenAI Codex
claude Claude Code
copilot GitHub Copilot CLI
pi pi
opencode OpenCode

Install

Aru requires a system git executable.

macOS and Linux

The recommended installer downloads a prebuilt, checksum-verified binary to ~/.local/bin and does not require Rust:

curl -LsSf https://raw.githubusercontent.com/narumiruna/aru/main/scripts/install.sh | sh

You can use wget instead:

wget -qO- https://raw.githubusercontent.com/narumiruna/aru/main/scripts/install.sh | sh

Windows PowerShell

The Windows installer places aru.exe in ~/.local/bin:

powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/narumiruna/aru/main/scripts/install.ps1 | iex"

The standalone installers support x86-64 Linux, Intel and Apple Silicon macOS, and x86-64 Windows.

uv

The PyPI distribution is named arust because aru was already taken, but it installs the aru command:

uv tool install arust

Prebuilt wheels support x86-64 glibc Linux and Apple Silicon macOS.

Cargo

Install from crates.io with a Rust toolchain:

cargo install aru --locked

Verify the installation:

aru --version
aru --help

Quick start

The following workflow initializes a project for Codex and Claude Code, adopts existing instructions, installs a skill, and verifies the result.

1. Initialize your project

Run this command from the project root:

aru init --target codex --target claude

Initialization creates:

  • aru.toml, which contains the setup your team maintains;
  • aru.lock, which pins the exact resolved result;
  • .aru/, which contains local cache, ownership, and recovery state.

Aru also adds .aru/ to the project's .gitignore.

To initialize another existing directory, pass its path:

aru init ../my-project --target codex

2. Adopt existing instructions

Specify each existing AGENTS.md file explicitly and preview the result:

aru instruction add AGENTS.md src/api/AGENTS.md --dry-run

Apply the result after reviewing the plan:

aru instruction add AGENTS.md src/api/AGENTS.md

Aru accepts exact project-relative AGENTS.md paths, keeps each source in place, and creates only the files required by your selected targets.

Configure glob selectors directly in aru.toml when needed.

If a destination such as CLAUDE.md already contains unmanaged content, aru stops instead of overwriting it.

Use --merge only after reviewing the collision:

aru instruction add AGENTS.md src/api/AGENTS.md --merge

[!CAUTION] --force destructively takes over colliding unmanaged content. A later removal cannot restore that content.

3. Add an Agent Skill

Choose a skill interactively:

aru skill add narumiruna/skills

For scripts and CI, select exports explicitly:

aru skill add narumiruna/skills --skill writing-plans

Aru resolves the Git revision, records it in aru.lock, and projects the skill to each compatible target.

4. Verify the project

Replay the committed lock without changing its resolutions:

aru sync --locked

Check that the lock and all managed target files are current without writing:

aru sync --check

5. Commit the reproducible state

Commit aru.toml, aru.lock, and the .gitignore change.

Your team may also commit generated target files if that matches the repository's policy.

Do not commit .aru/.

The everyday workflow

Most aru commands follow the same pattern:

  1. Preview risky or unfamiliar changes with --dry-run.
  2. Apply the command.
  3. Review aru.toml, aru.lock, and projected target files.
  4. Run aru sync --check.
  5. Commit the intended files.

Add, remove, update, and target commands normally update the manifest, lockfile, and target projections together.

Use --no-sync when you intentionally want to update only aru.toml and aru.lock, then run aru sync later.

Common tasks

Manage instructions

Add root and nested AGENTS.md files explicitly:

aru instruction add AGENTS.md src/api/AGENTS.md --dry-run
aru instruction add AGENTS.md src/api/AGENTS.md

List configured instruction selectors:

aru instruction list

Remove a selector without deleting the canonical instruction file:

aru instruction remove AGENTS.md --dry-run
aru instruction remove AGENTS.md

For custom paths, globs, and target-specific rules, see the instructions guide.

Manage Agent Skills

aru skill list
aru skill add owner/repository --skill review
aru skill add owner/repository --all
aru skill update --dry-run
aru skill update
aru skill remove owner/repository --skill review
aru skill remove owner/repository

A bare skill add opens an interactive selector.

Non-interactive environments must use --skill, --all, or --path.

Aru discovers skills from SKILL.md files at the repository root or in nested directories within its discovery limits.

Each skill's name must match the directory containing its SKILL.md, or the repository name for a root skill.

See the Agent Skills guide for revision pinning, target selection, and non-standard layouts.

Manage MCP servers

Add an HTTPS MCP endpoint while storing only the environment variable name for its token:

aru mcp add \
  --url https://docs.example.com/mcp \
  --name docs \
  --bearer-token-env DOCS_MCP_TOKEN

List, update, or remove MCP declarations:

aru mcp list
aru mcp update --dry-run
aru mcp update context
aru mcp remove docs

Aru also supports Registry packages and direct stdio argv.

It validates direct commands but never executes them during add, lock, or sync.

Project MCP is supported for Codex, Claude Code, GitHub Copilot CLI, and OpenCode.

See the MCP guide for all source types and target capabilities.

Manage native aru packages

A native package can bundle reusable instructions, skills, trusted MCP declarations, and package dependencies.

aru add owner/agent-kit
aru add owner/agent-kit --version '^1.2'
aru update --dry-run
aru update
aru remove owner/agent-kit

Package-provided MCP servers are denied by default and require an explicit trust decision.

See the native packages guide for package authoring, trust, and dependency behavior.

Change project targets

aru target list
aru target add copilot
aru target remove claude
aru target set codex claude

At least one target must remain.

Use target set when replacing the only configured target.

Understand locking and synchronization

aru.toml describes what the project wants.

aru.lock records the exact Git revisions, metadata, content digests, and target projections needed to reproduce it.

Command Use it when
aru lock You want to update aru.lock without changing target files
aru lock --check You want to verify the lock without writing or using the network
aru sync You want to resolve missing lock data and reconcile target files
aru sync --locked You want to reproduce the existing lock without changing it
aru sync --check You want a local, read-only exact-state check
aru sync --dry-run You want to preview the synchronization plan

Use --offline to disable remote Git and Registry access.

Use --frozen for the equivalent of --locked --offline.

Read the lock and sync guide for detailed behavior.

Safety model

Aru is designed to fail closed.

Before writing, it validates the complete operation and rejects unsupported, ambiguous, or unsafe inputs.

It also:

  • preserves drifted or unowned content for review;
  • keeps Git and MCP commands as argument arrays instead of shell-expanding them;
  • never executes configured direct MCP commands;
  • stores secret environment variable names or placeholders, never secret values;
  • applies multi-file changes through atomic transactions;
  • records durable recovery information for interrupted operations.

If an operation is interrupted, run a mutating aru command such as aru sync again.

Aru will attempt digest-gated recovery before starting new work.

Read the safety and recovery guide before using destructive takeover or repairing interrupted transactions manually.

Useful inspection commands

These commands inspect the project without changing managed state:

aru sync --check
aru audit
aru tree
aru info PACKAGE
aru metadata --format-version 1

Run aru COMMAND --help for command-specific options.

The complete command reference lists every command and flag.

Updating aru

Standalone installations can update themselves:

aru self update

Update package-manager installations through the same package manager:

uv tool upgrade arust
cargo install aru --locked

Development

Install from a source checkout:

cargo install --path .

Run the CI-equivalent checks:

cargo fmt --all -- --check
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo test --locked --all-targets --all-features

Serve or build the documentation with its locked toolchain:

just docs-serve
just docs-build

Release maintainers should follow docs/releasing.md.

Aru is available under the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

arust-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

arust-0.0.10-py3-none-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file arust-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arust-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9d4bd6f7166fb1db7d7377719b14b03361cf63fd924e6138ecbd867424fe448
MD5 cb76351b846bff9ef11a5ab3f704319e
BLAKE2b-256 90c168fb041b02e969fd3d24ba19256163da68715d485095c3ee7f0e9bfa4ed2

See more details on using hashes here.

Provenance

The following attestation bundles were made for arust-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on narumiruna/aru

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arust-0.0.10-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arust-0.0.10-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25fb135b005db78f160e46b836f49ab02e7076489f1a05937fb9c875d1acdd3b
MD5 898f44542927ca9435319b84eca35c83
BLAKE2b-256 7df6cdba31f84cfaf094537fd85d01f81c64f914fc7ab01387370dec29765433

See more details on using hashes here.

Provenance

The following attestation bundles were made for arust-0.0.10-py3-none-macosx_11_0_arm64.whl:

Publisher: publish.yml on narumiruna/aru

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.0.14

2 files

0.0.13

2 files

0.0.11

2 files

This release

0.0.10 This release

2 files

0.0.7

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page