Skip to main content

beacon-board

A kanban board backed by markdown files, with a CLI that people and coding agents can both drive. Tickets are files in a directory. The board is a single static HTML page. There is no server and no database.

The board

Install

uvx beacon-board --help        # run without installing
pipx install beacon-board      # or install it

Quickstart

beacon-board init
beacon-board new --app AB --title "First ticket" --type Task
beacon-board build --open

That writes beacon.toml, a tickets/ directory and board.html.

Why the CLI matters

Coding agents are good at writing markdown and bad at remembering which ID comes next. The CLI closes that gap: it allocates IDs atomically, refuses malformed tickets at creation, and reports problems instead of silently dropping files.

Give an agent access to the commands and it can read and update the same backlog you do:

beacon-board list --status Next --json
beacon-board set AB-07 --status Now
beacon-board comment AB-07 "Reproduced on a clean install."

beacon-board agent-docs prints an instruction block to paste into whatever your assistant reads. Nothing here is specific to one tool.

Tickets

One markdown file per ticket, in tickets/.

# AB-07: [Bug] Search drops the last result

**Epic:** [AB-03 Search overhaul](AB-03-epic-search-overhaul.md)
**Assignee:** rae
**Depends on:** None
**Related:** AB-04
**Estimate:** S
**Type:** Bug
**Status:** Next

## Objective

The final match is missing from every result page.

## Acceptance Criteria

- [ ] Searching a mailbox with exactly one match shows it.

## Acceptance Criteria renders as a checklist, so write items as - [ ] and tick them to - [x]. Plain bullets render as prose instead, which is why the section is worth writing consistently. ## Comments holds dated entries, oldest first: - **2026-08-14:** text.

Three levels: the ID prefix groups tickets into apps, **Epic:** groups them within an app, and everything else is a ticket. A ticket whose **Epic:** reads Self is an epic container. With only one prefix in play, the app level disappears from the board.

Configuration

beacon.toml, found by walking up from the working directory. Every key has a default, so the file is optional.

[meta]
name = "My Board"

[[apps]]
prefix = "AB"
label = "My Project"

[statuses]
columns   = ["Later", "Next", "Now", "Done"]
protected = ["Done"]

[assignees.rae]
label = "rae"
color = "#ffffff"

protected statuses are the ones the CLI refuses to set without --force. Useful when you want an agent to do the work but not to declare it finished.

Commands

Command What it does
init Scaffold a board here
new Create a ticket, allocating the ID
set Change fields on a ticket
comment Append a dated comment
list List tickets, with filters and --json
show Print one ticket
next-id The next free ID for a prefix
validate Report every problem
build Write the board HTML
doctor Print resolved config and paths
agent-docs Print instructions for a coding agent

Every command takes --help. beacon-board --version prints the version.

Exit codes: 0 ok, 1 usage or runtime error, 2 validation failed, 3 refused by rule. Branch on these rather than on the message text.

Requirements

Python 3.11 or newer. No runtime dependencies.

Contributing

Bug reports and pull requests are welcome on GitHub. To work on it:

python -m pip install -e ".[dev]"
python -m pytest
python -m ruff check .

See CONTRIBUTING.md for the house rules.

Author

Built by Bojan Gasparovic. More work and writing at zeroemdashes.com.

License

MIT.

Generated boards embed Poppins, DM Sans and Fira Code, all licensed under the SIL Open Font License 1.1. The licence text ships with the package at beacon_board/templates/fonts/OFL.txt.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beacon_board-0.1.0.tar.gz (203.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beacon_board-0.1.0-py3-none-any.whl (130.7 kB view details)

Uploaded Python 3

File details

Details for the file beacon_board-0.1.0.tar.gz.

File metadata

  • Download URL: beacon_board-0.1.0.tar.gz
  • Upload date:
  • Size: 203.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for beacon_board-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bb4cd5b9ca7076cbbf028eefa271e41a1c6d137731a9e57dc29077d72b905dd3
MD5 60fd3f71802930a1625df952b201a641
BLAKE2b-256 38754b95fe6c7a07d16542c0d8140b04eaeb0314710c170da5201d0b55016b5c

See more details on using hashes here.

File details

Details for the file beacon_board-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: beacon_board-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 130.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for beacon_board-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c76f449834863eea2998e49fb197ce02f1d7633f7f7c7fdf9b97c101745122ac
MD5 786682354f71ba6cc05320c468e13267
BLAKE2b-256 51f0993d0560ec645a8fdc3ee6cc46b79a31fa44fee8fd57b3e27ebaaa6f1e6a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page