Version control for AI agent configurations across Hermes, Claude Code, OpenCode, Zen, and Phi
Project description
aVer — Agent Versioning
Version-control your AI agent configs. aVer snapshots, rolls back, and promotes agent configuration across frameworks — Hermes, Claude Code, OpenCode, Zen, and Phi — using a git-like workflow.
# One-line install (macOS, Linux, WSL)
curl -fsSL https://github.com/hrshx3o5o6/aVer/raw/main/install.sh | bash
cd my-project
# Init the store
aver init
# Snapshot configs for all detected agents
aver commit -m "Working setup"
# Or install from PyPI
pipx install aver-cli
Quick start
# Init in your project
cd my-project
aver init
# Snapshot all detected agent configs
aver commit -m "Working setup"
# See what's stored
aver log
aver status
# Restore a previous snapshot
aver checkout HEAD~1
# Deploy to staging/production
aver deploy staging e0529330d5ba
# Rollback if something breaks
aver rollback staging
# Compare two versions
aver diff main v1
# Diff against current configs
aver diff main
Commands
| Command | Description |
|---|---|
init |
Create a new store in the current directory |
commit |
Snapshot all detected framework configs into one club commit |
checkout |
Restore all configs from a commit to their native locations |
log |
Show commit history |
status |
Show head, environment versions, framework counts |
import <framework> |
Import a single framework's config into the store |
export <ref> <framework> |
Export a single framework's config from the store |
diff [a] [b] |
Structural diff between two versions (or HEAD vs current) |
deploy <env> <ref> |
Pin an environment to a specific version |
rollback <env> |
Rollback an environment to the previous version |
tag <name> <ref> |
Tag a commit with a human-readable name |
aver init
Creates a .agent-ver/ store in the current directory. Run this once per project.
aver commit
Scans the current project for config files across all supported frameworks. Shows per-framework status, then opens an interactive picker — arrow keys to navigate, space to toggle, enter to confirm.
Scanning for config files...
✓ Hermes
✓ Claude Code
✓ OpenCode
- Zen (no config found in current directory)
- Phi (no config found in current directory)
After commit, every tool's config is retrievable by the same hash.
$ aver checkout main
✓ Hermes → ~/.hermes/config.agent-ver.yaml
✓ Claude Code → .claude/settings.json
✓ OpenCode → opencode.json
aver import <framework>
Import a single framework's config into the store without committing. Useful for one-off imports. Supported frameworks: hermes, claude-code, opencode, zen, phi.
aver export <ref> <framework>
Export a single framework's config from a stored commit to its native config file location. Use when you only want to restore one framework at a time.
aver diff [a] [b]
Without arguments, diffs the current working configs against HEAD. With one argument, diffs against that ref. With two, diffs the two refs against each other.
$ aver diff production main
Changes: 3 (0 breaking)
[temperature] 0.2 → 0.0
[tools.mcp_filesystem] added
[prompts.code-reviewer.system_prompt] changed (198 chars → 412 chars)
aver deploy <env> <ref>
Pin an environment alias — like staging or production — to a specific commit. Agents can then load configs by environment name at runtime.
aver deploy staging a1b2c3d4
aver deploy production a1b2c3d4
# In Python:
from client import load_config
config = load_config(env="staging")
aver rollback <env>
Roll an environment back one commit. Uses the parent chain. Prints before/after hashes.
aver tag <name> <ref>
Tag a commit with a human-friendly name like v1, trial-a, or release-1.
Supported frameworks
| Framework | Config files | Pre-commit scan | Post-checkout restore |
|---|---|---|---|
| Claude Code | .claude/settings.json, .mcp.json, CLAUDE.md |
✓ | ✓ |
| OpenCode | opencode.json, .opencode/agents/*.md |
✓ | ✓ |
| Hermes | ~/.hermes/config.yaml |
✓ | ✓ |
| Zen (zenflow) | zenflow.yaml, .zenflow/, zenagents.json |
✓ | ✓ |
| Phi | ~/.phi/agent/settings.json, agents/*.md |
✓ | ✓ |
Runtime config loading (for agents)
from client import load_config, get_prompts, get_tools, get_model_params
# Load by environment
config = load_config(env="production")
prompts = get_prompts(env="staging")
# Load by tag
config = load_config(tag="v1")
# Load by commit hash
config = load_config(ref="a1b2c3d4e5f6")
CLI protocol for agents
import subprocess
subprocess.run(["aver", "checkout", "production"], check=True)
subprocess.run(["aver", "deploy", "staging", "a1b2c3d4"], check=True)
result = subprocess.run(["aver", "status"], capture_output=True, text=True)
print(result.stdout)
Adding a new framework bridge
See AGENTS.md for the full guide. In short:
- Create
bridges/<name>_bridge.pywithimport_from_<name>()andexport_to_<name>() - Add to
FrameworkTypeenum inmanifest.py - Wire into
cli.py(cmd_commitscan list +cmd_checkoutexporters dict) - Register in
interactive.py(detection map + export formats)
Store format
.agent-ver/
├── index.json # Main index (versions, club_commits, heads)
├── versions/
│ └── a1b2c3d4....json # Individual AgentManifest JSON
├── club/
│ └── cafe1234....json # ClubCommit (members → individual hashes)
├── tags/
│ └── v1 # File content = version hash
└── environments/
└── staging # File content = version hash
Architecture
┌─────────────────────┐
│ Agent Framework │
├─────────────────────┤
│ import_from_xxx() │ Bridge reads native config → AgentManifest
│ export_to_xxx() │ Bridge writes AgentManifest → native config
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ AgentManifest │ Universal schema (framework-agnostic)
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ VersionStore │ On-disk store (.agent-ver/)
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ client.py │ Runtime SDK for agents
└─────────────────────┘
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 Distribution
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 aver_cli-0.1.0.tar.gz.
File metadata
- Download URL: aver_cli-0.1.0.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
271e7df43a2aa343dafc6910be9083b5e8e166639d650aa9abe33feab4854e69
|
|
| MD5 |
12c8a81c97e8c3827f9873e65e142c32
|
|
| BLAKE2b-256 |
6a4b28a8dfb8f541bd3703744d3351dcc307057e91f091a2511680bd69c85bc6
|
File details
Details for the file aver_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aver_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 30.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18234106824eff7394792e69275c26b18660cf48f32cb030e3a5e0a937133964
|
|
| MD5 |
916051b962320192d6cf0adc29ec2d8e
|
|
| BLAKE2b-256 |
b9c2e6772aaac6ce378b674511e96b0612fde0ad0de182aa9c0c9cc64606319d
|