istosandClaude Fable 5 e800cf1a91 Address PR review: symlink-safe removal, guard-gated stamp, hermetic tests
The first-boot guard is now its own predicate gating both the clean and
the local/state/ stamp, so a disarmed run (pre-existing local/.env, or
self-hosted) touches nothing at all — before, it still created the stamp
directory on any vendored run. Removal unlinks symlinks instead of
following them into rmtree. Tests filter BOARD_* out of the subprocess
environment, assert the stamp stays absent when .env disarms the guard,
and cover the symlink case.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 07:22:33 +02:00

Bench

A live kanban for coding-agent work: task files in stage directories are the only source of truth; a stdlib-only board narrates everything that happens to them — agents working in git worktrees, PRs opening on review, CI and Copilot state on the cards, drives of the app from a task's own branch, and an archive that is never a delete.

Install into a repo

git clone <this repo> .task-manager && rm -rf .task-manager/.git
./.task-manager/start.sh        # wires the project (idempotent) and serves

The first start.sh clears the distribution's own cards from tasks/, plans/ and reference/ (printing each removal), so a fresh install starts with an empty board.

Commit .task-manager/ into the host repo — core is vendored on purpose, so clones work offline and updates show up in the host's own diffs.

Update

# in manager/local/.env:  BENCH_SOURCE=<this repo's git url>
./.task-manager/update.sh              # latest
BENCH_REF=v1 ./.task-manager/update.sh # a specific release tag

Updates replace manager/core/ and the top-level scripts wholesale and touch nothing else — tasks, plans, reference, and everything under manager/local/ (your driver, commands, prompt overrides, settings, state) survive every update. Then python3 .task-manager/install.py and restart the board.

The three-layer law

Core knows about tasks, worktrees, PRs and events. It knows nothing about any particular app (drivers do: local/driver/start), agent vendor (adapters do: core/adapters/), or project (local/ does). Full docs in CLAUDE.md; the adapter contract in manager/core/adapters/README.md.

S
Description
Bench is a local task manager that integrates with coding agents to make it easier to manage work in a repo.
Readme MIT
1.7 MiB
Languages
Python 78.2%
HTML 17.5%
CSS 2.1%
Shell 2%
JavaScript 0.2%