The window, the launcher, and agents driving both — on camera. Every
recording here is generated or recorded against the demo snapshot
(examples/demo.db, 534 issues); the spec or tape that produced each one is
linked under it, and project/MEDIA.md says how to
regenerate them. The README keeps one of these; the rest live here so the
front door stays short.
⌘K is the one index — titles, bodies, comments, issues and pages. The chips on the list do not apply. That is why a comment-only word still finds the row.
Generated from e2e/demo/search-demo.spec.ts against the demo snapshot.
Typed into gadak's own pane: gadak claim first, so the tab carries the issue's key, then the pipe and the JQL. gadak views open writes a one-shot hash; the list above applies it. The recording adds a priority clause — in --jql a priority or status name is matched as the literal string your Jira stores, which is localized, so the README example leaves it out. Generated from e2e/demo/terminal-demo.spec.ts (make media-terminal).
gadak sql --no-header "select key from issues_full where status_category = 'inprogress'
order by status_changed_at asc limit 5" | gadak views open --keys -gadak views open --jql 'project = NMA AND resolution is EMPTY'gadak views open is the "open in gadak" verb; gadak open KEY leaves for
Jira. The list box takes the same JQL paste as gadak search --jql; clauses
gadak cannot express are listed, never dropped.
Two takes from the same rig, each following one job to the end. Nothing in either is scripted but the opening sentence — the commands, the HTML and the recovery are the model's:
Recorded from claude-dashboards.tape and claude-tokens.tape against the demo snapshot. Full-resolution MP4s: dashboards · tokens.
When the answer is a wall rather than a list, author a dashboard — one HTML
document plus registered datasources, rendered sandboxed in the web tab:
DASHBOARDS.md.
gadak dashboards save registers the document and its datasources; the host runs the queries and pushes rows in, and a re-save swaps an open frame in about a second. Charts come from a locally served uPlot — no CDN, no CSP widening. Generated from e2e/demo/dashboards-demo.spec.ts.
The window keeps one paper metaphor across four palettes — light, a
neutral-cool dark, blue-black ink, and warm ember. The theme follows
the system unless you pick one, and it belongs to the workspace, not the
browser: gadak config set appearance.theme ink. Every field the settings
dialog edits is a CLI verb over the same validation (gadak config list,
gadak config set …), so setup is not a screen an agent has to click.
ui.tokens / ui.dataColors flow from the CLI into an open tab with no reload, and the keys a palette owns refuse an override instead of silently breaking the paper. Generated from e2e/demo/tokens-demo.spec.ts.
Two surfaces is not a closed list. Reading the mirror is one binary call
(gadak search --json, ~20 ms), and opening anything in the app is one URL
(gadak://view?issue=… — the scheme), so whatever can do
those two things becomes a surface.
Each keystroke is one gadak search --json; Enter is the deep link. A saved view travels the same way — gadak views open prints its link.
That launcher exists: a Raycast extension that searches issues and wiki documents as you type, submitted to the Raycast Store. Until the review lands, one command installs it from the binary you already have (embedded, no checkout):
gadak raycast installThe macOS app has the same install as a button — Settings → Integrations
lists Raycast, the agent skill and MCP, shows what is already installed, and
runs the exact command it prints. Building on the extension itself:
../contrib/raycast/. With no extension at all, a
Raycast Quicklink pointed at gadak://view?issue={argument} covers the
open-by-key half.
For hosts without a shell (Claude Desktop), the same mirror is an MCP server. Ask the thing Jira cannot answer at all, because the wiki is a second search: "what do we know about X?" One index holds both, so the answer can put a ticket and the design doc that drove it in the same sentence.
Five tools; no writes to the mirror or to Jira. A host with a shell can use gadak sql instead. Setup: MCP.md.

