Releases: RamiAltai/agentman
v0.6.1: Merge pull request #11 from RamiAltai/docs-cleanup
v0.6.0: Merge pull request #9 from RamiAltai/dashboard-overhaul
Everything since v0.5.0: a complete agent work loop, an organization layer (categories/labels/metadata), optional agent scoping, and a dashboard that now does everything the CLI does. Still one binary, one SQLite file, localhost-only.
Agent work loop
am next— atomically pick + claim the highest-priority ready task in one call (replaces the racy list→parse→claim); exit 3 if nothing's ready.am wait --done <id>/am wait --ready— block until a task finishes or work appears, instead of polling; exit 7 on timeout.- Bulk
am status <id…>/am assign <id…>— act on many tasks in one call. am claim --steal-stale <dur>+am ls --stale— recover tasks from agents that crashed mid-claim (otherwise stuck forever); emits atask.reclaimedevent.
Organize & find work
- Categories above projects (
am category new,am project new -c <cat>) — group projects into a hierarchy. Project creation now requires a category; existing projects migrate intogeneral. - Labels (
am label,am ls --label) and substring search (am ls --grep/?q=) — find tasks as the board grows. - Task metadata (
am new/edit --meta k=v,am next --meta) — free-form key/value pointers for routing and external correlation. - Stable IDs (
amc_/amp_) + vault binding (am project edit --vault-id/--vault-path) — correlate with external systems by an ID that survives slug renames.
Confine agents (optional)
- Scoped identity (
am init -c <cat>[/project]) — restrict an agent to its slice; out-of-scope writes are rejected (exit 8). Accident prevention by default. - Scope tokens (
am token new --scope …) — server-enforced bearer tokens turn scoping into a real boundary, not just a client-asserted header; invalid/revoked → exit 9. - Carve-out: any agent may file tasks into
meta/proposalsregardless of scope.
Dashboard
- Category home + drill-down boards; activity feed and live stream scopable by category.
- Dark/light theme toggle — follows your OS, remembers your choice.
- Full CLI parity — create/archive categories, choose a category when creating a project, edit projects, filter the board (ready/blocked/stale/assignee/meta), edit task metadata, and release a task — all from the browser.
Upgrading
- Auto-migrates on first launch (schema v4 + v5); zero data loss, existing task IDs/refs unchanged.
- New exit codes:
8out of scope,9bad token. All existing codes unchanged.
v0.5.0
v0.5.0 — Task dependencies & dependency graph
Plan the order of your work: link tasks as prerequisites, and see the whole dependency map at a glance.
✨ Task dependencies
- Mark one or more tasks as prerequisites of another (
am dep add <id> <prereq…>, or from a task's modal). - Hard-block: a task with unfinished prerequisites can't be claimed or moved to in-progress/done — so agents only pick up work that's actually ready.
- Ready / 🔒 Blocked tags on cards, plus
am ls --ready(claimable now) andam ls --blocked. - Cycles and self-dependencies are rejected automatically — you can't create a deadlock.
🕸️ Dependency graph overlay
- Press
g(or click Graph) for a per-project, interactive graph of the dependency DAG. - Click any task to highlight its full prerequisite path and everything it unblocks, with a side panel showing its prereqs, what it blocks, and an Open task shortcut.
- Color-coded by priority; edges show whether each prerequisite is cleared (green) or still blocking (amber). Pan, zoom, and live updates over SSE.
Install / update
go install github.com/RamiAltai/agentman/cmd/am@latestv0.4.2
agentman v0.4.2 — first public release
agentman (am) is a tiny, self-hosted ticketing board designed for AI agents (a dead-simple "Ticketing System" where agents pick up, claim, comment on, and close tasks through a terse, token-cheap CLI, while you watch progress live in a web dashboard.
One Go binary. One SQLite file. Localhost-only. No database server, no npm, no dependencies to install.
agents ──(am claim 13)──┐
├──► HTTP+JSON API (127.0.0.1:8787) ──► SQLite (WAL)
you (browser) ◄──SSE────┘ sole writer · broadcasts every change live
Why it exists
- Built for agents, not humans first. Commands are short, output is terse text, successes are silent, and exit codes let an agent branch without parsing. A full pick-up → done cycle is ~65–75 tokens.
- Real-time for humans. Every change streams to the dashboard over SSE — no refresh.
- Zero ops. A single static binary (pure-Go SQLite, no cgo), localhost, no auth, no DB server. Back up = copy one file.
- Multi-project & multi-agent. Atomic task claims mean two agents never grab the same ticket.
✨ Features
Agent-native CLI
am init <type>per-directory identity (survives the fresh-shell-per-command model agents run under);am whoami.- Task lifecycle:
ls·show·new·claim(atomic) ·status·assign·note·edit·drop·rm. - Projects:
projects·project new·archive/unarchive·rm. <id>accepts a global id (13) or project ref (web-3);--jsonon any read; exit codes0/3/4/5/6for branchless control flow.
Live web dashboard (embedded, no build step)
- Kanban columns — Todo / In Progress / Blocked / Done — with per-project tabs, counts, and multi-select cross-project filtering.
- Drag-and-drop status changes; a wide, resizable ticket modal with description, comments, and full history.
- Collapsible / drag-resizable activity feed with clickable task
#refs; "Load older activity" paginates back through history. - Manage-projects modal to archive/unarchive/delete; two-step inline confirms for deleting tasks, comments, and projects.
- Fully responsive down to mobile; keyboard shortcuts (
n,a,[/],Enter,Esc).
HTTP + SSE API
- Full REST surface for projects, tasks, comments, and events;
GET /api/stream(SSE) plus pollable/pageableGET /api/events. The CLI and dashboard are both thin clients over it.
Data lifecycle & durability
- Single-writer + WAL; atomic claims via one conditional
UPDATE … RETURNING(the race loser gets409). - Append-only event log (12 event kinds) — the audit trail and the durable cursor used to replay missed events on SSE reconnect. Events survive hard deletes.
- Hard delete with FK cascade (task → comments, project → tasks → comments).
- Project archive/hide, backed by the first real schema migration (v2) via the forward-only migration runner.
- DB export/import — consistent
VACUUM INTOsnapshots; import validates integrity/FKs/schema and refuses to run while the server is live. - Events retention —
am db prune (--before <date> | --keep <N>), offline, events-only, VACUUMs after.
🔒 Security & reliability
- Loopback-only with no auth — the bind is the access control, hardened by a Host allowlist + write-CSRF guard + CSP.
- Agent-supplied text rendered with
textContentonly (neverinnerHTML) — a malicious task title can't inject markup, enforced by a source-level XSS-sink test. 500s never leak internal error detail (logged server-side, generic body to clients).- Minimum Go
1.25.11so every install builds against a security-patched standard library. - 9 test files, 71 tests, green under
-race. CI (GitHub Actions) runs build, vet,gofmt,go test -race, a JS syntax check, andgovulncheckon every push and PR — 0 reachable vulnerabilities.
📦 Install
Requires Go 1.25+ (older Go auto-upgrades its toolchain):
go install github.com/RamiAltai/agentman/cmd/am@latest
am serve # dashboard at http://127.0.0.1:8787Then open http://127.0.0.1:8787, create a project, and drive it from your agents. One-time Claude Code setup (global memory + permission allowlist) is in [docs/agent-integration.md](https://github.com/RamiAltai/agentman/blob/main/docs/agent-integration.md).
⚙️ Configuration
AGENTMAN_URL · AGENTMAN_PROJECT · AGENTMAN_AGENT · AGENTMAN_PORT · AGENTMAN_DB · AGENTMAN_LOG (opt-in METHOD PATH STATUS LATENCY ACTOR request logging) · AGENTMAN_NO_UPDATE_CHECK.
📝 Note on versioning
This is agentman's first published release. It ships as v0.4.2