adrpy-tui
A rich terminal interface for adrpy-ai: guided, human-friendly management of Architecture Decision Records.
adrpy-tui puts menus, forms, lists and previews on top of adrpy-ai, the JSON-only ADR lifecycle CLI. Installing adrpy-tui with pip installs adrpy-ai with it (the 0.1 series), so one install gives you both: the screens to work in, and the adrpy command they drive. Every change still goes through adrpy -- the interface shows you the exact command before it runs, and adrpy's rules are the only ones that apply.
Table of Contents
- Motivation and Benefits
- adrpy-ai and adrpy-tui
- Versions and compatibility
- Installation
- Quick start
- Features
- Keys
- Appearance and accessibility
- Where adrpy-tui keeps its settings
- Documentation
- Contributing, security and license
Motivation and Benefits
- The whole ADR lifecycle without memorizing a flag. Every adrpy and adrpy-skills command has its screen: menus by use, forms that ask only for what the command needs, and a decision picked from a list.
- Nothing runs behind your back. The confirmation shows the exact
adrpycommand line before it runs, and adrpy's own rules are the only ones that apply -- the interface never writes a file itself. - Mistakes caught before running. A form checks what it can, suggests the values the repository already uses, and offers a decision only to the commands its state allows.
- Read before you decide. Any decision or log entry opens rendered, from every list of them, following its links to the others.
- Accessible and in your language. Every screen meets WCAG contrast in the Default, Light and High contrast presets, keys can be changed, and the interface speaks the eleven languages adrpy supports.
adrpy-ai and adrpy-tui
They are two packages by the same author, with one clear split:
| adrpy-ai | adrpy-tui | |
|---|---|---|
| What it is | The ADR lifecycle CLI: adrpy and adrpy-skills |
A terminal UI built with Textual |
| Who it is for | Scripts, CI and AI coding agents -- flags in, JSON out, no prompts | People who would rather choose from a list than type flags |
| The rules (numbering, statuses, headers, supersede chains) | Defines and enforces them | Never reimplements one; it asks adrpy |
| Writes decision, config and decision-log files | Yes | Never -- it runs an adrpy command, shown to you first (ADR0001V01) |
| Runtime dependencies | None | adrpy-ai and Textual |
adrpy-tui runs the adrpy installed next to it, through its own Python interpreter (python -m adrpy), never whichever adrpy comes first on PATH (ADR0003V01). A repository managed with adrpy-tui is an ordinary adrpy repository: you can switch between the two, or use both, at any time.
Versions and compatibility
Each adrpy-tui is validated against one series of adrpy-ai, and requires it:
| adrpy-tui | adrpy-ai it requires |
|---|---|
| 0.1.x | >=0.1.dev0,<0.2 -- the 0.1 series, development builds included |
- At install time, pip installs an adrpy-ai in that range, or refuses one outside it.
- If adrpy-ai is upgraded or downgraded later, on its own (
pip install -U adrpy-ai), pip installs it anyway: it prints a dependency conflict ("ERROR: pip's dependency resolver ... adrpy-tui requires adrpy-ai<0.2,>=0.1.dev0, but you have adrpy-ai 0.2.0") and still finishes successfully. adrpy-tui notices at start-up: the main menu names the adrpy-ai found and the range expected. It keeps working, but a command whose flags changed may be refused by adrpy, and that refusal is shown as adrpy gives it. Install an adrpy-ai in the range again (pip install "adrpy-ai>=0.1.dev0,<0.2"), or an adrpy-tui validated with the newer series. - The header shows both versions, and
adrpy-tui --versionprints them.
The range moves one series at a time, when adrpy-tui is validated against the next adrpy-ai: its forms are checked against adrpy's own help by the tests (ADR0004V01).
Installation
Requires Python 3.11 or later, on Windows, macOS or Linux.
pip install adrpy-tui
adrpy-tui
It installs adrpy-ai with it (see Versions and compatibility), so the same environment also has adrpy-ai's adrpy and adrpy-skills commands. As a command-line tool in its own environment, with pipx: pipx install adrpy-tui -- pipx puts only adrpy-tui on your PATH (the interface runs its own adrpy either way); for the adrpy command as well, also run pipx install adrpy-ai. Straight from GitHub, a branch or a commit, without cloning: pip install git+https://github.com/FRACerqueira/adrpy-tui.git.
adrpy-ai's package is adrpy-ai; ADRpy on PyPI is an unrelated project. Don't install it in the same environment as adrpy-tui: on Windows and macOS their import folders (adrpy and ADRpy) are the same folder, and their files mix.
To install from a clone instead:
git clone https://github.com/FRACerqueira/adrpy-tui.git
cd adrpy-tui
pip install .
adrpy-tui
The source install needs a git clone: the version is read from git, so a folder from GitHub's "Download ZIP" does not install. On Windows, some file names under doc/ are long; if git clone reports "Filename too long", clone with git clone -c core.longpaths=true https://github.com/FRACerqueira/adrpy-tui.git.
To work on adrpy-tui itself (running the test suite), see Contributing.
Quick start
adrpy-tui # the repository in the current folder
adrpy-tui --path <repo> # another repository
adrpy-tui --version # the installed adrpy-tui and adrpy-ai
- The first run asks for the interface language -- one of the eleven adrpy supports, your system's preselected. The main menu's Language changes it later. Messages that come from adrpy itself (why a command failed, a command's help) are shown as adrpy sends them, in English (ADR0005V01).
- The main menu lists everything by use. In a folder that is not an ADR repository yet, choose Repository → Initialize; the other groups come alive once it is.
- A form asks only for what its command needs, suggests values the repository already uses, and checks what it can before running. Ctrl+R runs it: a confirmation shows the exact
adrpycommand line; nothing runs until you confirm. - The result shows what adrpy did, its warnings, or why it refused -- with a hint to repair it when adrpy gives one.
Features
Main menu
├─ Decisions New decision · Approve · Reject · Undo status · New version · New revision · Supersede
├─ Explore and validate Explore (every decision → its detail and the actions its state allows) · Check
├─ Decision log New entry · Browse the entries
├─ Repository Initialize · Configuration · Migrate (a guided builder for hand-written files)
├─ Install config the per-user default configuration
├─ AI skills List · Install · Remove (adrpy-skills)
├─ Command help the full contract of every adrpy and adrpy-skills command
├─ Change repository
├─ Language · Appearance · Keys
└─ Exit
- Choosing a decision is picking it from a list, filtered by name, showing only the ones the command can take (F2 shows them all).
- Every list shows eight rows a page, with where you are when there are more.
- Any decision or log entry can be read rendered from any list of them (F3), following its links to other decisions.
Every screen, form and component is described in Screens and forms.
Keys
| Key | Does |
|---|---|
| ↑ ↓, PgUp PgDn, Home End | Move in a list (also from its filter) |
| Enter | Choose |
| Tab / Shift+Tab | Next / previous field |
| → | Accept a suggestion in a field |
| Esc | Back one level; on the main menu, leave |
| Ctrl+R | Run the screen's action: a form, saving a configuration, migrate, using a folder |
| F3 | Preview the decision or log entry under the cursor |
| F2 | In the decision picker, show every decision or only the available ones |
The three in bold can be changed in the main menu's Keys. The line at the bottom of every screen always names the keys that work there.
Appearance and accessibility
- Three presets, in the main menu's Appearance: Default (dark), Light and High contrast, previewed as you move through them. Any color can be customized on top of the chosen preset.
- Every text meets WCAG AA contrast (4.5:1), and every state indicator and the focus border WCAG's 3:1, in every preset -- measured by the tests on everything each screen draws.
- Keyboard first: every screen opens with the keys acting where they should -- a list's arrows, a form's first field. The mouse works too.
NO_COLORis honored.
Where adrpy-tui keeps its settings
adrpy-tui writes one file of its own, never in your repositories: the language, the appearance and customized colors, the changed keys and the last item chosen in each menu. Next to it, error.log holds the details of the last failure of adrpy-tui itself, if one happened.
| System | File |
|---|---|
| Windows | %APPDATA%\adrpy-tui\state.json |
| macOS, Linux | $XDG_STATE_HOME/adrpy-tui/state.json, or ~/.local/state/adrpy-tui/state.json |
Deleting it starts again from the language choice.
Documentation
| Page | For | What it covers |
|---|---|---|
| Screens and forms | Everyone | The header, menus, lists, focus, keys, previews, colors, and every command's form |
| Architecture | Contributors | Why it exists, its boundaries, how adrpy is run and version-checked, the module map, testing |
| Manual test checklist | Maintainers | What to walk through in a real terminal before a release |
| Architecture decisions | Contributors | Every recorded decision with its state, scope and dates, in the index adrpy regenerates at each command that writes a decision |
| Decision log | Contributors | Audit findings and other non-architectural decisions, one entry each, written with adrpy log |
| Contributing | Contributors | Development setup, tests, translations, pull requests |
| Changelog | Everyone | What changed |
Contributing, security and license
- Contributions are welcome -- read CONTRIBUTING.md first. The interface's translations beyond English have not been reviewed by native speakers yet; reviews are very welcome.
- Report a vulnerability privately, as SECURITY.md explains. Vulnerabilities in adrpy itself belong to adrpy-ai.
- This project follows its Code of Conduct.
- MIT licensed -- see LICENSE.
Metadata
Release files for adrpy-tui 0.1.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 | |
|---|---|---|---|
| adrpy_tui-0.1.0.tar.gz | 228.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adrpy_tui-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 378.1 kB
Release files / adrpy_tui-0.1.0.tar.gz
| Download URL | adrpy_tui-0.1.0.tar.gz |
|---|---|
| Size | 228.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a0055cce01971db94beb7d32c2c85fbd136557e8ff3af92e58798d04fb731ca5
|
|
BLAKE2b-256 checksum How to use checksums |
12d269009c179bfdb27d26edb220f229ba8c7d92bd05d9f6172fda405567ae94
|
| 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 Oct 1, 2026.
Transparency logRelease files / adrpy_tui-0.1.0-py3-none-any.whl
| Download URL | adrpy_tui-0.1.0-py3-none-any.whl |
|---|---|
| Size | 149.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2779b7420d2b132cb16347c33e81a5456631ec3d43ac6f9c0a235134315aa59e
|
|
BLAKE2b-256 checksum How to use checksums |
483224470848f674bbc4fdfe7842699f855898a188556ece0a88ede3f288ca96
|
| 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 Oct 1, 2026.
Transparency log