Docs

Configuration

Setup commands

Four commands put Vinaya into a repository, keep it current and take it out: init installs, doctor diagnoses without writing, upgrade regenerates what Vinaya owns, eject reverses the install exactly.

init
doctor
upgrade
eject
Diff first

About the setup commands

vinaya init, vinaya doctor, vinaya upgrade and vinaya eject share one engine. Every command that writes shows you the complete diff first and waits for your confirmation.

  • Nothing runs when the package is installed.
  • PATH is never touched.
  • Branch protection is printed as a recommendation, never applied.

How it works

  1. 1

    Detect

    The command reads the repository and vinaya.config.json at the repository root. It never walks up to a parent folder, so a nested fixture never picks up an ancestor's config.

  2. 2

    Build the operations

    It builds a typed list of the operations it would perform.

  3. 3

    Show the diff

    It renders the complete diff. With --dry-run it stops here and writes nothing.

  4. 4

    Confirm and apply

    After you confirm, it applies the operations.

  5. 5

    Record ownership

    It records what Vinaya owns in the managed manifest inside vinaya.config.json. upgrade regenerates only what the manifest lists, and eject removes only what it lists.

The commands

CommandFlagsWrites
vinaya init--dry-run, --yes, --agents=<list|all|none>Yes, after confirmation
vinaya init product <name>--path <path>, --dry-run, --yesOne registry row and one projects entry
vinaya doctor--jsonNever
vinaya upgrade--dry-run, --yesYes, after confirmation
vinaya eject--dry-run, --yesRemoves, after confirmation

Installs Vinaya into the repository.

vinaya init --dry-run
vinaya init

Requires a git repository and an authenticated gh. gh is not needed for --dry-run, or when there is no GitHub origin (label creation is then skipped).

Refuses a custom core.hooksPath. It never overwrites a file it does not own.

GroupFiles
Workflows.github/workflows/vinaya-checks.yml, vinaya-review.yml, vinaya-review-verdict.yml, vinaya-archivist.yml, vinaya-body-checks.yml
Git hooks (managed blocks)pre-commit, pre-push, commit-msg in .vinaya/hooks/ (tracked, then git config core.hooksPath .vinaya/hooks), or in .husky/ or .git/hooks/
Configvinaya.config.json: starter rings (both true), empty checks, starter briefSchema, then managed
Doctrine pointerAGENTS.md, CLAUDE.md
Doc ownership.vinaya/doc-owners
Scaffold foldersvinaya/checks/.gitkeep, vinaya/roles/.gitkeep
--agents includes skills.agents/skills/vinaya-<role>/SKILL.md
--agents includes claude.claude/skills/vinaya-<role>/SKILL.md, .claude/commands/vinaya.md, .claude/settings.json and .claude/hooks/track-transcript.sh (Stop hook), .mcp.json (task-tools server)
--agents includes gemini.gemini/commands/vinaya.toml, .gemini/settings.json
LabelsCreated if absent, never modified (tier, needs, type and other fixed labels)
Printed onlyBranch protection, CODEOWNERS and principals recommendations; a note that agent-native commands need vinaya on PATH

The manifest is written as soon as the files are on disk, before the labels, so a label failure never leaves files unowned.

Configuration

KeyUsed by
managedAll four commands
ci.setupinit, upgrade, doctor (added to the generated workflows)
briefSchema.ackdoctor
ringsupgrade (the version-3 migration)
projectsinit product, doctor

See The file and its keys for each key.

What's next