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

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

# 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: 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.

Install 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.2-py3-none-win_arm64.whl (11.6 MB view details)

Uploaded Python 3Windows ARM64

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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.17+ x86-64

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

csaw-0.1.2-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.2-py3-none-win_arm64.whl.

File metadata

  • Download URL: csaw-0.1.2-py3-none-win_arm64.whl
  • Upload date:
  • Size: 11.6 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.2-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 9d9d9daa49b259c14c74defcfea127b6f80e3d76c20f925fe51ff2b433755c48
MD5 ebcf3097d0697e6c91829709e6abff72
BLAKE2b-256 2cb876d4815fa09fb68b0853d8c47e2c6781784a24502787d0dfad2a2c896c2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: csaw-0.1.2-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.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f4a30ef2db2a6ebd137a608bbd4b770ccca0e3a8ebcc0f45287728d985d139c4
MD5 90fd2eab6bfa6dfd41fce9f235b78fc0
BLAKE2b-256 7c8a42dc8affacaf4a009438a06bd5659c82ad7276d749800aca65a1cc988e87

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.2-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.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d269bb3f099f01fbf40c36e68313d71ae2fd191bcd3e29353fa702df3447068a
MD5 0ccf9491b042ddd6c73e30cff26adf41
BLAKE2b-256 03736ed682337838ed064845bc518bcb6707b0aff86bfd2f8ff30c8ca0e4ea4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for csaw-0.1.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 02da6eeeb4bed12f41ba262eecb75331d0fa81132264d33316c189bde78d08f8
MD5 96567a074459d8ffc0b6703c49e72cda
BLAKE2b-256 5534e87ac488530a339ed7861b3e0a243d20d8fbcc590e000f13cb93f32b6dda

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.2-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.2-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8e3fe14af14ed6f300fd7a19943082ab541b7d800ac4598a040ab7e40fc5626f
MD5 acb1ce89465bc7f5306257a98fe89e38
BLAKE2b-256 af36cae45e26882db9d20539a473bbc14a84146d1625c03dd79b7b5ae15ed289

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for csaw-0.1.2-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 7261e8937e24ea4721472a14349fa3eddd54f90b6bde93f56e09fc37c13ba739
MD5 07df4aaa097cd92f2fb6151f01025aeb
BLAKE2b-256 13b0588140cfa43822bf62014893ad35fe0aa1d57e57f2eaa489c981e272f44c

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: csaw-0.1.2-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.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2138250a109d83f66484a2426f111b0281b8c826864072409f3e89e2a108220d
MD5 094ac8b77879fab4489307f2d8b7fd75
BLAKE2b-256 f6b3ecd4a1287619ef661726491852aaf1faf5362c207ccd614111aa8159c768

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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.2-py3-none-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: csaw-0.1.2-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.2-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 372c1b156ea1181568ca87eb5a9e4d6fff35763675a4302b16b148296b6373ec
MD5 30e2bc2c18ed22fbe2e33f99c4ef110b
BLAKE2b-256 55c3434666d8d4aeb80948278ac0d9e3b450e7fa68fb031d48ad7de453e91c31

See more details on using hashes here.

Provenance

The following attestation bundles were made for csaw-0.1.2-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