Skip to content

v0.1.16

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Nov 17:52
· 80 commits to main since this release
16ae628

Highlights

  • Side chats — ask about any passage without derailing the conversation (#2730, #2784).
  • Spend visibility — people see what their work costs; admins can set spend caps (#2594, #2886).
  • Smoother app connections — reconnect or disconnect apps, Zoom, and large tool catalogs (#2452, #2531, #2697).
  • A faster, livelier web UI (#2433, #2740, #2517, #2272).
  • Simpler admin — settings live in the web UI; one-step offboarding (#2766, #2808).
  • Render support for hosting and computers (#2704, #2833).
  • Security hardening across networking, logins and database connections (#2583, #2801, #2800, #2635).
  • Breaking: one agent harness (Claude via Pi), Postgres-only storage, and several legacy features and settings removed (#2768, #2769, #2500).

What's Changed

  • Deliver scheduled messages to teammates without recipient consent by @ReganBell in #2425
  • Declare each route's actor on the route instead of a parallel list by @ReganBell in #2352
  • Send git proxy credentials up front in sandbox commands by @ReganBell in #2426
  • Deploys: per-provider app size cap (AWS 100 MiB) and chunked MicroVM writes by @ReganBell in #2423
  • web-ui: show steers in the transcript as soon as they're sent by @ReganBell in #2422
  • AWS MicroVM: follow nextToken and filter by name when finding images by @ReganBell in #2434
  • Keep the sidebar off the chat-switch path by @ReganBell in #2435
  • Await config-store writes instead of reporting them saved early by @ReganBell in #2353
  • Live e2e: report what a failed provider execute returned by @ReganBell in #2439
  • Stop masking execute output with forced-egress git config values by @ReganBell in #2442
  • Stream reasoning summaries to the web as they arrive by @ReganBell in #2433
  • Derive web UI and admin emoji from emoji-datasource; one Slack mark by @ReganBell in #2437
  • Delete committed copies of the microvm agent, Fly templates, and shared helpers by @ReganBell in #2430
  • sandbox: classify Modal and process-session errors by type and state, not message text by @ReganBell in #2440
  • Branch on typed error codes instead of error text in core API paths by @ReganBell in #2441
  • Decide Docker, Fly, Porter and RDS-drill outcomes from state, not error text by @ReganBell in #2443
  • Read typed fields instead of matching text for web UI approval denials, cron titles and theme imports by @ReganBell in #2445
  • Use typed fields instead of string matching for turn resume, document truncation, self messages and live search by @ReganBell in #2438
  • Command policy: parse shell with tree-sitter-bash instead of regex rewrites by @ReganBell in #2355
  • Deploy the egress proxy as a regular qm service by @ReganBell in #2266
  • Give drifted lists one source of truth by @ReganBell in #2428
  • Broker: fixed non-secret headers on brokered credentials by @16francej in #2432
  • Skip dependency install scripts in the core and egress-proxy images by @ReganBell in #2457
  • History copy: items schema and resumable production backfill by @ReganBell in #2344
  • Items E: cut session history over to the items table (stacked on D #2344) by @ReganBell in #2258
  • Stage items storage promotion at the deployment handoff by @ReganBell in #2396
  • Let people reconnect or disconnect connected apps by @16francej in #2452
  • Let swarm parents give workers goals that keep them working by @16francej in #2429
  • Attribute spend to the cron that ran it by @ebakan in #2420
  • Add Server-Timing phase timing to transcript, approvals and session-list requests by @ReganBell in #2467
  • Slack: typed codes and fields instead of string matching (regex burndown: slack) by @ReganBell in #2446
  • Read goal spend, pack ownership, sync-task freshness and model provider from typed fields by @ReganBell in #2448
  • Revert Server-Timing phase timing (#2467) by @ReganBell in #2473
  • Silence poll fires only through finish_silently, not sentinel reply text by @ReganBell in #2450
  • Stream relayed core responses through the web UI server by @ReganBell in #2469
  • Prove a stopped AWS core cohort is not the background owner through the production route by @ReganBell in #2472
  • Keep sandbox failure evidence instead of discarding it by @ReganBell in #2351
  • Record reply-detection failures instead of discarding them by @ReganBell in #2475
  • Log discarded errors at 39 empty-catch sites by @ReganBell in #2474
  • Retire legacy session history storage (items phase F) by @ReganBell in #2478
  • Trace requests, runs and Postgres with Sentry; retire turn_metrics by @ReganBell in #2477
  • items F: drop the legacy session history tables by @ReganBell in #2486
  • Admin Sessions tab: one newest-first list, no live totals by @ReganBell in #2487
  • Override hono to 4.13.13 to clear GHSA-5r4p-p66f-jhc7 by @ReganBell in #2489
  • Hold the legacy history drop until copied tool-call ids are verified by @ReganBell in #2491
  • Add a Hand-managed infrastructure lens to the Wall of shame by @ReganBell in #2493
  • Desktop: expand native input, observations and background activation by @ReganBell in #2397
  • Make the enabled-models picker a typeahead by @16francej in #2451
  • Use the MCP SDK client for MCP connectors and memory providers by @ReganBell in #2479
  • Send mail through Nodemailer and one Resend client by @ReganBell in #2480
  • Let custom providers serve models QM already ships, under their own name by @16francej in #2427
  • web-ui: delete duplicate, dead and undefined-token rules from shell.css by @ReganBell in #2458
  • Let agents upload images for X posts through their own connection by @16francej in #2470
  • Keep unhoisted tool-call ids from the items copy, then drop the legacy history tables by @ReganBell in #2499
  • Share one Gmail REST client across sent mail, push, inbox refresh and send by @ReganBell in #2492
  • Import redactSecrets from plugins/chassis in the X media upload route by @ReganBell in #2504
  • Refuse in-memory stores, locks and leases in production instead of falling back silently by @ReganBell in #2453
  • Derive admin, strict-posture and catalog policy from route metadata by @ReganBell in #2481
  • Show per-user MCP tools only to people who connected that server by @ReganBell in #2507
  • Trim intent/locale and retrySafe boilerplate from tool schemas by @ReganBell in #2508
  • Drop the Hand-managed infrastructure lens from the Wall of shame by @ReganBell in #2510
  • Drop the retired turn_metrics table by @ReganBell in #2490
  • Allow the repo's own URL dependencies under npm 12 by @ReganBell in #2512
  • Keep proxy and non-interactive env through sudo in sandboxes by @ReganBell in #2511
  • Revert sudoers env_keep provisioning (#2511) and npm allow-remote config (#2512) by @ReganBell in #2518
  • Bound one-off ECS task waits by the rollout deadline instead of the CLI waiter's 10 minutes by @ReganBell in #2503
  • Trim the session list and stop rebuilding it for scope lookups by @ReganBell in #2495
  • Cut run-claim cost: plan the session check as a subplan, wake one idle worker per signal by @ReganBell in #2488
  • Keep long worker runs inside Sentry's transaction size limit by @ReganBell in #2498
  • Index items call ids by digest so long gateway call ids fit by @ReganBell in #2494
  • Bump follow-redirects from 1.16.0 to 1.16.1 by @dependabot[bot] in #2515
  • Bump @modelcontextprotocol/sdk from 1.31.0 to 1.32.1 by @dependabot[bot] in #2513
  • Bump vite from 7.3.6 to 7.3.7 in /plugins/web-ui by @dependabot[bot] in #2514
  • Typecheck with tsrs, pinned to an exact version by @ReganBell in #2519
  • Remove the flaky queued-run trace test in request-timing by @ReganBell in #2520
  • sessions: purge captured LLM prompts after 30 days; drop the legacy inline request column by @ReganBell in #2485
  • Measure claims per notification only after the startup resync settles by @ReganBell in #2523
  • Page the sidebar session list and load subagents on demand by @ReganBell in #2517
  • Count inline documents in the context budget and stub them when they no longer fit by @16francej in #2506
  • Move the mock harness out of production into test support (F565) by @ReganBell in #2471
  • Dropbox skill: distinguish a missing auth header from a bad token by @16francej in #2524
  • Skip the inline session claim while the awaited run is running by @ReganBell in #2525
  • Revert the wake-one-worker half of the run-claim change, keep OFFSET 0 by @ReganBell in #2526
  • Fix the admin OAuth app connector picker by @16francej in #2540
  • Fix the admin OAuth app connector picker by @jetzhou in #2530
  • Add a Zoom connector for scheduling meetings by @jetzhou in #2531
  • List every skill under a size budget, name connector token variables, remove pinned skills by @16francej in #2532
  • Collapse config-store settings into one table-driven helper by @ReganBell in #2456
  • Give custom Anthropic models the thinking binding of the known model they name by @16francej in #2528
  • Read current Slack reactions through the context API by @16francej in #2556
  • Treat a goal governor that cannot decide as no decision by @16francej in #2536
  • Take subagent counts from the server rollup for every row by @16francej in #2527
  • Expire idle uploads and make the upload quota recoverable by @16francej in #2468
  • Hand swarm messages to running worker goals and let workers wait by @16francej in #2533
  • Pad the inbox assistant panel and let people hide it by @ReganBell in #2555
  • Keep inbox items current from Gmail and Slack events by @16francej in #2374
  • Dismissible suggested activities with a reserve and debounced refresh by @ReganBell in #2558
  • Make the suggested-activity dismiss X hover and focus subtler by @ReganBell in #2563
  • browse: install the runner runtime on demand from one shared script by @16francej in #2557
  • Let a swarm worker wait on another agent without burning its goal by @16francej in #2543
  • Read goal evidence files by absolute path and say why one can't be read by @16francej in #2560
  • Re-adopt a suggestions cron whose task was reverted to the standard instructions by @ReganBell in #2564
  • Let any tool declare that each call needs approval by @ReganBell in #2561
  • Serve a large MCP tool catalog as one searchable tool by @ReganBell in #2562
  • Remove internal member overrides by @ReganBell in #2567
  • Drop the retired internal_member_overrides table by @ReganBell in #2568
  • Let agents list and abort their own unfinished uploads by @16francej in #2559
  • Bump fastify and ip-address to clear npm audit advisories by @ReganBell in #2571
  • Make reply and command parsers linear-time by @ReganBell in #2570
  • Screen loop item data like webhook payloads by @ReganBell in #2569
  • Use one canonical request path for routing and authorization by @ReganBell in #2579
  • Default sandbox network to private; clean up test fixture servers by @16francej in #2583
  • Let team members manage team-owned artifacts by @16francej in #2591
  • Leave swarm replies in the recipient's mailbox instead of waking it by @16francej in #2582
  • Let admin-reading crons work unattended, or say why at creation by @16francej in #2578
  • Show security flags and quarantines that fall outside the newest 200 audit events by @16francej in #2597
  • Keep temporary failures from quarantining loops by @16francej in #2590
  • Bump undici, zod, nodemailer, fast-uri and body-parser past new advisories by @ReganBell in #2606
  • Keep personal credentials from overriding the computer's own environment by @ReganBell in #2576
  • Let release qualification reach models through the model gateway by @ReganBell in #2609
  • Persist the active runtime on runtime get results by @ReganBell in #2613
  • Upgrade Node to 24.22.1 for CVE-2026-111497 (Broccoli2Shell) by @ReganBell in #2631
  • Give Arga Slack twins five minutes to become ready by @ReganBell in #2632
  • Remove web UI comments and ignore EPIPE on dev script stdin by @16francej in #2633
  • Test schema lock waits against index builds and wait for the webhook worklog message by @16francej in #2634
  • Desk: keep background input alive during user activity by @ReganBell in #2644
  • Release QM desktop 0.1.5 by @ReganBell in #2655
  • Reserve subagents for parallel work by @ReganBell in #2658
  • Resolve Slack approval cards immediately and show tool calls readably by @ReganBell in #2640
  • Let swarm workers with an open goal keep working by @16francej in #2646
  • Add an Arbitrary limits lens to the Wall of shame by @ReganBell in #2665
  • Remove six config switches every deployment already sets the same way by @ReganBell in #2500
  • Halve native tool descriptions by @ReganBell in #2509
  • Verify the Postgres server certificate when a CA is configured by @16francej in #2635
  • web-ui: keep cached runtime settings when a wake-up revalidation fails by @16francej in #2683
  • Discard a pooled connection when ROLLBACK fails by @16francej in #2636
  • Keep an app stopped when a request waits on its archive or reap by @16francej in #2637
  • Add GPT-6.1 Terra to the model registry by @ReganBell in #2684
  • Resume triggered turns in Slack threads with the thread's recorded Slack source by @ReganBell in #2685
  • Trim template whitespace from Slack message bubbles in the web UI by @ReganBell in #2686
  • Run private credentials in shared conversations on the turn's scratch computer by @ReganBell in #2623
  • Load each memory notebook once per turn; stop hashing every fact on recall by @ReganBell in #2691
  • Route sandbox model calls through the company gateway (generalised) by @ReganBell in #2688
  • Update production dependencies in the workspace packages by @16francej in #2638
  • Default OpenAI-only deployments to GPT-6.1 Sol by @16francej in #2699
  • Let a turn carry its surface as attributed reference data by @pcapriolo-yc in #2598
  • Forward clientTools and surfaceBriefing from the web chat proxy to core by @pcapriolo-yc in #2601
  • Trace web session switches from click to paint by @ReganBell in #2270
  • Hold a paused swarm worker's goal turn by @16francej in #2701
  • Stop drawing the agent's own Slack messages as user bubbles in the web UI by @ReganBell in #2702
  • Load MCP tools on demand through tool_search and mcp_call by @ReganBell in #2697
  • Mount revisited sessions from a client transcript cache by @ReganBell in #2272
  • Move per-turn environment inventories into the system block by @ReganBell in #2698
  • Desktop: Cmd+N opens a new session by @ReganBell in #2711
  • Keep catalog connector tools direct, list deferred tools by server and tool by @ReganBell in #2710
  • Add Render as a hosting target by @anurag in #2704
  • web-ui: show one step at a time while a turn runs by @ReganBell in #2718
  • web-ui: give a steer the sticky prompt treatment by @ReganBell in #2731
  • Revert "web-ui: show one step at a time while a turn runs" (#2718) by @ReganBell in #2739
  • Replace hand-rolled turn and step timing with Sentry spans by @ReganBell in #2733
  • Reuse verified document bytes across turns; skip per-step payload serialization under budget by @ReganBell in #2732
  • Cut per-tool-step database round trips by @ReganBell in #2738
  • web-ui: show one step at a time while a turn runs (re-land #2718 with fixes) by @ReganBell in #2740
  • execute: ask for an -ing verb in the purpose label by @ReganBell in #2743
  • Add passage-anchored side chats by @ReganBell in #2730
  • Cut per-turn setup reads before the first model request by @ReganBell in #2735
  • web-ui: only animate the live work-head step by @ReganBell in #2749
  • Show centiseconds in chat work timers by @evebouf in #2742
  • Keep the turn's swarm binding when a worker starts its computer mid-turn by @16francej in #2690
  • Desktop: back/forward buttons, real history entries, drop Home by @ReganBell in #2755
  • Rebuild saved spend days with cron ids by @ebakan in #2424
  • Record each turn-detection call's usage in the session's spend ledger by @ebakan in #2436
  • Desktop: keep pane strip controls out of the Mac window drag region by @16francej in #2758
  • README: link hosted-interest form for larger companies by @16francej in #2750
  • Polish split-view tabs, controls, and drag previews by @evebouf in #2759
  • Show whole seconds in chat work timers by @16francej in #2762
  • Price OpenAI calls at the tier the response says served them by @ebakan in #2431
  • Let published apps use their publisher's connected apps through the broker by @16francej in #2565
  • Mint the broker signing key in qm init by @anurag in #2707
  • Get main green: one-shot usage tier arg and @hono/node-server bump by @16francej in #2765
  • Let app owners share without notifying the grantee by @16francej in #2771
  • Reject subagent model overrides the deployment can't serve by @16francej in #2777
  • Keep slow web attachment uploads alive and hold sends whose files failed by @16francej in #2774
  • Keep scheduled runs going on the default model when theirs can't run, and say when a run stops by @16francej in #2778
  • Keep unattended cron grants with the owner's home, and let the owner choose the audience by @16francej in #2764
  • Tell agents which computers sit behind the egress proxy by @16francej in #2779
  • Load saved custom providers when the admin onboarding page opens by @16francej in #2775
  • Fail Slack posts the recipient can never accept instead of retrying forever by @16francej in #2781
  • Store the session roster under its own key so older releases can still read history by @16francej in #2783
  • Make side chats responsive and carry exchanges into parent context by @ReganBell in #2784
  • One agent: remove the Claude harness and the harness concept; serve Claude subscriptions through Pi by @ReganBell in #2768
  • Delete dead ring-0 code and collapse no-behaviour duplicates by @ReganBell in #2787
  • Migrate saved model picks after harness removal by @ReganBell in #2796
  • Move provider settings and trigger, loop and surface-context types out of ring 0 by @ReganBell in #2792
  • Agent loop: one re-prompt, one recovery path, one payload shape walker; model transport into src/model by @ReganBell in #2793
  • Merge send_message and followup_task into one send_message that wakes by default by @16francej in #2789
  • Make multiview drop previews cheap to draw by @16francej in #2790
  • Split the model registry, collapse scope-membership and credential duplicates, one bounded body reader by @ReganBell in #2798
  • Simplify ring-0 persistence, util and ACL helpers by @ReganBell in #2799
  • Split agent tools into one module per tool family by @ReganBell in #2795
  • Consolidate the orchestrator's approval, screening and inbound-ingest code, and move off-path modules out of core by @ReganBell in #2794
  • One handle pool and one release routine for a turn's sandboxes by @ReganBell in #2791
  • Squash session and run store migrations into one base schema by @ReganBell in #2809
  • Bind ChatGPT device logins to the principal that started them by @ReganBell in #2800
  • Refuse private network addresses for MCP and OAuth endpoints by @ReganBell in #2801
  • Pin cross-user run and swarm isolation through the web proxy by @ReganBell in #2803
  • Require scope membership for source-authenticated SOUL reads by @ReganBell in #2811
  • Drop the connector dry-run that validated another scope's client by @ReganBell in #2813
  • Remove the unscoped surface read_file action and agent-supplied follow-up attachments by @ReganBell in #2812
  • Make connector token refresh atomic across processes by @ReganBell in #2804
  • Make Postgres the only store: delete in-memory store twins by @ReganBell in #2769
  • Clear new glob, minimatch and follow-redirects advisories by @16francej in #2827
  • Make provider memory recall safe: quoted recall, attested actor, recorded outcomes by @garrytan in #2837
  • web-ui: Slack avatars on messages and in the chat header by @evebouf in #2828
  • Remove hover tooltip on conversation pane by @evebouf in #2841
  • Fold the admin dashboard into web UI settings by @ReganBell in #2766
  • Save refreshed logins whenever their owner runs the command by @16francej in #2788
  • Shimmer the live work step label while it runs by @evebouf in #2846
  • Give the local provider qualification its own Postgres by @ReganBell in #2831
  • web-ui: use cog icon for background jobs in composer strip by @evebouf in #2849
  • Shrink the group DM icon in sidebar headers by @evebouf in #2854
  • web-ui: remove focus ring on queued message edit box by @evebouf in #2853
  • Show more for long projects in the sidebar by @evebouf in #2858
  • web-ui: round the corners of the conversation drag preview by @evebouf in #2866
  • web-ui: match header link/archive buttons to workspace tools by @evebouf in #2859
  • Restore self-API discovery in the core prompt by @garrytan in #2871
  • web-ui: fit tab titles in the split strip by @evebouf in #2865
  • Cap the split-pane composer to the conversation column on wide panes by @evebouf in #2864
  • web-ui: grey selected tab, no fill on others by @evebouf in #2863
  • Darken the sidebar border on resize hover instead of an accent bar by @evebouf in #2860
  • web-ui: render drafts as a copyable card by @evebouf in #2857
  • web-ui: GitHub mark before pull request links by @evebouf in #2856
  • web-ui: don't bold unread conversations; give the dot breathing room by @evebouf in #2852
  • web-ui: list/grid toggle with image thumbnails on Files page by @evebouf in #2847
  • Show Slack speaker photos in conversations outside projects by @evebouf in #2776
  • web-ui: float a jump-to-bottom arrow above the composer by @evebouf in #2867
  • web-ui: keep mid-turn assistant text outside the work fold by @ReganBell in #2874
  • Let /v1/reach edit a message in place by @ReganBell in #2880
  • Delete the admin runs listing by @ReganBell in #2881
  • web-ui: roll the step icon when the live step changes by @ReganBell in #2752
  • Let the test runner drop scratch databases for Postgres migration tests by @ReganBell in #2884
  • Search only your own chats, backed by a chat-message-only index by @ReganBell in #2876
  • Clarify forwarded credential approvals and handle missing-source clicks by @jetzhou in #2873
  • Start Render sandboxes from a snapshot of the QM sandbox base image by @anurag in #2833
  • web-ui: keep the live timer width steady as seconds tick by @ReganBell in #2901
  • pg-pool: run the per-query statement timeout in one round trip with pg pipeline mode by @ReganBell in #2888
  • Walk session descendants with per-parent index probes by @ReganBell in #2895
  • Mark spend days dirty with per-session index probes by @ReganBell in #2896
  • Keep held swarm notifications out of the outbox sweep by @ReganBell in #2894
  • Let scheduled jobs keep the credential handles their commands need by @16francej in #2909
  • Time subagent rows from the current run and show its latest purpose by @ReganBell in #2900
  • pg-pool: roll back aborted timeout writes and close aborted sockets by @ReganBell in #2911
  • Tell the model gateway which work each call serves by @ebakan in #2404
  • Hard-code per-process Postgres pool sizes by @ReganBell in #2921
  • Drive participant scope summaries and unscoped session pages from participant rows by @ReganBell in #2920
  • Default core's ECS stopTimeout to the shutdown drain plus 30 s by @ReganBell in #2883
  • web-ui: show one Stopping… state from Stop until the turn ends by @ReganBell in #2910
  • Honour Stop in every tool, not just the ones that take the abort signal by @ReganBell in #2889
  • Wake waiting tools when a steer arrives by @ReganBell in #2898
  • Show each person what their QM work costs in the web UI by @ebakan in #2594
  • Keep signed-in users on their last known identity when core is slow by @ReganBell in #2915
  • Refetch an open chat's subagent tree only for events in that tree by @ReganBell in #2904
  • Delete the one-time Inbox migration and the legacy single Inbox loop by @ReganBell in #2925
  • Find working subagent ancestors in one query by @ReganBell in #2916
  • Wait for the test database reply itself, not any wake-up by @ReganBell in #2934
  • Release the steering test's first step when the agent takes the steer by @ReganBell in #2933
  • Hand back shutdown turns that ignore cancellation instead of waiting for lease expiry by @ReganBell in #2882
  • Announce standing-guidance changes to other open sessions by @ReganBell in #2951
  • Tenants table and one-round-trip tenant binding by @ReganBell in #2843
  • Delete the per-principal rate limiter by @ReganBell in #2948
  • Delete reach computers by @ReganBell in #2946
  • Don't re-run a tool call whose interruption is already recorded by @ReganBell in #2922
  • AGENTS.md: triage Wall of shame lenses with the latest Haiku by @ReganBell in #2955
  • Run every turn's tail the same way: drop the background turn flag by @ReganBell in #2914
  • Delete the Inbox old-data fallbacks and write the sync prompt per source by @ReganBell in #2957
  • pg-pool: cancel aborted queries, keep connections after caught errors, pipeline every pool by @ReganBell in #2931
  • Store whole Slack messages in the mirror and flatten attachment and block content by @ReganBell in #2786
  • Label activity rows with gerunds, matching purpose labels by @ReganBell in #2947
  • Show a subagent as working only while its own run is active by @ReganBell in #2932
  • ring0 smell 3: no silent drops in mid-turn wake routing by @ReganBell in #2905
  • Check conversation write access in one place by @ReganBell in #2965
  • Drop session leases; the run claim is the only turn lock by @ReganBell in #2960
  • Let an org admin offboard a person in one call by @16francej in #2808
  • Let admins cap model spend per person and per scope by @16francej in #2886
  • Return items from the session store by @ReganBell in #2964
  • Read items directly in core and agent paths by @ReganBell in #2970
  • Use items on the HTTP wire, web UI and memory; delete SessionEntry by @ReganBell in #2971
  • Look up single deployments by id or name instead of loading every deployment by @ReganBell in #2912
  • Reconcile only cron slots due within the repair window by @ReganBell in #2892
  • Remove workspace layer materialization by @ReganBell in #2963
  • Claim runs with one loop per process by @ReganBell in #2928
  • runs: wake run waiters from the queue notification instead of polling by @ReganBell in #2919
  • web-ui: anchor the pinned prompt's hover footer under its bubble by @ReganBell in #2975
  • Read ACL grants with scoped, indexed queries instead of a cached whole table by @ReganBell in #2944
  • Record a withheld mid-turn message in the session transcript by @ReganBell in #2973
  • Declare the per-session spend lookup index in the session schema by @ReganBell in #2977
  • Drop the unused rate_limit_windows table by @ReganBell in #2962
  • Reconcile an interrupted turn in one pass by @ReganBell in #2972
  • Run every turn through the queue workers instead of inline by @ReganBell in #2918
  • sessions: keep Slack binding, model label and origin on the conversation by @ReganBell in #2976
  • Retract and rewrite replies that fail a turn_end reply check by @ReganBell in #2745
  • Fix main's typecheck: read a failed turn's run through RunStore.list by @ReganBell in #2980
  • Park a background turn between steps when a person is waiting in its conversation by @ReganBell in #2929
  • Run mid-turn messages through the turn's intake by @ReganBell in #2906
  • Route every incoming message through one router by @ReganBell in #2907
  • WS8: Surface contract and registry with Slack adapter; neutral turn origin and destination account; capability-driven orchestrator; surface-keyed mirror by @ReganBell in #2845
  • Say "this scope's Files" in the skill registry docs by @garrytan in #2879
  • Frame every request body the portal relays, so DELETE bodies arrive by @garrytan in #2968
  • Lock the skill name while saving or promoting a skill by @garrytan in #2940
  • Add the gbrain memory recipe and meet gbrain's QM provider contract by @garrytan in #2838
  • Resolve every model call through one session, utility or fallback route by @16francej in #2825
  • desktop: drag the window by pane strips only in single-pane mode by @16francej in #2982
  • Start the queue workers in harnesses that run synchronous turns by @ReganBell in #2984
  • Let the agent save and edit skills through its skills tool by @garrytan in #2899
  • web-ui: Slack avatars on group DM sidebar sections by @evebouf in #2848
  • Let a cron's script handle routine fires and escalate the rest to the agent by @ReganBell in #2974
  • web-ui: put Projects and Apps at the top level of the sidebar by @ReganBell in #2990
  • web-ui: emoji project icons with a Notion-style picker by @ReganBell in #2989
  • Keep recurring reports posting on quiet scheduled fires by @ReganBell in #2985
  • Skip runs jsonb cannot read in the session facts copy by @ReganBell in #2997
  • Remove the subagent tree run cap by @ReganBell in #3002
  • Bound the local provider qualification probe to eight minutes by @ReganBell in #3000
  • Gmail drafting notes for the app connector skill by @16francej in #3004
  • Let mid-turn model switches use gateway-served providers by @16francej in #2897
  • Run CI in the merge queue and reuse its run on main by @ReganBell in #3003
  • Deliver bound conversation updates through durable signed webhooks by @duhaime in #2717
  • Boot QM through one startQm function shared by core and its live harnesses by @ReganBell in #3009
  • web-ui: keep hover action room on unread sidebar rows by @16francej in #3006
  • AGENTS.md: drop the separate fresh-context adversarial review rule by @ReganBell in #3015
  • Add a partner-chat surface adapter by @ReganBell in #2887
  • send/github-gitlab skills: defer to the repo's required reviews by @ReganBell in #3018
  • Docs: call session history the item log, not the tape by @ReganBell in #3020
  • Read the email voice profile from Files and scan the Inbox from the last successful pass by @ReganBell in #3013
  • Make scratch an ephemeral pooled handle: one open path, one release path by @ReganBell in #3026
  • Search: open a chat hit at the matched message by @ReganBell in #3023
  • Retire the turn-origin takeover rewrite and the retired-field guards by @ReganBell in #3024
  • Check a turn's model choice in one function by @ReganBell in #3027
  • Make conversation participation membership-only: late joiners see full history by @ReganBell in #3031
  • Write shared org state only from a core that runs background work by @ReganBell in #3019
  • Delete the browse-model and unfulfilled-insights settings, which nothing reads by @ReganBell in #3035
  • Squash the directory store migrations into one base schema by @ReganBell in #3036
  • Remove dead turn-path hooks by @ReganBell in #3038
  • Drop the retired key-value tables in one migration, adding nine unused ones by @ReganBell in #3037
  • Delete the session store's unscoped scanAll, which only tests called by @ReganBell in #3041
  • Minimal multitenancy: tenant_id + RLS, host routing, per-tenant background work and caches by @ReganBell in #2994
  • Remove dead and duplicated turn sandbox plumbing by @ReganBell in #3044
  • App shell: animate the bar away on dismiss; keep the docked chat on the desktop layout by @ReganBell in #3030
  • Default subagent runtime to the parent's chosen runtime by @ReganBell in #3011
  • Move session spend rollups out of the session store factory into their own module by @ReganBell in #3042
  • Call the org scope getter in the subagent default-model resolver (fixes main typecheck) by @ReganBell in #3047
  • Delete agent tool actions with no production use by @ReganBell in #3043
  • Move admin-only session reads out of the session store factory into their own module by @ReganBell in #3048
  • Delete dead pi hook typings and test-only turn helpers by @ReganBell in #3045
  • Move session participant reads and writes out of the session store factory into their own module by @ReganBell in #3050
  • Make new panes open faster while other panes stream by @16francej in #3010
  • Move the session item log out of the session store factory into its own module by @ReganBell in #3052
  • Subagents in ring 0: delegation contract, scoped interrupts, child wakes its top-level parent by @ReganBell in #3001
  • Stop each test's app when that test ends instead of at the end of the file by @ReganBell in #3049
  • Count CLI manifest services from the list the release resolves by @16francej in #3051
  • Move LLM request capture out of the session store factory into its own module by @ReganBell in #3054
  • Move session search out of the session store factory into its own module by @ReganBell in #3055
  • Make the deploy drain the only gate for background work by @ReganBell in #2978
  • Force every proxy-capable sandbox provider through one egress proxy setting by @16francej in #2782
  • Use the home backup bucket instead of checkpoints for Managed Agents computers by @16francej in #3053
  • Report stopped and errored subagents to the parent with their partial output by @ReganBell in #3014
  • Move the directory's Slack sync writers out of the directory store factory by @ReganBell in #3056
  • Use the shared likeContains helper for session title search by @ReganBell in #3057
  • Drain web-ui, portal and auth on SIGTERM instead of waiting for SIGKILL by @ReganBell in #3046
  • Set the shared egress proxy in the per-tenant sandbox test fixture by @ReganBell in #3058
  • Wake subagent parents when their children finish; report in_progress while descendants still run by @ReganBell in #3016
  • Let AWS image builds reuse a registry build cache by @ReganBell in #2986
  • Return from inactive AWS deploys once only new tasks can serve by @ReganBell in #3028
  • Stop web UI tests closing Vite mid dependency scan, and bound every CI/CD job by @ReganBell in #3059
  • Let a conversation's Stop spare its subagents, with an explicit stop-everything by @ReganBell in #3017
  • Give subagents their own directory or sandbox on request by @ReganBell in #3022
  • Run setup-terraform on Node 24 instead of the deprecated Node 20 build by @ReganBell in #3060
  • Report subagent liveness from the latest tool step and re-show live children after compaction by @ReganBell in #3021

New Contributors

Full Changelog: v0.1.15...v0.1.16