Breaking Changes

  • Ask is replaced by Query. The dashboard's Ask (AI answers over your synced work, /v1/search, /v1/search/chat, /v1/search/source, /v1/search/reindex) is gone, with no model calls left in search. Plans no longer carry an AI-asks allowance (asks is gone from GET /v1/quota, asks_this_month from the owner console) and the semantic_search plan feature is replaced by ai_digest: the digest email's AI summary on Pro, Team and Enterprise, no monthly cap. The Telegram bot runs each message as a Query and replies with the top five matches as text with dashboard links; a query that doesn't parse gets the position and a link to the syntax guide.

Added

  • Unlinked devices can be deleted for good. Unlinking still only revokes a device's tokens; the device then stays listed as unlinked (Devices: Status → Not linked; Settings → Devices: its own Unlinked devices section) until you choose Delete permanently, Delete all unlinked (N) or, for a linked device, Unlink and delete; the palette has Delete unlinked devices. Deleting removes the device record, its last pushed profile, its revoked tokens and its sync cursors; the history, transcripts, memories and usage it synced stay and show as from a "Deleted device". Org owners and admins do the same for members' devices on Team → Devices (an admin cannot unlink an owner's device), and the platform owner from the owner console with a reason. API: POST /v1/devices/:id/delete ({ "unlink": true } for a linked device, otherwise 409 device_linked), POST /v1/devices/delete-unlinked, POST /v1/org/devices/:id/delete, POST /v1/org/devices/delete-unlinked, POST /v1/admin/devices/:id/delete; GET /v1/devices, GET /v1/org/devices and the owner console's device lists now include unlinked devices with linked: false. Every deletion is audited (device.delete in the org audit log, delete_device in the owner audit).
  • History and the archive can be explored like Kibana Discover: GET /v1/history/discover (archived=1 for archived prompts) returns a page of prompts across all workspaces, each with its workspace and device names, counts per workspace, harness, device (by host name; "Deleted device" once removed), session (named by its first prompt) and folder, and a prompt histogram by hour, day, week or month, optionally split by one of those fields. Filter by full-text search (with the matching words marked), a time range, and ticked (f.<field>) or excluded (x.<field>) values; ticks within a field match any of them, ticks across fields must all match, and each field's counts ignore that field's own ticks so you can tick a second value. Sort by newest, oldest or best match. The other discover pages share the same parameters and response shape.
  • Runs can be explored like History: GET /v1/runs/discover returns a page of runs (each with its phases, token and cost totals and workspaces), counts per harness, phase, roster and workspace, and a run histogram over time, for a search (run id or any session title), a time range (a run's last activity) and ticked or excluded values. A run matches a value when any of its sessions has it; each field's counts ignore that field's own ticks so you can tick a second value.
  • Memory can be explored like History: GET /v1/memories/discover returns a page of memory entries (each with its device name and, for a search, the matching words marked), counts per project (by its friendly name, with temporary folders flagged), harness, type, device and folder kind (temporary or not), and an entry histogram by when each file last changed, optionally split by one of those fields. Search the memory bodies, pick a time range and tick or exclude values; ticks within a field match any of them, ticks across fields must all match, and each field's counts ignore that field's own ticks. Nothing is hidden by default, so temporary folders and generated indexes and daily summaries show up as values you can exclude.
  • Dashboard: shared Discover building blocks for exploring History, Archive, Memory and Runs (Kibana/Splunk interactions in a quiet Supabase-style frame): a slim toolbar (search, refresh, a time range from 15 minutes to 90 days, all time or custom dates, dashed filter buttons for key fields, a Chart show/hide toggle and Export), a left panel with a workspaces/projects/harnesses list, collapsible fields whose values you tick to include (any of them within a field, all fields together) or exclude, with counts, a search box, "Show more" and "Add as column", and saved queries kept per person in the browser; removable filter pills (NOT for exclusions); a compact count-over-time histogram you drag across, click or drive from the keyboard to set the range; and a results table with a column chooser, rows that expand into every field with filter for, filter out and copy, row selection with bulk actions, grouping, CSV or JSON export of the loaded rows, and a pinned "Load older" footer. Everything lives in the address, so a view is a link and Back undoes a filter. The palette gains "Filter by <field>…", "Save view" and "Clear filters" on those pages.
  • Dashboard Runs page is a Discover explorer: a Harnesses list, Harness, Phase, Roster and Workspace fields to tick or exclude, saved queries, Harness and Phase filter buttons, a time range, a runs-over-time histogram split by harness (drag to zoom), and Export. Each row shows the last activity time, harness badges, the run, and its sessions, tokens and cost; it expands into the run's phases, roster, workspaces and token breakdown, with a link to the run's detail page (phase timeline and session links; ?run=<id>). Sort newest or oldest first. Filters search the whole account on the server instead of only the runs already loaded.
  • Dashboard Memory page is a Discover explorer: a Projects list (friendly names, temporary folders marked), Project, Harness, Type, Device and Temporary folder fields to tick or exclude, saved queries, Type and Harness filter buttons, a time range, a memories-over-time histogram split by project (drag to zoom), group by project, and Export. Each row shows the update time, a type badge, the project and the title with the matching words of a search on one line; it expands into every field (filter for, filter out, copy) and a preview of the entry, with the wide reading view one click (or o) away. A visit starts with temporary folders and generated project indexes and daily summaries filtered out as ordinary filters you can untick. Entries from a removed machine say "Deleted device".
  • Dashboard History and Archive pages are Discover explorers over every workspace at once, replacing the pick-a-workspace-first browser: a Workspaces list (all, or one, with counts), Workspace, Harness, Device, Session and Directory fields to tick or exclude, saved queries, Harness and Device filter buttons, a time range, a prompts-over-time histogram split by workspace (drag to zoom), group by workspace or session, and Export. Each row shows the time, a harness badge, its workspace and the prompt on one line (search matches marked); it expands into every field (filter for, filter out, copy) with Open session, Preview in a window, Preview final response, Archive (Restore in the Archive) and Delete. Tick rows to archive, restore or delete them together. Opening a session and pressing Back returns to the exact view, filters included; the session page names a removed device "Deleted device". Old ?workspace= links (from bookmarks and the Overview) open History filtered to that workspace.
  • Dashboard Query page (/query, g q in the dashboard, "Query" in the nav; old /search links open it with their search) searches history, memory, runs and sessions at once with one query language, on the same Discover layout: a Sources list with counts (all, History, Memory, Runs, Sessions), Workspace, Harness and Device fields to tick or exclude, saved queries, a results-over-time histogram split by source, and Export. Each row shows the time, a source badge, the title with the matching words, and its workspace; it expands into the record with a link that opens the same query on the History, Archive, Memory or Runs page. When a regular expression search stops early, the page says how many of the newest rows it scanned and how to search further. Example queries are one click away while the field is empty.
  • The search field on every Discover page (History, Archive, Memory, Runs, Query) understands the query language as you type: fields, operators, phrases, wildcards, comparisons and regular expressions are coloured, a mistake the server reports is underlined where it is with the reason below, field names and the values in the current results are suggested (↑/↓, Enter or Tab), recent queries are listed when the field is empty, and the ? button shows the syntax with examples and links to the query syntax guide.
  • A query language for the search field of History, Archive, Memory, Runs and Query: words (full text on prompts and memory bodies, fix* for a prefix), "phrases", field:value on each page's fields (labels ignore case and accept display names: harness:"Claude Code", device:<hostname>, project:<name>), * / ? wildcards, /regex/flags on the main text or a field, >, >=, <, <= and a..b on numbers (tokens, cost, sessions on runs) and times (created, updated; dates, unix seconds or -7d), before: / after:, has:field, in:<source> on Query, NOT / -, implicit AND, OR and parentheses. Plain text still works. A mistake answers 400 query_syntax with the message and the position / length of the offending text; unknown fields name the ones allowed. Regex runs on the server after the rest of the query (and the literal text the pattern must contain) narrows the candidates: patterns up to 256 characters, no backreferences or nested quantifiers like (a+)+, at most 20,000 rows or about 200 ms per search, after which the response says partial: true and how many rows it scanned. User text only ever reaches the database as bound values. API: GET /v1/query?q=&sources=&from=&to=&f.<field>=&x.<field>=&sort=&cursor=&limit=&interval=&stack= (fields source, workspace, harness, device; rows from every source merged by time or interleaved by relevance; opaque cursor). Guide: /docs/query-syntax.

Removed

  • Ask and everything only it used: the semantic index (embedding upkeep, the search_index queue job, Rebuild index), the cross-encoder rerank (ASK_RERANK) and its bun run eval evaluation, the Ask prompts, the org_ask_usage counter (control migration 0040 drops it) and the ask_sent telemetry event. The vectors already stored are deleted by an hourly purge (ADR-57).

Update HarnessLink and every installed harness to its current release:

hnl update

New machine? Install with:

curl -fsSL https://harnesslink.sh/install.sh | bash

Newer: 17.5.87 · Older: 17.5.85 · All releases · Atom feed

Flag notifications