Repository navigation
Releases: base698/amythest
Release list
v1.5.0 — inline STL model viewer, presentation views
Amythest 1.5.0
Linked 3D models render in the note viewer, and the MCP surface gains private, expiring presentation views. Each tarball contains both binaries (amythest server, amy client).
Inline STL models
An ![[model.stl]] embed used to be a download link. It is now an interactive canvas — drag to orbit, scroll to zoom, double-click to reset — with the file name and triangle count underneath.
No 3D library was added. An STL is a flat list of triangles with face normals, so parsing is a loop over a DataView and drawing is a single shader; a scene graph would have cost more than the rest of the bundle. The viewer is a 7KB chunk, loaded only on pages that actually embed a model, the same way mermaid is.
Details that matter on real files:
- The binary/ASCII sniff uses the triangle-count arithmetic, not the
solidheader — plenty of binary exporters write that header too. - Zero-length face normals are replaced with the triangle's geometric normal, since they otherwise shade as black facets.
- The mesh colour follows
--accentwith a rim light from--fg, so a model reads against both light and dark backgrounds and repaints on theme change.
Failures degrade rather than break: no WebGL, a fetch error, an oversized file, or a mesh with no triangles all restore the plain download link with a note, so a reader never loses access to the file.
Private expiring presentation views
present_content is an authenticated MCP tool for showing indexed vault content without publishing it. Opening assets makes an immutable copy bundle under the data directory — outside the vault and the search index — reachable at a random, expiring URL; opening a note returns its existing canonical URL instead. No source file is changed and no public share is created. The site's existing access boundary still applies. See docs/presentations.md.
Install
tar xzf amythest-1.5.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt.
v1.4.0 — markdown kanban boards, herdr plugin, themeable fonts
Amythest 1.4.0
Kanban boards become ordinary markdown notes you can edit by hand, amy gets a herdr plugin, and typography joins the theme system. Each tarball contains both binaries (amythest server, amy client).
Kanban boards are markdown notes
Board files were markdown wrappers around a JSON blob, followed by a derived rendering that went stale the moment you touched it. A board is now a note:
---
kanban: 4
name: personal
displayName: Personal
meta:
k_abc: {created: …, updated: …}
---
# In progress
## Fix the deploy pipeline ^k_abc
due:: 2026-09-10
priority:: p1
labels:: #infra #urgent
Free-form markdown description.
### Comments
- **2026-09-01T10:00:00Z — ada:** looks good# H1 headings are columns, ## H2 headings are cards (the trailing ^block-id is the stable card id), key:: value lines are the card's fields, labels are #tags, and the body is whatever markdown you want. Timestamps, attachments, audit entries and comment ids live in the frontmatter meta map so card bodies stay human.
- Hand edits are first-class. Retitle a heading, move a card by moving it under another column, or add a brand-new
## card— the server picks it all up. A hand-added card gets a stable id that is persisted on the next write. Unknown column headings fail with the list of valid ones. - Migration is automatic. Opening or listing a board converts it in place, from the previous JSON-in-markdown format (both the current and the predecessor marker style) or the short-lived whole-file YAML. Nothing to run.
cmd/kanban-migrate-checkis a read-only dry run that parses, re-renders and deep-compares a vault's boards without writing.
v4 reserves
#and##for structure, so headings inside card descriptions are demoted to###once, during migration.
amy — herdr plugin
herdr/ registers amy with herdr: a board pane running the full TUI in a split, and a quick-capture popup that takes one line and files it in today's daily note. Install with herdr plugin install base698/amythest/herdr, then bind the actions:
[[keys.command]]
key = "prefix+a"
type = "plugin_action"
command = "amythest.quick-capture"Opening the board is idempotent — it focuses a running board rather than splitting a second one, preferring the invoking workspace. amy capture also works headless (amy capture "call the vet"), so agents and scripts can file a task without the TUI.
amy — tasks while reading, and files that aren't task lists
- Act on tasks in the note reader. Checkbox lines in a note were plain text;
tnow grabs them,j/kwalk between them,spacetoggles andDruns the two-stage cancel-then-delete. Previously a task you were looking at could only be changed by going back to the tasks view and finding it again. Hstops collecting tasks from a file, settingtasks: falsein its frontmatter. The indexer always honored that opt-out but it had no terminal affordance, so a watchlist — a file whose checkboxes are a list, not a queue of work — kept filling the task views. The note stays readable, linked and searchable.
Themes — typography
Both surfaces read their type from two new theme tokens, font-body and font-mono. The stock look is unchanged; omarchy now uses a terminal mono stack across the notes site and the kanban board. Custom themes can set fonts like any other token:
themes:
typewriter:
light:
font-body: '"Courier Prime", "Courier New", monospace'Install
tar xzf amythest-1.4.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt. Boards migrate on first open; no manual step.
v1.3.1 — themeable fonts
Amythest 1.3.1
Fonts join the theme system. Each tarball contains both binaries (amythest server, amy client); server + assets upgrade needed for this one.
Changed
-
Typography is themeable. Both the notes site and the kanban board read their type from two new theme tokens,
font-bodyandfont-mono. The stock look is unchanged. -
Omarchy goes full terminal: the synthwave theme now sets a mono stack (JetBrains Mono → Cascadia Code → Fira Code → system mono) across the whole UI — as a proper rice should.
-
Custom themes in
amythest.yamlcan set fonts like any other token (quoted names supported, generated CSS stays injection-proof):themes: typewriter: light: font-body: '"Courier Prime", "Courier New", monospace' accent: "#6b4f2a"
Install
tar xzf amythest-1.3.1-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt.
v1.3.0 — themes: omarchy + custom palettes (web & amy)
Amythest 1.3.0
Themes, everywhere. The stock light/dark look stays the default on both surfaces; omarchy — a synthwave sunset — ships as the first alternate, and custom palettes are a few yaml lines away. Each tarball contains both binaries (amythest server, amy client).
Web UI
-
Theme picker at the bottom of the sidebar:
defaultandomarchybuilt in, plus anything you define. The choice persists per browser (localStorage) and rides along with the existing ◐ light/dark toggle — every theme has a light and a dark face. -
Omarchy: light is a warm dawn; dark is the night drive — deep purple ground, hot pink accent, sunset-orange highlights. The kanban board is themed too.
-
Custom palettes in
amythest.yaml, served as generated CSS on/gen/themes.css(token allowlist, injection-safe; a single-mode theme covers both modes):themes: hotrod: light: {accent: "#d40000", mark: "#ffe08a"} dark: {accent: "#ff2800", bg: "#140000"}
Tokens:
bg, bg-alt, fg, fg-muted, fg-faint, accent, accent-soft, border, highlight, mark. -
The SPA navigation morph now carries the palette (and keeps carrying dark mode).
amy
-
Topens the theme picker — moving the cursor previews each theme live across the whole UI, enter keeps it for the session, esc restores. -
Same built-ins (
default,omarchy); persist withtheme: omarchyincli.yaml, override ad hoc withAMY_THEME. -
Custom palettes in
cli.yamlinherit every field they don't set:theme: hotrod themes: hotrod: accent: "#ff2800" due: "#ffaa00"
Fields: header/status fg+bg, accent, title, dim, due, blocked, link, border, search fg+bg, danger fg+bg, p0–p2. Values are ANSI-256 indexes or hex.
Install
tar xzf amythest-1.3.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt. Server upgrade required for the web picker; amy themes work standalone.
v1.2.1 — az boards: scrolling, fuzzy filter, @Me, comments
Amythest 1.2.1
A patch release hardening the Azure Boards views from 1.2.0 against real, busy boards. Server unchanged — upgrading the amy binary alone is enough. Each tarball contains both binaries (amythest server, amy client).
Fixed
- Board columns scroll instead of overrunning. Rows wider than the column used to wrap (breaking the row budget) and clipped cards were unreachable. Every card/work item now renders as a single width-capped row, and each column is a scroll window that follows the cursor with
↑/↓ N moremarkers. Applies to Azure boards and regular kanban boards alike. - Work item comments show on the card.
az boards work-item shownever returns comment text, so the card claimed comments existed but showed none. The discussion is now fetched from the ADO REST comments endpoint —AZURE_DEVOPS_EXT_PAT(Basic) when set, else an AAD token viaaz account get-access-token— and rendered with author, date, and HTML stripped. Posting withcrefreshes the thread. work-item showno longer fails. The API rejects the default--expand allcombined with--fields; the detail fetch now passes--expand none.- Zero-row queries are an empty board, not a parse error.
az boards querywrites zero bytes (not[]) when the WIQL matches nothing.
Added
/fuzzy-filters boards live. Results narrow keystroke by keystroke across all columns; each query token subsequence-matches within a single word (trrfrm→ "terraform",dply pipln→ "deploy pipeline"). Enter keeps the filter,/then esc clears it.fshows only your work items on Azure boards, via WIQL[System.AssignedTo] = @Me— exact regardless of display-name formatting, cached separately from the full board.
Install
tar xzf amythest-1.2.1-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt.
v1.2.0 — beams gem intro + Azure Boards virtual boards
Amythest 1.2.0
An amy-focused release: the client opens with a rendered text-effect intro, and the boards screen learns to host Azure Boards. Each tarball contains both binaries (amythest server, amy client); pure Go, no runtime dependencies. The server is unchanged since 1.1.0 — upgrading the amy binary alone is enough.
amy — gem intro
- The today view's amethyst now arrives on purple beams: a pre-rendered ttfx (TerminalTextEffects) pass baked into the binary (13KB), playing at startup before the built-in shimmer takes over. No external tooling needed.
AMY_GEM_FX=offdisables it;AMY_GEM_FX="<effect> [flags]"runs any live ttfx effect instead when thettfxbinary is onPATH(orAMY_TTFX=/path). Regenerate the embedded frames withmise run gemfx.
amy — Azure Boards virtual boards
- Define virtual boards in
~/.config/amythest/cli.yaml(amy source init azboardsscaffolds it): org + project +System.AreaPath+ work item type, with an optional explicit column list. Everything runs through theazCLI with theazure-devopsextension — no tokens in yaml, ever. - Virtual boards appear in the boards screen (
3) marked[azure]and open a familiar column UI where columns areSystem.Statevalues:h/l/j/knavigate,enteropens the work item detail (HTML description flattened for the terminal).mmoves a card between columns — a real state transition viaaz boards work-item update --state.cposts a discussion comment,oopens the work item in the browser,/searches across columns.
- Caching: board lists are held for 60s and item details for 5min so navigation doesn't re-invoke
az; any move or comment invalidates, andrforces a refresh. - Logged-out is a first-class state: when
azisn't authenticated the board shows the exact fix (az devops login --organization <org>, orAZURE_DEVOPS_EXT_PAT) instead of an error trail, and the sources screen (0) reports the same in its health row. - Columns are discovered from observed states (ADO's default progression ordered first) when not configured.
Install
tar xzf amythest-1.2.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt. Azure Boards prerequisites: brew install azure-cli && az extension add --name azure-devops, then az login and az devops login --organization <org>.
Amythest 1.1.0
Amythest 1.1.0
Notes browsing grows up, the dataview engine reaches the terminal, amy learns to speak to external ticketing systems, and the server gains production-service hardening. Each tarball contains both binaries (amythest server, amy client); pure Go, no runtime dependencies.
amy — notes browser & dataview
- Browse layer:
tabin the notes view flips between search and a folder tree with recursive counts, Recent / Untagged / Tags virtual folders, modified/title sort, and filter prefixes (t:tag,f:folder, plain title text,g:→ server full-text search). - Preview pane: the selected note renders beside search results and the browse tree on wide terminals (debounced, cached);
ptoggles. - Reader upgrades:
bopens a navigable backlinks panel, tags show in the header, and```tasksquery blocks render as live results (the dashboard-note dataview experience) with inline errors. - Note editing:
eopens the note in$EDITORand saves through the newPUT /api/note— whole-file hash lock, frontmatter preserved, conflicts keep your edit in the temp file. - Bases view (
6): the vault's.basefiles as tables — groups,vcycles views, enter opens the row's note,eedits a frontmatter property in place. Backed by new JSON APIs (/api/bases,/api/basewith row-parallel note slugs,/api/notes).
amy — multiple sources
- New
internal/sourceseam: external ticketing systems merge into the Today view and get a dedicated browsing view (5), with per-source health on0. - Jira ships as the first provider — stub mode (
amy source init jira, demo fixtures) works before credentials exist; the HTTP client is a documented skeleton (env-onlyJIRA_EMAIL/JIRA_API_TOKEN). Issue actions: open in browser, manual comment, pull onto a board as a card carrying aSource: jira:KEYreference, send to a herdr agent. No state ever writes back. Azure DevOps is the sketched second provider.
Server & web
- Service hardening (all opt-in, defaults unchanged):
- Health probes:
/probes/liveness+/probes/readiness(named-check registry; 503 lists failing checks), configurable paths,/healthkept as alias. - Structured logging:
AMYTHEST_LOG_FORMAT=json|text, level/output/source knobs, per-request correlation IDs (X-Request-Id, configurable) echoed and attached to a context logger, one access-log line per request (probes at debug), documentedlogging.Wraphandler seam, secrets never logged. - Auth:
AMYTHEST_AUTH_MODE=off|static|jwtwithAMYTHEST_AUTH_PROTECT=mcp|ui|all. JWT mode validates bearer tokens against a JWKS: signature bykid,exp/nbfwith leeway,iss/audwhen configured, algorithm allowlist, key-rotation refresh, optional scope gate, probes always exempt, fail-fast startup on bad config.
- Health probes:
- Task recurrence editing API (
/api/tasks/recurrence) with full Obsidian notation incl.every N weeks on <day>and… when done; 🏁 parsed as a field boundary. - Explorer tree groups date-named notes (Daily Notes, journals) into collapsible month folders; mobile web gets a collapsible ☰ navigation drawer.
- Quick-add task API (
/api/tasks/add, daily note created on demand) powering amy's+.
Tooling
.mise.toml: pinned toolchain (go 1.27, node 26) andbuild/test/run/deploytasks —mise run deploybuilds natively and restarts the service.
Install
tar xzf amythest-1.1.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/SHA-256 checksums in checksums.txt. Config reference for the new hardening settings is in the README.
Amythest 1.0.0
Amythest 1.0.0
First release. Amythest is a self-hosted notes, tasks, and kanban server for an Obsidian-style markdown vault — plus amy, an interactive terminal client. Each tarball contains both binaries (amythest server, amy client); pure Go, no runtime dependencies.
amythest — the server
- Notes: markdown vault rendering with wikilinks, tags, graph/content index, and FTS5 full-text search. ⌘K search modal with slash commands (
/todayjumps to today's daily note; registry is one entry per new command). Raw-note API for programmatic clients. - Tasks: Obsidian Tasks-compatible engine over your vault — emoji metadata (📅 due, ⏳ scheduled, 🛫 start, 🔁 recurrence, ✅/❌, priorities), a query language (
not done,due before tomorrow,path includes,group by, …), and write APIs for toggle, due date, 🔁 recurrence, priority, triage, cancel → purge (two-stage delete), and quick-add (daily note created on demand). All writes are optimistic-locked against the file hash and atomically committed under a vault lock. Recurrence understands the full notation, includingevery N weeks on <day>and completion-relative… when done. - Kanban: boards live as markdown files inside the vault. Six-lane workflow (triage → backlog → ready → in progress → verify → done), cards with markdown descriptions and live checkboxes, comments, attachments, labels/priority/due/blocked, cross-board moves with a crash-safe journal, done-archive with restore, and per-board file locking.
- Integrations: share/text capture, base tables, and an MCP server (bearer token) exposing notes, tasks, and kanban tools to AI agents.
- Single static binary with the web UI embedded. Binds loopback by default — pair with Tailscale Serve or any TLS proxy. Prometheus metrics at
/metrics.
amy — the terminal client
- Today view: everything due — overdue and due-today vault tasks merged with due or focused kanban cards — beside a shimmering ASCII amethyst.
xreveals what you finished today, and completions can be undone in place. - Views:
1today ·2tasks ·3boards ·4notes, with vim-style/nNsearch everywhere. - Doing things:
spacetoggles tasks and card checklist items (Obsidian ✅ done-dates, recurrence-aware with catch-up feedback),darchives a card,mopens a move picker (lanes and other boards),Ddeletes with confirmation (tasks cancel first, then purge; cards delete permanently — archive included),+quick-adds a task (daily note by default, any searched note otherwise) or a card into the focused column. - Editing:
eedits a task's due date and 🔁 repeat rule in two prompts, or opens a whole card in$EDITOR(title, status, priority, due, labels, blocked, description — only changed fields are sent).ccomments on cards. - Notes: search the vault, read notes with soft wrapping, follow
[[wikilinks]]with tab/enter. - Agent hand-off:
asends any note or kanban card — metadata, body, comments — to a running herdr coding agent as framed context. - Config via
~/.config/amythest/cli.yaml+ env; session cache shared with the bundled API scripts.
Install
Download the tarball for your platform, then:
tar xzf amythest-1.0.0-<os>-<arch>.tar.gz
install -m 0755 amythest amy ~/bin/ # or anywhere on PATHServer quickstart and configuration (vault path, kanban env vars, amy endpoint setup) are in the README. SHA-256 checksums in checksums.txt.