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
Metadata
Release files for agentstow 2.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| agentstow-2.0.6-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| agentstow-2.0.6-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| agentstow-2.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| agentstow-2.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| agentstow-2.0.6-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| agentstow-2.0.6-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
| agentstow-2.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.6 MB
Release files / agentstow-2.0.6-py3-none-win_arm64.whl
| Download URL | agentstow-2.0.6-py3-none-win_arm64.whl |
|---|---|
| Size | 708.8 kB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
dbaaf08b0ff03332ab96071544185ede7f94ad2de0b3e7dd828069dea02632ec
|
|
BLAKE2b-256 checksum How to use checksums |
c7e50448517e64818c02bc84e2b2eb8e4bdfb5f10e2e7b149cf09ed11dc58e93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-win_amd64.whl
| Download URL | agentstow-2.0.6-py3-none-win_amd64.whl |
|---|---|
| Size | 774.0 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f268275c6a09dc790753dd0e822a573a5fd01febb4c33d65560e6089aeb23da7
|
|
BLAKE2b-256 checksum How to use checksums |
23e5577fdb2d16893b1774fc79d502ef5ecce2bbba0cc109857335036a079129
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | agentstow-2.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 817.6 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
adde488fcc057ad2405934996d18b69bc41c8dcb7772094205591da05b801979
|
|
BLAKE2b-256 checksum How to use checksums |
ac4ad6c039416542af4a40eec2169ba013f3c8dae9b41bdbab873471784fc08d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | agentstow-2.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 749.4 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
cc076a89344f82a85366802b6de9cdfcffd78c5e85076d429dce36adde09e01b
|
|
BLAKE2b-256 checksum How to use checksums |
1e9acf09506fb67f1fc43120247241b796270288a174149ef7e1094eb246ca38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-macosx_11_0_arm64.whl
| Download URL | agentstow-2.0.6-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 732.1 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
43975cff051a9a61fd9e5074a3b85ed1ac94c450b45630f989b3ffdbc4b1b22b
|
|
BLAKE2b-256 checksum How to use checksums |
d97b4b225005815b1f8251c7d820ae871837e24354af5e6e8108b1e2af67e7f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-macosx_10_12_x86_64.whl
| Download URL | agentstow-2.0.6-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 791.2 kB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c704c645cfcd11d85e67ae5d5fb61bf8d6429ea82b5079149a7f5b8aebd63050
|
|
BLAKE2b-256 checksum How to use checksums |
c37fc570568c8265e637fbfd93d6398354fed3b4bd1b33230ac8a27c87c6c541
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / agentstow-2.0.6-py3-none-any.whl
| Download URL | agentstow-2.0.6-py3-none-any.whl |
|---|---|
| Size | 4.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a27ff0594f1b820f41732d1dee5549ba4466d9d0bdee60fd14d47d56146104a8
|
|
BLAKE2b-256 checksum How to use checksums |
e6d13df0a22ff593eb09c9d8dbb597a36fc7fbf97fab4e4f8b99cc361920e57e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency log