Multi Agentic Repo workspace manager for git repositories with shared Claude configuration.
- Manage multiple git repos as a unified workspace
- Shared
claude.mdand.claude/config across repos - Tag-based repo filtering for targeted operations
- Parallel cloning with rate limiting
- Works with bash 3.2+ (macOS compatible)
npm install -g @dean0x/marsOr run without installing:
npx @dean0x/mars --helpbrew install dean0x/tap/marscurl -fsSL https://raw.githubusercontent.com/dean0x/mars/main/install.sh | bashgit clone https://github.com/dean0x/mars.git
cd mars
./build.sh
cp dist/mars ~/.local/bin/ # or anywhere in PATH# Create a new workspace
mkdir my-project && cd my-project
mars init
# Add repositories
mars add git@github.com:org/frontend.git --tags frontend,web
mars add git@github.com:org/backend.git --tags backend,api
mars add git@github.com:org/shared.git --tags shared
# Clone all repos
mars clone
# Check status
mars statusmy-project/
├── mars.yaml # Workspace configuration
├── claude.md # Shared Claude config (optional)
├── .claude/ # Shared Claude folder (optional)
├── .gitignore # Contains 'repos/'
└── repos/ # Cloned repositories (gitignored)
├── frontend/
├── backend/
└── shared/
| Command | Description |
|---|---|
mars init |
Initialize a new workspace |
mars add <url> [--tags t1,t2] |
Add a repository to config |
mars clone [--tag TAG] |
Clone configured repositories |
mars status [--tag TAG] |
Show status of all repositories |
mars branch <name> [--tag TAG] |
Create branch on repositories |
mars checkout <branch> [--tag TAG] |
Checkout branch on repositories |
mars sync [--tag TAG] [--rebase] |
Pull latest changes |
mars exec "<cmd>" [--tag TAG] |
Run command in each repository |
mars list [--tag TAG] |
List configured repositories |
Target subsets of repos using --tag:
# Only clone frontend repos
mars clone --tag frontend
# Create branch on backend repos only
mars branch feature-auth --tag backend
# Run npm install on all frontend repos
mars exec "npm install" --tag frontendversion: 1
workspace:
name: "my-project"
repos:
- url: git@github.com:org/frontend.git
tags: [frontend, web]
- url: git@github.com:org/backend.git
path: api # optional custom path
tags: [backend, api]
defaults:
branch: mainmars/
├── mars # Main CLI entry point
├── lib/
│ ├── ui.sh # Terminal UI components
│ ├── yaml.sh # YAML parser
│ ├── config.sh # Config management
│ ├── git.sh # Git operations
│ └── commands/ # Command implementations
├── build.sh # Build distribution
├── install.sh # Installer script
└── test/ # Test suite
# Run all tests
bash test/test_yaml.sh
bash test/test_config.sh
bash test/test_integration.sh./build.sh # Output: dist/marsImportant: dist/mars is committed for easy installation. Always run ./build.sh before committing changes to source files.
Releases are automated via GitHub Actions. To create a release:
- Update version in
package.json - Commit the change
- Create and push a tag:
git tag v0.1.1 && git push origin v0.1.1
The CI will automatically:
- Run tests
- Verify the tag version matches
package.json - Create a GitHub Release with auto-generated notes
- Publish to npm
- Update the Homebrew formula
| Secret | Repository | Purpose |
|---|---|---|
NPM_TOKEN |
mars | npm publish access token |
HOMEBREW_TAP_TOKEN |
mars | PAT with repo scope to trigger homebrew-tap workflow |
MIT