What's new
User-visible changes shipped to ghcr.io/neverbot/nottario:latest,
newest first. Every push to master ships :latest; versioned tags
are cut on demand.
2026-08-20
-
The frontend is now served compressed. Static assets and the app shell are gzipped once at startup and served precompressed to any browser that accepts them, cutting the transfer by about 70% (the architecture page's layout engine alone drops from 1.6 MB to 472 KB). Clients that do not advertise gzip still get uncompressed bytes, and
Vary: Accept-Encodingkeeps shared caches honest. -
Pages reload without re-downloading the frontend. Static assets now carry an
ETag, so a browser that already has them revalidates with an empty304instead of fetching everything again — around 3.2 MB per reload on a typical page. Freshness is unchanged: a rebuilt asset still arrives in full. The?v=cache-busting query on the entry scripts is gone, since the ETag covers every file rather than just those two. -
The documentation site is now agent-readable. A curated llms.txt index lives at the site root, and every page is also served as plain Markdown at the same URL with the extension swapped for
.md(for example/getting-started.md), following the llms.txt proposal.make docs-checkfails if a page is missing from the index, so the two cannot drift apart.
2026-08-03
- Agent skill bundle now tells agents to list their own
doingtasks and surface them before previewing new work when the human asks "what's next", so unfinished pickup from a previous session isn't silently skipped.
2026-07-07
- Deleting a role no longer kicks its holders out of the project. Membership and role assignment are now separate tables; the members panel gains a "No roles yet" state and a dedicated "remove from project" action, so replacing the role catalogue is a safe editorial operation instead of a data-loss trap.
2026-07-05
- Per-user notifications system. Every user now sees a bell in the
topbar with an unread indicator, a drawer listing task events that
concern them (someone assigned them a task, someone commented on a
task they're assigned to or created, a task they're assigned to or
created was closed), and a preferences block under
/meto opt out per kind. Self-hosters can turn the whole system off withNOTIFICATIONS_ENABLED=false. - Self-hosted admins now see an "update available" banner when a
newer commit lands on upstream master. The check runs in-process
every 24 hours (configurable via
SELF_UPDATE_CHECK_INTERVAL); disable withSELF_UPDATE_CHECK_ENABLED=false. See the update notifications reference.
2026-06-20
- BREAKING — skill bundle install collapsed into one tool.
nottario.skill.listandnottario.skill.readare gone. The newnottario.skill.installreturns a small JSON descriptor with a short-lived signed URL for the bundle as a single zip, plus an install plan and abundle_versionhash. The bundle content no longer flows through the MCP response — the agent fetches the URL out of band with any HTTP tool, unzips into<workspace>/.claude/skills/nottario/(or~/.claude/skills/...as fallback), and restarts the client. A typical first sync drops from ~20-30k tokens to ~200. - New
nottario.tasks.closeMCP tool. Atomic close that bundleslink_commit+add_comment+set_stateinto one transaction. On precondition failure the whole thing rolls back. Slim ack{task, comment_id?, linked_commit_count};verbose: truefor the full Task. Skill bundle now teachestasks.closeas the canonical close and explicitly forbids "starting work" / "claimed" pickup comments. - Arch and search MCP responses slimmed.
arch.list_nodes/list_edgesreturn slim rows;arch.get_nodeopts in to children/edges/links viainclude_*;upsert_*andmove_nodereturn slim acks.searchdrops the raw description (snippet only), default limit 50→20. All acceptverbose: true. docs.read { head_only: true }. Returns frontmatter + 400-char preview withtruncated/body_lengthmarkers.tasks.listdefaults to open tasks only. Passinclude_closed: trueor an explicitstateto see done/wont_do.
2026-06-19
- MCP responses are slim by default. High-frequency task
mutations return only the keys needed to chain the next call; no
description or comment body echoed.
tasks.getomits deps, commits and comments unlessinclude_*is set.verbose: trueopts back in. A typical "claim → comment → done" loop drops from ~5 KB to ~600 B. New "Token discipline" section in the skill bundle. - Edit task title, description and comments from the UI. Quiet
Editbutton reveals a GitHub-style Write/Preview markdown editor (Ctrl/Cmd+Enter, Esc). Members edit text; admins edit role. Per comment Edit/Delete for author or admin. Edited marker; optimistic concurrency rejects stale writes.
2026-06-15
- Skill bundle: git methodology. New
methodology/git.mdcovers solo / parallel-agent / multi-dev workflows. - Closing comment is now required before
done/wont_do. Bugs get a terse Repro / Fix / Test triplet; documented indomains/tasks.md.
2026-06-14
- Architecture diagram is now versioned. Edits open a per-author
session; the idle window (default 120s) auto-flushes one
arch_revisionsrow with the full graph snapshot. New MCP toolnottario.arch.checkpoint { message? }flushes immediately. New env varsNOTTARIO_ARCH_LOCK_IDLE_SECONDSandNOTTARIO_ARCH_TICK_SECONDS. Different-author writes during an active session return423 Lockedwithretry_after_seconds. New REST endpoints/arch/historyand/arch/revisions/{version}.
2026-06-12
- Brand-anchored palette + Gantt visual refresh. Single CSS-token
system rooted in the brand gradient (
#1f6feb,#2da44e); docs atdocs/design/palette.md. Gantt:NOWpill with glow column, past-zone wash, hairline lane separators, role-tinted bars, corner red dot for bugs, collapsed legend.
2026-06-10
- Kanban: filter row, priority dots, column rename. Filter chips
for Mine / Role / Type, mirrored to the URL hash. Priority shows as
a coloured dot. Columns renamed to To do / In progress /
Done. Drag across columns shows an Undo toast (6s). In-app
delete confirm.
featuretype is gated behind Advanced. - Realtime: comment events propagate live.
task.comment.*refreshes the open detail dialog without reload. - Search dropdown: keyboard nav, grouping, error state. Results
grouped by source with headers. Top hit auto-selected; ↑/↓/Enter/
Esc work. Network failures surface a Retry row instead of a silent
"No matches".
/hint in the empty input. Meta lines drop the internal column prefixes.
v0.1.0 — 2026-06-08
First public release, published as ghcr.io/neverbot/nottario:0.1.0
(linux/amd64).
- Tasks. Atomic claim (
SELECT … FOR UPDATE SKIP LOCKED), dependency cycles caught with a project-scoped advisory lock, cascading rollup on feature parents. Cycles ("sprints") with rollover. Kanban and hand-rolled-SVG Gantt views. - Documents. Versioned markdown store with optimistic concurrency. Full history per path.
- Architecture. Compound-layout diagram backed by ELK, rendered with our own SVG.
- Identity. GitHub OAuth for humans; per-project API tokens for agents. Admin tokens are not exempt from project scope.
- MCP server. Streamable HTTP, Bearer auth. Tools cover whoami / projects / tasks / docs / arch / cycles / search / skill.
- Skill bundle. Operating rules read on demand via MCP or pre-installed in Claude Code.
- Search. Full-text across tasks, documents and arch nodes, multi-language.
- Realtime. SSE + Postgres
LISTEN/NOTIFY. No WebSockets. - Backups. Optional in-process
pg_dump, daily with N-day rotation. Off whenNOTTARIO_BACKUP_DIRis unset. - Licence. MIT.
See Self-hosting reference and Getting started.