Quick Start
Four steps from nothing to a governed repo with an agent working inside it.
Install
Pick your package manager. Each command installs Vinaya and runs init in the same breath — nothing lands on your machine ahead of time, and nothing touches your repo until you confirm the diff in the next step.
$ npx @attalabs/vinaya init$ pnpm dlx @attalabs/vinaya init$ yarn dlx @attalabs/vinaya init$ bunx @attalabs/vinaya initdocumented against @attalabs/vinaya@0.19.2
init
vinaya init reads your repo, prints the complete diff of every file it intends to add or change, and waits — nothing is written until you say yes. --dry-run prints that same diff and installs nothing at all.
It writes exactly five things:
vinaya.config.json— a starter ruleset, withchecksempty- Git hook stubs —
.husky/if it's present, else raw.git/hooks - Two GitHub Actions workflows
- A root
VINAYA.mddoctrine pointer - A handful of labels — created only if they do not already exist
A file init did not create is never overwritten; a pre-existing hook keeps its own lines and gets an appended block instead.
$ vinaya initWorking in a monorepo with more than one governed area? vinaya init product <name> [--path <path>] extends an already-initialized repo with one more — it writes a row to .vinaya/projects.md (the registry Studio's tranche board resolves a project's board link against) plus a project:<name> label, create-if-absent, under the same diff-and-confirm contract as init itself. It refuses if init has not run yet.
$ vinaya init product <name>Start working
Connect whatever agentic coding tool you already use — Claude Code, Codex, Antigravity, or another — to this repo, and build your first feature. Vinaya doesn't care which tool; it cares that vinaya check --all passes before anything merges.
What that actually looks like, stage by stage, is the rest of this section.