Write once,
guide everywhere.

Gather compiles your AI coding instructions into native formats for Cursor, Claude Code, and Copilot — from a single source of truth.

gather compile cursor — and your entire team's knowledge flows into every tool.

One command. All sources. Every tool. Shared catalog + project overrides. Drift detection built in.

Up and running in three steps

1

Install

One command via uv. No global deps.

uv tool install "gather-cli @ git+https://github.com/arbor-education/devx.gather.git@main#subdirectory=gather-cli"
2

Initialize

Pick shared packs from the org catalog.

cd your-project
gather init
3

Compile

One command writes everything your tool needs.

gather compile cursor
# or: gather compile claude

That's it. One compile fetched your org's shared instructions, merged your project rules, and wrote everything into Cursor's native format.

gather init
Terminal recording showing gather init with an interactive catalog picker for selecting shared instruction packs

One compile. Everything merges.

arbor-education/knowledge

  • Shared instructions
  • Company skills
  • Team agents

your project's .gather/

  • Project rules
  • Local agents
  • Custom skills

gather compile
Cursor .cursor/rules/
.cursor/skills/
.cursor/agents/
Claude Code .claude/rules/
.claude/skills/
CLAUDE.md

One source of truth. One command per tool. Project content always wins.

gather compile cursor
Terminal recording showing gather compile cursor fetching shared instructions and writing Cursor output files

Do I need to recompile?

Run gather status to check. If everything is Clean, you're up to date.

What changed What to do
Someone updated the org catalog gather compile cursor
You edited files in .gather/ gather compile cursor
You changed gather.yaml sources gather compile cursor
Teammate already compiled & pushed Nothing — outputs are in the repo
You tweaked a generated file gather status → then decide
gather status
Terminal recording showing gather status detecting drifted files, then recompiling to return to clean state

You don't need to write .gather/ files.

If you use Cursor or Claude Code, you benefit from Gather just by running two commands. Skills like "Generate PR Description" come from the shared catalog automatically.

gather compile cursor # get the latest
gather status # check you're current

That's the whole workflow. Compile when you start, check when you're unsure.

All the commands

gather init create .gather/, pick catalog packs
Sets up a new project with an interactive catalog picker showing available instruction packs from your org's shared repository. Creates .gather/gather.yaml, instructions/, agents/, and skills/ directories.
gather init --batch --folders company,devops # non-interactive
gather compile cursor|claude|copilot fetch, merge, compile, write
The main command. Fetches all configured sources, merges with your project's .gather/ content, sends to the compiler, and writes native output files. Each compile is a full refresh — no incremental state to worry about.
gather compile cursor
gather compile claude --keep-tmp # keep .gather-tmp for debugging
gather compile cursor --verbose # show full file tree
gather status clean / drifted / missing check
Compares generated files on disk against recorded state. Shows per-target breakdown with Clean, Drifted, Missing, and Untracked counts. Exit code 0 if everything matches.
gather status
gather promote save local edits back to .gather/
If you tweaked a generated file (e.g. edited a rule in .cursor/rules/), promote syncs that change back into .gather/ so it survives the next compile.
gather promote
gather promote --target cursor # only from Cursor files
gather import bring existing rules into .gather/
Already have .cursor/rules/ or CLAUDE.local.md? Import copies them into .gather/instructions/_imported/ so they become part of your canonical source.
gather import
gather import --dry-run # preview without writing
gather doctor validate config, auth, compiler
Runs a full diagnostic: checks your .gather/ directory, validates gather.yaml, tests GitHub auth, verifies the compiler service is reachable.
gather doctor
gather retract remove all generated files
Removes all generated artifacts that were recorded in local state. Useful for a clean slate before switching targets or cleaning up a repo.
gather retract