adrlane
Documentation-as-code bootstrap for AI agents.
adrlane scaffolds a minimal docs/ layout and agent skills so AI tools know where to read and write project documentation. The agent decides when to update docs — there is no sync pipeline or enforcement.
Install
Global CLI (recommended)
Install adrlane once on your machine with uv:
uv tool install adrlane
From a local checkout:
uv tool install -e .
Verify:
adrlane --help
Development checkout
Clone the repository and install dependencies:
git clone https://github.com/koradon/adrlane.git
cd adrlane
uv sync
uv run adrlane --help
Quick start
- Install the CLI globally (see Install).
- From your project repository root, scaffold docs and project-local skills:
cd /path/to/your-project
adrlane init
- Optional: install skills once for all projects on this machine:
adrlane skills install --global
- Work with your agent as usual. When docs should change, the agent uses the installed skills (see Agent workflow).
Multi-repo workspace (project root is not a single git repo):
adrlane init --workspace # adds .adrlane/workspace.yaml for doc routing
# Then run `adrlane init` in each sub-repository for service-level docs.
Preview without writing files:
adrlane init --dry-run
Limit which agent adapters init installs:
adrlane init --agent cursor
adrlane init --agent cursor --agent claude-code
init and skills --local always use the current working directory — there is no --path flag.
Upgrading
init is additive: it never overwrites an existing file. After you upgrade the adrlane package, re-running init will not refresh stale docs/llm/* contracts or skills. Use upgrade for that.
# 1. Upgrade the installed CLI
uv tool upgrade adrlane
# 2. In each bootstrapped repository: refresh package-owned content
cd /path/to/your-project
adrlane upgrade
# 3. If you use global skills, refresh those too
adrlane skills upgrade --global
adrlane upgrade overwrites:
docs/llm/*contract files and templates.adrlane/bootstrap-version- local agent skill files (same as
skills upgrade --local)
It never touches user-owned content: docs/README.md, docs/ideas/README.md, docs/roadmap/README.md, the contents of docs/{specs,plans,adr,ideas,roadmap}, or .adrlane/workspace.yaml.
Preview: adrlane upgrade --dry-run. Details: ADR 0005.
Commands
| Command | Description |
|---|---|
adrlane init |
Bootstrap docs/ and install agent skills in the current repository |
adrlane init --dry-run |
Show planned bootstrap actions without writing files |
adrlane init --agent <name> |
Limit adapters (cursor, claude-code; repeatable) |
adrlane init --workspace |
Bootstrap with multi-repo doc routing config |
adrlane skills install --global |
Install skills in ~/.cursor/skills/ and ~/.claude/skills/ |
adrlane skills install --local |
Install skills in the current repository (skips existing files) |
adrlane skills upgrade --global |
Overwrite global skills with the current package version |
adrlane skills upgrade --local |
Overwrite local skills in the current repository |
adrlane upgrade |
Refresh docs/llm/* contract files, .adrlane/bootstrap-version, and local agent skills after upgrading the adrlane package |
adrlane upgrade --dry-run |
Show planned upgrade actions without writing files |
adrlane upgrade --agent <name> |
Limit which agent adapters get their skills refreshed (repeatable) |
adrlane doctor |
Report docs/agent-adapter drift (informational only, never fails) |
Agent workflow
adrlane does not detect documentation gaps, schedule updates, or write docs on its own. The agent decides when documentation needs updating during normal development.
Typical loop:
- Developer installs
adrlaneand runsadrlane initonce per repository. - Developer works with Cursor or Claude Code as usual.
- When the agent judges that behavior, decisions, or structure should be recorded, it uses the installed skills and
docs/llm/*to create or patch files underdocs/. - Developer reviews with
git diffand commits normally.
Skills are thin adapters; the contract is docs/llm/AGENT_PROTOCOL.md and docs/llm/DECISION_RULES.md.
Documentation model
init scaffolds a minimal core that grows with the project:
| Path | Purpose |
|---|---|
docs/specs/ |
What the system should do |
docs/plans/ |
How to implement a spec |
docs/adr/ |
Why significant decisions were made |
docs/ideas/ |
Early concepts that may be promoted to specs |
docs/roadmap/ |
Now / Next / Later horizons |
docs/llm/ |
Agent contract, decision rules, and templates |
Templates live in docs/llm/templates/. Documents use markdown sections (## Status, ## Related) — not YAML frontmatter.
When the project gains new documentation needs (runbooks, API reference, CLI docs), the agent adds new folders under docs/ and updates docs/README.md. init does not predict project type.
One exception grows outside that minimal core on request rather than by default: the adrlane-write-architecture-overview skill creates or refreshes a single docs/architecture.md — a whole-system overview with diagrams — when asked, or proactively after a change that alters module boundaries, execution flow, or requirements to run.
Release history stays in Git and release tooling — not in docs/.
Agent skills
By default, init installs seven skills for Cursor and Claude Code:
| Skill | Role |
|---|---|
adrlane-dev-context |
Ambient — read specs before coding; propose ADRs after significant decisions |
adrlane-write-idea |
Write or update ideas |
adrlane-write-spec |
Write or update specs (and Gherkin .feature files) |
adrlane-write-plan |
Write or update implementation plans |
adrlane-write-adr |
Document architectural decisions |
adrlane-write-architecture-overview |
Create or refresh docs/architecture.md, the whole-system overview |
adrlane-workspace-routing |
Route docs to project or sub-repo trees (when .adrlane/workspace.yaml exists) |
Project-local (default via init): .cursor/skills/ and .claude/skills/ in the repository.
Global (optional via skills install --global): same skills in your home directory, shared across all projects.
Skills are thin adapters; the canonical contract lives in docs/llm/AGENT_PROTOCOL.md and docs/llm/DECISION_RULES.md.
Multi-repo workspace
Use this when the Cursor workspace root is not a single git repository — for example a folder that contains several independent repos plus shared project docs.
Setup
cd /path/to/project-root
# Project-level docs + routing config + skills
adrlane init --workspace
# Service-level docs in each repository
cd repository1 && adrlane init
cd ../repository2 && adrlane init
Open the project root in Cursor so routing applies. Optionally install skills globally once: adrlane skills install --global.
Layouts
Flat — repositories are direct children of the project root. No repo_roots needed:
project/
docs/ ← cross-cutting ADRs, specs, roadmap
repository1/docs/ ← service-specific docs
repository2/docs/
Grouped — repositories live under category folders. Uncomment and edit repo_roots in .adrlane/workspace.yaml:
project/
docs/
services/order-service/docs/
frontends/checkout-fe/docs/
project_docs: docs
repo_roots:
- services
- frontends
How routing works
The adrlane-workspace-routing skill (active when .adrlane/workspace.yaml exists) sends documentation to:
| Scope | Location | Examples |
|---|---|---|
| Project | docs/ at project root |
Platform ADRs, cross-service conventions |
| Service | <repo>/docs/ |
API specs, service-internal decisions |
The other adrlane-write-* skills follow the resolved path automatically. Link project and service docs in ## Related.
Contributing
Run tests:
uv run pytest
Install pre-commit hooks:
uv run pre-commit install
uv run pre-commit run --all-files
Dependency management:
uv add <package> # runtime dependency
uv add --dev <package> # dev dependency
uv lock # refresh lockfile after manual pyproject edits
License
AGPL-3.0-or-later. See LICENSE.
Metadata
Release files for adrlane 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| adrlane-0.5.0.tar.gz | 33.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adrlane-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 83.9 kB
Release files / adrlane-0.5.0.tar.gz
| Download URL | adrlane-0.5.0.tar.gz |
|---|---|
| Size | 33.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b4fdacc7fff466ccae9c545c72adea316e1c55d44bdd6c8fb5202cc1fe456e31
|
|
BLAKE2b-256 checksum How to use checksums |
0f3fde331305ac5576b99fb2097e006c951fe63394948ef7df68cefa20696442
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / adrlane-0.5.0-py3-none-any.whl
| Download URL | adrlane-0.5.0-py3-none-any.whl |
|---|---|
| Size | 50.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c08928d41e00059928032d8e93953f6dfebcee2e2927a0fd80317453a48a4ef8
|
|
BLAKE2b-256 checksum How to use checksums |
865e04e3fd929c76a83aa848286fa2371a72c2f3e800807080d38ca3c4cd256b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logSecurity for adrlane 0.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for adrlane-0.5.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.