dotbabel

Personas — who reads which file

Last updated: v2.1.0

This repo is a dual-purpose checkout. Three distinct audiences consume parts of it. Pick yours, then follow the “Start here” column.

Persona What you want Start here
Dotfile user — personal Claude Code config via bootstrap.sh Symlink into ~/.claude/, manage your own commands/skills dotfile-quickstart.md — start here, then ../CLAUDE.md for the full rules
Consumer — installing the CLI for bootstrap, doctor, drift detection, and optional spec-gov gates Install, scaffold, run validators, wire CI quickstart.mdcli-reference.md
Library user — importing the Node API into your own tooling Import, typed signatures, error codes api-reference.md
Contributor — sending PRs to this repo Dev workflow, local gates, spec discipline ../CONTRIBUTING.md
Security researcher Private disclosure, threat model ../SECURITY.md

Where the split happens

Path Who consumes it
package.json, plugins/dotbabel/src/**, plugins/dotbabel/bin/** Consumer + library user
plugins/dotbabel/templates/** Consumer (installed by dotbabel-init)
plugins/dotbabel/.claude-plugin/plugin.json Claude Code when the plugin is enabled
bootstrap.sh, sync.sh, commands/**, skills/** Dotfile user
CLAUDE.md, docs/specs/dotbabel-core/**, .claude/** at repo root Contributors + the dogfood CI
docs/** (excluding specs/dotbabel-core/) All of the above

Why the dual-purpose layout

ADR-0001 records the decision. Short version: the dotfiles and the plugin cover the same surface area (Claude Code commands/skills/hooks), the author wants a single source of truth, and npm install ignores the dotfile-specific top-level scripts (bootstrap.sh, sync.sh, commands/, skills/) via package.json.files.

If the dotfile side feels like noise when you’re only consuming the npm package: it is. Install via npm i -D @dotbabel/dotbabel and you never see bootstrap.sh — only node_modules/.../plugins/dotbabel/.