Trail markers for AI-collaborative codebases.
Opinionated documentation convention + CLI that scaffolds the structure, generates per-vendor AI rule files (Claude, Cursor, Codex, Gemini), lints the result, surfaces health signals, and lets you extend it via plugins.
New in v0.4.1
Other AI rule files describe structure. Beacon's tell your agent to act: "Decision made → write an ADR." "Multi-step work → write a plan." "Scope deferred → backlog item."
The problem
Stock AI rule files teach where docs go and how they're named — but never when to create them. So your agent faithfully follows your conventions for the few docs it writes, and quietly skips writing the rest.
The fix
v0.4.1 adds workflow triggers, document lifecycle rules, and self-checks to every generated file (CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules). Conditional on enabled categories — no noise for things you don't use.
Source-of-truth lives in docs/_meta/convention.md; beacon sync
regenerates every vendor file atomically.
## Workflow triggers — when to create documents - Design decision made → write an ADR before implementing. Runbeacon new adr <slug>. Draft inline; don't ask permission. - Multi-step work agreed (3+ actions) → write a plan with checkbox steps. Runbeacon new plan <slug>. - Scope deferred ("let's do that later", "out of scope for now") → runbeacon new todo <slug>with why + acceptance criteria. Don't leave in chat only. - Release shipped → write a dated retrospective viabeacon new eval <slug>. ## Document lifecycle - Plans must be checked off as you go. - Plans must archive when shipped. - ADRs that supersede must link both ways. ...
Persistence rule: chat memory is session-scoped. If you find yourself relying on it to track a decision or follow-up — write the document instead.
New: companion plugin v0.2.0
The companion plugin adds an always-available workflow skill that nudges Claude to use beacon new
when a decision, plan, or scope-defer happens in conversation — plus five slash-skills for explicit operations.
Conversational triggers, automatic
You say "decidimos Postgres sobre SQLite" and Claude responds with a draft ADR via
beacon new adr — no nag, no prompt to confirm the convention. The skill body knows when to act.
Five slash-skills for explicit ops
/beacon:beacon-init, /beacon:beacon-new, /beacon:beacon-doctor,
/beacon:beacon-explain, /beacon:beacon-archive — each one wraps the CLI with informed
consent (reads context before destructive ops, asks before silent transforms, surfaces --force
requirements explicitly instead of laundering them).
Authored via strict TDD per skill — 5 invocable skills, ~50 subagent pressure scenarios, ZERO refactors needed across the entire T4 build. 4/4 manual validation tests passed.
You: decidimos Postgres sobre SQLite por el JSON support.
Claude (beacon-workflow loaded):
Esa es una decisión que necesita un ADR. Lo capturo
antes de seguir.
$ beacon new adr using-postgres-over-sqlite
✔ Created docs/adr/ADR-014-using-postgres-...
[Drafts ADR inline with Context / Decision /
Consequences from session memory]
Revisa el draft. Si está bien, marco accepted
y seguimos con la migración.
## Install (two commands)
$ claude plugin marketplace add Juliocbm/beacon-docs
$ claude plugin install beacon@beacon-docs-plugins Architecture: the 5 slash-skills carry disable-model-invocation: true — they only fire when you type the command.
The always-available beacon-workflow is the only auto-loaded skill, so the invocables never preempt it on natural-language triggers.
Read v0.2.0 release notes →
CLI
Scaffold, create, validate, extend. Every command discoverable via beacon --help or TAB completion.
Core lifecycle
Interactive scaffold wizard.
Type-safe doc creation.
Move shipped work to _archive/.
Single source of truth.
Validation
11 enforced rules.
5 health checks. Soft signals.
Add-ons & diagnostics
Toggle add-on categories.
TAB-completion for bash / zsh / fish.
Diagnostics in one place.
Health checks
beacon doctor tells you when the tree is drifting.
Lint validates structure. Doctor surfaces health signals — soft observations across four areas,
with actionable suggestions. Informational by default; gate CI with --strict.
status: proposed for ≥ 14 days. Accept, reject, or supersede.◉ Activity (2)
📄 docs/plans/shipping.plan.md
└─ stale-plans: Last modified 47 days ago.
→ If shipped, run beacon archive plan <slug>.
📄 docs/plans/refactor-auth.plan.md
└─ stale-plans: Last modified 33 days ago.
→ ...
◇ Decisions (1)
📄 docs/adr/ADR-007-event-bus.md
└─ proposed-adrs: Stuck in proposed for 22 days.
→ Accept it, reject it, or update with a status note.
3 findings across 2 areas.
Run beacon doctor --explain <check> for verbose docs on any check.
Tune thresholds per-project in beacon.config.json under doctor.thresholds.
Extensibility
Beacon ships strong defaults. When your project needs something specific (corporate compliance checks, monorepo shape rules, custom naming), drop in a plugin instead of patching the core.
Configure once
"projectType": "library", "plugins": [ "beacon-plugin-compliance", "./scripts/internal-checks.mjs" ]
npm packages or relative paths. Both work.
Write once
export default name: "my-plugin", version: "0.1.0", checks: [/* doctor Check[] */], rules: [/* lint Rule[] */], explain: "my-check": summary: "...", why: "...", fix: "...", , , ;
Reuses Beacon's Check and Rule types.
--explain works for both.
doctor or lint.
beacon about lists loaded plugins with versions and contributed counts.
beacon-plugin-<scope>.
Comparison
No other tool combines convention + enforcement + AI rule generation + plugin extensibility in one place.
| Feature | Beacon (this) | Diátaxis framework | adr-tools ADRs only | Hand-written CLAUDE.md | Docusaurus docs site |
|---|---|---|---|---|---|
| Opinionated structure | |||||
| Convention enforcement (linter) | |||||
| AI rule files generation | |||||
| Multi-vendor support (Claude/Cursor/Codex/Gemini) | |||||
| Per-vendor format (.md / .mdc / .cursorrules) | |||||
| Auto-sync (single source of truth) | |||||
| Per-doc-type naming convention | |||||
| Status via folder (not filename) | |||||
| ADR auto-numbering | |||||
| Date-prefixed evaluations | |||||
| Configurable add-ons (compliance, business, modules…) | |||||
| CI-ready out of the box | |||||
| Zero config required (sensible defaults) |
Yes Partial No
Architecture
Edit the source once. Beacon regenerates every vendor-specific file automatically.
Edit the convention once. beacon sync regenerates everything.
beacon lint --strict catches drift in CI.
Init wizard
The wizard reads your package.json and suggests the right categories automatically.
Frontend or fullstack web application.
API, microservice, or server-side application.
SDK, npm package, or shared module.
Command-line tool or developer utility.
iOS, Android, or cross-platform mobile app.
Multi-package or multi-app workspace.
Pick exactly what you need. Fully manual.
CI / CD
Beacon's linter exits with code 1 on errors, making it a first-class CI gate. Add the workflow once and let it catch drift automatically.
--strict escalates warnings to errors in CI--json for structured output in toolingbeacon doctor --strict for health gatingname: Beacon docs lint on: pull_request: paths: ["docs/**", "CLAUDE.md", "AGENTS.md", "GEMINI.md", ".cursorrules", ".cursor/**"] push: branches: [main] jobs: beacon-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npx beacon-docs lint --strict - run: npx beacon-docs doctor --strict
One command. Complete docs structure. AI rules that tell agents when to write.