Start

Quick Start

Four steps from nothing to a governed repo with an agent working inside it.

1

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 init

documented against @attalabs/vinaya@0.19.2

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, with checks empty
  • Git hook stubs — .husky/ if it's present, else raw .git/hooks
  • Two GitHub Actions workflows
  • A root VINAYA.md doctrine 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 init

Working 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>
4

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.

Continue to Ship with Vinaya