# roadkeep

Docs · CLI · Agent Workbench

A ROADMAP and a CHANGELOG are formats held together by convention, so they drift the moment someone is in a hurry — or the moment an agent writes to them. roadkeep owns the writes: an entry goes in through a command that checks its shape at the point of insertion, which makes the file a schema rather than a habit.

- Platform: Python ≥3.11
- Licence: Apache-2.0
- Product site: https://alegauss.github.io/roadkeep/
- Documentation: https://alegauss.github.io/roadkeep/docs/
- Source: https://github.com/alegauss/roadkeep

Public numbers as of 2026-10-20: latest release v0.2.0 (2026-08-28).

## Install

Claude Code plugin:

```
/plugin marketplace add alegauss/alegauss.github.io
/plugin install roadkeep@alegauss
```

uvx:

```
uvx roadkeep lint
```

pip:

```
pip install roadkeep
```

## What comes next

From docs/ROADMAP.md at eec61c6.

### Block A — The model (a task is data before it is a line)

- 💭 A dep on another repository's task is free text, so nothing can tell whether it shipped

### Block B — Authoring (insert, never hand-edit)

- 📋 block add opens a label the ledger already declares under another title

### Block L — Product sites on the package

- 📋 The pitch and the roadkeep-gui landing each keep their own copy of the template eight product sites share

## Recently shipped

- 2026-10-18 · RK1713: no writing verb can be asked what it would write, so an agent probes a replace with a real write
- 2026-10-18 · RK1712: show refuses a deferred id and only names where it sits, so a paused line's section is read by grep
- 2026-10-18 · RK1711: section add --role strategy refuses every anchor on a fresh init --strategy scaffold, and its remedy is the refused call
- 2026-10-18 · RK1710: non-goal list elides entries past twelve, and neither --json nor any flag prints the rest
- 2026-10-18 · RK1709: anchors --next names no free top-level when a family is not one numbering
- 2026-09-28 · RK1708: a ledger entry whose id the grammar rejects has no verb that corrects it, and its finding names one that refuses
- 2026-09-28 · RK1707: code.renamed fires in an adopter that vendors the engine, so its gate reports renames that never happened
- 2026-09-28 · RK1706: a line's requires can be replaced but never cleared, so a need a person met stays on the line

All entries: https://alegauss.github.io/changelog/roadkeep/
