Agent package manager for .agents/ directories
Project description
mars
Mars is a package manager for agent directories. It installs agent profiles and skills from git and local sources into a .mars/ canonical store, records ownership in mars.lock, and copies managed content into configured target directories (.agents/, .claude/, .cursor/, etc.).
Quick Start
# Initialize with a target directory
mars init --link .claude
# Add sources
mars add meridian-flow/meridian-base
mars add meridian-flow/meridian-dev-workflow
# See what's installed
mars list
# Explain why an item is present
mars why reviewer
Why Mars
- Install agents and skills from multiple sources into one managed tree
- Resolve versions and transitive source dependencies before installation
- Keep syncs safe: resolve full desired state, then apply atomically
- Track ownership and checksums in
mars.lockso managed and unmanaged files coexist - Copy managed content to multiple target directories (
.agents/,.claude/, etc.) - Support day-to-day maintenance: upgrades, outdated checks, local overrides, rename rules, conflict resolution, repair flows
- Package-distributed model aliases — no hardcoded builtins in the binary
Where Mars Fits
Mars is not an agent runtime. It sits underneath tools like Claude Code, Cursor, and Codex and manages the agent assets they read.
| Alternative | What Mars adds |
|---|---|
Native .claude/agents |
Multi-source installs, versioning, lockfile-backed ownership, safer syncs, recovery |
| Skill installers | Both agents and skills, explicit desired state in config, conflict handling, repair |
| Git submodules / vendored folders | Real resolution, diff, plan, and apply pipeline |
Install
| Method | Command |
|---|---|
| Cargo (crate) | cargo install mars-agents |
| Cargo (latest main) | cargo install --git https://github.com/meridian-flow/mars-agents |
| Python (pipx) | pipx install mars-agents |
| Python (uv tool) | uv tool install mars-agents |
| Python (pip) | pip install mars-agents |
| npm | npm install -g @meridian-flow/mars-agents |
| From source | cargo install --path . |
Prebuilt binaries: https://github.com/meridian-flow/mars-agents/releases
Platforms: macOS arm64/x64, Linux arm64/x64 (glibc). Others: build from source.
Source Inputs
| Form | Example |
|---|---|
| GitHub shorthand | owner/repo or owner/repo@^1.0 |
| HTTPS URL | https://github.com/owner/repo |
| SSH URL | git@github.com:owner/repo.git |
| Local path | ../my-agents or /absolute/path |
Commands
| Area | Commands |
|---|---|
| Source management | add, remove, upgrade, outdated, override |
| Resolution | Semver constraints, transitive deps, lockfile-backed replay |
| Install & reconcile | sync, rename, resolve |
| Inspection | list, why |
| Targets | init [--link], managed target configuration via settings.targets |
| Model aliases | models list, models refresh, models resolve |
| Validation & recovery | check, doctor, repair |
| Cache | cache info, cache clean |
Global flags: --root <PATH>, --json.
How It Works
mars.toml + mars.lock (committed)
↓ mars sync
.mars/ (canonical store, gitignored)
↓ copy to each target
.agents/, .claude/, .cursor/ (committed, may contain non-mars content)
Every mutating command runs a typed pipeline:
load_config → resolve_graph → build_target → create_plan → apply_plan → sync_targets → finalize
- Resolve — fetch sources, discover transitive deps, merge model aliases from dependency tree
- Build target — discover items, apply filters, detect collisions
- Plan — diff desired state against lock + disk
- Apply — write resolved content to
.mars/(atomic writes via tmp+rename) - Sync targets — copy from
.mars/to each configured target directory (never deletes files mars didn't create) - Finalize — write lock, persist dependency model aliases, build report
Managed Layout
project/
mars.toml # Dependency config (committed)
mars.lock # Ownership registry (committed)
mars.local.toml # Dev overrides (gitignored)
.mars/ # Canonical store (gitignored)
agents/ # Resolved agent profiles
skills/ # Resolved skills
models-cache.json # Cached model catalog
models-merged.json # Dependency-sourced model aliases
.agents/ # Target directory (committed, may have non-mars content)
agents/
skills/
.claude/ # Another target (committed)
agents/
skills/
Model Aliases
Model aliases are package-distributed — no builtins in the mars binary. Packages define aliases in their mars.toml under [models]:
# Pinned — explicit model ID
[models.opus]
harness = "claude"
model = "claude-opus-4-6"
# Auto-resolve — pattern matching against cached model catalog
[models.sonnet]
harness = "claude"
provider = "Anthropic"
match = ["sonnet"]
exclude = ["thinking"]
Merge precedence: consumer config > dependencies (declaration order, first wins).
mars models refresh # Fetch model catalog from API
mars models list # Show all aliases (deps + consumer config)
mars models list --include "opus*,sonnet*" # Show only matching aliases
mars models list --exclude "experimental-*" # Hide matching aliases
mars models resolve opus # Resolve an alias to a concrete model ID
--include and --exclude are mutually exclusive. Both override [settings.model_visibility] for that command run.
mars.toml Example
[dependencies.base]
url = "https://github.com/meridian-flow/meridian-base"
version = "^1.0"
[dependencies.dev]
path = "../my-dev-agents"
[dependencies.ops]
url = "https://github.com/acme/ops-agents"
only_skills = true
[models.opus]
harness = "claude"
provider = "Anthropic"
match = ["opus"]
[settings]
targets = [".agents", ".claude"]
After editing mars.toml, run mars sync to apply changes.
Documentation
Detailed documentation is in docs/:
- Overview — Core concepts and quick start
- Configuration —
mars.tomlreference: all fields, filter modes, settings - CLI Reference — Every subcommand with flags, examples, and behavior
- Sync Pipeline — How sync works: resolve → target → diff → apply → sync targets → finalize
- Conflicts — Collision handling, merge, conflict resolution
- Lock File — Lock file format and semantics
- Local Development — Overrides, local paths, submodules
- Troubleshooting —
mars doctor,mars repair, common problems
Design Constraints
- Resolve first, then act. If resolution fails, nothing is mutated.
- Config, lock, and installed files use atomic writes (tmp+rename).
mars.lockis the authority for what Mars manages.- Target directories are shared — mars never deletes files it didn't create.
- User intent comes from explicit flags and arguments, not heuristics.
- No builtin model aliases — all aliases come from packages or consumer config.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mars_agents-0.0.14.tar.gz.
File metadata
- Download URL: mars_agents-0.0.14.tar.gz
- Upload date:
- Size: 220.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e70c42d016afcb6fbbc2d1d6a9fd37fb47522f745d66c9b1a63db73efe16f286
|
|
| MD5 |
e5c4f1f3385ba3ff095bcef1ab890041
|
|
| BLAKE2b-256 |
19190d57988d34c0902e03f010edb5629d09d119caf98351ed3077b63d95c3e4
|
Provenance
The following attestation bundles were made for mars_agents-0.0.14.tar.gz:
Publisher:
release.yml on meridian-flow/mars-agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mars_agents-0.0.14.tar.gz -
Subject digest:
e70c42d016afcb6fbbc2d1d6a9fd37fb47522f745d66c9b1a63db73efe16f286 - Sigstore transparency entry: 1281009474
- Sigstore integration time:
-
Permalink:
meridian-flow/mars-agents@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Branch / Tag:
refs/tags/v0.0.14 - Owner: https://github.com/meridian-flow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Trigger Event:
push
-
Statement type:
File details
Details for the file mars_agents-0.0.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: mars_agents-0.0.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2468cf2415231d18c83ca1adf028f2885e02551d4b42dfb4c17f7f071069414
|
|
| MD5 |
f499c142aabae2678ee1fa9ca6d44ec7
|
|
| BLAKE2b-256 |
07675cb86e1ee71befd0af4eb434b81d2ab9a7f6a833a8197192a6276fe52d5e
|
Provenance
The following attestation bundles were made for mars_agents-0.0.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on meridian-flow/mars-agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mars_agents-0.0.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
e2468cf2415231d18c83ca1adf028f2885e02551d4b42dfb4c17f7f071069414 - Sigstore transparency entry: 1281009502
- Sigstore integration time:
-
Permalink:
meridian-flow/mars-agents@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Branch / Tag:
refs/tags/v0.0.14 - Owner: https://github.com/meridian-flow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Trigger Event:
push
-
Statement type:
File details
Details for the file mars_agents-0.0.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: mars_agents-0.0.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a9f9ec517743fe6299d43919360decf27c5af9a3f666beab194057e3a70f062
|
|
| MD5 |
dcbbc60ed61863fe304e6435aaf73054
|
|
| BLAKE2b-256 |
7907525b1e772201187d4495e0720300a60f467bae58a1d578fe4fa3996c0bd3
|
Provenance
The following attestation bundles were made for mars_agents-0.0.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on meridian-flow/mars-agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mars_agents-0.0.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
8a9f9ec517743fe6299d43919360decf27c5af9a3f666beab194057e3a70f062 - Sigstore transparency entry: 1281009560
- Sigstore integration time:
-
Permalink:
meridian-flow/mars-agents@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Branch / Tag:
refs/tags/v0.0.14 - Owner: https://github.com/meridian-flow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Trigger Event:
push
-
Statement type:
File details
Details for the file mars_agents-0.0.14-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: mars_agents-0.0.14-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff89ffff91c8d2383c80bcef0df51f684ff9e868e54b134c71c7391690165538
|
|
| MD5 |
8a2f6aeee320588a97e478fa664bae48
|
|
| BLAKE2b-256 |
fb4f6311963ba12dffa0065b90119b98672e80d591b1853257395f99c83ff033
|
Provenance
The following attestation bundles were made for mars_agents-0.0.14-py3-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on meridian-flow/mars-agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mars_agents-0.0.14-py3-none-macosx_11_0_arm64.whl -
Subject digest:
ff89ffff91c8d2383c80bcef0df51f684ff9e868e54b134c71c7391690165538 - Sigstore transparency entry: 1281009595
- Sigstore integration time:
-
Permalink:
meridian-flow/mars-agents@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Branch / Tag:
refs/tags/v0.0.14 - Owner: https://github.com/meridian-flow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Trigger Event:
push
-
Statement type:
File details
Details for the file mars_agents-0.0.14-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: mars_agents-0.0.14-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.4 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8163e9359ad7e031d7154159cbe97451e2c8c78aa69255e9d4d58b6f928bf27
|
|
| MD5 |
5ceeaaf19dc3924e08414574c488f469
|
|
| BLAKE2b-256 |
6df676cb7fca75a1a589049d7801fc7b0b37b54c1203c78160236afc976929bb
|
Provenance
The following attestation bundles were made for mars_agents-0.0.14-py3-none-macosx_10_12_x86_64.whl:
Publisher:
release.yml on meridian-flow/mars-agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mars_agents-0.0.14-py3-none-macosx_10_12_x86_64.whl -
Subject digest:
f8163e9359ad7e031d7154159cbe97451e2c8c78aa69255e9d4d58b6f928bf27 - Sigstore transparency entry: 1281009530
- Sigstore integration time:
-
Permalink:
meridian-flow/mars-agents@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Branch / Tag:
refs/tags/v0.0.14 - Owner: https://github.com/meridian-flow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a23bfe2a618c0979536a370a452a4c1a7446c5c -
Trigger Event:
push
-
Statement type: