agentstow
One canonical .agents/ folder, fanned out to all your AI coding agents.
Website and docs: https://agentstow.dev/
The Commons — the canonical ~/.agents/ directory — holds the single real copy of every
config you share: skills, instructions, MCP servers, slash commands, agents and hooks.
agentstow sync fans it out to every agent you actually have installed.
Configs that can be byte-identical everywhere are symlinked, so there is one file seen from ten places and drift is impossible by construction. Configs that cannot be — MCP servers and hooks, which live inside files the agent also owns, in formats no two agents share — are rendered and key-merged, with your other keys preserved.
There is no state file. There never will be. The filesystem is the state.
~/.agents/
├── skills/<name>/ fanned out as symlinks
├── commands/<name>.md
├── agents/<name>.md
├── AGENTS.md symlink, import-line, or rules-dir link per agent
├── mcp.json rendered into each agent's native dialect
└── hooks/<Event>.toml merged by command string
Install
npm install -g agentstow # prebuilt binary, macOS, Linux and Windows, no toolchain
pip install agentstow # the same binary, shipped as a wheel
cargo install agentstow # from source, needs Rust 1.97+
npx agentstow doctor # or try it first, without installing anything
uvx agentstow doctor # the same, if you reach for uv rather than npm
On macOS and Linux there is also a Homebrew tap. It lives in this repository rather
than a separate homebrew-agentstow one, so it is tapped by URL:
brew tap agentstow/tap https://github.com/agentstow/agentstow
brew trust agentstow/tap # Homebrew 6 refuses to load untrusted third-party taps
brew install agentstow
Use
agentstow init # create the Commons and report what this machine already has
agentstow adopt <path> # take a path under management; --dry-run names the mechanic
agentstow sync # fan out; --dry-run prints the full plan
agentstow status # what is linked, what is not, and what is not ours
agentstow doctor # installed agents, Commons hygiene, Sourced entries
agentstow revert <agent> # offboard one agent (refuses until you disable it)
agentstow mcp list | adopt | remove | enable | disable
adopt picks its mechanic from where the path lives: a real config inside an agent's
directory is moved into the Commons with a link left behind; a path inside a git repo
becomes a Sourced entry — the Commons links out to it and the repo keeps the truth;
anything else is copied in. To gate CI on drift use status (exit 0 clean, 2
actionable, 1 error) — sync --dry-run previews, it does not gate.
Agents
Claude Code, Codex, opencode, pi, oh-my-pi, OpenClaw, Hermes, Gemini CLI, Cursor, Windsurf,
Roo and Cline. Detection is simply whether the agent's config directory exists — agentstow
never creates one. Agents that read ~/.agents/skills natively (Codex, opencode, oh-my-pi,
Gemini CLI, Cursor) get no skill links written, because nothing needs to be — and where an
agent still reads its old fan-out directory beside the Commons (Codex, Cursor), sync
prunes agentstow's now-duplicate links from it.
Interop
The Commons speaks the conventions that won: skills/<name>/SKILL.md — the layout
opencode and friends read natively — one AGENTS.md, and an mcp.json in the standard
mcpServers shape. .agents Protocol surfaces (tasks/, memories/, models.json,
system-prompt.md) are recognized by doctor and never touched.
What it will not touch
Anything it does not own. A symlink pointing outside the Commons, a hand-written file, an
MCP server whose name isn't in the Commons — all Foreign, all reported by status, none
ever modified. A real directory shadowing a Commons entry is a Variant: deliberate,
preserved, and counted as actionable only when its contents are identical to the Commons
copy, so you can dedupe on purpose.
The Commons is exactly that — a commons, not agentstow's alone. opencode, oh-my-pi and
Hermes read ~/.agents/ themselves, and other tools keep their own files there. doctor
names entries that aren't agentstow's and leaves them be; status stays target-only,
since a neighbour's file has no fan-out to report.
Configuration
Optional agentstow.toml in $XDG_CONFIG_HOME/agentstow/ (default ~/.config/agentstow/):
disable targets, define custom ones, scope MCP servers per agent, per-agent Tweaks. The
lock — agentstow's only machine state — lives in $XDG_STATE_HOME/agentstow/ (default
~/.local/state/agentstow/). Environment: AGENTSTOW_HOME relocates the Commons (doctor
warns — native readers won't follow), AGENTSTOW_TARGET_ROOT resolves everything against
another root, AGENTSTOW_LOCK_TIMEOUT_MS bounds the lock wait.
What it does not do
No cross-machine sync — version the Commons with git or chezmoi. No undo — refusals come
before writes, sync plans everything before writing anything, sync and adopt preview
with --dry-run, re-runs are idempotent, and a git-versioned Commons is better history
than any journal. No memory sync: agent memory is not a defined artifact and agentstow will
not pretend otherwise. No GUI, daemon or file watcher. It does not install skills; it fans
out whatever is in the Commons, whoever put it there.
On Windows, creating symlinks requires Developer Mode (Settings → System → For
developers) or an elevated shell; sync says exactly that when it cannot link.
Name and inspiration
The name is a nod to GNU Stow, the classic symlink-farm manager — agentstow does for agent configs what Stow does for dotfiles. The project is also inspired by two neighbours in the same space: dotagents and agentsync.
Documentation · agentstow.dev · MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 agentstow-2.0.4-py3-none-win_arm64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-win_arm64.whl
- Upload date:
- Size: 709.3 kB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3ed1e8fafae9380e1c03575c91d1272b4ec35020409f9d82df7c9610c4b7a13
|
|
| MD5 |
e219dce86067c68ca3cda7a5210029df
|
|
| BLAKE2b-256 |
640345ea30f0e321acf101dd8e33dc9f1704becf190c341d3239536003a1368e
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-win_arm64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-win_arm64.whl -
Subject digest:
f3ed1e8fafae9380e1c03575c91d1272b4ec35020409f9d82df7c9610c4b7a13 - Sigstore transparency entry: 2495956061
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-win_amd64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-win_amd64.whl
- Upload date:
- Size: 777.6 kB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7829118a75f1abfedb733c76467f69e6cd056fe66b0c5c9309d35ff73aa7c088
|
|
| MD5 |
5aaa32128a638ff61dda811bd2ac2166
|
|
| BLAKE2b-256 |
bd2efe0a92c407eb229302d02f915c97481ac711fa51d0e24ebf536e70b4ea5b
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-win_amd64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-win_amd64.whl -
Subject digest:
7829118a75f1abfedb733c76467f69e6cd056fe66b0c5c9309d35ff73aa7c088 - Sigstore transparency entry: 2495954253
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 812.1 kB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0ee0708bff6a34c01dd1ddd288849c599bb8a74ed8744dba8cfba44cef8de99
|
|
| MD5 |
91d4a1d6d51c5ce9189447d9731a163c
|
|
| BLAKE2b-256 |
12345c7cb30961876de2b5b0e41b017fe9e69f082cdb90e51296f81d3671b52c
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
b0ee0708bff6a34c01dd1ddd288849c599bb8a74ed8744dba8cfba44cef8de99 - Sigstore transparency entry: 2495953332
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 748.5 kB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f5e72b06793fb7aa69f2b321a60394306830084cebcb5c7504dc0f81be9359c
|
|
| MD5 |
3da7811c9108bb138460eafd23aa647a
|
|
| BLAKE2b-256 |
667640c0389d028c6fb861b2695b5a09b8607a69c918b236520d1d9165612828
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
5f5e72b06793fb7aa69f2b321a60394306830084cebcb5c7504dc0f81be9359c - Sigstore transparency entry: 2495957883
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 731.0 kB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46d9b5a7723fc3ba8e9a350750eddb758fe539b1faf1b5006ccb2978c941ef5e
|
|
| MD5 |
0d3d8e25c22f5f3914339d84fff83f2e
|
|
| BLAKE2b-256 |
d6a598498fb4e78b5e7a24ca4f551e17ee0d9e6be7be3ea3511383b8309b8ba2
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-macosx_11_0_arm64.whl -
Subject digest:
46d9b5a7723fc3ba8e9a350750eddb758fe539b1faf1b5006ccb2978c941ef5e - Sigstore transparency entry: 2495957127
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 786.8 kB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f89ce543a54dafb195027d81d5ce7ad88cd51d0de4f3c7a0d9f1d5791462e21f
|
|
| MD5 |
dfc197103f24cb53f8db7caea9f48a6b
|
|
| BLAKE2b-256 |
c93365712a328af2fef977b7ada59808c0a59a71b3072bac1f49f5726360d094
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-macosx_10_12_x86_64.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-macosx_10_12_x86_64.whl -
Subject digest:
f89ce543a54dafb195027d81d5ce7ad88cd51d0de4f3c7a0d9f1d5791462e21f - Sigstore transparency entry: 2495952603
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentstow-2.0.4-py3-none-any.whl.
File metadata
- Download URL: agentstow-2.0.4-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17dc6eea7ff3037c5267981ec82ede26f559b81247456549ba3394bc7b01788d
|
|
| MD5 |
b7304e5ad8d2afa2f9e119def1b3bc5f
|
|
| BLAKE2b-256 |
a9ab6aece220f259e74b3a922e01c342bab090619de4c6ca4f2b78227592f96b
|
Provenance
The following attestation bundles were made for agentstow-2.0.4-py3-none-any.whl:
Publisher:
release.yml on agentstow/agentstow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentstow-2.0.4-py3-none-any.whl -
Subject digest:
17dc6eea7ff3037c5267981ec82ede26f559b81247456549ba3394bc7b01788d - Sigstore transparency entry: 2495955144
- Sigstore integration time:
-
Permalink:
agentstow/agentstow@de2de7702231566efb8d646164a0f45a15d9b27b -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/agentstow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@de2de7702231566efb8d646164a0f45a15d9b27b -
Trigger Event:
push
-
Statement type: