BetterBaseline · bb

A control plane for AI coding tools

One source of truth.
Many agents.

Every editor and CLI brought its own dotfile. AGENTS.md, CLAUDE.md, .cursor/rules, .opencode, .mcp.json. BetterBaseline reads them all, tells you what you've actually got, and quietly keeps them in line.

See it on Codeberg Open source · MIT · Early preview

What bb sees.

Run bb list in a repo and it walks the tree once, cataloguing every agentic file every supported tool would pick up. No daemons, no project config to write first.

$ bb list
BetterBaseline — detected metadata
/Users/you/project

Claude Code (4 files)
  config        .claude/settings.json
  skill         .claude/skills/review.md
  mcp           .mcp.json
  instructions  CLAUDE.md

OpenCode (2 files)
  skill         .opencode/skills/example.md
  config        opencode.json

AGENTS.md (cross-tool) (1 file)
  instructions  AGENTS.md

Not detected: Cursor, Aider, Continue

Tools it speaks.

Each adapter knows the files a given tool actually reads, so detection matches the tool's real behaviour — not a guess from a filename.

Why baseline.

How to start.

# Requires Go 1.24+
$ git clone https://codeberg.org/whirlwin/better-baseline
$ cd better-baseline/cli
$ go build -o bb ./cmd/bb
$ ./bb list

Status: early preview. The Go rewrite ships bb list and bb validate; the other subcommands still live in the TypeScript reference under src/.

Ethos

“Your agent files are configuration. Treat them like the rest of your config — readable, validated, version-controlled, shared.” BetterBaseline · design notes

Browse the source on Codeberg →

The small print.

License

MIT. Use it anywhere, ship it anywhere.

Runtime

Single Go binary. No daemon, no server.

Telemetry

None. bb never phones home.

Tools

Adapters live in one file — adding a new one is a small patch, not a fork.