Catalog PyPI
PACKAGE EXPLORERView in registry

adrlane

PyPI

Documentation-as-code bootstrap for AI agents

ai-agentsclidocs-as-codedocumentation
Versions collected1
Direct dependencies1From release 0.5.2
Last observed20 Oct, 19:50 UTC

README

Version 0.5.2 documentation

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

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

  1. Install the CLI globally (see Install).
  2. From your project repository root, scaffold docs and project-local skills:
cd /path/to/your-project
adrlane init
  1. Optional: install skills once for all projects on this machine:
adrlane skills install --global
  1. 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
adrlane init --agent codex
adrlane init --agent agy

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

CommandDescription
adrlane initBootstrap docs/ and install agent skills in the current repository
adrlane init --dry-runShow planned bootstrap actions without writing files
adrlane init --agent <name>Limit adapters (cursor, claude-code, codex, agy; repeatable)
adrlane init --workspaceBootstrap with multi-repo doc routing config
adrlane skills install --globalInstall skills in ~/.cursor/skills/, ~/.claude/skills/, ~/.codex/skills/ and ~/.gemini/config/skills/
adrlane skills install --localInstall skills in the current repository (skips existing files)
adrlane skills upgrade --globalOverwrite global skills with the current package version
adrlane skills upgrade --localOverwrite local skills in the current repository
adrlane upgradeRefresh docs/llm/* contract files, .adrlane/bootstrap-version, and local agent skills after upgrading the adrlane package
adrlane upgrade --dry-runShow planned upgrade actions without writing files
adrlane upgrade --agent <name>Limit which agent adapters get their skills refreshed (repeatable)
adrlane doctorReport 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:

  1. Developer installs adrlane and runs adrlane init once per repository.
  2. Developer works with Cursor or Claude Code as usual.
  3. 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 under docs/.
  4. Developer reviews with git diff and 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:

PathPurpose
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 every supported agent:

SkillRole
adrlane-dev-contextAmbient — read specs before coding; propose ADRs after significant decisions
adrlane-write-ideaWrite or update ideas
adrlane-write-specWrite or update specs (and Gherkin .feature files)
adrlane-write-planWrite or update implementation plans
adrlane-write-adrDocument architectural decisions
adrlane-write-architecture-overviewCreate or refresh docs/architecture.md, the whole-system overview
adrlane-workspace-routingRoute docs to project or sub-repo trees (when .adrlane/workspace.yaml exists)

Project-local (default via init): .cursor/skills/, .claude/skills/, .codex/skills/ and .agents/skills/ in the repository.

Global (optional via skills install --global): same skills in your home directory, shared across all projects.

Codex CLI scans both: <repo>/.codex/skills as a project-local skill root, and $CODEX_HOME/skills (default ~/.codex/skills) as the user-level one. The same .codex/skills prefix therefore serves both scopes.

Antigravity CLI (agy) scans <workspace>/.agents/skills as its project-local skill root, but a different, unrelated global root: ~/.gemini/config/skills. Its adapter installs into .agents/skills for --local and .gemini/config/skills for --global — see ADR 0009.

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:

ScopeLocationExamples
Projectdocs/ at project rootPlatform 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.

Downloads & popularity

15downloads
1-day window · source-reported counts20 Oct 2026
138690
2026-07-23: 6 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-23–2026-07-232026-07-24: 6 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-24–2026-07-242026-07-25: 7 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-25–2026-07-252026-07-26: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-26–2026-07-262026-07-27: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-27–2026-07-272026-07-28: 4 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-28–2026-07-282026-07-29: 10 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-29–2026-07-292026-07-30: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-30–2026-07-302026-07-31: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-07-31–2026-07-312026-08-01: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-02–2026-08-022026-08-03: 13 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-03–2026-08-032026-08-04: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-04–2026-08-042026-08-06: 14 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-06–2026-08-062026-08-09: 7 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-09–2026-08-092026-08-11: 4 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-11–2026-08-112026-08-13: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-13–2026-08-132026-08-14: 4 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-14–2026-08-142026-08-17: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-17–2026-08-172026-08-20: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-20–2026-08-202026-08-23: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-23–2026-08-232026-08-24: 13 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-24–2026-08-242026-08-26: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-26–2026-08-262026-08-28: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-28–2026-08-282026-08-31: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-08-31–2026-08-312026-09-03: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-03–2026-09-032026-09-07: 10 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-07–2026-09-072026-09-09: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-09–2026-09-092026-09-12: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-12–2026-09-122026-09-13: 15 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-13–2026-09-132026-09-14: 7 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-14–2026-09-142026-09-15: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-15–2026-09-152026-09-16: 15 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-16–2026-09-162026-09-19: 15 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-19–2026-09-192026-09-21: 86 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-21–2026-09-212026-09-22: 19 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-22–2026-09-222026-09-23: 6 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-23–2026-09-232026-09-24: 21 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-24–2026-09-242026-09-25: 8 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-25–2026-09-252026-09-26: 5 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-26–2026-09-262026-09-27: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-27–2026-09-272026-09-28: 5 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-28–2026-09-282026-09-29: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-29–2026-09-292026-09-30: 5 · observed 2026-10-21T10:49:04.9272643Z · period 2026-09-30–2026-09-302026-10-02: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-02–2026-10-022026-10-03: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-03–2026-10-032026-10-04: 4 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-04–2026-10-042026-10-05: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-05–2026-10-052026-10-06: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-06–2026-10-062026-10-08: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-08–2026-10-082026-10-09: 7 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-09–2026-10-092026-10-10: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-10–2026-10-102026-10-12: 1 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-12–2026-10-122026-10-13: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-13–2026-10-132026-10-14: 2 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-14–2026-10-142026-10-15: 3 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-15–2026-10-152026-10-16: 138 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-16–2026-10-162026-10-17: 9 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-17–2026-10-172026-10-18: 11 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-18–2026-10-182026-10-19: 13 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-19–2026-10-192026-10-20: 15 · observed 2026-10-21T10:49:04.9272643Z · period 2026-10-20–2026-10-20
23 Jul20 Oct

pypistats · 61 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-20 – 2026-10-20152026-10-21T10:49:04.9272643Z
2026-10-19 – 2026-10-19132026-10-21T10:49:04.9272643Z
2026-10-18 – 2026-10-18112026-10-21T10:49:04.9272643Z
2026-10-17 – 2026-10-1792026-10-21T10:49:04.9272643Z
2026-10-16 – 2026-10-161382026-10-21T10:49:04.9272643Z
2026-10-15 – 2026-10-1532026-10-21T10:49:04.9272643Z
2026-10-14 – 2026-10-1422026-10-21T10:49:04.9272643Z
2026-10-13 – 2026-10-1322026-10-21T10:49:04.9272643Z
2026-10-12 – 2026-10-1212026-10-21T10:49:04.9272643Z
2026-10-10 – 2026-10-1032026-10-21T10:49:04.9272643Z
2026-10-09 – 2026-10-0972026-10-21T10:49:04.9272643Z
2026-10-08 – 2026-10-0832026-10-21T10:49:04.9272643Z
2026-10-06 – 2026-10-0612026-10-21T10:49:04.9272643Z
2026-10-05 – 2026-10-0522026-10-21T10:49:04.9272643Z
2026-10-04 – 2026-10-0442026-10-21T10:49:04.9272643Z
2026-10-03 – 2026-10-0322026-10-21T10:49:04.9272643Z
2026-10-02 – 2026-10-0222026-10-21T10:49:04.9272643Z
2026-09-30 – 2026-09-3052026-10-21T10:49:04.9272643Z
2026-09-29 – 2026-09-2932026-10-21T10:49:04.9272643Z
2026-09-28 – 2026-09-2852026-10-21T10:49:04.9272643Z
2026-09-27 – 2026-09-2732026-10-21T10:49:04.9272643Z
2026-09-26 – 2026-09-2652026-10-21T10:49:04.9272643Z
2026-09-25 – 2026-09-2582026-10-21T10:49:04.9272643Z
2026-09-24 – 2026-09-24212026-10-21T10:49:04.9272643Z
2026-09-23 – 2026-09-2362026-10-21T10:49:04.9272643Z
2026-09-22 – 2026-09-22192026-10-21T10:49:04.9272643Z
2026-09-21 – 2026-09-21862026-10-21T10:49:04.9272643Z
2026-09-19 – 2026-09-19152026-10-21T10:49:04.9272643Z
2026-09-16 – 2026-09-16152026-10-21T10:49:04.9272643Z
2026-09-15 – 2026-09-1512026-10-21T10:49:04.9272643Z
2026-09-14 – 2026-09-1472026-10-21T10:49:04.9272643Z
2026-09-13 – 2026-09-13152026-10-21T10:49:04.9272643Z
2026-09-12 – 2026-09-1212026-10-21T10:49:04.9272643Z
2026-09-09 – 2026-09-0912026-10-21T10:49:04.9272643Z
2026-09-07 – 2026-09-07102026-10-21T10:49:04.9272643Z
2026-09-03 – 2026-09-0312026-10-21T10:49:04.9272643Z
2026-08-31 – 2026-08-3122026-10-21T10:49:04.9272643Z
2026-08-28 – 2026-08-2812026-10-21T10:49:04.9272643Z
2026-08-26 – 2026-08-2612026-10-21T10:49:04.9272643Z
2026-08-24 – 2026-08-24132026-10-21T10:49:04.9272643Z
2026-08-23 – 2026-08-2332026-10-21T10:49:04.9272643Z
2026-08-20 – 2026-08-2022026-10-21T10:49:04.9272643Z
2026-08-17 – 2026-08-1732026-10-21T10:49:04.9272643Z
2026-08-14 – 2026-08-1442026-10-21T10:49:04.9272643Z
2026-08-13 – 2026-08-1322026-10-21T10:49:04.9272643Z
2026-08-11 – 2026-08-1142026-10-21T10:49:04.9272643Z
2026-08-09 – 2026-08-0972026-10-21T10:49:04.9272643Z
2026-08-06 – 2026-08-06142026-10-21T10:49:04.9272643Z
2026-08-04 – 2026-08-0422026-10-21T10:49:04.9272643Z
2026-08-03 – 2026-08-03132026-10-21T10:49:04.9272643Z
2026-08-02 – 2026-08-0212026-10-21T10:49:04.9272643Z
2026-08-01 – 2026-08-0112026-10-21T10:49:04.9272643Z
2026-07-31 – 2026-07-3132026-10-21T10:49:04.9272643Z
2026-07-30 – 2026-07-3022026-10-21T10:49:04.9272643Z
2026-07-29 – 2026-07-29102026-10-21T10:49:04.9272643Z
2026-07-28 – 2026-07-2842026-10-21T10:49:04.9272643Z
2026-07-27 – 2026-07-2712026-10-21T10:49:04.9272643Z
2026-07-26 – 2026-07-2632026-10-21T10:49:04.9272643Z
2026-07-25 – 2026-07-2572026-10-21T10:49:04.9272643Z
2026-07-24 – 2026-07-2462026-10-21T10:49:04.9272643Z
2026-07-23 – 2026-07-2362026-10-21T10:49:04.9272643Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.5.216 Oct 20261

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
koradon/adrlane

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:50 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:28658d27bea0a78bf82439bf71c22cbd6f8c90beaff2d7cd7dcda26193c792ec