Doctrine
Doctrine is an opinionated but hackable set of tools and conventions for software engineering with LLM agents.

Heresy burns; Doctrine remains.
Design Goals:
- Correctness
- Laziness
- Hackability
- Efficiency
- DX for solo developers, teams
- time and token efficiency
- suitability for systems of any size & complexity profile
- useful support for "pre-rational" stages of specification (e.g. product design, backlog)
- quality engineering: robust auditability; formal verification gates
- separation of structured, relational data from prose
- separation of mutable, disposable state from useful artifacts
- thoughfully designed memory retrieval, relevance & decay
- composability; provide "orchestration primitives"
- avoidance of vendor lockin
- single binary distribution
- more with less: focused ambition, not minimalism.
Non-Goals
- SaaS integration (in core)
- Windows support (for now)
- Integrated TUI (for now)
Installation
TL'DR:
|
Prebuilt binary (macOS + Linux, no Rust toolchain) — recommended:
# latest release (rolling):
|
# or pin to a release tag for reproducibility:
|
Installs to ~/.local/bin (override with DOCTRINE_BIN_DIR); choose a version
with DOCTRINE_VERSION. The script checksum-verifies what it downloads — read it
before piping to a shell. macOS arm64 + x86_64; Linux x86_64 + aarch64 (static
musl — runs on any distro regardless of glibc version).
Or with cargo binstall (prebuilt, no compile):
Or cargo install (compiles from source; needs a Rust toolchain — may hit the
-liconv link error on some macOS toolchains, which the prebuilt paths above
sidestep):
Then bootstrap a project:
||
or install from source (customise templates / skills):
&&
# optional:
# customise install/templates and/or plugins/skills
# they'll get bundled into the binary for installation
or use it as a nix flake:
inputs.doctrine.url = "github:davidlee/doctrine";
# ...
doctrine = inputs.doctrine.packages.${system}.doctrine;
to install skills for other agents:
Post-Install Setup
&&
# these are also the 'I updated doctrine' routine:
&&
Memory-only use
Use Doctrine's memory system with your preferred tooling for the rest:
# doctrine memory help
# doctrine memory record --type pattern "red/green/refactor TDD" --glob "src/lib/**/*" --summary "..."
# doctrine memory list
Usage
Doctrine ships with self-documenting agent memories.
The agent should be able to steer while you get used to the default workflow.
Hack
templates:
skills:
or:
&&
# in your projects
License
This repository is multi-licensed:
- Rust source code, application code, and compiled binaries are licensed under GPL-3.0-only.
- Files under
plugins/are licensed under MIT. - Files under
install/are licensed under MIT, including templates andconfig.toml.
Where a file contains an SPDX license identifier or a directory contains its own LICENSE file, that more specific notice controls.
Acknowledgements
The /worktree skill's directory-selection and safety-verification patterns are
adapted from superpowers:using-git-worktrees
by Jesse Vincent (MIT).
Specifications
Product and technical specifications — the durable, agent-readable intent behind
Doctrine's capabilities. Regenerate this list with just readme-index.