Skip to main content

Mount, not install. AI workspace configuration from git-backed registries.

Project description

csaw

Mount, not install. Your AI workspace — symlinked from registries, reversible, inspectable.

CI License: MIT Version PyPI

Works with: Claude Code · OpenCode · Codex · Cursor · Windsurf · Gemini CLI

csaw demo


csaw manages agent instructions, skills, and configs from git-backed registries — symlinked into your projects, mounted into tool-native directories, and removed without a trace.

csaw mount                        # pick a profile interactively
csaw mount --profile team/backend # or specify directly
csaw inspect                      # see everything that's active
csaw unmount                      # clean removal, no trace

Why csaw?

Your AI coding tools (Claude Code, OpenCode, Codex, Cursor) need configuration files — AGENTS.md, skills, rules. Today you copy them between projects, they drift, and switching between setups means manually swapping files.

csaw mounts these files from a central registry using symlinks. When you're done, unmount. When you switch tasks, switch profiles. Your project's git history stays clean.

Copy & paste csaw
Install Copy files into repo Symlink from registry
Update Re-copy, hope nothing drifted Pull registry, links update live
Undo Delete files, hope you got them all csaw unmount — originals restored
Switch Manual file swapping csaw mount --profile frontend
Git Config files in your history Hidden from git automatically
Tools Manually place in each tool's dir Auto-detected, auto-mounted

Install

# Recommended (any platform)
uv tool install csaw

# macOS / Linux
brew install --cask csaw-ai/tap/csaw

# Windows
scoop bucket add csaw-ai https://github.com/csaw-ai/scoop-bucket
scoop install csaw

macOS note (Homebrew): If you see "Apple could not verify", run:

xattr -d com.apple.quarantine "$(which csaw)"

This is normal for unsigned CLI tools distributed via Homebrew casks.

Other install methods
# pipx
pipx install csaw

# Go from source (requires Go 1.22+)
go install github.com/csaw-ai/csaw/cmd/csaw@latest

Quick Start

1. Add a source

A source is any git repo (or local directory) containing agent files and skills.

# From a git repo
csaw source add team git@github.com:your-org/ai-config.git
csaw pull team

# Or a local directory
csaw source add local ~/my-ai-config

2. Mount a profile

Profiles are named sets of files defined in a csaw.yml in the source:

# csaw.yml
backend:
  include:
    - agents/base.md
    - agents/go.md
    - skills/code-review/**
    - skills/testing/**

frontend:
  extends: backend
  include:
    - agents/react.md
    - skills/react-patterns/**

Mount one:

csaw mount --profile team/backend

Or just run csaw mount — you'll get an interactive picker showing all available profiles with descriptions.

3. Inspect what's active

csaw inspect
csaw inspect

  project:       /home/you/api-server
  csaw home:     /home/you/.csaw
  sources:       1
  mounted:       12

Sources
  team (remote) → /home/you/.csaw/sources/team

Mounted files

  team
    ✔ .claude/skills/code-review/SKILL.md
    ✔ .claude/skills/testing/SKILL.md
    ✔ .agents/skills/code-review/SKILL.md
    ✔ .agents/skills/testing/SKILL.md
    ✔ AGENTS.md
    ✔ agents/base.md
    ✔ agents/go.md
    ...

4. Work normally

Open your AI tool. Skills are mounted into tool-native directories (.claude/skills/, .opencode/skills/, .agents/skills/) where they're automatically discovered. AGENTS.md is at your project root.

5. Clean up

csaw unmount           # remove everything, restore originals
csaw mount --restore   # re-mount what was there before

How It Works

csaw uses symlinks, not file copies. Your registry is the source of truth:

your-project/
  .claude/skills/code-review/SKILL.md  →  ~/.csaw/sources/team/skills/code-review/SKILL.md
  .agents/skills/code-review/SKILL.md  →  ~/.csaw/sources/team/skills/code-review/SKILL.md
  AGENTS.md                            →  ~/.csaw/sources/team/AGENTS.md
  • Skills mount into tool-native directories (.claude/skills/, .opencode/skills/, .agents/skills/). These are typically gitignored, so git stays clean.
  • AGENTS.md and other non-skill files mount at the project root, with entries in .git/info/exclude to keep them out of git status.
  • csaw checks .gitignore first — if a path is already covered, no extra exclude is needed.

Git visibility

By default, mounted files are hidden from git. To make a file visible:

csaw show AGENTS.md    # remove from git exclude → visible to git
csaw hide AGENTS.md    # add back → hidden from git

Commands

Command What it does
csaw mount [patterns] Mount files. Interactive picker if no profile/patterns given.
csaw mount --profile name Mount a named profile.
csaw mount --restore Re-mount the previous selection.
csaw unmount [patterns] Remove mounted files, restore originals.
csaw inspect Show full state: sources, mounted files, health.
csaw inspect --source name Browse a source's contents.
csaw check Detect broken or drifted symlinks.
csaw update Repair drifted links.
csaw diff path Show diff between mounted file and its source.
csaw pull [source] Pull latest from remote sources.
csaw push -m "msg" Push personal registry changes.
csaw show path Make a mounted file visible to git.
csaw hide path Hide a mounted file from git.
csaw source add name url Add a git or local source.
csaw source remove name Remove a source.
csaw source list List configured sources.
csaw status Show mounted files, sources, stashed originals.
csaw version Print version.

Flags

Flag Commands What it does
--profile name mount Use a named profile for file selection.
--exclude glob mount Exclude files matching a pattern.
--include-ignored mount Include files hidden by .csawignore.
--force mount Overwrite conflicts, stash originals.
--skip-conflicts mount Skip files that conflict.
--restore mount Re-mount the previous selection.
--source name inspect Show details for a specific source.

Profiles

Profiles live in csaw.yml at the root of any source. They support glob patterns and inheritance:

base:
  description: Shared foundation for all profiles
  include:
    - AGENTS.md
    - skills/code-review/**

backend:
  description: Go backend development
  extends: base
  include:
    - agents/go.md
    - skills/go-patterns/**
    - skills/testing/**

security:
  extends: base
  include:
    - skills/security-review/**
  exclude:
    - skills/testing/**

Profiles from different sources can reference each other: extends: team/base.

Registry Structure

A csaw source is just a directory (usually a git repo) with agent files and an optional csaw.yml:

my-ai-config/
  csaw.yml              # profiles (optional)
  .csawignore           # files hidden from default mounts (optional)
  AGENTS.md             # root agent instructions
  agents/
    base.md
    go.md
    react.md
  skills/
    code-review/
      SKILL.md
    testing/
      SKILL.md
    go-patterns/
      SKILL.md

Every file is standard markdown — usable without csaw.

Contributing

See CONTRIBUTING.md for workflow, validation, and repo standards.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

csaw-0.1.3-py3-none-win_arm64.whl (11.7 MB view details)

Uploaded Python 3Windows ARM64

csaw-0.1.3-py3-none-win_amd64.whl (12.5 MB view details)

Uploaded Python 3Windows x86-64

csaw-0.1.3-py3-none-musllinux_1_2_x86_64.whl (12.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

csaw-0.1.3-py3-none-musllinux_1_2_aarch64.whl (11.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

csaw-0.1.3-py3-none-manylinux_2_17_x86_64.whl (12.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

csaw-0.1.3-py3-none-manylinux_2_17_aarch64.whl (11.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

csaw-0.1.3-py3-none-macosx_11_0_arm64.whl (11.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

csaw-0.1.3-py3-none-macosx_10_9_x86_64.whl (12.3 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file csaw-0.1.3-py3-none-win_arm64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-win_arm64.whl
  • Upload date:
  • Size: 11.7 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for csaw-0.1.3-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 7cdf5582b45dc8c9b458d623fb1c18c7780f95ae2162a073944090654a914fa4
MD5 b73f870b3d4e1b51d02f76850393bb34
BLAKE2b-256 2d340f8968b1530d847c710f90acbcedf9ff5ece560f2e4557ea4931a9c9b825

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-win_arm64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-win_amd64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-win_amd64.whl
  • Upload date:
  • Size: 12.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for csaw-0.1.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 5519f81b328cd2d2fafc8198158d7725e8aa18a3e6fab0d8d321ec296c29fb13
MD5 4305b6414ed9610777709620781ff056
BLAKE2b-256 9a739b52eaa27387b732009f80d9d589b81268c09af034fafe3983c6b4cf6c0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-win_amd64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 12.1 MB
  • Tags: Python 3, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for csaw-0.1.3-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6c113978b7560fec62002d877d2baa37b3f9772f24a095fdba9cfc5053ab6823
MD5 1f74036523b120c59f13ca156c880f6a
BLAKE2b-256 da673aeb139088d1ce845b87385e0b28d01bfb008a03521a5ed405d40a8fe988

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-musllinux_1_2_x86_64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for csaw-0.1.3-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 aa12ea99ee7145bd48a2dfcf7afcf53e924d92f9d99ef540084d1c24b7051b50
MD5 84b0a5a45cfd4bbd4e5195a6ef8eb75d
BLAKE2b-256 02e3ee0bffa08ab25d0580f5cd954ea812e155fb8fa4f2e0716be3c78001aa00

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-musllinux_1_2_aarch64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 12.1 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

Hashes for csaw-0.1.3-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 9d52fd4a5d835abf6f423407592c3872a066884cd6b60834a637979068530b84
MD5 8c446b4e00ff241096a58acbeb322b93
BLAKE2b-256 0731dbb5a57fd630b7c1666c2793a023f440c392455b2f3de884c372ef85cacf

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-manylinux_2_17_x86_64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for csaw-0.1.3-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 a774fef2805ff7c08c25b27a8ca064125c8f604185cf81d31dd997a364204a11
MD5 eb89a4360601abe499322a3968bd5152
BLAKE2b-256 3e8015a3c53e11ebdba463126cc68aa1c63a56b11bd777eb5f6885ddec1fffd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-manylinux_2_17_aarch64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 11.7 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

Hashes for csaw-0.1.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e388fa2c4620868ebdcdbeef55b3ce5026a895e5b11cccbb9983a8cb367c365d
MD5 5e66b13a70250c1fa5f6de431b9271b1
BLAKE2b-256 a3801a9ff53c75422a4326822225eb399fd77f65a47bf0d2df1f1e355d7c3b4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file csaw-0.1.3-py3-none-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.3-py3-none-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 12.3 MB
  • Tags: Python 3, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for csaw-0.1.3-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 162fcf21d18651eacaf254f7414f7133a011900f9d9a672af2917c367b09e9cf
MD5 79a40b7d4f732c7b6b3d935d39800881
BLAKE2b-256 e3edba821c446491d9b39d558a3b8134c29e841466c906cbdfb079952c5db88c

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.3-py3-none-macosx_10_9_x86_64.whl:

Publisher: release.yml on csaw-ai/csaw

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page