Skip to content

Changelog

All notable changes to Wick are documented here.


[Unreleased]

Nothing yet — notes for the next release go here.


v0.35.3 — Features & Fixes

Released on 2026-07-28

Added

  • playwright_browser: default profile for live sessions: Two new instance configs make a named profile the default instead of an opt-in. DefaultProfile sets the profile used when session_open is called with no profile argument (an explicit argument still wins); ForceDefaultProfile pins every session to DefaultProfile, ignoring any profile argument passed in. Turning on ForceDefaultProfile without a DefaultProfile set fails at session_open with a clear error. Connector bumped to 0.9.0. See Playwright Browser ▶ Making a profile the default.

Fixed

  • todo tool over MCP + goal-only calls: Todo calls arriving over MCP as mcp__wick__todo are now recognized and merge into the checklist card, no longer leaking into the trace as raw tool cards. The conversation UI also gains a goal banner (open/done/abandoned, with an optional note) shown alongside or instead of the checklist. Releasing the goal latch with todo{goal_done:true} and no items is now accepted (the items array is only required when a call touches no goal field), and goal-only calls mid-checklist now preserve the active item attribution.
  • Gemini 3.x + /thinking off: Toggling reasoning off used to send thinkingBudget: 0, which Gemini 3.x models reject with 400 INVALID_ARGUMENT. Wick now omits ThinkingConfig for 3.x (and unrecognized) models, degrading to the vendor default budget instead of failing. Zero budget is still sent only on 2.x models that accept it. Note: on 3.x this means "off" isn't fully achievable — the model still thinks at its vendor default budget.
  • /thinking toggle no longer resets on idle/refresh: Session overrides (the /thinking popover's on/off + effort level) were runtime-only and dropped on engine exit. They are now persisted to an overrides.json sidecar in the session directory, surviving engine exit, page refresh, and Wick restarts; clearing them is now an explicit reset action.
  • Agent misinterpreting attached images: Updated system prompt documentation now clarifies that attached images are already inline and visible, preventing agents from attempting to "open" or "decode" them using shell/read_file.

v0.35.2 — Wick Provider

Released on 2026-07-27

Wick Provider

Added

  • Loop guards + goal mode: max_turns now defaults to 0 (unlimited). A turn is instead bounded by a consecutive-tool-error cap (max_consec_errors, default 20) and a wall-clock cap (max_turn_minutes, default 60), both configurable in the provider settings' new Advanced section alongside max_model_retries and model_call_timeout_sec. A cut turn now shows [wick] turn cut: … inline in the transcript instead of silently ending.
  • The shared todo tool gains an optional goal latch (goal / goal_done / goal_abandon fields): while a goal is open, the wick engine keeps working past plain-text replies and turns error/timeout cuts into a nudge to try a different approach — a manual Kill still stops everything immediately.
  • Live model sets gain a sticky default vendor model: pin one model as the default used when the set is picked without an explicit @vendor override (via the Add/Edit live-set form or a dedicated Set default model… picker). It auto-falls back to the top of the list if the pinned model disappears from the vendor. The Add/Edit live-set form now uses a single "default" radio instead of a separate control. The new-session composer can now expand live model sets.
  • wick is now a first-class skill provider: ~/.<app>/skills is registered alongside ~/.claude/skills etc., appears in the Skills Manager UI and sync flows and the wick session's / menu. The wick agent gets a compact skill catalog in its system prompt, reading a skill's SKILL.md on demand, and read_file now includes skill directories as read roots.
  • Model Capability Chips: Model pickers now surface per-model capabilities (e.g., context window, max output, vision, reasoning, tools, search) as compact badges. A global toggle and display mode are available in the provider settings' Advanced section, with capabilities shown by default.
  • Native Reasoning: Reasoning is now wired per-adapter from a single ReasoningEffort knob, which maps to native thinking budgets for OpenAI, Anthropic, and Gemini models.
  • Native Vision: Image attachments now ride as inline generative AI parts through each adapter's wire format (e.g., OpenAI image_url data-URL, Anthropic base64 image block, Gemini inline_data). The interactions log records image parts for accurate diagnostics.
  • Streamed Model Output: The engine now streams model output over Server-Sent Events (SSE) token-by-token by default, for OpenAI and Anthropic adapters. This is configurable via a toggle in the Wick provider settings.
  • Runtime Reasoning Toggle (/thinking): The new /thinking slash command opens a popover in the composer to toggle reasoning on/off and pick an effort level for the current session without sending a message. Typing /thinking on|off|low|medium|high also works as a fallback. This feature leverages a new generic, provider-agnostic session-override framework.

Fixed

  • Live model set's filter is now optional: leaving it empty matches all of the vendor's models (stored internally as an empty filter) instead of requiring a narrowing filter.
  • Editing a model (including converting a plain model to a live set, or back) now updates it in place, reusing the existing ID instead of creating a duplicate entry. The Add/Edit button label now reflects the mode ("Save model" / "Save live set").
  • Attachment Paths on History Replay: Fixed an issue where the model couldn't read attached files on history replay because the pool's path block was lost; turnToContent now re-appends the path block on replay, mirroring the live send.
  • read_file is now type-aware: image files return an "attach in chat" hint, binaries are refused, and text/SVG are read through.

Improved

  • Provider Picker UX: Enhanced keyboard navigation in drill-in pickers, auto-drilling into the selected live set, and added a breadcrumb trail. The /provider command now opens the picker focused for immediate navigation.
  • Custom Model Editing: When editing custom models, a custom Base URL is now retained when switching providers (only auto-default is refilled), and a "Saved / Replacing…" indicator is shown for stored API keys.
  • Quiet KVList Edits: Environment variable (KVList) edits now save quietly without reloading the detail pane, preventing focus loss or row reordering mid-edit.
  • AI Router Visibility: The AI Router configuration is always editable (install/running is a non-blocking indicator), showing its loopback Base URL and surfacing preferred/bound ports.

v0.35.1 — Wick Models

Released on 2026-07-26

Wick Provider

Added

  • Live model sets: A registered wick model can now store a discovery filter (e.g., term for includes, -term/!term for excludes) instead of a fixed model ID.
    • In the composer's provider picker, live model sets appear as expandable rows that fetch the vendor's model list dynamically, narrowed by the stored filter. This introduces a 4th picker level: provider ▸ models ▸ live set ▸ expanded models.
    • The composer's model picker for live sets features lazy-loading of models on drill (with caching and fallback to static models), an auto-focused filter box, arrow-key navigation, a refresh button, right-anchored popups, and second-click collapse.
    • The Add-Model form on the Wick provider page now includes a Single / Multiple toggle. The Multiple option offers Live mode (which follows the discovery filter) or Manual mode (for selecting models by ticking).
  • The /provider command now opens the same in-composer provider picker used by the toolbar chip, unifying the experience and replacing the separate flat modal.

v0.35.0 — Features & Improvements

Released on 2026-07-26

Wick Provider

Added

  • Context compaction: When a session's history nears the context budget, wick asks the model to summarize the oldest turns (decisions, facts, file paths, done vs. pending) and continues with the summary in place. Includes a manual /compact command and a heavier automatic pass on request overflow.
  • Long-running tool calls: Shell commands no longer run under a fixed wall-clock deadline. A long command can run as a background job the agent polls for status/log instead of stalling the turn.
  • Curl builder for the session's Wick Interactions log: Reconstructs any logged model call as a copyable request in 4 formats (single-line, Bash, raw HTTP, JSON body), with an editable body preview, env-var display, per-part copy, and an admin-only "reveal real key" option (defaults to a $WICK_MODEL_API_KEY placeholder).
  • Session detail page: Features server-side search + pagination over the Wick Interactions log, upload progress + compaction indicators, and a detail modal for viewing a chip's full content without cluttering the transcript.
  • Live model-call observability in the interactions log: The "running" row now distinguishes an in-flight model call from a running tool call, shows a live elapsed timer and retry attempt/reason, and gains View request (curl for the call in flight, before it's logged) and Cancel call (aborts just that model call; the turn keeps going). Messages that arrive mid-turn are injected into the next model call of the same turn.
  • Uniform retry + per-attempt timeout across every model adapter, including Gemini: Transient failures (timeout, connection reset, 429, 5xx, unavailable) retry with backoff; fatal errors (bad key/model, other 4xx) fail fast. Configurable via max_model_retries and model_call_timeout_sec.

Connectors

Added

  • Connector runs are cancellable: A ✕ Cancel button on a running row in the connector History page and on a running tool call in the agent conversation UI aborts just that operation. The run settles to a new Cancelled status, distinct from Error. A cancelled/timed-out op returns an explicit, agent-readable result.
  • A run can no longer stay stuck running forever: A background reaper job periodically reclaims any row still running well past every legitimate op's ceiling. CancelSession aborts all in-flight operations of a live session.
  • Interrupted tool state: A tool call on an interrupted/cut-off turn now reads "interrupted" instead of an eternal running spinner.

Playwright Browser

Added

  • CloakBrowser Pro (cloakbrowser-pro): A second stealth-Chromium engine alongside the existing free cloakbrowser. It is managed by the official cloakbrowser CLI + a license key (CloakLicenseKey). The free engine is hard-capped to 1 concurrent live session (CloakBrowser's free-plan limit); the pro engine follows the configured MaxLiveSessions once its license resolves to a paid tier. The cloak_use_cli toggle has been removed.
  • Browser picker gains a ⋮ menu on installed engines for Update (re-fetch the latest build) and Uninstall (remove the downloaded binary). An "update available" badge is shown for the free cloak. Version probing reads the revision from the install path to avoid launching the engine. Graceful shutdown is attempted before force-killing a process.
  • Named browser profiles: session_open(profile=<name>) persists login/cookies under a stable profile directory across sessions and plugin restarts. New profile_list and profile_delete operations are available, and session_list gains a profile field. Opening a profile already driven by a live session is rejected.
  • Record network requests: run(record_request=true) captures the HTTP requests a script triggers (method, URL, headers, cookies, body, response status/headers), filterable by URL pattern, readable back with get_request. Requests are deduped. This now works for live sessions too.
  • Live-browser panel: Native clipboard bridging between your machine and the remote browser in Full mode (focus pushes your clipboard in, leaving pulls the remote's copied text back out), plus a right-click Copy/Paste menu on the live view. MouseEvent.detail is forwarded as clickCount for double/triple-click selections.

Fixed

  • wait_for_load_state(state=networkidle) no longer stalls a run for minutes on pages that poll in the background — capped at 10s, then continues.
  • record_request no longer crashes the Node driver or hangs the run by reading only initializer-cached fields in the OnRequestFinished callback.
  • Hard Go-level deadline applied to every browser operation (ephemeral + live) plus a bounded connection close to prevent goroutines from blocking indefinitely.
  • browser_status flicker on the Pro engine's status row when running cloakbrowser info is resolved by passing --no-launch.
  • "Target closed" errors on cloak operations are fixed by resolving a fresh Playwright driver per retry attempt.
  • Cloakbrowser launch arguments are aligned with the official Python wrapper, restoring --ignore-gpu-blocklist on Windows and adding --start-maximized for binaries version 148 and above.

Admin UI

Changed

  • Boolean config fields (bool/boolean/checkbox) now render as an interactive toggle switch everywhere — clicking the label also toggles it.

Fixed

  • HTML widget UI-only marker data-op="__menu" no longer prevents default, allowing a native <details> kebab menu to open without selecting the row.

CLI Model Picker

Added

  • Per-instance model selection for claude / codex / gemini instances: An "Allow model selection" toggle plus an editable ID + description table (models), with a "Load defaults" button that fills it from the catalog. When on, the picked model is passed to the CLI via --model.
  • Model catalog: An embedded models.json baseline, overlaid by a GitHub-raw copy (refreshed lazily or on Rescan) and a hand-editable disk cache under ~/.<app>/ — merged per-model by updated_at (newest wins); disabled models are hidden.
  • The composer's provider picker gained a full type ▸ instance ▸ model drill-down (a new reusable ProviderPicker component), collapsing any level with only one choice; each model shows its description under its name. The chip also shows the selected model on switch.

Docs

  • Documented the built-in wick provider (claude / codex / gemini alternative talking straight to a vendor API), the CLI model picker + model catalog, the Allow shell metacharacters command-gate config, CloakBrowser Pro, named browser profiles, network capture, model-call observability, and connector cancellation.

v0.34.0 — Wick & Tools

Released on 2026-07-24

Wick Provider

Added

  • 3-level provider picker (Type -> Name -> Model) for Wick instances with multiple enabled models.
  • Session-level model pinning: switching models on the same Wick instance is no longer treated as a no-op.
  • End-to-end WickModel.Disabled support; disabled models are hidden from the composer and not auto-picked.
  • New endpoints for disabling, enabling, duplicating, and a 1-token Test ping for Wick models.
  • Dedicated brand icon for the Wick provider in the composer's provider picker.

Fixed

  • Idle-timeout race that could kill Wick sessions during a model call.
  • Wick gate using an incorrect session ID for approval routing.
  • Wick incorrectly inheriting Claude's system prompt overlay.

Changed

  • Model rows in WickDetail.svelte are now consolidated into the shared KebabMenu component (Edit/Set default/Test/Duplicate/Disable/Delete).
  • System prompt split into a shared base and per-provider overlays (immutable_wick.md).
  • Persistent memory.md guidance added to Wick's system prompt.

Command Gate & Security

Added

  • Extension of the command gate to cover every Wick tool (not just shell), with in-process synchronous approval.
  • AllowShellMetachars configuration toggle to permit shell chaining (e.g., &&, ;, |) per-whitelist while continuing to block redirects/substitution.

Fixed

  • Command gate now correctly honors permission_mode=bypass.

Improved

  • More actionable shell metacharacter block reasons, specifying the character and suggesting alternatives.

Todo Tool (Shared MCP)

Added

  • Schema gains title and description fields, and optional nested substeps.
  • New UI: all todo calls are merged into a single checklist widget, with each item expandable to show associated tool calls that occurred while it was in progress.
  • Tool call duration: at/end_at timestamps from trace events are parsed and displayed in ToolCards.
  • TodoCard sums each item's related tool-call durations into a total.

Changed

  • Moved from a Wick-only native tool to the shared MCP tool surface (now available to Claude, Codex, and Gemini).
  • The old single overloaded step field is kept as a deprecated fallback for older traces.
  • The in-progress item's current activity is now shown inline in the card instead of a separate floating indicator.

New Native Tools

Added

  • Native read_file, write_file, and edit_file tools with line-range support.

Frontend & UX

Fixed

  • Duplicated text/tool_use rendering from SSE snapshot replay.
  • HTML file artifact retry capped to prevent infinite busy-loops, displaying a static fallback after ~2s.

Developer Experience

Added

  • WICK_SW_ENABLED environment toggle for disabling the service worker in development.

Improved

  • fe/scripts/dev.mjs debounce extended to 5s, and in-flight builds are now killed and restarted when new changes land mid-build.

v0.33.2 — Notion Connector

Released on 2026-07-22

Added

  • update_page_properties for notion_unofficial: Edits the property cells of an existing database row in place (status, date, select, multi_select, checkbox, relation, person, number, and more). Only the properties passed are written, leaving the rest of the row and its body content untouched. Takes page_id (the row) and properties (JSON name → value, using the same shapes as create_page). The operation refuses a plain page (one without a property schema, directing users to set_title or update_block instead) and returns unknown or read-only property names in skipped_properties rather than failing the call. Returns {id, updated, skipped_properties}. Call describe_database first to retrieve exact property names, types, and options. See Notion (Unofficial) ▶ Writing database row properties.
  • notion_unofficial requires an AI description to be set up: As this connector authenticates with a personal Notion session token (token_v2)—meaning every call acts as one human across their entire workspace—an instance is now considered needs_setup until its per-instance AI description is filled. This ensures there's always a record of who may use it and for what purpose. This feature reuses the existing per-instance description field (which guides the LLM) and standard readiness status: a blank description reports as unfinished in the Manager UI, just like a missing required config field, and flips to ready once completed. Setup widgets (Import, Status) bypass this gate, allowing operators to confirm the connection before enabling the instance. This is backed by a new opt-in Meta.RequireAIDescription connector flag. All authentication and advanced configuration fields (token_v2, active_user_id, user_agent, notion_client_version) are now also required; these are conveniently filled in one click by the Extract widget. In the Manager UI, when a connector requires an AI description, the section is now forced on, marked 'Required', and displays a warning when blank. The connector version has been bumped to 0.4.0. See Notion (Unofficial) ▶ AI description required.
  • operator_note in the connector meta-tools: wick_list, wick_search, and wick_get now include a separate operator_note field. This field carries the admin-written per-instance AI description, distinguishing it from the connector's built-in description. This allows the agent to recognize and prioritize operator-authored instructions (such as access rules, team notes, or constraints) over product descriptions. For example, a personal-token connector's note might specify who is authorized to use it. This field is omitted when blank.

v0.33.1 — Live Browser & Connectors

Released on 2026-07-21

Added

  • In-place block editing for notion_unofficial: The unofficial Notion connector can now edit a page's body precisely instead of only setting its title. list_blocks returns each top-level block as {id, type, text, editable}; update_block rewrites one block's text (and optionally its type) in place; delete_block removes one block — all addressed by block id, so neighbouring blocks are never touched. append_content adds new blocks from markdown at the end, or mid-page via after_block_id. Two guards keep an edit from breaking the page: update_block refuses non-text blocks (images, embeds, tables, dividers — marked editable:false), and append_content rejects an after_block_id that isn't a top-level block of the target page. Connector bumped to 0.2.0. See Notion (Unofficial) ▶ Editing page content in place.
  • Live browser panel for playwright_browser: The agents conversation UI has a new right-rail Browser tab (shown once an enabled playwright_browser instance exists) that shows a live view of a session — watch the screen, or switch to Full mode to click/type/log in by hand. This includes support for cloakbrowser (patched Chromium) instances. It supports pop-out/floating and fullscreen views, zoom, an address bar with chrome:// shortcuts, and a tab switcher for multi-tab sessions. The connector's manager detail page gained a matching Active sessions section (inspect/goto/kill) and an Extensions section to install Chrome extensions (.zip/.crx upload or Chrome Web Store id) into its live sessions. New MaxTabsPerSession config caps tabs per session (default 1, opt-in multi-tab) and run/session_list gained a tab input / max_tabs field to target and report on specific tabs. Connector bumped to 0.7.0. See Playwright Browser.
  • Increased gRPC message limit: The plugin transport's gRPC message receive cap was raised from 4 MiB to 64 MiB to accommodate larger payloads, such as base64-encoded browser extensions for playwright_browser installation.
  • Updated connector documentation: New documentation pages were added for loki and httpbin connectors, and these, along with playwright_browser, were registered in the sidebar and connector index.

Fixed

  • Connector list visibility for non-admins: A connector now stays listed for non-admin users once its type has any instance, even if every existing instance is tag-restricted from them — so they can add their own account instead of the connector disappearing entirely.

v0.33.0 — Connectors & Plugins

Released on 2026-07-20

Added

  • Notion Connectors: Two new plugin connectors for Notion:
    • notion: Wraps the official REST API (Notion-Version 2022-06-28). Supports search, fetch (properties + markdown body via the block tree), query databases, comments, users, and create/update pages/databases.
    • notion_unofficial: Reads and writes through Notion's private web API using a token_v2 session cookie (with a paste-a-cURL setup widget). Sees everything the logged-in user can see, including embedded/filtered database views. Provides describe_database (schema + options + view filter) and create_page with typed properties (date/select/relation), plus query_database, get_records, create_comment, set_title. Handles token expiry with actionable errors and retries HTTP 429 with backoff.
    • Both install via <app> plugin install notion / notion_unofficial.
    • A new Productivity connector tag groups docs/knowledge-base connectors.
  • Per-instance AI Description for Connectors: A connector row's detail page now has an AI description field. This free text can be attached by an admin to a specific connector instance (e.g., when to use it, team notes, account constraints). It auto-saves and is appended to the connector type's built-in description wherever the wickmanager connector surfaces it to an LLM (connector_list, connector_get). See Connector Module ▶ AI description.
  • Enhanced Connector Configuration UX:
    • ConfigOnly Operations: Introduced connector.OpConfigOnly for operations that back a config-form widget (e.g., pickers, status) but are not agent tools. These are hidden from the MCP surface, blocked via wick_execute for non-test sources, and labeled "config only" in the admin UI.
    • Extended HTML Config Widget: The html=<op> config widget can now return {fields:{k:v}} to fill sibling config fields and {html} for its own feedback. The connector's named <input>/<textarea> values are sent to the operation, enabling custom config form building (e.g., paste-a-cURL import).
    • Loki Connector Improvements:
      • org_id and datasource_uid are now HTML pickers, utilizing ConfigOnly operations (list_orgs, list_datasources).
      • A connection_status widget shows Grafana version and reachability.
      • auth_mode (basic|token) provides conditional visibility for username/password vs. token fields.
      • Configs are regrouped into Connection, Authentication, and Datasource sections.
      • labels and label_values operations now accept optional start/end parameters.
      • Loki connector version bumped to 0.2.0.
  • Plugin Debugging with Reattach: Added support for breakpoint debugging connector plugins via go-plugin reattach. This allows attaching a debugger (like dlv) to a running plugin instance. A key fix ensures ClientConfig.Plugins is explicitly set during reattach to avoid "unknown plugin type" errors. VSCode launch configurations are provided for an integrated debugging experience.
  • Loki and Phoenix Connectors Moved to Plugins: The Loki and Phoenix connectors are now downloadable plugins (same as GitHub/Bitbucket/Google Workspace) rather than in-tree builtins. They are no longer compiled into Wick and must be installed via <app> plugin install loki|phoenix. Loki's datasource_uid is now a required field.

Fixed

  • Agent Visibility Gate for Shared Resources: Corrected an issue where callerProjectAccess for agents only unioned owner grants. Projects and data tables shared via filter tags (tool_tags) are now correctly visible and accessible to users carrying the matching tags, resolving 404 errors and visibility issues in the sidebar and default-project dropdown. Untagged projects/data tables remain owner-private.
  • Phoenix Connector Documentation: Fixed stale source paths and tier labels in the connector reference page and index, ensuring they correctly point to the plugin location and installation flow.
  • Tool-Call Trace Preservation: Resolved an issue where the optimistic live turn's streamed trace vanished after a turn finalized, requiring a manual refresh. The setHistory function now grafts the local turn's inline events onto its persisted twin, ensuring traces are continuously visible.
  • Required Field Visibility Logic: Missing() and required-completeness checks now correctly honor visible_when conditions, preventing fields that are only required under specific circumstances from being flagged as missing when hidden.
  • Dead Changelog Links: Fixed two dead links in the v0.28.1 changelog that incorrectly pointed to guide/agents/9router instead of the updated guide/agents/airouter.

v0.32.0 — Agents & Providers

Released on 2026-07-14

Added

  • Recent Spawns grouped per session, with crash detail and a log viewer: The Providers page's Recent Spawns table now groups spawns by session (one row per session, with a spawn count and latest status) instead of listing every spawn flat; clicking a session opens its spawn history, each expandable inline to the full spawn detail. A crashed spawn now shows its exit code and a stderr tail, and a process that disappeared without recording an exit event is flagged as "died, no exit event" instead of looking like it's still running. Spawn detail also links straight to a new in-app log viewer (/providers/logs?file=) for the relevant server/mcp/worker/app/gate/daemon log file, with copy-path, copy-JSON, and download actions. See Providers — Recent Spawns list.
  • Session connector idle TTL: Session connectors now expire by session inactivity (10 minutes of no running/queued subprocesses) instead of a daily purge job. A self-terminating sweeper reaps idle connector instances, leaves a tombstone notice ("deleted, re-create"), and provides a buffered [system] context turn to the agent on the next user message. The old session-config-purge job has been removed.
  • Silent replies for agents: An agent reply that begins with the [silent] marker is now kept out of every channel (Slack/Telegram/REST) and idle push notifications, but still reaches the web UI (shown with a muted-bell flag, marker stripped) and the conversation log. The registry buffers a turn's events to correctly process the marker even if split across stream deltas.

Fixed

  • Daemon log is now dated and actually gets pruned: The daemon's own log (daemon.log) is now written per-day (logs/daemon-YYYY-MM-DD.log) alongside the other runtime logs, and a bug that let dated log files (including the daemon's) skip retention pruning entirely is fixed — old logs are now deleted on schedule instead of accumulating forever. <app> status --log still finds the right file by tailing the newest daemon-*.log. See Daemon (background).
  • AI Router dashboard SSE streams no longer reconnect in a loop: The AI Router dashboard's Requests/Logs SSE streams no longer experience continuous reconnections. This was resolved by bypassing the service worker's 8-second AbortController for text/event-stream requests, widening the /airouter/* skip to include the base-prefixed mount (/tools/agents/airouter/), and adding 15-second keepalive comments and a leading : connected message to the stream handlers.

Changed

  • Agent replies UI uses a serif reading font: Agent replies in the web UI now render as plain serif prose (Source Serif 4, 16px / 1.5 / ~68ch measure) to make the conversation read like a text page. Only user turns retain a bubble. The rest of the app chrome and body text remains in sans-serif (Inter).
  • Connector catalog injection removed from system prompt: The connector catalog injection has been disabled in the system prompt. It previously listed connector keys without per-instance IDs and rendered the global registry rather than the caller's visible set; agents now discover connectors via wick_list/get/search.

v0.31.0 — AI Router

Released on 2026-07-12

Added

  • AI Router: multi-router (9router + OmniRoute), switchable, per-provider routing: The embedded 9router dashboard has been generalized into an AI Router page. This page now hosts multiple router backends concurrently, including 9router and OmniRoute. Each router is installed, run, and reverse-proxied on its own loopback port (/airouter/<id>/), allowing concurrent operation. A switcher is provided to flip between their Dashboard, Requests, and Settings tabs. Provider instances (e.g., claude, codex) now feature a Route through AI Router toggle, a router picker, per-slot model overrides, a custom API key, and an admin-only Advanced section that previews and allows editing of the exact effective spawn configuration (env vars / codex -c overrides) as a raw override. A new master switch (AirouterEnabled), replacing Router9Enabled, gates the entire feature, while per-router auto-start and external-API toggles are available on the AI Router page itself. Existing 9router-routed instances and settings carry over unchanged. See AI Router.
  • AI Router badge in the composer provider picker: Provider instances configured to route through the AI Router now display an AI Router badge within the composer's provider menu. This includes a pill next to the option in the list and a corner dot on the selected provider chip, making it clear at a glance which providers are proxied. See AI Router.

Fixed

  • Composer preselects the project's default provider: On the Project landing page the composer now seeds its provider from the project's configured default instead of always falling back to the first provider (claude) — matching the New Session page.
  • / and @ work mid-message, not just as a prefix: The command palette (/) and file-mention (@) menus now open when the trigger is typed at the start of the line or right after a space, so you can drop a command or mention partway through a message; path-like text such as src/foo stays inert. See Agents — Composer.
  • Live session stream self-heals after a drop: The conversation stream (SharedWorker, with an EventSource fallback) now reconnects when a downed or restarted server closes it and replays the snapshot on reconnect, and resyncs when the tab returns from the background or the network comes back — so a stalled session recovers on its own instead of needing a manual reload.
  • Failed agent spawns no longer stick on "spawning": When a subprocess fails to launch, the session now tears down to idle and the failure is surfaced as an inline system error turn (persisted, like any runtime error) instead of only a request-level toast; the send itself succeeds.
  • AI Router dashboard streams no longer reconnect in a loop: The Requests and Logs live streams kept dropping every few seconds. The service worker was aborting the page-level EventSource on its 8s navigation-timeout and never bypassed the base-prefixed /tools/agents/airouter/ mount; it now skips any text/event-stream request outright. The stream handlers also gained a 15s keepalive (matching the conversation stream) so an idle stream isn't reaped by an upstream proxy.

v0.30.1 — Data Tables

Released on 2026-07-10

Added

  • Per-User Data Tables:

    • Introduced data tables as a first-class, per-user resource. HTML artifacts can now perform CRUD operations (Create, Read, Update, Delete) on these tables without compromising the artifact sandbox.
    • Ownership: Each schema/entity now carries an owner user ID. Tables are taggable resources keyed by slug (e.g., owner:<slug>). Access is granted via owner tags, admin-granted users, a direct-owner fallback, and AdminSeeAll permissions, applied across the /data-tables UI list, detail views, and mutations.
    • Admin Grant Page: A new /admin/data-tables page allows administrators to share data tables by tag, mirroring the existing workflow sharing mechanism.
    • MCP Scoping: The connector.Ctx now includes CallerUserID, stamped by connectors.Service from the session owner, gating access and attributing create ownership to the specific user.
  • Widget CRUD Bridge:

    • JSON Row API: A new API endpoint GET/POST/PATCH/DELETE /api/data-tables/{slug}/rows is introduced for programmatic access, guarded by permissions.
    • Sandboxed Widget Access: window.wickDataTable.query, insert, update, and delete methods are injected into every artifact iframe. Sandboxed widgets can't directly fetch, so the parent proxies each call using the session cookie, maintaining the same trust model as window.wickReadFile.
    • Agent Prompt Documentation: The system prompt has been updated to document this new bridge, enabling agents to build database-backed widgets.

Fixed

  • Composer Command Palette Alignment:
    • Resolved an issue in the / command menu where the description's width would collapse the command name on narrow or mobile widths. The command name now has priority and is pinned to a fixed-width column, ensuring every hint aligns in a straight second column for improved readability, especially for the skills list. File mentions (@) retain the full row for filenames.
  • Provider Test Flakiness:
    • Fixed flaky TestRename and TestSwitch tests within the agent provider package, which were failing under the -race CI gate. This was due to a race condition where Save's async probe goroutine for reloading and rewriting config.json sometimes conflicted with subsequent synchronous test operations. A saveSeed helper now ensures this goroutine is drained after each seed Save, serializing config writes and preventing stale reloads or file access denials on Windows. (Internal stability improvement.)

v0.30.0 — Composer & Agents

Released on 2026-07-10

Added

  • Unified chat composer with @ file mentions and / command palette: The New Session page, Project landing page, and live session Conversation tab share a single composer component. Typing @ opens a file-search popup — scored against the session's working directory (GET /sessions/{id}/files/search) in a live session, or against the selected project's folder (GET /api/projects/{id}/files/search) on the New Session / Project landing pages, before any session exists. Typing / opens a command menu — switch provider/project, open a panel (processes/workspace/source/context), change the view (commands/approvals/raw), or run an installed skill — sourced from GET /api/composer/commands, scoped with scope=new (skills only, for pre-session pages) and provider=<type> (skills for just that provider); the skill scan behind it is cached server-side for 30s. The toolbar is now a compact + hub menu (attach, screenshot, add context, commands, project/provider/preset) plus icon-only project/provider chips, replacing the old dropdown row. See Agents — Composer.
  • Screenshot capture, inline image editor, and provider brand icons in the composer: The + menu's new Take screenshot action (getDisplayMedia) and an edit affordance on attached image chips both open a canvas annotator — crop, arrow/rectangle/ellipse/pen, and a blur tool for redacting sensitive detail before sending — with undo and a PNG export at the image's native resolution. The provider chip and its picker now show the Claude / Gemini / Codex brand mark instead of a generic icon (Codex swaps a light/dark SVG pair to follow the app theme). See Agents — Composer.
  • HTML artifacts by path (```htmlfile fence): A new fence previews a saved .html file by its session-relative path instead of pasting the markup into the transcript — same sandboxed preview (Full screen / Show code / Download) as inline ```html blocks and file artifacts, but the transcript only ever stores the path. Clicking a .html file in the Context file panel now opens the same live preview with an Edit/Preview toggle and Reload. See Agents — Artifacts.
  • Artifacts can read session files via window.wickReadFile: Sandboxed HTML artifacts can't fetch() (the CSP blocks it by design), so the runtime now injects window.wickReadFile(path), returning a Promise of a session file's text contents fetched by the parent page and handed back over postMessage. Lets a generated dashboard load data from a session file without loosening the sandbox. See Agents — Artifacts.
  • Data Tables are now a per-user owned resource: /data-tables lists only tables the signed-in user owns or was granted via an owner:<slug> tag — the same ownership model as Workflows and Skills — with admins seeing every table only when admin_see_all is on. A new /admin/data-tables grant page lets an admin share a table with other users. The agent's MCP datatable_* ops are gated the same way: a session can only reach tables owned by the human behind it, and a table it creates is owned by that user, not the shared internal agent principal. See Admin Panel — ownership.
  • HTML artifacts can read/write a Data Table via window.wickDataTable: Alongside wickReadFile, the runtime now injects a wickDataTable.{query,insert,update,delete} bridge into every artifact, proxied by the parent over the same postMessage channel — no fetch ever leaves the sandbox, and access is enforced server-side per table. Backed by a new JSON row API, GET/POST/PATCH/DELETE /api/data-tables/{slug}/rows. See Agents — Reading/writing a Data Table from an artifact.

Fixed

  • Ace code editor caret drift: Fixed the text caret drifting from its visible position in the Context file panel's Ace editor by re-measuring font metrics after the editor becomes visible and webfonts finish loading.
  • 9router dashboard iframe now agrees with the status badge: The Dashboard tab's embedded iframe now probes the dashboard port directly (like the status badge and API proxy already did), instead of only checking whether wick itself spawned the process. A 9router started outside wick, or one that survived a wick restart, now serves the iframe instead of showing "not running — start it first" while the badge says Running.
  • / command palette names no longer truncate on narrow widths: Command names in the / palette now sit in a fixed-width column so their hints (e.g. skill descriptions) line up instead of the name getting clipped to a few characters. @ file mentions are unaffected — the filename still uses the full row width.
  • Schedule and Slack features (review findings from PR #972):
    • Correctness:
      • session_schedule_handler: Fixed a potential panic on nil dereference if a concurrent cancel occurred between the mutation and a re-fetch, by handling the error and reporting the schedule as gone.
      • pool.send: Prevented duplicate user message SSE broadcasts by tracking userMsgNotified and skipping the second call.
      • entity.ScheduledMessage: Clamped negative MaxRuns values to 0 in BeforeCreate to ensure capped recurring schedules do not become unbounded.
      • store.ClaimDue: Parked claimed rows approximately 100 years in the future instead of now+2h. This prevents re-firing of claimed rows after a crash exceeding 2 hours, ensuring an at-most-once delivery bias.
      • stream.PublishUserMessage: Added logging and graceful exit on json.Marshal errors, consistent with other publishers.
    • Slack:
      • getReactions: Now rejects requests if both file and channel+ts parameters are supplied, enforcing the documented either/or contract.
      • shapeReadFile: When Slack reports no mimetype, the function now falls back to utf8.Valid to return text files inline instead of base64.
    • UI:
      • Scheduled rail badge: Excludes paused recurring schedules from the live count displayed in the badge.
      • Scheduled SPA: Updated data-base fallback to use || instead of ?? to prevent API routing issues in the dev environment; changed the dev port from 5177 to 5183 to resolve a collision.
    • Rejected Findings: The schedule-id "enumeration" timing concern (ids are random UUIDs, both paths return 404) and the scheduledPage notReady guard (page-shell handlers don't call notReady; the schedulesAllUI data endpoint already guards nil) were reviewed and rejected as not applicable.

v0.29.0 — Scheduled Messages & Slack

Released on 2026-07-09

Added

  • Scheduled messages: A new session-scoped primitive allows agents to inject messages into a session at a later time, either as a one-shot or recurring event, without involving the workflow engine. Agents can schedule via the new wick_schedule_message MCP tool (create / list / cancel / pause / resume / reschedule), specifying timing with run_at, every, or cron. Users can manage these messages via a per-session Scheduled tab or a new global Scheduled sidebar page (/tools/agents/scheduled), which lists all schedules across sessions, filterable by status and grouped by session. Messages are delivered through the normal pool send path, behaving exactly like any inbound message. See Scheduled Messages.
  • Slack: file ops + get_reactions: The Slack connector now includes a new Files category, offering list_files, get_file_info, and read_file. read_file downloads file bytes using the bot token, returning UTF-8 text as a string or binary/images as base64, with a max_bytes guard. Additionally, get_reactions has been added to read existing reactions on messages or files, alongside the existing add/remove operations. These operations require files:read and reactions:read scopes to be added to the bot token. See Slack connector.

Fixed

  • Inbound messages from channels/schedules now appear live in an open web session: Messages injected by sources like Slack, Telegram, or a fired schedule now immediately appear in an open web session, rather than requiring a manual refresh. A new user_message SSE event pushes these messages live, displaying a badge (e.g., ⏰ Scheduled / via Slack) above the message bubble to indicate its origin. See Channels ▶ SSE event vocabulary.
  • Session connector instances no longer stuck on "needs setup" when a required field has a default: A required configuration field now correctly registers as satisfied if its base specification includes a non-empty default value, resolving an issue where freshly-added session connector instances would display "needs setup" until a redundant edit-and-save operation.
  • Scheduled messages rail badge correctly counts active recurring schedules: The DetailView rail badge for scheduled messages now accurately counts both "pending" and "active" recurring schedules, ensuring sessions with only active recurring schedules no longer incorrectly show a count of zero.

v0.28.5 — Fixes

Released on 2026-07-08

Fixed

  • 9router status reflects the real process, not just wick-spawned ones: The Settings tab status badge now probes the dashboard port directly, so a 9router instance started outside wick (or one that survived a wick restart) correctly shows Running. The installed version is now cached for up to an hour and refreshed in the background instead of shelling out to npm on every status check; the badge briefly shows Checking… on the very first load.
  • Plugin update no longer fails while the plugin is running: Installing/updating a connector plugin now replaces the binary via an atomic rename instead of an in-place overwrite, so updating a plugin mid-use no longer fails with a "text file busy" error. The update process now first fetches and verifies the archive to a temporary directory, ensuring that a failed download does not disturb the existing installation. The manager UI's connector card also shows live staged progress (downloading %/verifying/replacing/done) while an update runs.
  • Playwright Browser: CloakBrowser and CDP-reconnect skip the Chromium download: Opening a session with Browser=cloakbrowser, or reconnecting to an already-open live session over CDP, no longer triggers Playwright's own ~150MB Chromium download — only the small node driver is fetched.

v0.28.4 — Playwright Enhancements

Released on 2026-07-07

Fixed

  • Playwright Browser: eval marked destructive: The eval operation, which allows running arbitrary JavaScript in the page, is now gated behind the same destructive opt-in as the run operation for consistency and enhanced security.
  • Playwright Browser: persistent data directory: Live-session metadata, browser profiles, and CloakBrowser downloads now default to a persistent directory under the application's tree (~/.<app>/plugins/playwright_browser) instead of the OS temporary directory. This change ensures that the ~200MB CloakBrowser download, along with other session data, survives OS/Storage Sense temporary file cleanups. This behavior can still be overridden using the SessionDir configuration option.
  • Playwright Browser: driver install falls back to a mirror CDN: If the default Playwright download host is unreachable, the connector now retries the download once against cdn.playwright.dev before failing. Additionally, failed installations are no longer cached, meaning that the next call will retry the download instead of immediately failing, preventing the plugin from being rendered inoperable by transient network outages.
  • Playwright Browser: file write permissions: Fixed an issue where writeFileFrom did not correctly set execute permissions (+x) for downloaded files, ensuring executable files are properly runnable.
  • Playwright Browser: session ID path traversal guard: Added validation for session IDs used by readMeta, rejecting any IDs that contain characters outside of [A-Za-z0-9_-]+ to guard against potential path traversal vulnerabilities.
  • Playwright Browser: improved CloakBrowser installation logging: The full CloakBrowser install path is now logged to stderr, and panic recovery is integrated into the progress file, improving visibility and robustness during installation.
  • Playwright Browser: faster browser status polling: Caching probeVersion by executable path significantly reduces browser_status poll times from approximately 3-4 seconds to about 1 second.
  • Provider Storage Retention job no longer auto-enables: The provider-storage-retention job now starts disabled on fresh installs, aligning its behavior with provider-storage-sync. It can be manually enabled from Tools → Jobs → Provider Storage Retention → Settings → Enabled.
  • UI: HtmlField 'Loading…' flash: The 'Loading…' message no longer flashes on poll refreshes for HtmlField components; it now only appears on the initial data fetch.

v0.28.3 — Connectors & Workflows

Released on 2026-07-07

Added

  • Playwright Browser connector plugin: A new playwright_browser connector drives a real browser (Chromium/Firefox/WebKit, plus a stealth CloakBrowser engine) via embedded Playwright. Page-task ops (screenshot, get_content, pdf, scrape, eval) launch an isolated browser per call; a scripted run op executes an ordered list of 32 browser actions (navigation, clicks, form fills, reads, …) in one session; live-session ops (session_open / session_list / tab_new / tab_close / session_close) keep a persistent browser open across calls — and plugin restarts — reached over CDP. Maintenance ops back an admin-only browser picker on the instance's Settings page. Install with <app> plugin install playwright_browser. See Playwright Browser.
  • html=<op> config widget: A new server-rendered config widget lets a connector op return markup ({html:"..."}) that the admin Settings page renders read-only, wiring click behaviour back to the connector via a data-op/data-arg convention (select a value, or run another op and re-fetch). The core stays domain-agnostic — all layout and logic live in the connector. See Config tags reference.

Improved

  • Collapsible config groups: group=Title|Description|collapsed now supports a 3rd segment that starts a config group card collapsed on the admin Settings page — useful for advanced/rarely-edited fields so the page opens uncluttered. See Config tags reference.

Fixed

  • SPA connector detail dropped the group config tag: The connector detail JSON response was missing the group field, so fields configured with group=... silently lost their card grouping in the Svelte connector detail page (the templ-rendered admin Settings page was unaffected).
  • Workflow connector palette drills into instance + SSO account: Dropping a connector node from the canvas palette now walks connector → instance → op, expanding EnableSSO connectors (e.g. Slack) into one entry per connected account plus a Default credentials entry for the row's own config. Only fully-configured ("ready") instances are shown, ops disabled on an instance or account are hidden, and the list is filtered to instances the current user can access. A workflow connector node can now carry account_id alongside row_id to pin a run to a specific connected account; the engine injects that account's token at run time. See connector node.
  • New Slack trigger thread_started ("Slack: New thread"): fires only when a user starts a brand-new top-level thread, never on replies inside an existing thread. Uses the same channel/user/text filter schema as the existing message trigger. See Triggers ▶ channel.
  • Windows: spawning npm-installed CLI shims (e.g. codex.cmd) with a space-containing argument failed: Go's default quoting for .bat/.cmd launches doesn't match cmd.exe's own re-parsing, so an argument with a space (or a shim path under C:\Program Files\...) could fail with 'C:\Program' is not recognized as an internal or external command. Wick's internal process spawner now builds the cmd.exe command line itself for .bat/.cmd targets.

v0.28.2 — Providers & Projects

Released on 2026-07-06

Changed

  • DefaultProvider is now a dynamic dropdown: The agents.default_provider setting no longer offers a fixed claude|codex|gemini choice — its options are your live configured provider instances (bare type, or type/name when several instances share a type). It's unset by default and falls back to claude at spawn time, so a fresh install doesn't pin a provider the operator never chose.
  • Removed the operator-wide default_project_id setting: Session cwd resolution is now just: session's bound project → per-session temp dir. Personal projects (auto-created per user) now cover the old "landing" case. A one-shot boot migration prunes the stale agents.default_project_id config row.
  • Personal projects are undeletable: Auto-created per-user personal projects (tagged personal) are now protected from deletion, same as the built-in default project — the delete button is hidden and the API rejects the request.
    • The project settings API field is_default has been renamed to is_protected to reflect this change.

Improved

  • Frontend build process optimized: Replaced the per-workspace vite build --watch fan-out with a single recursive fs.watch. This reduces idle CPU/RAM usage during development and rebuilds only the changed workspace on demand. An initial pass builds every workspace once with bounded concurrency.

Fixed

  • Channel spawns now honor the project's default provider: A session auto-created from Slack, Telegram, or REST previously always fell back to the operator-wide agents.default_provider (or claude) when spawning its first agent, ignoring the provider configured on the session's bound project. Provider is now resolved as: project default → global default → claude.
  • 9router failed to start on Termux/Android: /9router/start could return a 504 because the process died immediately — 9router's #!/usr/bin/env node shebang doesn't resolve on Termux (no /usr/bin/env). Wick now launches it as node <entry.js> directly when a Node binary and JS entrypoint can be resolved, bypassing the shebang; it falls back to executing the binary directly otherwise.
  • Config save race: Concurrent writes to the same config file (e.g. a foreground save racing a background rescan) could crash with a rename ... no such file or directory error. Each save now writes to a uniquely named temporary file before renaming it into place. The "cannot be deleted" error for the default/personal project now reads "this project is protected and cannot be deleted".

v0.28.1 — AI Agents & 9router

Released on 2026-07-03

Added

  • 9router embedded dashboard (admin-only): A new Agents → 9router page (/tools/agents/9router) lets admins install, run, and manage the 9router npm LLM-router/proxy without shell access. The dashboard is reverse-proxied through the wick origin at /9router/ with URL rewriting, so no extra port or tunnel is needed. A master switch (router9_enabled) in agent settings globally enables/disables the dashboard, proxy, and auto-start. Settings tab: Install / Update (via npm install -g 9router), Start / Stop / Restart buttons, Auto-start on boot toggle (makes 9router a boot-gate step so the dashboard is ready on first page load), and a live Logs panel. The 9router tool has been reworked into a Svelte SPA, including Dashboard, Requests, and Settings tabs, JSON pretty-print, and fullscreen analysis via the shared CodeEditor. An External API access toggle (router9_external_api, default off) controls whether the /9router/v1 proxy answers non-local calls. New Live request stream (SSE pub/sub) is captured while the Requests tab is open, and a Live log stream replaces log polling for real-time updates. Theme tracks wick's light/dark setting automatically. Requires npm on host PATH. See 9router guide.
  • Route providers through 9router: claude and codex provider instances now have a Use 9router toggle on their detail page (admin-only). When enabled, the spawned CLI routes its LLM calls through wick's embedded 9router proxy (/9router/v1) instead of the provider's own cloud endpoint. Per-type model slots (claude: opus / sonnet / haiku; codex: model / subagent — all optional) map to concrete 9router route IDs. The model picker fetches a live catalogue, grouped by owner. A custom API key field stores the 9router auth token encrypted at rest; blank defaults to sk_9router. See 9router — routing providers through 9router.
  • Unauthenticated /9router/v1 proxy: Spawned AI CLIs now reach 9router through wick's own loopback address at /9router/v1/ — no wick session cookie required. Auth is handled by the 9router API key. The endpoint is loopback-exempted from the host allowlist (same as /mcp).
  • Provider instance catalog picker: The provider detail page's Env and Extra Args fields now include a Browse catalog button that opens a searchable multi-select modal of known env vars and CLI flags for that provider type (claude, codex, gemini), with descriptions and default values. Selecting entries inserts them directly into the KV editor. Value cells for known env vars render as option dropdowns instead of plain text inputs. New endpoint: GET /providers/catalog/{type}.
  • Provider instance rename: Rename a provider instance from its detail page (pencil icon on the title). The new name must use letters, digits, or _ only; spaces auto-convert to _. On save, every project whose default provider matched the old type/name key is rewritten to the new key automatically. Live sessions keep the old provider key and must be re-selected by the user. New endpoint: POST /providers/rename/{type}/{name}.
  • Provider Switching (in-place): The active provider can now be switched on the current session (e.g., via a "#codex" message). This change is persisted, the subprocess is killed, and respawns on the next send. It supports named instances (type/name), rejects switching to the current provider, and records the target's context isolation. Back-to-back switches collapse to the latest.
  • Spawn-log Reproduce: A new feature for spawn log details allows building copy-pasteable commands for bash, PowerShell, and cmd.exe with injected environment variables inlined. Toggles are available for headless vs. interactive mode, masked vs. live secrets (fetched from a new admin-gated reveal endpoint), and full vs. short binary path, offering 24 variants. The spawn detail page has been moved into the Providers SPA as /spawns/:file, rendering the reproduce command in a shared CodeEditor. A 'Resume' toggle (Keep vs Fresh) is available and hidden when the spawn has no resume ID.

Changed

  • Provider dropdowns list real instances: The provider selector in the New Session composer and the Project Settings form now shows actual type/name instances (e.g. claude/work) rather than bare provider types. Picking a project in the composer auto-fills its saved default provider. Older bare-type defaults (claude, codex, gemini) are promoted to their canonical instance key at runtime without any data migration.
  • Spawn detail — injected env panel: The spawn detail page now shows an Injected env card listing the environment variables wick added for that spawn (instance env + 9router routing overrides). Secret values (keys, tokens, passwords) are partially masked. Recent Spawns table rows are now clickable links to the detail page.
  • Conversation — provider errors and warnings visible: Provider error turns (e.g. authentication failures, rate-limit messages from the CLI) now render as a distinct red error chip in the conversation instead of being silently dropped. Unrecognized CLI frames appear as a collapsible Raw event block inside the turn trace. Previously both were discarded.

Improved

  • Themed UI Components: The New Session composer now uses Wick's themed Select component for provider, project, and preset dropdowns, ensuring visual consistency with the application's light/dark settings.
  • Process Management: Process status reporting has been made more accurate, including proper reaping of dead agent processes (like resident Codex CLIs) and more precise OS state probing. Idle-fallback rows in the /processes endpoint are now correctly tagged as kind:"idle" to prevent misinterpretation, and panel refreshes are coalesced (~200ms debounce) to reduce network requests.
  • Conversation Reliability: An intermittent issue causing double-rendered assistant replies has been fixed by ensuring streamed live turns deduplicate against their persisted twin.
  • Shared Code Editor: The CodeEditor component has been extracted into @wick-fe/common-ui, leading to consistent display and functionality (e.g., JSON mode, in-editor search) across conversation file viewer, workflow script-node editor, and the new spawn-log reproduce editor.

Fixed

  • 9router OAuth Callback: The OAuth sign-in flow for 9router was fixed to correctly build redirect_uri for Google, preventing 404 errors.

v0.28.0 — Slack & Connectors

Released on 2026-06-30

Added

  • Slack channel — reaction auto-reply switch: React 🤖 (robot_face) on a thread's top (parent) message to make every new reply in that thread dispatch to the agent without an @mention. Remove the reaction to stop (a run already in flight finishes; only the next reply is dropped). The switch persists to session meta and survives a wick restart — re-reacting is not needed after a restart.

    • Enable on the Slack channel config page: toggle reaction_trigger_enabled, then set reaction_channels_mode (all or whitelist, default whitelist). The reaction_channels picker controls which channels honour the switch.
    • Threads are still created by @mention only — the switch never starts a new session, it only gates replies to an existing one.
    • Slack app must subscribe to reaction_added, reaction_removed, and message.channels events, with scopes reactions:read + channels:history. The shipped docs/slack-app-manifest.json already includes them. See the Reaction auto-reply section of the channels guide.
  • Config field grouping (wick:"group=..." tag): Config struct fields can now be grouped into titled section cards in the admin Settings UI by adding group=Title (or group=Title|Description) to the wick:"..." tag. All fields sharing the same title render together under one card, in first-seen order. The optional description is written once at the top of the card. Fields with no group fall into the default "Configuration" card. Applies to Slack channel config, Agents settings, connector/tool/job detail pages. See the group — config field grouping section of the config tag reference.

Changed

  • Connector plugin marketplace — any logged-in user can browse: GET /manager/api/plugins now requires only a valid session, not admin. Every user can see the installed + available plugin catalog. Lifecycle actions (install / update / enable / disable / remove) remain admin-only; non-admins see a "Requires admin" disabled state on the Download button and the connector detail kebab hides the Update / Uninstall / Disable options.
  • Access policy + per-session config — editable by instance owner: The Access Policy section and session-config override on a connector detail page are now editable by the instance owner (creator) in addition to admins. AllowOthersConfigure users are intentionally excluded — the policy controls who receives that grant. The API response carries a new can_manage_policy field that the UI reads to show or hide those sections.

Improved

  • Slack channel — live agent status in assistant threads: While an agent turn runs, the assistant-thread banner now shows richer progress feedback. The footer state cycles through "Thinking" / "Working" / "Idle" with an animated dot suffix. The loading bubble (loading_messages) rotates the last ~5 activity lines (e.g. "Thinking", "Running: npm test", "Reading slack.go") so users can follow the agent's current step without any configuration change.
  • Slack channel — streaming reply: The agent's reply streams into Slack as it is produced — wick posts a placeholder on the first text token and edits it in place every ~1.5 s via chat.update, instead of posting a single message at end of turn. No configuration change required.
  • Slack channel — sender label on every turn: Inbound Slack messages are now prefixed with a resolved Real Name (@handle, UXXXXXXXX): label, cached per user via users.info. Useful in multi-user threads and for matching the sender to their per-user connector when replying. Falls back to the bare user ID if the API call fails.
  • Slack channel — file attachment context: When a user posts files (images, PDFs, file_share events), attachment metadata (name, type, size, Slack permalink) is appended to the user turn so the agent knows what was shared and has a link to fetch the content via the Slack connector. file_share-only messages (no body text) are no longer silently dropped.
  • Slack connector — session-aware "Sent using" footer: The "Sent using @bot" footer on send_message and update_message now names the bot that owns the agent session, not the connector instance doing the sending. Any Slack connector row used inside a Slack-channel session credits the correct bot. Both ops accept an optional session_id input; the MCP transport also auto-injects it via the X-Wick-Session-Id header so no manual wiring is needed in workflow nodes. update_message now consistently re-appends the footer on every edit.

v0.27.2 — Connectors

Released on 2026-06-29

Added

  • Connector-type disable/enable switch — Admins can now hide an entire connector type from the LLM with one toggle (header kebab → Disable connector on the connector detail page).
    • Disabling a type immediately removes all its instances and operations from wick_list and wick_execute, making it invisible to the agent.
    • The connector remains visible in the manager UI with a Disabled badge, allowing it to be re-enabled at any time. This is distinct from the per-row Disabled flag.
    • The connector list card now shows a Disabled badge and dimmed dashed styling. The detail page displays a disabled banner, inactive instance chips, and dimmed rows for disabled types.
    • API: POST /manager/api/connectors/{key}/type-disable and /type-enable.
  • Plugin update / uninstall from the manager UI — The connector detail page header kebab now offers new options:
    • Update to v{X} appears when the marketplace catalog has a newer version, indicated by an Update badge on the connector list card. An update hot-swaps the plugin binary without requiring a service restart.
    • Uninstall plugin removes the plugin binary while preserving its associated rows and configuration in the database.
    • Both operations are admin-only.
    • API: POST /manager/api/plugins/{key}/update.

Fixed

  • Connector Index Card Display — Corrected an issue where listConnectors() didn't map the disabled_type field, preventing the index card from accurately reflecting a disabled connector type.
  • Plugin Install Refresh — Ensured that the install refresh process now awaits both list updates and confirms connector registration before clearing the spinner, resolving an issue where newly installed connectors only appeared after reopening the UI.
  • Session Key Prefix — Changed the session-key prefix from ":" to "-" to ensure compatibility with session IDs and Windows filenames, which consider ":" an illegal character.

v0.27.1 — CI

Released on 2026-06-28

Fixed

  • Resolved an issue in the CI pipeline where plugin releases were incorrectly marked as "Latest" on GitHub. The make_latest input for the release action is now explicitly quoted ("false" for plugins, "true" for core) to ensure proper string parsing, preventing plugin releases from inadvertently stealing the "Latest" badge from core Wick releases.

v0.27.0 — Plugins & Connectors

Released on 2026-06-28

Added

  • wick plugin catalog — A new CLI command that regenerates plugins.json from live GitHub releases. This replaces the jq pipeline previously used in release-plugins.yml, and its output uses the same Available struct the app reads, preventing catalog shape drift. See wick plugin catalog.
  • Plugin DefaultTags — Plugins now declare Meta.DefaultTags using the shared plugins/tags catalog. This ensures they appear in the same category grid as built-in connectors (e.g., API, Communication) without requiring any manual tag configuration.

Changed

  • GitHub, Bitbucket, and Google Workspace moved to external plugins: These three connectors are no longer compiled directly into the wick binary. They now ship as independently versioned and downloadable plugin binaries located under plugins/connector/.
    • You can install them on a running app using commands like <app> plugin install github, <app> plugin install bitbucket, and <app> plugin install google_workspace. Each can then be enabled from the manager UI.
    • Existing credential rows and OAuth tokens are preserved on upgrade; the connector will reappear automatically once the matching plugin is installed and enabled.
    • The agent build profile no longer includes GitHub; it now contains only httprest and slack.
    • The full profile now registers 4 built-in connectors (HTTP REST, Slack, Loki, Phoenix), down from 7.
  • Connector list — plugins merged into category grid: Available-to-install plugins no longer appear in a separate "Available to install" section below the connector list. Instead, they are integrated into the same category grid as built-in connectors, displaying a Download button instead of a detail link.
    • If no build exists for the host OS/architecture, the button will be disabled with a clear reason.
    • An Installed filter chip is available to show only connectors that are ready to use (including both built-ins and downloaded plugins).
    • Category chips are derived from each connector's tags and span both built-in and plugin connectors.
  • Plugin install directory — The plugin scan directory now resolves via appname.Resolve(), aligning with the wick.db tree. This fixes a silent mismatch where plugins installed into ~/.wick-agent/ were not found when the binary was named differently (e.g., in a debug build or an MCP stdio subprocess). You can override this behavior with WICK_PLUGINS_DIR.
  • Hot-reload always active — The plugin hot-reload poller now starts even when zero plugins are installed at boot. This ensures that a plugin installed for the first time is picked up immediately without requiring a restart. Additionally, install, enable, disable, and remove operations now trigger an immediate reload.
  • wick plugin build --target — This command now accepts a comma-separated list of targets, such as linux/arm64,darwin/amd64,windows/amd64.

v0.26.2 — Release Management

Released on 2026-06-28

Fixed

  • Version check and Software Update page no longer show a misleading update badge when GitHub /releases/latest returns a plugin release tag (<name>/vX.Y.Z) instead of a core wick tag. The check now degrades gracefully — showing the current version without a badge — rather than comparing against an unrelated tag.
  • The "Wick vX.Y.Z" badge in the sidebar now links to the changelog page instead of the site homepage.
  • Release Workflow Improvements:
    • Reliability: Eliminated release-artifacts job cancellations by configuring per-workflow concurrency for release pipelines, preventing races between simultaneous releases.
    • Stability: Ensured core Wick releases always receive the "Latest" badge by explicitly setting make_latest: true for core and false for plugin releases.
    • Robustness: Added update-branch and a 3-attempt retry mechanism to the merge-to-master step, resolving 405 "Base branch was modified" errors.
    • Performance: Enabled Go's test cache by removing the -count=1 flag from go test commands, allowing unchanged packages to be skipped during subsequent test runs. Removed redundant go build steps before tests.

v0.26.1 — Plugin Builds

Released on 2026-06-28

Improved

  • Unified plugin build targets with the shared BUILD_TARGETS variable.
    • Previously, plugin releases hardcoded build targets independently of the BUILD_TARGETS Actions variable, which already gated the wick binary build.
    • Now, a single BUILD_TARGETS variable controls both wick binary and plugin OS/architecture sets, streamlining the build configuration.
  • The wick plugin build --target command now accepts a comma-separated list of targets (e.g., linux/arm64,darwin/amd64,windows/amd64).
  • The release-plugins.yml workflow now reads vars.BUILD_TARGETS with the same default and "all" semantics as release-artifacts.yml.
  • Added TestResolvePluginTargets to cover the new --target parsing for lists, spaces, empty items, and error handling.

v0.26.0 — Connector Plugins

Released on 2026-06-28

Added

  • Connector plugin platform: External connectors can now be distributed as standalone Go binaries and installed without rebuilding the host app.
    • wick plugin build — compile one or more connector plugins from a plugins-style monorepo and pack each binary + manifest into a versioned release zip (<name>-<version>-<goos>-<goarch>.zip). Supports --all (all OS/arch), --changed (diff-based), and optional ed25519 signing (--sign-key). The build process enforces Meta.Key matching the folder name, strips debug info from binaries for smaller size, and decouples core dependencies. See CLI Reference — wick plugin build.
    • <app> plugin install|search|list|enable|disable|remove — lifecycle commands on the running app binary for discovering the marketplace catalog, installing from a registry name / URL / local path, and toggling plugins without a restart. A hot-reload poller detects newly installed or updated binaries and wires them into the connector registry automatically. See App CLI Reference — plugin.
    • Internal Architecture:
      • Introduced gRPC proto contract and codegen for inter-process communication between the host app and plugin binaries.
      • Implemented a host-side PluginManager with lazy spawning, idle-kill, concurrency caps (LRU eviction, bounded queue), crash backoff circuit-breaker, and resource limits (rlimit).
      • Added ed25519 signing primitives, manifest envelope with self-packing, and verification (VerifyManifest) for plugin integrity and trust.
      • Integrated a poll-based hot-reload reconciler that honors enable/disable states stored in an overlay table.
      • Supported streaming execution (ExecuteStream) for large results and a warm pool to keep hot connectors pinned and eager-spawned at boot.
      • Provided Ctx.Configs()/Inputs() read-only accessors for plugin transport and ResolveIdentity RPC for OAuth identity resolution.
      • Refactored the plugin monorepo path from wick-plugins/ to plugins/ (module github.com/yogasw/wick/plugins) and updated catalog/release asset URLs accordingly.
    • Pilot Connectors: Initial pilot binaries for Slack and Google Workspace connectors, with OAuth enabled.
    • wick plugin-keygen command for generating ed25519 signing keys.

Fixed

  • GitHub API rate-limit error messages (install scripts + updater): When the GitHub Releases API returns a 403/429 due to the unauthenticated 60-req/hr-per-IP quota, install.sh, install.ps1, and the in-app updater/upgrade paths now surface GitHub's own message (e.g. "API rate limit exceeded for 1.2.3.4") together with the reset time. The install scripts additionally print three workarounds: pass TOKEN=ghp_xxx (authenticated 5 000/hr), pin VERSION=vX.Y.Z (skips the API), or wait for the hourly reset.
  • Plugin Platform Stability:
    • Improved JSON serialization for connector module manifests to ensure Operation and Module fields are correctly marshaled and unmarshaled via json:"-" tags, preventing silent data loss.
    • Refined hot-reload logic to drop worker hot-reload, as workers do not have a connector execution surface.
    • Enhanced security and reliability by switching the plugin manager and related tests to use safeexec.Command instead of os/exec.
    • Ensured Manager.KillAll is idempotent and closes race windows during plugin subprocess termination.
    • Correctly guarded nil operation handlers and ensured queued waiters are woken, rejecting new spawns during shutdown.
  • CI and Release Process:
    • Improved robustness of plugin release detection in CI to prevent job failures when a plugin kind has no changes, by wrapping command substitutions to swallow non-zero exit statuses.
    • Ensured templ files are generated before building the wick CLI from source in CI, resolving build failures on fresh checkouts.
    • Streamlined release workflows to use a single entry point (release.yml), preventing concurrent core and plugin releases by dispatching the plugin pipeline only after a core release or for plugin-only changes.
    • Enforced unit test completion before release preparation steps in core releases, ensuring the core chain is strictly sequential after tests pass.
    • Improved CI cache efficiency and stability by using stable, version-free keys, implementing a delete-before-save strategy for cache refreshes, and serializing all release workflows into a single concurrency group to prevent cache race conditions.

v0.25.3 — Chat & Updates

Released on 2026-06-27

Added

  • Chat — image card gallery (imagecard fence): A new ```imagecard fenced block renders web-search image results as a masonry gallery — each image at natural height, with a favicon + domain pill. One url | caption per line; url is the only required field. Clicking any card opens a full-screen carousel with prev/next arrows, position counter ("N / M"), ← / → keyboard navigation, source-domain caption, and click-outside-to-close. On non-rich channels (Slack, Telegram) the fence degrades to readable url | caption lines.

Fixed

  • wick_execute batch mode over SSE/Streamable-HTTP transport: A calls: [...] batch payload sent over the SSE transport was never routed to the batch handler and was rejected with "tool_id is required". Batch calls now work correctly over both the stdio and SSE/Streamable-HTTP transports.
  • Flaky tests: Addressed two pre-existing flaky tests: one related to HH:mm timestamp locale dependency and another for a DetailView polling interval that was no longer active.

Improved

  • Software Update page — single action slot: The per-phase controls (check button, download progress bar, Apply & restart button, Restarting indicator) are now consolidated into a single top-right action slot that swaps content as the phase changes, replacing the previous stacked layout. The "no build for this platform" notice (including the expected asset name) now appears inline in the status line under the Updates heading rather than as a separate box.
  • Software Update page — auto-reload on restart (any tab): The page now starts polling /health and reloads automatically whenever it detects the service is in the applying phase — not only in the tab that clicked Apply. A tab that loads mid-restart (e.g., after a manual server restart) will self-reload onto the new build without a manual refresh. The poll waits for /health to go down before accepting the first successful response, so the reload always lands on the new build rather than the pre-restart process.

v0.25.2 — Upgrade & UI

Released on 2026-06-27

Added

  • CLI — wick upgrade --yes / -y flag: Pass -y to skip all confirmation prompts (CLI binary, go.mod dep, Dockerfile) and run the upgrade non-interactively. Useful in scripts or CI pipelines.
  • User menu — version + update status dropdown: The user menu now shows a version section at the bottom listing the running app version and (on non-official builds) the embedded wick framework version, each with a status badge — green Latest or amber Update available → vX. All users can see this; no admin role required.
  • User menu — "Software Update" shortcut for admins: When any update is available (app or wick framework), admins see a green Software Update entry at the top of the user menu linking directly to /admin/advanced/software-update. Non-admins see the version badges but not this action entry.
  • Software Update page — wick framework "What's new" (non-official builds): For downstream apps built against wick, the Version panel now shows a rendered changelog block ("What's new") between the embedded wick version and the latest public release. This is populated server-side from the background version cache — no live request on page load.

Changed

  • CLI — wick upgrade no longer auto-starts dev server: After upgrading, wick exits cleanly instead of launching the dev task. Start the dev server manually with wick dev if needed.
  • Version cache — background refresh: App and wick framework version checks now run in the background (on boot, then every 6 hours) and are stored in an in-process cache. The user menu dropdown and Software Update page both read from this cache, so neither triggers a network call on the request path.

Removed

  • GET /admin/advanced/software-update/wick-check endpoint: This live-check endpoint has been removed. The wick framework version check is now served from the background version cache instead.
  • Unused CI cache warm workflow: The ci-cache-warm workflow, which only warmed shared caches for pr-tests.yml, has been removed. With per-PR CI disabled and the test gate moved to local pre-push hooks and the release pipeline, this workflow was running unnecessarily on every master push.

v0.25.1 — Multi-Bot Channels

Released on 2026-06-26

Fixed

  • Channels — multi-bot session isolation (Slack / Telegram / REST): Two bot instances (e.g., two per-user Slack bots, even across different Slack workspaces) that happen to share the same thread timestamp, conversation key, or chat ID no longer collide on the same wick session. Each per-user channel instance now namespaces its session ID by its registry key (e.g., Slack/Telegram sessions are prefixed with slack:<owner>:<threadTS>, and REST conversations use a hash of the authenticated user) to isolate pool sessions, on-disk session directories, and reply routing. Note: Existing Slack, Telegram, and REST sessions will experience a one-time context reset after upgrading, as the new session IDs will not match the old ones, causing the next message to start a fresh context.
  • Channels — HTTP route fan-in for multi-instance bots: When multiple per-user channel instances expose the same HTTP webhook path (e.g., two Slack bots both mounting /integrations/slack/send), requests are now fanned into the correct instance via RequestRouter.OwnsRequest rather than the previous last-write-wins behavior that silently dropped all but one instance.

Improved

  • Slack — "is thinking…" banner heartbeat: The assistant-status banner (is thinking…) is now re-asserted every 45 seconds during long tool-use turns (with an immediate refresh on ToolUse or ToolResult events). Slack auto-clears the status after approximately 2 minutes of inactivity, so without the heartbeat the banner would vanish mid-run on slow tool chains. The heartbeat stops automatically on done / error or when a turn is superseded.

v0.25.0 — Platform Updates

Released on 2026-06-25

Added

  • MCP — wick_execute batch mode: Pass a calls array to run up to 100 connector operations in a single round-trip. Calls run in parallel (server-side concurrency fixed at 5); a failing or timed-out call never stops the rest. Each entry in the response carries {index, tool_id, ok, result|error, timed_out, duration_ms} plus summary counts. Set timeout_ms to cap per-call time (default 3 min, max 5 min). Single-call shape is unchanged. See Batch execution.

Fixed

  • Channels — Telegram & REST per-user instances: Each user can now configure their own Telegram bot or REST endpoint independently. Wick starts one keyed instance per owner at boot and hot-adds new instances when a user saves their config — matching the existing Slack per-user model.
  • Slack — access-denied DM: When a message is blocked by the access-control whitelist, wick now DMs the blocked user with a reason (identity or channels) instead of leaving the 🚫 reaction as a silent dead-end.
  • Slack — multi-instance bot footer: The "Sent using @bot" footer now resolves the bot display name from each instance's own token, so per-user Slack instances credit their own bot rather than a stale shared value.
  • Pool — double-reply on first turn: The injected origin-context turn is now deferred until after the first user message lands, preventing the agent from being spawned early and producing a duplicate reply (affected Slack, Telegram, and REST sessions).
  • MapToStruct — bool config fields: Reflected config loading no longer panics when boolean fields are absent from the stored JSON.
  • Projects — Centralized Visibility Filter: Admins can view all projects; other users see their own, untagged-shared, and tag-shared projects. Channel default-project dropdowns now list only accessible projects.
  • Sessions — Owner Stamping: Session owner is now stamped once upon creation, not on every message, optimizing performance.

Fixed

  • PWA service worker — pending-hang on boot: Static assets (/sw.js, /public/*, /modules/*) are now exempt from the boot gate. Previously, an already-installed service worker would intercept these asset fetches on a reload while boot was still in progress; the gate held every request, leaving app.css, icon.svg, and similar files stuck at "pending" until the boot restore finished. Because these paths are served from embed.FS and depend on nothing the boot gate sets up, exempting them lets the SW resolve its cache immediately regardless of boot state.
  • PWA service worker — stale-while-revalidate and navigation fetch hang: Added an 8-second AbortController timeout to both the SWR background refresh and the network-first navigation path. Without it, a stalled TCP connection (dead keep-alive socket, momentarily busy server) left fetch() hanging indefinitely with no error, so the asset or page never settled — visible as an asset or navigation stuck at "pending" forever. The timeout converts the stall into a rejection, allowing the SW to fall back to cache or surface a real network error instead. The SWR background refresh is now kept alive past respondWith via waitUntil.
  • Software Update page — Changelog rendering: Fixed an issue where the "What's new" changelog rendered as raw Markdown due to a missing /public/lib/wick-markdown.js asset.

Changed

  • wick build — build time always stamped: BuildTime is now injected as an -X ldflag (RFC3339 UTC, set at wick build invocation time) for every build path. Previously it relied solely on Go's vcs.time VCS metadata, which is absent inside the wick init scaffold (a git-less directory) used by the release pipeline, leaving the "Built" field showing "unknown" in all release binaries. The "Built" field on the Software Update page and in wick_info MCP output now always shows the actual compile time.

Removed

  • Admin — Software Update page — Commit row: The Commit field has been removed from the Version panel. Build time is now always available (see above) and more meaningful to end-users; the commit SHA is a build-internals detail not useful at the operator level. The version fields on the Software Update page are now grouped as Application / Wick / Runtime.

v0.24.1 — MCP & Connectors

Released on 2026-06-24

Added

  • Custom MCP connector — tool grouping via _meta: Upstream MCP servers can now specify a top-level _meta.categories legend and set _meta.category on individual tools in their tools/list response. Wick now groups the exposed operations into titled sections matching the server's intended layout. Section order follows the legend; tools with no category collect into a single untitled trailing section. Servers that do not ship _meta will retain the historical flat single-section layout, requiring no action.

Fixed

  • Custom MCP connector — bearer / secret-header 401 after save: Connector credentials stored as master-encrypted tokens (wick_cenc_ prefix, used for server-level secrets) were not being decrypted before outbound requests. Previously, only the per-user wick_enc_ prefix was matched during decryption, resulting in the ciphertext being sent verbatim as the Authorization: Bearer or custom header value, leading to 401 errors from upstream servers. Both prefixes are now recognised and decrypted correctly.

v0.24.0 — Software Update UI

Released on 2026-06-24

Added

  • Software Update page — release notes + update status: The self-update page (now under Setup → Advanced → Software Update) displays a rendered changelog between the running and latest versions, the release date, and an at-a-glance status badge (green Latest or amber Update available → vX). For official builds, the changelog range is pulled from the published changelog site; downstream apps fall back to their GitHub release notes. A View full changelog link opens the full page.
  • "No build for this platform" notice: When a newer release exists but ships no asset for the running OS/arch, the page now shows the version and changelog with an informational notice (recommending to build from source or ask the maintainer) instead of a hard error.
  • The page auto-checks for updates on load, so the latest version and changelog populate without a manual click.

Changed

  • The admin Configs section is renamed to Advanced (/admin/advanced); the self-update card within it is now Software Update (/admin/advanced/software-update).
  • Changelog and other markdown on the Software Update page now renders as formatted HTML via a shared @wick-fe/common-md bundle, served from /public/lib/ and reusable by any server-rendered page. The shared markdown renderer also learns to interpret thematic breaks (---) as <hr>.

v0.23.6 — Self-Update

Released on 2026-06-24

Added

  • Added or improved self-update functionality/testing.

v0.23.5 — Updater

Released on 2026-06-24

Fixed

  • Self-update mechanism for Termux and unprivileged Linux environments. Previously, self-update failed on Termux due to attempts to use dpkg -i via pkexec/sudo, which are not available or required for user-owned installations in Termux. The application would hang on "Restarting...". The new mechanism now performs an unprivileged installation by extracting the inner ELF binary from the staged .deb file and swapping it in place using syscall.Exec, mirroring the install.sh script's approach.
  • The updater now provides a clear error message if the install directory is not user-writable (e.g., a root-owned /usr/bin installation), guiding the user to re-run the installer.

Improved

  • Linux relaunch during self-update now preserves the original process arguments. This ensures that headless services started with specific arguments (e.g., all or server) continue to operate correctly after an update, matching the behavior on Windows.

v0.23.4 — Self-Update

Released on 2026-06-24

Improved

  • Internal test release to validate the self-update mechanism.

v0.23.3 — Self-Update & Admin

Released on 2026-06-24

Added

  • Admin System page — web-based self-update: A new System card under /admin/configs lets any admin check for updates, watch a live download-progress bar (SSE), and restart the service to apply a new release — all from the browser. Previously, self-update was tray-only; this brings the same flow to headless (<app> all / <app> server) deployments. The page also shows version detail (app name/version, wick version, commit, build time, access type, DB status) matching what wick_info reports over MCP. See Admin Panel — System.

Changed

  • Auto-update default changed to off: auto_update in config.json now defaults to false (opt-in). Existing installs that previously relied on the default-on behaviour should enable auto-update explicitly — via Preferences → Auto-update in the tray, or the Automatic updates toggle on the new System page.

Fixed

  • Self-update on Termux / unprivileged Linux: Applying an update no longer shells out to dpkg via pkexec/sudo. Self-update now mirrors the installer — it never escalates privilege. On Linux/Termux it extracts the inner binary from the staged .deb and swaps it in place (syscall.Exec), so updates work on Termux (user-owned prefix, no pkexec/sudo) and any unprivileged install. If the install directory isn't user-writable, Apply fails with a clear message instead of prompting for a password.
  • Relaunch preserves args after update: Both the Windows (MSI helper) and Linux (binary swap) restart paths now relaunch with the process's original arguments, so a headless <app> all / <app> server service re-serves after an update without manual intervention.

v0.23.2 — Access Control & UI

Released on 2026-06-23

Fixed

  • PWA Stale Layout: Non-hashed static assets (app.css, app.js, dialog.js, palette.js, push.js) are now served stale-while-revalidate instead of cache-first. This ensures updated assets are picked up automatically after a deploy on the next normal page load, resolving the issue where new deploys did not surface until a hard refresh.
  • Cross-Tenant Project Access Leaks: Project detail, update, delete, and SSE stream routes now enforce callerProjectAccess().allowProject(). This prevents scoped users from reading, modifying, or deleting projects they lack access to, even if the project ID is known. Endpoints return 404 (Not Found) to avoid confirming project existence to unauthorized callers.
  • Ownerless Projects: Projects with no owner (OwnerUserID == "") are now treated as admin-only resources. Non-admins can only access such projects if an explicit tag grant covers them, closing a loophole that previously exposed every ownerless project and its sessions to all authenticated users.
  • SSE Stream Access Control: The global SSE stream (/sse), which lists all active sessions, is now restricted to admins. Session-scoped SSE streams (?session=<id>) require the caller to own or have tag-granted access to that specific session.
  • Session Subroute Access: Remaining cross-tenant leaks for session subroutes (e.g., approvals, asks, workspace connector configurations, and SCM Git routes) are closed. Access to these routes now requires the caller to own or have tag-granted access to the specific session ID. This was implemented using a new Router.Use middleware.
  • Conversation UI Overlap: Resolved floating header overlap in Raw, Commands, and Approvals views by adding appropriate top offsets (pt-14, md:pt-16), ensuring their content starts below the header bar.
  • Markdown Enrichment Self-Healing: Improved Markdown rendering for committed-turn bubbles. Blocks like Mermaid/SVG now self-heal and re-enrich correctly after history reloads or content changes (e.g., innerHTML reset), preventing them from intermittently displaying as raw "rendering…" text.

v0.23.1 — Agents

Released on 2026-06-23

Fixed

  • Session detail access for tag-granted project members: Users who could see a session in the sidebar via project tag grants could not open its detail/conversation page (the route returned 404). The ownsSession() function now also checks project-scoped access (callerProjectAccess().allowSession()), ensuring consistency between session list visibility and detail access. The App Owner, admin_see_all admins, and ownerless unscoped sessions are unaffected.
  • Updated admin-panel.md to clarify that tag-granted project members can now open session detail pages, not just their own.

v0.23.0 — MCP & Connectors

Released on 2026-06-23

Added

  • Google Workspace Input Structs: Added input structs for Google Workspace operations across Calendar, Docs, Drive, Gmail, Meet, Sheets, and Slides, enhancing connector capabilities.

Changed

  • wick_get — three-level drill-down via selector: wick_get now navigates connector operations across three levels instead of returning all schemas at once.
    • Call with id only to get the connector's category list.
    • Add selector=<category title> to list that category's operations (no schemas).
    • Add selector=<op key> to retrieve that one op's input_schema.
    • Flat connectors with no named categories list their ops directly at level 1.
    • The category and op_key argument names are accepted as aliases for selector.
    • Session-workspace instances follow the same three levels.
    • This change keeps large connectors (e.g., Google Workspace with 50+ ops) from dumping every schema into the LLM's context on a single call.
  • Documentation: Updated mcp.md and the changelog to reflect the wick_get three-level drill-down with the selector argument.

Improved

  • Agent UI:
    • Kebab Menu: Improved behavior to flip up near the viewport bottom and portal the popup to <body> to escape per-row stacking contexts.
    • Workflow List: Swapped the manual workflow-list dropdown to use the Kebab Menu, and pinned <main> with min-h-0 for smoother scrolling without a gap.
    • Connector List: Added bottom padding and refined the search input to a bare style, removing the double border.
    • Theme Picker: Introduced a theme picker in the agents sidebar via UserMenu(showTheme).

v0.22.2 — Connectors UI

Released on 2026-06-22

Changed

  • Connectors moved into the Agents UI: The connectors manager is now hosted at /tools/agents/connectors inside the Agents sidebar shell. All browser-facing /manager/connectors* URLs now 302-redirect to this new location, preserving deep links via ?deep=. The /manager/api/connectors* JSON routes and all write/mutation routes remain at /manager and are unaffected.
  • Agents sidebar — Connectors link: A dedicated Connectors navigation item has been added to the Agents sidebar, visible to all users.
  • /launcher renamed to /mini-tools: The tools-grid launcher page has been moved from /launcher to /mini-tools. A Mini Tools link is now visible at the bottom of the Agents sidebar for all users (previously, only admins saw a Settings link there).
  • Home tile — Connectors: The "Connectors" tile on the Mini Tools home grid now links directly to /tools/agents/connectors instead of /manager/connectors.
  • Connectors SPA breadcrumb: The connectors index page now displays no breadcrumb (as the heading already states "Connectors"). Sub-pages root at "Connectors". The Audit Log page shows only "Audit Log" with no root breadcrumb.
  • Chat block toolbar — mobile + PNG fixes: The per-block hover toolbar is now consistently visible at 70% opacity on touch/no-hover devices (phones, tablets), resolving its previous hidden state until hover. PNG export functionality now utilizes the SVG's intrinsic viewBox/width-height rather than the on-screen size, addressing the "looks like my phone screen" export bug. If rasterization still fails (e.g., due to a tainted canvas), the chart is now downloaded as an .svg file instead of silently producing no output.

v0.22.1 — Connectors

Released on 2026-06-20

Fixed

  • Corrected the crudcrud sample template to return []connector.Category when registering operations. This resolves a build failure in the materialized template (wick-agent) by aligning with app.RegisterConnector's updated signature, which now expects operations grouped into categories.

v0.22.0 — Connectors & Agents

Released on 2026-06-20

Added

  • Connector list — inline Connect + connected-account rows: Each connector row on the list page now shows a Connect / Reconnect / + Connect another button when the instance has SSO enabled and the caller may connect (no need to open the detail page). Connected accounts appear as sub-rows under the connector card; each account row has a Disconnect button (confirmation dialog) for users who own that account or admins.
  • Connector list — per-row kebab (⋮) menu: The per-row action buttons (History / Disable / Duplicate / Delete) are now collected behind a kebab menu, keeping each row compact.
  • Connector list — Private chip: Rows that carry only an owner:<id> tag and no sharing tag now display a lock Private chip instead of the misleading Everyone fallback. Adding a filter tag flips the chip back to tag names.
  • Module.DefaultAccess — seeded access-policy defaults: Connector module authors can now declare DefaultAccess connector.AccessDefaults on their Module to pre-seed per-row access-policy flags (EnableSSO, AllowOthersConnectSSO, MultiAccount, AllowOthersConfigure) onto every freshly created instance. The Google Workspace connector ships EnableSSO: true, AllowOthersConnectSSO: true so a new row is ready to use Connect Account without a manual Access Policy step. Admins can still change individual rows afterwards. See Connector Module — DefaultAccess.
  • HTML artifacts — themed, borderless, auto-height preview: HTML file artifacts and inline ```html blocks in the conversation now render in a borderless sandboxed iframe that grows to its content (no inner scrollbar), with a floating menu offering Full screen / Show code / Download. The iframe receives a theme bridge — CSS variables (--wick-bg, --wick-surface, --wick-fg, --wick-muted, --wick-border, --wick-accent), color-scheme, and a .dark class in dark mode — so generated HTML matches the chat's active light/dark theme. The agent system prompt instructs the model to use var(--wick-*) for theming by default. See Agents — Artifacts.
  • Artifact kinds — markdown and text: .md files now render as markdown artifacts (fullscreen viewer + download); plain text and code files render as text artifacts with the same viewer + download. Previously these fell through to the generic downloadable chip.
  • Connector build profiles: Operators can now select which builtin connectors register at boot without rebuilding the binary. Three profiles are available:
    • full (default) — all 7 builtin connectors (GitHub, HTTP REST, Slack, Bitbucket, Loki, Phoenix, Google Workspace). Preserves existing behaviour.
    • agent — curated subset: GitHub, HTTP REST, Slack.
    • lite — no builtin connectors registered at boot. Set the active profile with <app> config profile <full|agent|lite> (takes effect on restart) or via the admin Configs page (/admin/variables, key profile). The four runtime connectors (Wick Manager, Workflow, Notifications, Custom Connector) are never profile-gated. See App CLI Reference — config profile.

Changed

  • Connector visibility — live tag resolution: The connector list now resolves each row's filter-tag IDs live from the database rather than from the session-cookie snapshot. A row created or duplicated in the current session is visible immediately without logout/login.
  • Home — default landing page: Navigating to / now redirects to the agent UI (/tools/agents/). The tools/connectors grid previously at / is now at /mini-tools (was /launcher in v0.22.0; renamed in the subsequent release) and remains fully reachable.
  • Admin nav — Mini Tools dropdown: The standalone Tools, Connectors, and Jobs tabs in the admin navigation bar are grouped into a single Mini Tools dropdown. See Admin Panel.

[v0.22.0] — Connector Categories

Added

  • Connectors — operations grouped into categories: The connector detail page (Manager → Connectors → {connector}) now renders operations as named section cards instead of a flat list. Each card shows the section title, description, op count, per-card Enable/Disable all, and a paginated op table (5 ops per page). A sticky "Sections" jump sidebar lets you jump between sections without scrolling; a global search box filters across all categories.
  • Custom connector builder — operation sections: The manual builder's Operations step is now section-based. Each section has a title and description, and ops can be dragged between sections. The right-hand Jump panel is a collapsible mini-map with scroll-spy highlighting that auto-expands the active section.
  • pkg/connectorCategory / Cat(): Built-in connector authors now group operations into titled sections using connector.Cat(title, description, ops...). Module.Operations is []connector.Category; Module.AllOps() flattens for callers that do not care about grouping; Module.CategoryOf(opKey) returns the section title for a given op key. See Connector Module — Operations().
  • Google Workspace — Gmail, Calendar, and Meet: 18 new operations across three new categories on the existing google_workspace connector (same OAuth row, one re-consent required):
    • Gmail (6 ops): gmail_list_messages (search), gmail_get_message, gmail_send, gmail_create_draft, gmail_reply (threaded), gmail_modify_labels (archive, star, mark read, etc.).
    • Calendar (7 ops): calendar_list_calendars, calendar_list_events, calendar_get_event, calendar_create_event (with optional Google Meet link via add_meet=true), calendar_update_event, calendar_delete_event, calendar_respond_event (RSVP accept/decline/tentative).
    • Meet (5 ops): meet_create_space (create a standalone Meet link), meet_get_space, meet_list_conference_records, meet_list_recordings, meet_list_transcripts.
    • See Google Workspace connector for the full op reference.

Breaking

  • Custom connectors — ops storage format changed: The stored ops column is now a nested array of sections ([{title, description, ops:[...]}]). The old flat [{key, ...}] format is no longer accepted. Existing custom connectors built before v0.22.0 must be deleted and recreated. See Custom Connectors — Operations data format. Built-in and MCP-backed connectors are unaffected.
  • Google Workspace — existing connected accounts must re-consent: The OAuth consent now requests Gmail, Calendar, and Meet scopes in addition to the previous Drive/Sheets/Docs/Slides scopes. Accounts connected before this release will have those new ops flagged as needs scope: … in the health check until the operator clicks Connect Account again to re-run the consent flow.

v0.21.0 — MCP

Released on 2026-06-19

Fixed

  • Allow admins and session creators to manage session titles. Previously, only the session owner could use wick_set_title and wick_session_info to manage a session's title, which prevented administrators (including internal agents) and the original session creator from performing these actions due to ID mismatch. The system now correctly grants these permissions.

v0.21.0 — MCP session-title guard fix

Released on 2026-06-19

Fixed

  • MCP — wick_set_title / wick_session_info authorization: Admin principals (including the internal agent principal) can now manage any session's title without being blocked by the owner-only guard. Previously, calls made by the agent on behalf of an admin context were incorrectly rejected. Session creators and admins are now both accepted; ownerless sessions remain admin-only.

v0.20.2 — Chat UI

Released on 2026-06-19

Added

  • Chat — fullscreen diagram lightbox: Double-clicking any rendered Mermaid or SVG diagram opens a fullscreen zoom/pan viewer.
    • Gestures: scroll or two-finger trackpad to pan; Ctrl/Cmd+scroll or pinch to zoom toward cursor; drag to pan; double-click inside to reset to fit; Esc, close button, or clicking bare backdrop to dismiss.
    • On touch devices, the lightbox opens on double-tap.
    • The backdrop color is switchable (auto-theme → light → dark → checkerboard) and persists across opens, ensuring diagrams on any canvas stay readable.
    • The viewer recomputes the viewBox from the real bounding box, ensuring any node that spills past the declared viewBox is not clipped.
    • Diagrams remain crisp vector at any zoom level (2D transform, no GPU-layer bitmap scaling).
    • Includes a live zoom-level readout.

Improved

  • Chat — AI timestamp always visible: Assistant (AI) response bubbles now show the HH:mm stamp at all times instead of only on hover. User bubbles remain hover-only. Day separators in the thread are now static dividers.
  • Chat — floating day pill: A WhatsApp-style floating date pill appears at the top of the conversation viewport while scrolling and fades out after ~1.4 seconds of idle. It always shows the label for the topmost visible day group.
  • Chat — Diagram display: Wide diagrams and raw fallbacks within chat bubbles are now contained to prevent overflow and overlap with other UI on mobile.

v0.20.1 — Chat & Agents

Released on 2026-06-18

Improved

  • Chat — WhatsApp-style message timestamps: Each assistant and user bubble now shows an HH:mm timestamp on hover/focus, and a sticky centered date separator (Today / Yesterday / weekday name / full date) appears whenever the date changes between turns.
  • Chat — Mermaid live progressive rendering: Mermaid diagrams now render progressively during streaming the same way SVG does — partial blocks paint incrementally, a last-good-frame is preserved across token repaints, and raw source never flashes while the diagram is building.
  • Chat — diagram format selection rule: The agent system prompt now encodes an explicit SVG-vs-Mermaid selection rule: node/edge graphs → SVG; algorithmic diagrams (sequence, Gantt, pie, journey) → Mermaid. User overrides always win.

Fixed

  • Agents — ownerless "system" projects now visible: Projects with no recorded owner (created directly in the DB or by internal tooling) are now accessible to every authenticated caller, not only when the tags service is absent.
  • Chat — Pin as default state: The "Pin as default" button and project pinning state now reflect immediately in the UI without needing a page refresh.

v0.20.0 — Agents & Chat

Released on 2026-06-18

Changed

  • Agents — Admin session visibility now scoped by default:
    • Admins are no longer implicitly unrestricted. By default, an admin sees only tag-granted projects and their own sessions, matching the regular-user isolation model.
    • To restore the legacy unrestricted view, enable admin_see_all at /admin/variables.
    • The App Owner tier is unaffected and remains always-unrestricted.
    • Ownerless sessions (no recorded creator) are now hidden from everyone while admin_see_all is off, instead of being reachable by any logged-in user.
    • See Admin Panel — Admin session visibility.

Improved

  • Chat conversation rendering:
    • SVG support: svg fences or bare inline <svg>…</svg> now render as inline images. SVGs are sanitized (<script>, <foreignObject>, on* attributes, and external URLs are stripped). Lenient parsing ensures complex SVGs (with patterns, filters, gradients) render instead of falling back to raw source.
    • Progressive SVG rendering: Mid-stream SVGs auto-close their open tags, allowing shapes to appear as they stream rather than waiting for </svg>.
    • Streaming live turn enrichment: A dedicated renderLive action manages innerHTML and transplants already-rendered diagrams between repaints, fixing text↔image flickering with every token.
    • Synchronous enrichment: Committed messages now enrich synchronously on mount (no 120ms debounce delay).
    • Placeholder for pending blocks: Mermaid and SVG blocks show a "rendering…" placeholder instead of flashing raw source on load.
    • Streamlined UI: Borders have been removed from the assistant bubble and rendered blocks for a cleaner, document-like appearance.
    • Documentation: SVG support is now documented in the agent system prompt (render_formats.md).

Added

  • Per-block hover toolbar: Rendered diagrams now feature a "···" hover toolbar, providing options to Copy source, Download file, and Download as PNG.

v0.19.3 — Conversation Trace

Released on 2026-06-17

Fixed

  • Conversation — trace view renders correctly — The "Show trace" panel on assistant turns previously rendered each streamed thinking_delta fragment as its own separate bubble, often split mid-sentence, and grouped all thinking blocks at the top before tool cards. Consecutive thinking fragments are now coalesced into a single bubble per reasoning run, and the trace renders in chronological order (thinking interleaved with tool cards) so the agent's actual reasoning flow is visible. This improvement applies to both live snapshots and persisted traces, and it also repairs old traces that were stored with fragmented thinking events.

v0.19.2 — Fixes & Improvements

Released on 2026-06-17

Fixed

  • Connectors: Resolved an issue where ConnectorRun string columns, such as ConnectorID, were too short (varchar(36)) to store session-workspace instance IDs (e.g., sw_<UUID>, which are 39 characters). These columns have been widened to text to prevent "value too long" errors during run inserts. Existing columns are automatically updated on application boot.
  • New Session UI: Corrected a visual bug where the "No healthy providers found" banner would briefly flash on the new session page before provider options had finished loading. The banner is now gated to appear only once the provider options request has settled and confirmed an empty list.

Improved

  • Release Process: Enhanced the release tag bundle creation to dynamically discover Single Page Application (SPA) distribution directories within internal/. This streamlines development by automatically including new SPA hosts in the bundle and managing their .gitignore entries, removing the need for manual configuration.

Released on 2026-06-17

Added

  • Conversation — Assistant Artifact Gallery — files the agent writes or edits during a turn are now surfaced as an artifact gallery directly below the assistant bubble. Up to 4 items show as a grid; more than 4 switch to a carousel. Per-kind rendering: images open a zoomable/pannable lightbox (mouse-wheel, drag, Esc/+//0); PDFs open inline in the lightbox; HTML files render as a sandboxed live-preview iframe; any other type shows as a downloadable chip. Detection is retroactive — no schema migration, works for existing sessions. See Agents — Artifacts.
  • Backend — GET /tools/agents/sessions/{id}/files/raw — new endpoint serves cwd files inline for the artifact lightbox (images and PDFs with correct MIME type; SVG with a sandbox CSP header; HTML and other types forced to download). Path-traversal protection via the same safeJoin sandbox as the rest of the agents file API.
  • Conversation API — artifacts[] and has_artifact per turn — each turn in the conversation API response now carries an artifacts array (path, kind, MIME type) and a has_artifact boolean. Visible in the session detail Raw tab.

Fixed

  • Conversation — Artifacts now render automatically below assistant turns upon completion without requiring a manual page refresh.

v0.19.0 — Agents & Manager SPAs

Released on 2026-06-16

Added

  • Custom connectors — "Definition updated" reload banner — the connector page (Manager → Connectors → {connector}) now shows an actionable banner when the stored definition is newer than the live module (needs_reload state). The banner includes a Reload button that rebuilds the live module from the saved definition and clears the dirty state — no page reload required. The banner is visible to any authenticated viewer, independent of edit rights. Previously this state was indicated only by a passive "· needs reload" hint on the connectors index grid.
  • Custom MCP connector — Re-sync tools — a Re-sync tools button is now shown on a custom MCP connector's page (Manager → Connectors → {connector}). Clicking it re-fetches the upstream server's tools/list and atomically swaps in the fresh operation set, refreshing the stored connection status. The operation set is connector-level (shared by every instance), so this is a per-connector action available to any user who can open the connector.
  • Custom MCP connector — connection status chip — a custom MCP connector's page now shows a Connected / Disconnected / Never tested chip reflecting the last probe of its upstream server.
  • Skills — hierarchical breadcrumb navigation — the Skills SPA now displays a clickable breadcrumb trail (Skills / {folder} / {nested path…}) instead of the old single back-button. Each ancestor segment is a link, so you can jump directly to any parent folder from a deeply nested skill file.
  • Consistent breadcrumb navigation across SPAs — the connector manager, Providers (detail & storage), Presets, and the Workflow editor now render their navigation trail through one shared breadcrumb component, so the separator, hover, and accessibility read the same everywhere instead of each module hand-rolling its own back-link.
  • Conversation — Raw trace tab — the Raw tab on a session detail page now renders an interactive, collapsible JSON tree of the session's turns. Turns that have a server-side trace (has_trace) automatically fetch their full per-turn tool and thinking events on demand when the tab opens, merging them into the tree as a trace field. Each node can be expanded or collapsed individually; values are type-colored (string / number / boolean / null). A Copy button copies the full JSON to the clipboard.
  • Providers list: Active Processes panel — when any agent is running, a table above the provider cards shows every live spawn (session ID, agent name, PID, lifecycle/substate). Hidden when the pool is empty. Also includes a list of recent spawns linking to the server-rendered detail page.
  • Providers list: per-provider hook actions — each provider card now has inline Enable / Disable / Test buttons for the PreToolUse Command Gate hook (shown only when the master gate is enabled). The status badge distinguishes enabled ✓, enabled (unverified), ready, and disabled states. Clicking Test fires a live probe and refreshes the card without a page reload.
  • Conversation — inline image thumbnails — images attached to a user message render as inline thumbnails in the thread; clicking opens a full-screen lightbox. PDF and Markdown attachments open in the file viewer.
  • Conversation — file viewer previews — the context-panel file viewer now shows image, PDF, and Markdown previews, and renders code files with syntax highlighting (lazy-loaded Ace editor).
  • Conversation — resizable Source sidebar — the SCM dock sidebar can be dragged to any width; the chosen width is persisted in localStorage across sessions.
  • Conversation — confirm before kill/dequeue — a confirmation dialog is shown before terminating a running agent or removing a queued session, preventing accidental kills.
  • Conversation — live count badges — the Context, Processes, and Workspace rail tabs show live item-count badges that update as the agent works.
  • Conversation — system turn pills — system/lifecycle turns in the thread render as centered pills with an optional step list instead of full message bubbles.
  • Conversation — lifecycle pill tracks streaming — the session lifecycle pill transitions to "working" immediately while the agent is streaming, before the subprocess state update arrives, and also reflects working from spawning state.
  • Conversation — lifecycle pill shows "killed" state — when a session is terminated (including when the idle auto-kill countdown reaches 0), the header pill now shows a neutral killed badge instead of lingering on "idle · 0s".
  • Conversation — rich assistant message rendering — assistant chat bubbles now render Mermaid diagrams (flowchart, sequence, class, state, ER, Gantt, pie, journey, and more), syntax-highlighted code blocks (highlight.js, GitHub-style light/dark theme), and KaTeX math ($…$ inline, $$…$$ display). html blocks now render as sandboxed live-preview artifacts. Previously these all showed as plain text. Renderers are lazy-loaded on first use so they don't affect initial page load.
  • Chat rendering formats documented — the full set of rich formats the web Conversation tab can render (GFM markdown, highlighted code, Mermaid diagrams, KaTeX inline/display math, smart links) is now documented in Agents — Chat rendering. The same table is injected into the agent's immutable system prompt via internal/agents/system-prompt/render_formats.md so the model knows what it can reach for; editing that one file keeps the prompt and the docs in lockstep.
  • System-prompt assembly extracted to own package — the system-prompt builder logic moved from internal/agents/config/ to internal/agents/system-prompt/ (package rename). No behavior change; the catalog, default baseline, and immutable sections are now co-located and individually testable.
  • Overview dashboard rebuilt as a Svelte SPA.
  • Presets page rebuilt as a Svelte SPA.
  • Project settings rebuilt as a Svelte SPA.
  • Common-UI: Reusable KvList row editor component.
  • Common-UI: Primitive components (Button, TextInput, NumberInput, TextArea, LabeledInput, Modal, ConfirmDialog).
  • Common-UI: Shared Breadcrumb component.
  • Manager UI — "Everyone" chip shown for untagged connector rows.
  • Manager UI — Per-row "History" action added to connector list.
  • Manager UI — Search icon and '/' shortcut restored on connectors index.
  • Manager UI — Anchor IDs and jump navigation added to custom connector DraftEditor.
  • Manager UI — Two-tab "Jump/JSON" navigator restored in custom connector DraftEditor.
  • Manager UI — Mobile "Jump" opener (FAB) added to custom connector DraftEditor.
  • Manager UI — Per-account operations editor for OAuth connectors.
  • Conversation — Optimistic user turn rendering on send.
  • Conversation — Project name shown on session list secondary row.
  • Conversation — Empty-state message in conversation thread.
  • Conversation — Inline error region in approvals modal.
  • Conversation — Esc and backdrop dismiss for approvals modal.
  • Conversation — Auto-focus current wizard step input.
  • Conversation — Red border on invalid required wizard field in wizard.
  • Conversation — Folder path shown in project landing header.
  • Conversation — Browser tab title now set from session metadata.
  • Conversation — New file/directory names validated, parent expanded on create.
  • Conversation — Ctrl/Cmd+B keyboard shortcut toggles Context rail.
  • Conversation — Data-chat-path links in chat now open in file viewer.
  • Conversation — FileViewerModal now dismissible with Esc key and backdrop click.
  • Conversation — FileViewerModal now shows save-status indicator.
  • Conversation — Inline save error shown in WsInstanceCard.
  • Conversation — ContextPanel file list now shows loading/error states.
  • Conversation — Fallback bubble for interrupted text-less turns.

Changed

  • Manager UI rebuilt as a Svelte SPA — the connector manager at /manager/* is now served as a Svelte single-page application rendered inside the host chrome (shared header, theme, user menu), replacing the previous server-rendered templ pages. URLs, features, and the full /manager/api/* surface are unchanged.
  • Manager UI — visual realignment — connector list, custom connector builder (DraftEditor, McpServerForm, MCP SSO guidance, access toggles), jobs/tools setup banners, and audit-log headers are visually aligned to match the design-system tokens and the pre-SPA look. Common-UI primitives (Button, inputs, Select, ToastHost, KvList) use the correct radius and focus-ring tokens. This also includes visual parity restores for new-session, overview, providers, skills UIs.

Fixed

  • Conversation — artifact gallery now appears without a manual refresh — assistant-turn artifacts (files written or edited during a turn) were missing from the gallery after a turn completed and only appeared after a full page reload. The conversation is now refetched from the server on each SSE done/error event, so the server-derived artifacts/has_artifact data is picked up immediately.
  • Conversation — workspace file tree auto-syncs as the agent writes files — the workspace file tree in the session detail page previously only loaded on session open and manual refresh, so files written by the agent mid-session (artifacts, generated output) did not appear until you reloaded. The SSE handler now silently reloads the file tree — debounced at 400 ms — on every lifecycle and git_status event, so generated files appear on their own without a refresh.
  • Connector operation toggle no longer silently no-ops on first disableSetOperation in the connector repo was using db.Save() which resolves to an UPDATE when the primary key is set, leaving a missing row untouched (and Enabled=false was dropped as a zero-value on struct insert). Rewritten as a GORM OnConflict upsert with a map payload so the enabled column is always written verbatim. Affects both the legacy admin UI and the new manager SPA.
  • Starting a new agents session no longer fails with 405 — tool root routes now accept POST/DELETE on the trailing-slash form (/tools/{key}/), not just GET. The new-session and conversation SPA POSTs to ${base}/ to create a session, which previously matched a GET-only pattern and returned 405 on Send.
  • Provider Detail — config saves and enable/disable toggle now work — the API call was sending a JSON body but the Go handler reads c.Form("value") (form-encoded). Every provider config save and the enabled/disabled header toggle silently no-op'd; the request now sends application/x-www-form-urlencoded.
  • Provider Detail — UI parity restored after SPA migration — the detail page now shows the Enabled/Disabled header toggle, a 2-column grid for simple config fields with a single Save All action, a row editor for extra_args, and a key-value editor for env (previously flattened to plain text inputs by the SPA migration).
  • Custom connector builder — input focus loss — typing in the McpServerForm label/key fields no longer loses focus on every keystroke (dropped the {#key rev} remount wrapper), and sticky-header now stays on top.
  • Custom MCP connector — "Edit definition" dead-end fixed — clicking "Edit definition" on a custom MCP connector previously navigated to a broken URL because the SPA used the connector's definition ID where the MCP server-form route expects the server's row ID. The backend draft endpoint now returns server_id in its response, and the SPA redirects to /custom/mcp/{server_id}/edit. An explicit error message is shown if the server ID cannot be resolved instead of silently landing on a not-found page.
  • Conversation — pending ask rehydrated on page load — an open AskUser approval card is now restored when the page is loaded or refreshed mid-turn, so the question is never lost.
  • Conversation — orphan tool_result turns rendered — tool-result turns that have no matching tool-call in the loaded window are now displayed as collapsed trace entries rather than silently dropped.
  • Conversation — Normalize null backend arrays to prevent crashes.
  • Skills and Providers API calls now correctly prepend base path (fixes 404).
  • Manager UI — SPA now applies app theme correctly.
  • Installation — install-rtk script no longer fails due to non-breaking spaces.
  • Conversation — Thinking duplicate removed from trace.
  • Conversation — Agent stuck spawning fixed.
  • Conversation — Provider/agent label missing fixed.
  • Conversation — Composer auto-resize, autofocus, global keydown redirect, click-to-focus.
  • Conversation — Jump to latest pill for scrolling, Ctrl+↓ shortcut.
  • Conversation — SCM Source badge now correctly reads total_changed count.
  • Conversation — Process list updates now rely solely on SSE lifecycle events, removing redundant 5s polling.
  • Manager UI — Live-disk SPA hot-reload now works without Go recompile.
  • Manager UI — "Access & behavior" section now correctly shown on the Operations wizard step in custom connector builder.

v0.18.7 — Workflows & Agents

Released on 2026-06-15

Added

  • Workflow parallel execution: Workflows can now run multiple triggers concurrently. Enable concurrency.enabled per workflow and set a global cap via workflow_max_parallel_global in Agent Settings. Each workflow has its own FIFO queue; the global semaphore caps total simultaneous runs across all workflows. Serial mode remains the default (concurrency.enabled: false). See Concurrency.
  • Workflow agent node — extended thinking control: A thinking dropdown (on | off, default on) and a conditional max_thinking_tokens number field are now available on the workflow agent node. off sets MAX_THINKING_TOKENS=0 (extended thinking disabled); on with max_thinking_tokens: 0 leaves the env unset (unlimited / provider default); on with max_thinking_tokens ≥ 1024 caps the budget at that value. The setting is persisted to session meta before each pool send so a reused session always reflects the current node config. This feature is specific to Claude providers; Gemini and Codex ignore these fields. The regular agent chat flow is unchanged. See Agent node — Extended thinking.

Fixed

  • Workflow node argument bleeding: Resolved a regression where rendered templates on workflow node arguments (e.g., Args, Headers, Query, ShellEnv, Command) would persist across multiple runs. This fix ensures that node fields are detached onto fresh copies before rendering for each run, preventing previous renders from affecting subsequent executions.

v0.18.6 — Agents

Released on 2026-06-15

Fixed

  • Agent Spawner Configuration: Addressed an issue where ExtraArgs and Env settings configured in the providers UI were not being forwarded from the Instance to the agent subprocess during spawning, resulting in agents running without their intended custom configurations.

Added

  • Instance-Level Argument Flow: ExtraArgs can now be passed via SpawnOptions, mirroring the existing ExtraEnv functionality to ensure instance-level arguments are correctly delivered.
  • Test Injection Utility: A new InstanceOverride in ClaudeFactory facilitates test injection without requiring modifications to user configuration files.
  • Enhanced Testing for Claude: Dedicated spawn_test.go added for the Claude provider to specifically validate spawner and opt ExtraArgs handling.
  • Configuration Contract Test: A new test, TestFactoryInstanceConfig_ExtraArgsAndEnv, was implemented to establish a contract, ensuring all future providers correctly process and forward ExtraArgs and Env configurations.

Improved

  • Universal Spawner Compatibility: All agent spawners (Claude, Codex, Gemini) now correctly append opt.ExtraArgs after their inherent s.ExtraArgs, preserving compatibility with existing static test fixtures.
  • Consistent Configuration Forwarding: ExtraArgs are now consistently forwarded through agent.Options and both Spawn call-sites (Start and respawnWithMessage).
  • Extended Provider Test Coverage: Existing Codex and Gemini spawn tests have been expanded to include opt.ExtraArgs cases, ensuring uniform behavior across different providers.

v0.18.5 — PWA Notifications

Released on 2026-06-15

Improved

  • Broadcast in-app lifecycle push notifications to all open tabs, ensuring exactly one OS notification is surfaced per push. Repeated pushes are collapsed into a single OS surface using a unique tag to prevent spam.
  • De-duplicate in-app cards by push tag, replacing existing cards instead of stacking.
  • Synchronize dismissals across tabs: Dismissing an in-app card in one tab now clears the same card in all other open tabs and closes the shared OS notification. Auto-dismiss and remote dismiss actions only clear the local card.

v0.18.4 — PWA Improvements

Released on 2026-06-15

Fixed

  • PWA Push Notifications: The PWA push notification handler no longer suppresses OS notifications when any same-origin window is open. Notifications are now surfaced unless a visible PWA window is already on the push's target path, ensuring users receive notifications even with background or different-page tabs open.
  • PWA Fetch Handler: Resolved an issue where the PWA fetch handler could throw 'Failed to convert value to Response' by intercepting cross-origin requests and resolving respondWith() with undefined. The handler now explicitly skips cross-origin requests and always returns a valid Response.

Improved

  • PWA Notification Badge: Added a dedicated monochrome white-silhouette notification badge (icon-badge.png) for Android devices. This prevents the full-color icon from being collapsed into a white blob when masked by Android's badge rendering.

v0.18.3 — Workflows & Connectors

Released on 2026-06-14

Fixed

  • Workflow runs from a freshly-published workflow now execute immediately — previously, workflows created or published from the UI would accept their trigger (webhook returned 202, dispatch reported a match) but the run never executed and never appeared in run history until the server was restarted. The per-workflow worker was being spawned bound to the HTTP request context, so it died the instant the response was sent; the queue lingered with no live consumer and runs piled up undrained. Workers are now pinned to the server lifetime, so a publish, toggle, or hot-reload from any HTTP handler produces a worker that survives the request. Publishing a new workflow (or re-publishing one) never interrupts another workflow's in-flight run.
  • Connector nodes that require an authenticated identity now work from workflow runs — operations gated on the logged-in user (e.g. notifications.send_to_push_id) returned not authenticated when fired from a headless workflow run, even though they worked when tested manually through the UI. Connector nodes now run as the workflow's owner.

Changed

  • Workflow dispatch is no longer silent — the router now logs when a run is enqueued, when a matched trigger has no queue or no live worker (the run would otherwise vanish without a trace), and when a worker is spawned or stops. This makes a run that fails to execute debuggable from the logs instead of leaving no evidence.

Improved

  • CI performance and reliability:
    • Shared caches: A new ci-cache-warm.yml workflow warms shared caches (Go build, module, and templ binary) on push:master, making them available for all PRs.
    • Faster PR tests: PR tests now efficiently restore Go build caches and utilize a two-tier strategy: a fast full suite without -race, followed by -race only on packages changed in the PR to minimize runtime.
    • Conditional job execution: Go and frontend jobs are now gated by dorny/paths-filter, running only when their respective files change.
    • New frontend build job: A dedicated job with caching for Node.js and Vite builds (gated on fe/** changes) has been added.
    • Nightly race detection: A new nightly-race.yml workflow runs the full -race suite daily, ensuring race conditions are caught in packages not frequently touched by PRs.

v0.18.2 — GitHub Connector

Released on 2026-06-14

Added

  • Enhanced GitHub connector with support for reviews.
  • Added branch-related functionalities to the GitHub connector.
  • Introduced label management features for the GitHub connector.
  • Enabled search capabilities within the GitHub connector.
  • Integrated GitHub Actions support.
  • Added webhook functionalities.
  • Implemented comment-edit operations for the GitHub connector.

v0.18.1 — GitHub Connector

Released on 2026-06-14

Added

  • GitHub Connector Enhancements:
    • Pull Request Operations: Introduced new operations including get_pr_diff (fetching a PR's unified diff), merge_pr, create_pr, and create_or_update_file (committing a single file, supporting both creation and updates with automatic blob SHA lookup).
    • Expanded GitHub API Coverage: Added comprehensive operations for:
      • Repositories: get_repo, list_branches, list_commits, list_forks, create_fork, list_stargazers, star_repo, unstar_repo.
      • Issues: get_issue, update_issue, list_issue_comments.
      • Pull Requests: get_pr, list_pr_files, update_pr.
      • Releases: list_releases, get_latest_release, get_release, create_release, update_release, delete_release.
      • Tags: list_tags.
      • User: get_me.
    • Health Check: Integrated a token-based HealthCheck for the connector (GET /user), providing an "auth" OpHealth entry.
    • Documentation: Added comprehensive documentation for the full operation set, health check, and required OAuth scopes.

Changed

  • Renamed the install-rtk-termux.sh script.

v0.18.0 — Core & Admin

Released on 2026-06-14

Added

  • Conversation UI rebuilt as a Svelte 5 SPA — the session list and conversation thread (/tools/agents/sessions and /tools/agents/sessions/{id}) are now served by a self-contained Svelte 5 single-page application. Visible changes: an Approvals tab joins Conversation / Commands / Raw in the session header; agent turns with tool events show a Show trace toggle for lazy-loading the thinking + event stream without cluttering the thread; the conversation header shows an idle-countdown badge ("kill in Ns") during the idle-timeout window; the Projects landing page scoped to managed and custom projects is now integrated into the SPA; the composer reuses the full action row (provider/project selectors, bell, attachment). The server now exposes three JSON endpoints that back the SPA: GET /api/sessions, GET /api/sessions/{id}/conversation, GET /api/sessions/{id}/meta, and GET /providers/options.
  • Workflow editor — replay-to-editor imports full run state — the Copy to editor button now pins the run's trigger event payload alongside per-node status overlays and output pre-population. Every node inspector's INPUT dropdown gains an entry for the pinned event so {{.Event.Payload.*}} expressions resolve to the real run's data during an Execute step (n8n-style "retry with pinned input"). A Unpin action on the trigger OUTPUT pane clears the pinned payload. See Canvas editor — Run timeline.
  • Workflow editor — per-expression preview table — template fields that contain multiple {{...}} segments now show a breakdown table in the inspector preview: one row per expression with its rendered value or error, isolating a failing ref without blanking the combined output. Autocomplete now suggests .Event.Payload.*, .Node.<label>.*, .Env.*, and .Trigger.* paths from the live context, and a manual refresh button re-renders when upstream outputs change.
  • Workflow editor — node rename cascades {{.Node.<label>.…}} refs — renaming a node label in the inspector rewrites every reference to that label across all other nodes in the workflow automatically. A toast confirms how many references were updated.
  • Batch template-test expressions endpointPOST /api/workflows/template-test now accepts an expressions array for a per-expression breakdown in one round-trip, replacing N parallel calls that previously triggered rate-limit 429 responses.
  • Custom connector health check — a definition can nominate one operation as a health probe (health_op + optional health_expect in SourceMeta). When set, every instance page shows a Check Permissions button and a status banner — same as built-in connectors. Healthy when the probe operation runs without error (HTTP 2xx / MCP non-error result) and, when health_expect is set, the response contains the expected substring. A failing probe system-disables every operation on that instance (single credential = whole connector verdict) until a passing check clears it. Set from the Health check block on the review / edit form. See Custom connectors — Health check.
  • Session Workspace tab UX — the Workspace rail tab on the session slide-over gains: count badge showing active session connectors; inline rename (pencil icon on each card); auto-generated default label when an instance is added; dirty-tracking per field so Save/Test send only edited values; Reset button that appears while edits are pending; single Test button that exercises the config currently on screen (live field values overlaid on stored config for the probe, never persisted). See MCP — Workspace tab (UI).
  • Admin — Enhanced Tag Management:
    • owner: tags now display human-readable names (display_name) in pickers and chips, with resolutions for custom connectors and workflows.
    • owner: tags are immutable and cannot be modified or deleted, enforced by ErrOwnerTagImmutable guard.
    • Contextual filtering for owner: tags: hidden from the /admin/tags page, but visible in resource/connector pickers with display names.
    • Orphaned owner: tags are automatically deleted.
  • Admin — Agents Navigation Control: The Agents navigation link now respects tool access control policies.

Changed

  • Template engine — missingkey=zero — the workflow template engine switched from missingkey=error to missingkey=zero. A payload field that is simply absent (e.g. a webhook body without an action key) no longer fails the node — it renders the zero value (<no value> for map fields) and the run continues. Wrap optional fields with {{ .Event.Payload.action | default "" }} for a clean empty string.
  • Session workspace discoverabilitywick_list, wick_search, and wick_get now accept an optional session_id argument. Passing it causes wick_list to include this session's sw_… workspace instances alongside regular connectors and return a session_config_bases array (connectors that can be cloned but haven't been added yet). wick_search now also matches workspace instances so a connector spun up for the session is findable. For wick_get, session_id is a separate argument — never append it to the connector id.
  • Session instance status — a workspace instance in wick_list / wick_search results reports kind: "session". When its config is incomplete the status is needs_setup_workspace (distinct from a saved connector's needs_setup), directing the user to the session Workspace tab rather than the admin dashboard.
  • AllowSessionConfig auto-on — the per-instance Allow per-session config override toggle now defaults to enabled for any instance whose connector module declares the capability (e.g. httprest). No manual admin toggle required to make an eligible connector available for session cloning; admins can still turn individual rows off.

Fixed

  • Agent node session: "new" without session_init — agent nodes with session: "new" (or any ad-hoc wf_adhoc_<uuid> session) no longer fail with "cannot find the path" when there is no session_init node upstream. The session directory is created automatically before the first turn.
  • Execute step — clearer missing-upstream error — when an Execute step on a node references {{.Node.<label>.…}} for a node that has no output yet, the error message now names the blocking node explicitly instead of surfacing a raw Go-template nil-pointer panic.

Improved

  • Binary Size Reduction: Reduced the release binary size from 84MB to 55MB by stripping symbols and DWARF via -s -w in LDFLAGS and disabling Vite sourcemap output for SPA bundles.

v0.17.0 — Connectors & Access Control

Released on 2026-06-13

Added

  • Custom Connectors — build LLM-callable connectors from the admin UI, no Go code or redeploy. Three creation paths from Connectors → + New connector:
    • Paste a cURL — deterministic parser splits the command into per-instance configs (base URL, secrets) and per-call inputs; an AI tab (shown when a structured-output provider is configured) extracts the same shape from fetch() snippets, Postman fragments, or prose. The AI tab gains a provider dropdown; the catalog of structured-output-capable provider instances resolves live. Creating a connector now follows a plan-then-confirm contract, with def_schema returning full draft reference (supported widgets, template syntax, validation, icon rules, categories, examples, and decision points) and def_validate dry-running a draft.
    • Connect an MCP server (streamable HTTP) — one server = one connector. Every tool the server lists becomes an operation automatically; tools added upstream appear after a re-sync. Control the surface with an exclude list instead of an import picker. Auth schemes: none, bearer, custom_header, oauth (standard MCP authorization: discovery, dynamic client registration, PKCE browser login, RFC 8707 resource indicator, per-instance accounts with transparent token refresh, and generic OAuth2 code exchange with TokenURL and ExtraParams support), and sso (forwards the calling wick user as a signed JWT validated against /.well-known/wick-pubkey.pem).
    • Manual builder — Meta → Configs → Operations stepper with Go text/template request recipes.
  • Multi-instance custom connectors — instances behave exactly like built-ins (+ New row, Duplicate, per-row credentials); no row is auto-created until you add one. Opt into "single instance only" per definition. See Custom Connectors.
  • Ownership contract — any approved user can create a custom connector; editing or deleting a definition is admin-or-creator only, and instance creators are marked with an owner: tag. The new custom-connector management connector exposes the same lifecycle as MCP operations (scoped per caller) so an agent can build connectors without the dashboard.
  • Connection status & live catalog — MCP definitions show a Connected/Disconnected chip, re-sync per instance (probes run under that instance's account), refresh their tool catalog lazily on wick_get, and connect in the background at startup behind the boot gate.
  • Connector icons — pick an emoji (emoji-mart picker, fully vendored) or paste an inline SVG / base64 image (32KB cap, rendered safely via <img>).
  • Google Workspace connector — one Google OAuth account now drives Drive, Sheets, Docs, and Slides through a single connector (google_workspace, 20 operations). The 8 Drive ops carry over from the old code-only google_drive connector, joined by 12 new ops: file creation (create_doc, create_sheet from CSV, create_slides), Sheets API v4 (sheets_read_range/append_rows/update_range/clear_range), Docs API v1 (docs_append_text/replace_text), and Slides API v1 (slides_get_content/add_slide/duplicate_slide). OAuth scopes expand to drive, spreadsheets, documents, presentations, userinfo.email; the health check probes the granted scopes and reports per-op availability. See Google Workspace.
  • Session workspace (wick_session_workspace MCP tool + session Config tab) — spin up ephemeral connector instances scoped to one session: a private clone of a base connector (point it at staging, use a different key) that appears in wick_list/wick_get/wick_execute for that session only and is purged when it ends. The saved connector rows are never touched. Actions: list / add / duplicate / configure / test / remove. The agent creates blank instances and can open the fill modal, but the user types the config; secrets are stored under a system-only master key, decrypted only at execution time, and never returned to the agent. A connector is eligible only when its module declares AllowSessionConfig and an admin enables the per-instance toggle (the custom-connector definition carries the same allow_session_config flag). The Session Config tab in the agent slide-over now lists instances, allows adding from a base picker, editing/testing/duplicating/removing, with collapsible cards. See Session workspace.
  • ask_user multi-question wizard — pass questions[] instead of a single question to collect multiple answers in one step-by-step modal. Each question has a key, type (choice / multi / rank / dropdown / text / secret), optional options with per-option description, required, placeholder, and help. Single-select options auto-advance; Enter also advances. Response is {"values": {"key": "answer", ...}}.
  • ask_user from stdio — an askuser.sock Unix socket bridges ask_user calls from stdio MCP processes (e.g. a spawned Codex agent) to the running server's web-UI modal without HTTP auth. The gate allowlist now includes ask_user and wick_session_workspace so they are never blocked at the hook level.
  • Per-channel ask_user_enabled — Slack, Telegram, and REST channels each gain an ask_user_enabled config field (default false). Web UI and interactive MCP clients use the global AskUserMode setting. See AskUser policy.
  • Attention notifications — when an ask_user or approval_request SSE event fires while the session tab is in the background, wick plays a short two-tone chime and (with permission) fires a browser Notification. Audio and notification permission are unlocked on the first user gesture.
  • Access control — App Owner tier & per-user isolation — a new is_owner tier sits above admin: the first registered user is auto-promoted, IsAdmin() is true for both owners and admins, but only the App Owner can see every user's sessions. Non-admin users now see only their own sessions, projects, workflows, and skills in the agents UI; session, send, kill, and trace routes are gated by ownership and return 404 (not 403) when a session belongs to someone else. The same ownership check guards the wick_session_info and wick_set_title MCP tools. The Providers section of the UI is now restricted to admin-only access.
  • Tag-based ownership for projects, workflows & skills — each resource gets an owner:{resourceID} tag at create time, with created_by kept as an audit trail; sharing is done by assigning group tags. New admin pages — /admin/projects, /admin/workflows, and /admin/skills — expose a tag picker to manage ownership and sharing. Skills now persist in their own DB table with created_by stamped on upload. Personal projects are auto-created for each user on their first access and project lists are scoped to the user's owned projects.
  • Per-user Slack channels — each wick user can configure their own Slack bot credentials independently. Every non-owner user gets a separate agent_channels row (user_id = <id>); the App Owner row uses user_id = NULL. Saving a bot token hot-adds a new keyed registry instance immediately — no server restart required. Removing the token removes the instance. The Channels menu is now accessible to all logged-in users (admin gate removed).
  • Realtime session-title sync: agentctl refresh_session op + PublishSessionMeta SSE; stdio set_title relays to the daemon, which reloads the registry and pushes the new title to open tabs live.

Changed

  • Connectors no longer auto-create their first instance at boot (single-instance/Fixed modules excepted) — rows are created explicitly via + New row and deleted rows stay deleted across restarts.
  • Outbound MCP requests now emit a debug log trail (URL, RPC method, payload, response, latency) carrying the originating request_id.
  • Gate / ask_user decoupledGateEnabled now controls only the PreToolUse command-gate hook. Turning the gate off no longer disables ask_user.
  • google_drivegoogle_workspace — the code-only Google Drive connector was replaced by the broader Google Workspace connector under a new key. Existing google_drive instance rows are orphaned on restart and must be re-created under the new key.
  • The custom connector builder and manager UI have been overhauled: A sticky action toolbar (Save/Disable/Delete top-right) is now present on the cURL and MCP edit pages, with auto-reload on save and inline "Saved ✓" feedback. Field rows are now labeled cards (Key/Type/Default/Description, Required/Secret switches, trash delete) that stack on mobile. A hideable Navigator (Jump list + JSON tabs) is now docked sticky on desktop and an off-canvas slide-over on mobile. Responsive fixes have been applied across the manager UI.

Fixed

  • Codex model_instructions_file — the per-session soul.md preset was previously passed via the unknown key instructions_files (silently ignored by Codex), so the model never received the session identity block or wick rules. Fixed to use model_instructions_file. The file now lives in the per-session .codex/ dir so concurrent sessions no longer clobber each other's preset.
  • Connector access-control hardening — toggling a connector operation, flipping its admin-only flag, and deleting a connector are now gated server-side (admin-or-owner, returning 403); writing a config field tagged secret likewise requires admin or the connector's owner. The OAuth ConnectorAccount schema separates ExternalUserID (provider-side) from WickUserID (wick platform), fixing session-ownership stamping for connections such as Slack. The wick_skill_sync MCP tool is restricted to admins.
  • The allow_session_config flag for custom connector definitions now correctly persists on edit.
  • Stale broadcaster keys are deleted when the last subscriber unsubscribes.
  • The buffer map is cleaned on slot release, and preempt goroutines are tracked in the wait group.
  • Background rescan goroutines are deduplicated using singleflight.
  • WICK_STRICT_MCP environment variable has been added to the server configuration.
  • Generic OAuth path: response_type=code is added to ExtraParams, and GetUserIdentity failures are handled correctly. Ignored errors in uploadMultipart for Google Workspace are fixed.
  • Session ownership checks (ownsSession helper) are now used consistently, and the sessionProcesses guard pattern is fixed.
  • OwnerUserID is now correctly set when creating a project via the UI.
  • The Agents link in the navigation is now hidden when the agents tool is not running.
  • SetSkillStore is now correctly wired at server startup.
  • created_by is now stamped in the database on skill upload, alongside the owner tag.
  • addSlide for Google Slides now uses actual API-assigned placeholder IDs for title/body text.
  • Interface maps in the registry are now copied using maps.Copy instead of manual loops.
  • Unused loadChannelRows removed; all callers now use loadChannelRowsForUser.
  • All Slack channel instances are now wired at boot; a break that skipped multi-instance wiring has been removed.
  • The seedOwner migration logic now promotes the oldest admin-role user to App Owner when is_owner is unset, handling pre-migration installs correctly.
  • Channel status, health, and lookup handlers now correctly resolve a user's own channel instance.
  • Admin's integration status is no longer leaked to unconfigured users; HasAnyKeyed guards per-user channel fallback.
  • The Channels menu is now visible to all users, not just admins, aligning with per-user channel configuration.
  • The seedOwner migration logic now promotes only the oldest user with the admin role to App Owner.

v0.16.16 — TTY

Released on 2026-06-12

Fixed

  • Resolved an issue where WebSocket upgrades for the terminal (tty) could fail when reverse proxies stripped the upgrade token from the Connection header. The system now correctly re-injects the upgrade token if Upgrade: websocket is present, ensuring successful terminal connections.

v0.16.15 — Systemd & Phoenix

Released on 2026-06-12

Added

  • Daemon auto-enablement of systemd linger on headless installs: The service install command now automatically enables systemd linger for the current user, ensuring the daemon and its child processes persist after SSH session logout on headless Linux servers. systemdStatus now reports the live linger state and provides the exact command if manual enablement is needed.
  • Active Processes panel scoped to current session: The "Active Processes" slide-over panel now filters processes to the current session only. It also displays "queued" requests (pre-PID) with a dequeue action, providing better visibility for accepted-but-not-yet-running requests.

Improved

  • Phoenix get_span surfaces tool catalog and span metadata: The get_span function now returns four previously unexposed signals that were already on the wire:
    • tools: The catalog of tools the model considered, including each tool's name, description (carrying selection preconditions), and raw parameter schema. This allows comparison with a message's tool_calls to understand why a model picked or ignored a tool.
    • invocation_parameters: Model parameters such as temperature, reasoning_effort, and tool_choice (the redundant tools array is stripped).
    • metadata: Passthrough of the producing application's span metadata, including request_id, room_id, user_id, langgraph_node, and question_history_id.
    • token_count *_details: A breakdown of cache_read and reasoning tokens.

v0.16.14 — Memory, Gate, Wick

Released on 2026-06-12

Fixed

  • Fixed memory leak in stream broadcaster by deleting stale keys when the last subscriber unsubscribes.
  • Cleaned buffer map on slot release and tracked preempt goroutines to prevent resource leaks.
  • Deduplicated background rescan goroutines in provider using singleflight to prevent excessive resource usage.
  • Eliminated data race with PartialText by guarding turnBuf writes with a mutex.
  • Propagated request context to PublishAndReload and ToggleAndReload in workflows to ensure proper cancellation and timeout.
  • Prevented timer leak in terminateProc by replacing time.After with NewTimer and Stop.
  • Resolved agent deadlock by releasing agent mutex before stdin write in send() to prevent conflict with drainPending.

Improved

  • Gate auto-approves wick read-only / info MCP tools: The PreToolUse gate binary now has a built-in always-allow list for wick's non-mutating tools — wick_list, wick_search, wick_get, wick_info, wick_list_providers, wick_skill_list, wick_session_info, and wick_set_title. These no longer trigger the per-tool approval prompt. wick_execute and wick_skill_sync remain gated.
  • Title state in agent system prompt: The "This session" identity block injected into every agent's system prompt now includes the session's current title and title_custom flag. The agent reads these from the prompt at spawn time instead of making a wick_session_info round-trip on every first turn.

v0.16.13 — Daemon & Session Titles

Released on 2026-06-12

Added

  • Daemon Systemd Integration: Daemon lifecycle commands (start, stop, status, restart) now delegate to systemctl --user when a systemd-user unit is installed and enabled (Linux/Termux only). This resolves conflicts between PID-file and systemd management, preventing double spawns and ensuring accurate status reporting. The daemon now self-registers its PID and spawn source (systemd INVOCATION_ID) on boot for an accurate PID file, reporting the origin (systemd / CLI). PID-file based management remains unchanged for Windows and macOS.
  • wick_session_info MCP tool: A read-only tool that returns an active session's session_id, title, title_custom, origin, status, and project_id. This allows agents to determine if a session already has an explicit title before attempting to set one.
  • wick_set_title MCP tool: Sets the session's sidebar label and marks title_custom = true. This prevents the auto-derived first-message label from overwriting a chosen title.
  • session.Meta.TitleCustom flag: A new boolean on session metadata. When true, the setLabelIfEmpty process skips the auto-label step, preserving any title set by a human or by an agent via wick_set_title.
  • Auto-title via system prompt: The immutable agent system prompt now instructs the agent to call wick_session_info at conversation start and set a short descriptive title using wick_set_title when title_custom is false. Titles set by a previous turn or by the user are left untouched.
  • Session ID and Channel in System Prompt: The system prompt now includes a "This session" identity block (session_id + channel) on every agent spawn. This ensures agents always have the necessary session context to utilize tools like wick_session_info and wick_set_title.
  • Documentation: Updated documentation for the new wick_session_info and wick_set_title MCP tools and the auto-title behavior.

v0.16.12 — Boot Gate

Released on 2026-06-12

Added

  • Boot gate — "Booting…" holding page during restore: To prevent an empty sidebar or broken session list and 404 errors during the asynchronous provider-storage boot restore, all HTTP requests (except /health and /boot-status) now receive an HTTP 503 page. This holding page displays a spinner and live phase label, auto-polls GET /boot-status every 1.5 seconds, and reloads automatically once the server reports readiness. The /health endpoint remains exempt, ensuring load balancer and Kubernetes readiness probes continue to succeed throughout the restore window. This robust gating mechanism ensures a consistent user experience during the boot process.
  • GET /boot-status: A new JSON endpoint ({"ready":bool,"message":string}) has been added to report whether the asynchronous boot restore has finished. This endpoint is used by the boot gate page and can also be consumed by external health checks that require a deeper "application ready" signal beyond the basic liveness /health check.
  • Agents registry auto-reload after restore: Upon completion of the boot restore process, the agents registry is now immediately rescanned from disk. This ensures that sessions and projects appear in the sidebar without delay, addressing a previous issue where the sidebar remained empty until the next restart due to the registry being scanned before restore had written data. Manual restores initiated from the Provider Storage UI (Restore Now, Restore Selected) also now trigger an immediate registry reload, preventing stale in-memory registry data.

v0.16.11

Released on 2026-06-11

Fixed

  • Provider storage boot restore drops most rows: The iterAll function used GORM's FindInBatches with a custom ORDER BY (provider_type, instance_name, rel_path). FindInBatches paginates using a primary-key cursor (WHERE id > last_max_id), which is only correct when the results are ordered by id. This custom ordering misaligned the cursor, causing iteration to stop silently after the first batch (a known issue, gorm #5027). This led to most rows being dropped during the restore process; for example, on one production instance, ~729 of 8440 rows were processed, and every wick session file was skipped, resulting in empty session directories after restart. The fix replaces FindInBatches with a plain Rows() cursor iterator, which streams every row in a single query pass. This ensures memory usage remains constant while safely allowing custom ordering by including id as a tie-breaker for stable results.

This summary was automatically generated by Gemini AI


v0.16.10 — Memory Management & Tree Repair

Released on 2026-06-11

Added

  • Introduced WICK_MEMORY_LIMIT environment variable for the server, enabling an opt-in soft memory limit that prompts Go's garbage collector to return memory to the OS on constrained hosts, preventing RSS from being pinned at high-water marks.

Improved

  • Optimized both boot-time and manual tree repair processes (RepairProviderStorageTree and store.repairOrphans) to no longer load Content blobs into memory. This drastically reduces transient memory allocations and overall RAM consumption during tree repair operations.
  • Refactored the boot-time provider storage tree repair, moving it out of Migrate() and into the providersync gate. It now runs in a background goroutine only when the sync job is enabled and provider-storage is in use, optimizing startup and resource utilization.
  • Consolidated the tree repair code paths for boot-time and manual UI operations, ensuring both use the same optimized, blob-free RepairProviderStorageTree implementation.

Removed

  • Dropped several one-shot legacy migrations from the Migrate() function, simplifying the database migration process as these migrations are no longer necessary on current database schemas.

Documentation

  • Added WICK_MEMORY_LIMIT to the docs/reference/env-vars.md.
  • Included changelog entries for the new soft memory limit and the repairOrphans memory optimization.

This summary was automatically generated by Gemini AI


v0.16.9 — Memory Optimization

Released on 2026-06-11

Improved

  • Memory hardening — provider storage: listing, explorer, retention, and purge queries no longer load file content blobs into memory. A new size column is persisted on write and backfilled on migrate, so the file-list endpoint reports sizes without fetching content. Folder-zip downloads fetch blobs individually by ID. Fixes an ~800 MiB memory peak on deployments with large backup corpora.
  • Bounded HTTP reads: the http workflow node and the generic internal HTTP client now cap response buffering at 64 MiB and return an error for larger responses. Previously these were unbounded io.ReadAll calls.
  • Webhook body cap: inbound webhook trigger requests are now rejected with 413 if the body exceeds 10 MiB.
  • Access-log middleware: large or streaming request bodies (multipart/form-data, application/octet-stream, text/event-stream, or Content-Length > 64 KiB) are no longer buffered by the logger — the downstream handler reads them directly.
  • Opt-in pprof (WICK_PPROF=1): set this env var to expose Go pprof endpoints on 127.0.0.1:6060 for heap/CPU profiling. Loopback-only; never exposed on the public listener.
  • Opt-in soft memory limit (WICK_MEMORY_LIMIT): set to a size string (e.g. 1200MiB, 2GiB) to tell the Go GC to return memory to the OS aggressively on constrained hosts. Helps boot-time provider-storage restore not pin RSS at its high-water mark on small VMs. Off by default; independent of GOMEMLIMIT. See Environment Variables ▶ WICK_MEMORY_LIMIT.
  • repairOrphans no longer loads file content: the two FindInBatches passes in the provider-storage tree-repair path now omit the Content column, cutting peak memory during orphan repair for large corpora.

This summary was automatically generated by Gemini AI


v0.16.7 — Boot Restore & Observability

Released on 2026-06-11

Improved

  • Asynchronous Boot Restore: Boot restore now runs in a goroutine, preventing server startup blockage for large source sets. The HTTP layer comes up immediately, and restore progress streams to logs.
  • Enhanced Restore Observability:
    • Every restore-skip path logs its specific reason (e.g., environment kill switch, missing job row, disabled job) for easier diagnosis from logs alone.
    • RestoreAll completion reports detailed metrics including total_files, processed, restored, skipped_match, skipped_diverged, and skipped_uncovered to explain the gap between total and restored files.
  • Faster Force Boot Restore: Force boot restore now skips identical files (based on hash match) instead of rewriting every file, making wide restores significantly faster.

Fixed

  • Manual Restore Overwrite: Manual Restore operations now correctly use RestoreAllForce to overwrite diverged files, ensuring desired changes are applied instead of retaining disk copies.
  • Error Handling: iterAll batch errors are now properly returned instead of being swallowed.
  • Postgres Compatibility: purgeExpired now uses a Postgres-native interval query, resolving an error caused by the SQLite-only datetime() function on Postgres.

This summary was automatically generated by Gemini AI


v0.16.6

Released on 2026-06-11

Fixed

  • Agent node max_turns not cleared on reuse: When a workflow reused an existing session and the agent node had max_turns: 0 (unlimited), the previously-persisted cap from an earlier run was silently kept. The node now always writes the value — including 0 — so switching back to unlimited works correctly.

Added

  • Bitbucket connector — PR review actions: Three new destructive operations for acting on pull requests. These operations are OpDestructive (default off, admin opt-in):
    • approve_pull_request: Approve a PR as the authenticated user (idempotent).
    • request_changes_pull_request: Flag a PR as needing changes (mutually exclusive with approve).
    • merge_pull_request: Merge a PR into its destination branch, with optional merge_strategy (merge_commit, squash, fast_forward), message, and close_source_branch. This operation is irreversible.

This summary was automatically generated by Gemini AI


v0.16.5 — Provider Storage Sync

Released on 2026-06-10

Changed

  • Provider Storage Sync is now opt-in: The job ships disabled by default on fresh installs. Enable it from Tools → Jobs → Provider Storage Sync → Settings → Enabled.

Added

Fixed

  • Bounded boot restore memory: restoreAll now iterates files in batches of 50 instead of loading the full set into memory, preventing OOM on large credential trees. Progress is logged at each percentage point.

This summary was automatically generated by Gemini AI


v0.16.4

Released on 2026-06-10

Improved

  • Provider Sync Memory & Progress: Optimized providersync restore operations for reduced memory usage and enhanced user feedback.
    • Switched from listAll to iterAll with FindInBatches(50) to process content blobs in batches, significantly reducing peak memory consumption.
    • Implemented countAll to accurately track the total number of files for restoration.
    • Added detailed progress logging, displaying restore percentage updates (up to 100 lines) and clearly marking the start and completion of the process.

This summary was automatically generated by Gemini AI


v0.16.3 — AI Agents

Released on 2026-06-10

Features

  • Workflow Environment Management via MCP: Introduced workflow_env_get, workflow_env_set, and workflow_env_delete operations for the workflow connector.
    • Enables AI agents to read, update, and remove workflow environment variables without touching the UI.
    • Secret values retrieved by workflow_env_get are masked as ••••••••.
    • When setting secret fields via workflow_env_set, callers must provide wick_enc_ tokens.

Fixed

  • Provider Storage Sync: The provider-storage-sync job is now disabled by default (AutoEnable: false) on new installations.
    • This prevents the service from automatically activating unless explicitly enabled by the user.
    • Boot restore and watcher startup for provider-storage-sync now correctly check if the job is enabled before initiating, ensuring resources are only utilized when intended.

This summary was automatically generated by Gemini AI


v0.16.2 — Sub-Agent Delegation & Installation

Released on 2026-06-10

Improved

  • Refactored sub-agent delegation logic for simplicity and clarity.
  • Improved sub-agent configuration loading and validation.

Fixed

  • Adjusted Dockerfile and entrypoint script to correctly set the working directory.
  • Corrected agent dependency installation within the sub-agent setup script.
  • Updated requirements.txt to include missing dependencies for core agents.

Changed

  • Updated documentation links.

Removed

  • Unused script files.

This summary was automatically generated by Gemini AI


v0.16.1 — Install Wrappers

Released on 2026-06-10

Added

  • Introduced thin install.sh and install.ps1 wrappers for scaffolded projects, which delegate to Wick's canonical install scripts. This centralizes installation logic and ensures projects automatically benefit from script improvements without re-scaffolding.
  • Enhanced Wick's canonical install scripts to honor APP and REPO environment variables, allowing them to function correctly both standalone and when invoked via the new wrappers.

Fixed

  • Updated the canonical install scripts to use the correct GitHub Pages URL.

This summary was automatically generated by Gemini AI


v0.16.0

Released on 2026-06-10

Added

  • VSCode-style diff editor: The Source Control panel (full mode) now features an inline Monaco diff editor as the primary surface, with a file list on the left and the diff filling the remainder.
  • Auto-select first file: Opening the SCM panel automatically loads the first changed file into the diff editor.
  • Unified diff by default: Diffs now render in unified (inline) mode by default, with a toggle for side-by-side view in the diff header.
  • Hidden unchanged regions: Unchanged lines are collapsed with an "N hidden lines" expand bar, matching VSCode behavior (3-line context).
  • Inline Stage / Unstage / Discard buttons: Diff headers now include per-file Stage, Unstage, and Discard actions directly, removing the need to hover file rows.
  • Auto-show Save button: When editing directly in the diff editor (without needing an "Edit" button), a Save button automatically appears when content changes, applied to both full-mode inline diff and the sidebar DiffModal.
  • Per-session active repository persistence: The selected repository is saved to localStorage keyed by session ID and restored on subsequent opens.
  • Visible whitespace diff: Trailing newline and whitespace differences are now shown in the diff (ignoreTrimWhitespace: false).
  • Wick MCP server pre-approval: The entire Wick MCP server is now pre-approved for spawned agents using --allowedTools mcp__wick, eliminating the need for a static per-tool allowlist.
  • Workflow environment variables and secrets: A new system for managing workflow environment variables and secrets via a dedicated Settings modal. Secrets are encrypted, decrypted at runtime, accessible via {{.Env.KEY}}, and masked in previews and outputs.
  • Workflow webhook trigger: Implemented a webhook trigger with dual endpoints (/webhook/ for published, /webhook-test/ for draft), path-based routing, and a dedicated inspector in the UI.
  • webhook_respond node and RespondMode: Added a webhook_respond node for custom HTTP responses (status, body, headers) from workflows and introduced Trigger.RespondMode (immediately/last_node/respond_node) to control webhook response behavior.
  • Phoenix connector: A new read-only Phoenix connector for LLM span debugging, supporting listing spans by room/app and retrieving full span details.
  • Per-instance OAuth accounts for connectors: OAuth app credentials are now configured per-instance, enabling multiple sub-accounts for a single connector. New access policy flags (MultiAccount, EnableSSO, AllowOthersConfigure, AllowOthersConnectSSO) and an owner tag system are introduced.
  • Admin user creation: Admins can now create new user accounts directly from the Admin panel by entering an email, with a system-generated 5-word passphrase shown once for copy.

Fixed

  • Repository without commits: git show HEAD:<path> on a repository without any commits no longer returns a 400 error; an "invalid object name 'HEAD'" is now treated as an empty original side.
  • 4xx request logging level: HTTP middleware now logs 4xx responses at the warn level instead of error, reducing noise for expected client errors.
  • GORM record not found log noise: GORM logger is set to Silent, preventing record not found queries from printing to stdout.
  • Diff not updating after save: After saving a file, the diff editor now correctly shows the updated content.
  • Diff race condition on file select: The Monaco diff editor is now mounted only after diff data is loaded, preventing empty-content rendering on first file selection.
  • Mobile autofocus: Skipped autofocus on inputs for touch devices (mobile, tablet) to prevent the on-screen keyboard from popping up unexpectedly on page load. On desktop, the "Ask anything…" composer is now preferred over the search box when both are present.
  • Workflow publishing with deleted nodes: Workflows with deleted scaffolded start/end nodes can now publish successfully, requiring only at least one trigger. Dangling graph entry references are now treated as warnings instead of publish-blocking errors.
  • UI theme issues: Various UI theme fixes for dark mode hover states, status/kind chip selection, and toolbar buttons were implemented.
  • Multi-trigger dispatch: Fixed a bug where only the first webhook trigger per workflow was dispatched correctly.
  • Slack connector token visibility: The bot_token and user_token fields in Slack connector configuration are now always visible.

Improved

  • Internal documentation structure: Reorganized internal design documentation into status-based folders (archive, todo, in-progress) and updated all references.
  • Workflow documentation clarity: Cleaned up internal comments and documentation, replacing yaml and file-based references with format-neutral descriptions to reflect DB-primary JSON storage for workflows.
  • Workflow data storage optimization: Removed unused yaml:"..." struct tags and MarshalYAML methods from workflow types, as workflow storage is now DB-primary JSON.
  • Canvas experience: Enhanced the workflow canvas with trigger validation badges, edge hover highlighting, and an "Open inspector" context menu option for nodes and triggers.
  • Connector operations management: The operations section in connector detail pages now includes pagination, search, multi-select, and bulk Enable/Disable actions.
  • MCP connector/account listing: The MCP wick_list command now supports filtering by kind=connector|account with composite IDs for account entries.

This summary was automatically generated by Gemini AI


Per-instance OAuth accounts & MCP multi-identity

Added

  • Per-instance OAuth app credentials: ClientID and ClientSecret moved from a shared server-wide setting to each connector instance's Configs. Every instance now carries its own OAuth app registration, so different instances can use different OAuth apps.
  • ConnectorAccount table: connected OAuth accounts are stored as sub-records of a connector instance, not as duplicate rows. Each account stores DisplayName, AccessToken, and a DisabledOps JSON list of per-account op overrides.
  • Access policy flags on connector instances: four new boolean fields control per-instance sharing:
    • EnableSSO — activates the "Connect Account" OAuth flow on this instance.
    • MultiAccount — when true, each user connect adds a new account entry; when false, reconnect replaces the existing token.
    • AllowOthersConfigure — non-admin users with tag access may edit credentials and settings.
    • AllowOthersConnectSSO — non-admin users with tag access may initiate the OAuth flow.
  • Owner tag: every connector instance records an owner:{rowID} tag so the creating user retains access even when filter tags change.
  • Access Policy section in the connector detail UI — surface for the four flags above.
  • Operations section redesign — paginated op list with search, checkbox multi-select, and bulk enable/disable. Shared OpsSection component is reused across the detail page and per-account op views.
  • Per-account operation disable list — each ConnectorAccount can carry a JSON list of op keys to disable. wick_execute with an account-scoped tool_id rejects those ops before reaching ExecuteFunc.
  • MCP wick_listkind and parent_id fields: every entry now includes kind ("connector" for a standard instance, "account" for a connected OAuth account) and parent_id (the connector row ID when kind="account").
  • MCP wick_get — composite id: accepts a connectorID/accountID composite id returned by wick_list account entries; tool IDs are scoped with an @accountID suffix when a specific account is targeted.
  • MCP wick_execute — account token injection: AccountID is extracted from the composite tool_id; the selected account's AccessToken is injected as user_token / auth_mode=user_token before ExecuteFunc runs. Per-account disabled ops are enforced before execution.
  • Destructive op warning in MCP responses: ops marked OpDestructive now append ⚠ DESTRUCTIVE: Always confirm with the user before executing this operation. to their description in wick_list, wick_search, and wick_get results.
  • Slack connector: BotToken and UserToken are now always visible in the admin form (removed visible_when conditional display). ClientID and ClientSecret are new per-instance fields for OAuth app setup used by the Connect Account button.

Changed

  • Destructive ops default ON: connector.OpDestructive ops now default to Enabled=true on every new row (previously defaulted false). The LLM is responsible for confirming destructive intent with the user; the system-level default-off gate is removed.
  • SystemDisabled is advisory-only: a health-check lock (system_disabled=true) no longer hard-blocks execution. If the admin has explicitly set Enabled=true, the call proceeds; the advisory is recorded in run history. Previously SystemDisabled was an irresistible gate.

Phoenix connector, Webhook trigger & Canvas improvements

Added

  • Phoenix connector (phoenix): built-in read-only connector for Arize Phoenix LLM observability. Three operations — list_spans_by_room (list LLM spans for a conversation session), list_spans_by_app (list root spans by metadata['app_id']), and get_span (full detail: messages, tool calls, token usage, cost). Registered under the Observability tag. See Phoenix connector.
  • Spawned-agent tool pre-approval widened to the whole wick MCP server: agents now spawn with --allowedTools mcp__wick (server-level) instead of a static five-tool list, so wick_manager_* (and wick_info, ask_user, wick_skill_*, wick_encrypt/wick_decrypt) no longer hit the command gate's "always ask" prompt on the gated path. Not a security change — wick still enforces per-op access server-side; see Wick Manager → Command gate & management ops.
  • Workflow env & secrets: per-workflow key-value environment variables, configurable via ⋮ → Settings in the canvas editor. Values are accessible in every node template as {{.Env.KEY}}. Marking a var as Secret encrypts it at rest (wick_cenc_ token in workflows.env_values DB column); the engine decrypts with a per-run cache so plaintext only lives in memory during execution.
  • Secret masking: secret values are automatically masked as •••••••• in template preview (workflow_template_test), execute-step output, SSE events, and stored run state. The mask is applied with the existing single-pass algorithm, with overlapping-secret protection.
  • Themed UI components: <Select> dropdown and toolbar ⋮ more menu are now fully theme-aware with click-outside close. The ⋮ menu exposes the new Settings action alongside existing workflow actions.
  • Webhook trigger — dual endpoints: every webhook trigger now gets two distinct HTTP endpoints. POST /webhook/{wf_id}/{slug} targets the published workflow (production traffic). POST /webhook-test/{wf_id}/{slug} targets the draft workflow for testing without publishing. Both URLs are shown side-by-side in the trigger inspector with copy buttons and a tabbed Test / Live preview.
  • Webhook trigger — slug-based path storage: the trigger's path field now stores only the URL-safe slug (no leading slash, no wf_id prefix). The engine constructs the full request path at runtime, keeping trigger JSON portable across workflow IDs.
  • Webhook trigger — respond_mode: new field controlling when and what the HTTP endpoint returns to the caller. immediately (default) returns 202 Accepted at enqueue and runs async. last_node blocks until the workflow finishes (≤ 30 s) and returns the last node's JSON output with 200. respond_node blocks until a webhook_respond node fires, then returns that node's custom status, body, and headers. Both blocking modes time out with 504 after 30 seconds.
  • webhook_respond node: new node type (type: webhook_respond) that sends a custom HTTP response back to the webhook caller. Fields: respond_status (int, default 200), respond_body (Go template string), respond_headers (map, values are template-rendered). Active only when the firing trigger has respond_mode: respond_node; acts as a no-op pass-through in all other modes so the workflow still validates cleanly. The first node to complete in a run wins; subsequent ones are ignored.
  • Publish-time respond_node validation: publishing a workflow with respond_mode: respond_node on a webhook trigger but no reachable webhook_respond node from the trigger's entry_node now raises a Warning in the Validation panel. The publish still proceeds; at runtime the caller receives 502 Bad Gateway if no respond node runs.
  • Canvas validation badges on trigger cards: trigger cards now show inline warning badges when a trigger has a configuration issue detectable at validation time (e.g. respond_mode: respond_node with no reachable respond node). Validation also runs on canvas load.
  • Canvas edge hover highlight: hovering an edge in the canvas highlights it for easier graph tracing.
  • Canvas context menu — "Open inspector": right-clicking a node now includes an "Open inspector" option alongside delete, opening the inspector panel directly.

Fixed

  • Webhook multi-trigger dispatch: workflows with more than one webhook trigger (different slugs) now correctly dispatch each inbound call to its matching trigger and entry node. Previously, the dispatch loop keyed candidates on workflow ID alone, causing all but one trigger to be silently dropped.
  • Webhook entry-node routing: each webhook trigger routes to its own entry node; prior to this fix every inbound webhook always started at the first entry node regardless of which trigger matched.
  • Publish enabled-flag preservation: publishing a workflow no longer resets the enabled/disabled flag set before the publish action.
  • Theme / dark-mode fixes: executions panel, toolbar, and history tab now render correctly in all themes including dark mode.

v0.15.8

Released on 2026-06-07

Added

  • Workflow fixed-mode template guard: Publishing a workflow now fails with an error (previously a warning) if any field with arg_modes set to fixed contains a Go template ({{...}}), preventing the silent shipment of broken URLs, bodies, or prompts. Draft saving is unaffected.
  • Workflow auto-switch to Expression: The workflow canvas editor automatically switches a fixed field to expression mode when the user types {{ into it.
  • Workflow wick:"mode=fixed|expression" config tag: Connector and channel op authors can use this new tag to lock the Fixed ⇄ Expression toggle for a schema field, greying out the toggle in the editor. The toggle now renders on every field kind in the inspector.
  • Wick Manager top-level MCP tools: The wickmanager connector's operations are now surfaced directly in tools/list as wick_manager_<op> tools (e.g., wick_manager_app_list). This allows LLM clients to discover and call manager operations without the wick_listwick_getwick_execute discovery cycle. These tools work over both stdio and the Streamable HTTP/SSE transport. To avoid double-exposure, wickmanager is excluded from wick_list and wick_search.

Fixed

  • MCP SSE transport dispatch: Tools such as wick_info, ask_user, wick_list_providers, wick_skill_list, and wick_skill_sync now work correctly over the Streamable HTTP/SSE transport. Previously, they were advertised in tools/list but returned "unknown tool" on tools/call. The SSE dispatcher now delegates all non-streaming tools to the canonical handler, ensuring identical behavior across all transports.

This summary was automatically generated by Gemini AI


v0.15.7

Released on 2026-06-07

Fixed

  • Chat Layout:
    • Implemented a FullBleed layout for the session/chat page, resolving issues with incorrect padding, misaligned headers, and the composer sliding under the keyboard.
    • Adjusted the agents shell to use h-[100svh] for improved composer positioning, preventing it from being cut off on first paint before the dynamic viewport stabilizes.
  • Netboot Setup: Ensured netboot.Setup() is properly executed for the released wick-agent binary by integrating its call into postgres.NewGORM. This prevents dead-code elimination and guarantees that DNS/CA fallback is correctly initialized, addressing issues particularly observed on Termux.

This summary was automatically generated by Gemini AI


v0.15.6

Released on 2026-06-07

Added

  • Source Control panel now renders as a full-screen overlay on mobile and retains pin/resize behavior on desktop.
  • Native DNS and CA fallback implemented for Android/Termux, resolving network and SSL certificate issues for the pure-Go binary.

Fixed

  • Termux/Android DNS and CA fallback now actually runs in the released wick-agent binary. The previous fix (#589) wired netboot.Setup() only into the in-repo entry points; Go's internal-package rule prevented the separate wick-agent wrapper module from importing it, so the fallback was dead-code-eliminated from the shipped binary. Setup is now called inside postgres.NewGORM() — a chokepoint every entry point reaches before the first DNS lookup — and is guarded by sync.Once so it runs exactly once.
  • Empty Slack pings (bare @bot mentions) are now normalized, ensuring the agent greets the user instead of stalling.
  • System-turn pills (e.g., [Slack thread context]) are now responsive on mobile, wrapping text and fitting within container width to prevent overflow.

This summary was automatically generated by Gemini AI


v0.15.5 — AI Agents

Released on 2026-06-07

Added

  • Wire agent-node max_turns to claude --max-turns for limiting agent conversation turns.
  • Per-app PWA name and session cookie support to prevent collisions when co-hosting instances on different ports.
  • One-click re-run functionality for past workflow runs, using the original trigger event.
  • Source Control (git) panel for agent sessions, offering status, diff, stage/unstage, commit, discard, branch management, and history viewing.

Fixed

  • Pre-approve Wick MCP meta tools for headless agent spawns and surface agent error subtypes in result(is_error) events.
  • Agents can now read their own skill bundle files located under ~/.claude/skills.
  • Improved agent-node failure diagnosis by logging subprocess exit code and stderr tail on abnormal exit.
  • Self-heal stale agent --resume sessions by clearing the cli_session_id if the conversation is not found.
  • Ensured agent session's current working directory (CWD) remains stable after a conversation exists to prevent resume failures.
  • Resolved toolbar dropdowns clipping on mobile and desktop in workflows.
  • Admin navigation tabs now wrap on mobile viewports instead of overflowing.
  • Admin data tables now stack into responsive cards on mobile viewports, including avatar dropdown visibility.
  • Enabled Tailwind's hoverOnlyWhenSupported to apply hover styles only on hover-capable devices, preventing stuck hover states on touch screens.
  • Prevented mobile sidebar burger from overlapping page content in agents and tidied workflows list display on mobile.
  • Made the workflow Run tab usable on mobile by switching to a single-pane view (runs list OR run detail).
  • Corrected transparent surfaces in light theme and ensured bottom tabs panel is visible in the workflow editor.
  • Stopped auto-adding ALLOWED_ORIGINS to ~/.bashrc during installation to prevent unintentional host allowlist widening.

This summary was automatically generated by Gemini AI


Native DNS + CA fallback for Android/Termux

Added

  • The wick binary now configures DNS and TLS automatically on Termux/Android — no proot or manual SSL_CERT_FILE required. When /etc/resolv.conf has no usable nameserver, a pure-Go fallback resolver is installed using $PREFIX/etc/resolv.conf, Android system properties (net.dns1/net.dns2), or public defaults (1.1.1.1, 8.8.8.8) — in that order. A new WICK_DNS_SERVERS env var (comma/space-separated) overrides all of these. TLS: when $PREFIX is set and no system cert store exists, SSL_CERT_FILE is pointed at $PREFIX/etc/tls/cert.pem. Both are no-ops on normal Linux/macOS hosts.

Slack empty-ping fix & session-context pill responsiveness

Fixed

  • Slack connector: a bare @bot mention with no message text no longer leaves the agent stalled. The empty turn is normalized to a short greeting instruction so the agent responds naturally.
  • Session-context pill (the injected system-turn badge in the session view) now wraps long text and is width-capped, preventing overflow on mobile viewports.

Source Control panel for agent sessions

Added

  • Source Control panel on the session detail page (/tools/agents/sessions/<id>): a docked, pinnable VSCode-style SCM sidebar. Features: multi-repo discovery of all git repos inside the session cwd; tree or list view for staged / unstaged changes (toggle persisted in localStorage); per-file stage (+), unstage (−), and discard (↺) actions (discard is destructive — confirms before running git restore / git clean); one-line commit input; branch dropdown with checkout and create+checkout; Pull / Push buttons with ahead/behind count; Monaco diff editor modal (git-correct diffs for staged, unstaged, and untracked files); commit History tab with per-commit file list and diffs; edit + save from the diff modal. Pin state and panel width (240–640 px, default 260 px) persist in localStorage. Live updates via a server-side fs watcher that pushes git_status SSE events — the Changes section and th e Source rail tab badge refresh with zero polling. Backend: new Go package internal/agents/scm/; endpoints under /tools/agents/api/sessions/{id}/git/*. Requires git on PATH.

Workflow run re-run

Added

  • One-click re-run button in the workflow run detail panel. Re-fires the current draft with the original run's trigger payload (same input, fresh timestamp). Endpoint: POST /api/workflows/runs/{id}/{runID}/rerun. The UI jumps to the newly created run immediately after firing.

Admin & Workflow Mobile Responsiveness

Fixed

  • Admin nav tabs wrap to a second row on narrow screens instead of overflowing.
  • Admin data tables (connector instances, users, tools, jobs) and the connector-detail operations table render as stacked cards below 768 px via new .resp-table / .resp-table-wrap CSS utilities.
  • Hover styles are now only emitted for devices that support hover (hoverOnlyWhenSupported), preventing buttons from staying stuck in :hover state after a tap on touch screens.
  • Agents content area and the workflows SPA header receive top padding on mobile so the fixed sidebar burger no longer overlaps page titles.
  • Workflows list search input is now fluid and the count label no longer wraps; card metadata is hidden on very small screens to avoid overflow.
  • Workflow Run tab renders a single-pane list-or-detail view on mobile with a Back button; the run-detail Nodes/Events grid collapses to a single column below md.

v0.15.4 — Mobile & Workflow

Released on 2026-06-06

Added

  • Enhanced Canvas interaction for touch devices: enabled one-finger touch pan, two-finger pinch-zoom, and node dragging via touch-action:none. Tap-to-add functionality from the Palette with nodes dropping at viewport center. Connection ports are now visible on coarse/no-hover pointers.
  • Optimized Node/Trigger detail modals for mobile, collapsing to a single pane with an Input/Editor/Output switcher and near-fullscreen display.
  • Restored drawer behavior for the Agents sidebar on short/landscape-phone viewports.
  • Implemented progressive disclosure for the Toolbar on mobile, folding Save/Discard/Unpublish into a "More" menu and hiding secondary chips/History.
  • Synchronized PWA theme-color with the active theme (all 12 themes) via runtime CSS variable sync.

Fixed

  • Resolved 403 errors for internal agent MCP connections by exempting /mcp requests from loopback hosts (127.0.0.1, ::1, localhost) in the hostAllowlistHandler.
  • Corrected workflow version history display and functionality:
    • Added JSON tags to entity.WorkflowVersion for correct field serialization (id, workflow_id, kind, body, message, created_by, created_at).
    • Enabled per-row deletion and "Clear all" functionality in the History tab, with auto-refresh after autosaves.
    • Integrated a reusable JSON diff viewer for comparing workflow versions, featuring changed-line highlighting, an All/Diff-only toggle, and scroll synchronization.
    • Prevented redundant workflow versions by having SaveDraft skip new snapshots when the body is identical to the last draft.
    • Introduced new API endpoints: DELETE /api/workflows/versions/{id}/{versionID} and DELETE /api/workflows/versions/{id}.
    • Adjusted autosave debounce from 800ms to 2000ms.

Improved

  • Replaced the free-text "Workspace override" input on the session_init node inspector with a dropdown populated from existing projects, preventing runtime errors from invalid project IDs.

This summary was automatically generated by Gemini AI


Agent fixes & workflow version history

Added

  • Delete a single history snapshot via the trash button in the History list.
  • Clear all button removes every snapshot for the current workflow (with confirmation).
  • History list auto-refreshes after each autosave.
  • New REST endpoints: DELETE /api/workflows/versions/{id}/{versionID} (single snapshot) and DELETE /api/workflows/versions/{id} (all snapshots).
  • Version compare now renders a real colored diff with an "All / Diff only" toggle; the same JsonDiff component is reused by the JSON preview tab.

Fixed

  • Agent-node max_turns is now wired to Claude's --max-turns flag. Previously the field was stored but never forwarded to the subprocess, making it a silent no-op. 0 continues to mean unlimited (provider default).
  • Spawned Claude agents no longer stall on an interactive permission prompt for wick's own MCP tools. All five meta-tools (wick_list, wick_search, wick_get, wick_execute, wick_list_providers) are pre-approved via --allowedTools at spawn time.
  • Spawned Claude agents can now read skill files in ~/.claude/skills/ (and the matching ~/.codex/skills/, ~/.gemini/skills/, ~/.agents/skills/ paths). Claude spawns with --add-dir ~/.claude/skills when the directory exists; the system-prompt path table carves out skills/** as read-allowed while the rest of ~/.claude/** stays denied.
  • Persistent (workflow_global) sessions now self-heal a stale --resume ID. When Claude exits with "No conversation found" the pool clears the stored CLI session ID so the next spawn starts fresh instead of retrying a dead ID.
  • Project backfill is skipped once a session already has a CLI conversation, preventing a cwd change from breaking --resume.
  • Agent subprocess failures are now diagnosable: exit code and a stderr tail are logged on abnormal exit, and an error_during_execution result subtype is no longer surfaced as a blank "agent error: " message.
  • Workflow version history (History tab) now correctly receives id, kind, message, created_at, and body fields; a missing JSON serialization on the entity caused the tab to display empty rows.

Changed

  • Autosave debounce raised from 800 ms to 2 s.
  • Identical-body autosaves no longer create a new draft snapshot (dedup).

Improved

  • Workflow editor: session_init node "Workspace override" field is now a dropdown populated from existing projects instead of a free-text input, preventing the ensure session: project not found runtime error caused by typing a non-existent project ID.

v0.15.3

Released on 2026-06-06

Added

  • Automated crediting of contributors with @mentions in GitHub release bodies.
  • Enhanced release preparation to paginate commit lists and extract GitHub @login handles for contributors.
  • Updated release creation to include a "Contributors" section in the release body.

Fixed

  • Resolved HTTP 500 errors for the GET /mcp SSE handler by correctly probing and using http.Flusher support via the middleware Unwrap chain with http.NewResponseController.
  • Corrected the tools/call SSE path, which was silently falling back to JSON due to the same http.Flusher detection issue.
  • Added a regression test to ensure GET /mcp properly opens SSE streams through Unwrap-only writers.

Improved

  • Documentation for workflow/agent loopback MCP access and connection troubleshooting.

This summary was automatically generated by Gemini AI


v0.15.2 — AI Agents

Released on 2026-06-06

Added

  • Implemented a doc-sync subagent with a PreToolUse(Bash) hook to keep docs/ synced with code changes before pull requests.
  • Introduced a per-provider SendMode configuration (default, append, queue, spawn) for agent instances.
  • Added a cross-session Active Processes panel (accessible from session view and providers page) for real-time visibility into provider, PID, queued count, and agent lifecycle.
  • Integrated internal/processctl for canonical PID liveness checks across Unix and Windows.

Fixed

  • Resolved an issue where spawned Claude agents could not fully connect due to incomplete MCP Streamable HTTP transport, by implementing GET and DELETE methods for /mcp and setting an Mcp-Session-Id header during initialization.
  • Addressed a double-spawn bug in Codex agents by ensuring the agent slot follows the agent, not the process, and is not released prematurely on turn-end or internal respawn kills.
  • Corrected Stop() behavior for respawn-mode agents between turns to ensure proper slot release.
  • Updated ReconcileDead to correctly skip respawn-mode agents when they are idle between turns.
  • Wired Codex stdin to the null device to prevent hangs on Windows.
  • Resolved a data race in capacity_test by injecting provider capacity directly instead of relying on asynchronous provider.Save operations.

Improved

  • Relaxed Claude spawn behavior to drop --strict-mcp-config by default, merging the Wick server with existing MCP servers, while offering WICK_STRICT_MCP for isolation.
  • Updated the contributing guide to include details about the doc-sync workflow.
  • Synchronized public documentation with v0.15.1 features, including transform (jq engine), slack (channel-node workflow actions), workflow (import/publish), workflow/state (run detail/delete), branch/classify, and the bitbucket connector.
  • Documented WICK_STRICT_MCP and WICK_DISABLE_SHARED_MCP environment variables.
  • Enhanced agent message handling by replacing the single-slot pendingMsg with a pendingQueue to process messages sent mid-turn in order.
  • Implemented per-provider and global concurrency caps for agent pools, with 0 indicating unlimited capacity.
  • Improved rendering of multi-line configuration descriptions in the management view by interpreting \n as real line breaks.

This summary was automatically generated by Gemini AI


v0.15.1 — Workflow Enhancements

Released on 2026-06-06

Added

  • Import workflows from exported JSON files directly within the UI.
  • Agent nodes now connect to the live MCP HTTP server over loopback, eliminating per-run cold-start latency and duplicate DB connections.
  • Enhanced workflow execution management in the UI, including the ability to delete runs, view richer event and node details, and preview full run JSON.
  • Bitbucket create_pull_request_comment operation now supports inline comments by specifying inline_path and inline_to/inline_from parameters.
  • Workflow events API now supports events_limit for tailing the last N events, returns total and truncated counts, and evicts the index cache upon workflow deletion.
  • Transform nodes now include a jq engine for advanced JSON processing using gojq.
  • Slack workflow action nodes are fully wired to the live Slack API, supporting all 12 action operations (e.g., send message, reply thread, open modal).
  • The workflow canvas now allows setting branch and classify node edge labels, enabling correct routing configuration from the UI.
  • The in-app lifecycle chime now correctly primes the AudioContext on the first user gesture, ensuring sound plays on macOS Chrome.

Fixed

  • Improved robustness for skill .zip imports, correctly handling various archiving layouts from different operating systems and tools, and filtering junk entries.
  • Publishing workflows or MCP/connectors now triggers an immediate hot-reload of the router, ensuring live runs use the freshly published definitions.
  • Agent node skill validation no longer incorrectly rejects skills that are actually available.
  • Agent nodes now incorporate timeout_sec and require_status contracts, preventing silent successes when agents stall or fail to produce a final status.
  • The workflow enable/disable toggle now takes effect immediately without creating an unintended draft.
  • Encryption masking now uses a single-pass algorithm, fixes an overlapping-secret leak, and improves performance.
  • The in-app lifecycle card chime no longer remains silent on macOS Chrome due to WebAudio autoplay policy by calling AudioContext.resume() from a user gesture.
  • The transform node's "jsonpath" engine now explicitly errors when a query is invalid or not applied, instead of silently returning the original input.

This summary was automatically generated by Gemini AI


v0.15.0 — PWA Notifications

Released on 2026-06-05

Added

  • Implemented PWA push notifications for agent lifecycle events.
  • Introduced agent auto-start functionality after installation.
  • Split conversation trace into per-turn index and lazy-loaded event files.
  • Added TraceEventInlineKB and TraceEventMaxKB agent configurations to control trace event storage.
  • Created new API endpoints (GET /sessions/:id/turns/:turn_id and /events/:event_id) for lazy fetching of conversation traces.
  • Integrated UI lazy-loading of conversation traces when "show trace" is clicked.
  • Added an Interrupted field to ConversationTurn to distinguish kill-truncated turns from text-cap truncated turns.
  • Included a Copy button for fenced code blocks in the markdown renderer.
  • Implemented per-session subscription for agent lifecycle notifications, allowing users to opt-in for specific sessions.
  • Added a bell affordance on queue rows to subscribe to session notifications.
  • Introduced a pre-subscribe bell on the new-session composer for immediate subscription upon session creation.

Fixed

  • Resolved token-too-long errors in ReadJSONL for large conversation files by replacing bufio.Scanner with json.Decoder.
  • Updated tests to reflect the trace split storage refactor.
  • Ensured proot is always installed on Termux, not only when codex is present, for broader compatibility.
  • Corrected a race condition where lifecycle push notifications fired before the assistant turn was appended to conversation.jsonl.
  • Eliminated duplicate notifications by immediately closing OS notifications when the Wick application is open and displaying an in-app card.

Improved

  • Clarified notification connector copy, account state messages, and subscription removal UI.
  • Synchronized the workflow registry via an observer hook to ensure all connectors are registered regardless of order.
  • Separated server_mcp.go to distinguish lifecycle management for stdio and HTTP server paths.
  • Changed notification operations to no longer be marked as destructive.
  • Enhanced push notification banner UX: now hidden when subscribed, uses a soft CTA card for initial prompts, shows a persistent warning for denied permissions, and uses floating toasts for transient feedback.
  • Refined notification bell icon and adjusted layout to prevent page content pushing.
  • Optimized placement and behavior of the notification bell, now anchored to the chat composer's top-right corner for better context.
  • Modified lifecycle pushes to fire only on "idle" state transitions, reducing notification noise.
  • Enriched push notification bodies with a preview of the agent's actual response.
  • Introduced in-app rich cards to display push notifications when Wick is open and focused.
  • Added an audible chime for in-app notification cards.
  • Updated the notification bell's 'setup' state to directly prompt for browser permission inline, simplifying the user flow.
  • Removed the MaxAssistantTurnBytes cap as text and events are now stored separately.

This summary was automatically generated by Gemini AI


v0.14.25

Released on 2026-06-04

Added

  • Slack connector support for the upload_file operation using the Slack v2 three-step upload flow.

Improved

  • Optimized providersync performance by eliminating N+1 queries in folder pruning using a single subquery.
  • Reduced peak memory usage in providersync by batch-fetching orphan repairs in chunks of 500.
  • Batched subtree deletions in providersync to fetch children per BFS level instead of querying per individual node.
  • Added a bounded glob regex cache with a maximum size of 512 and eviction to prevent unbounded memory growth.

Fixed

  • Resolved cross-platform matching issues in globMatch where Windows-style backslash patterns failed to match on Linux and macOS environments.
  • Fixed a pool process termination bug where Kill failed on stale agent names by falling back to session prefix scanning.
  • Fixed a 422 'no agent' error in channel sessions on sendMessage by implementing an OnAgentAdded callback to refresh the in-memory registry.

This summary was automatically generated by Gemini AI


v0.14.24

Released on 2026-06-04

Fixed

  • Resolved a 404 routing error on the /projects/new endpoint by consolidating it into the /projects/{id} handler.
  • Corrected SPA integration tests to pass proper context configuration.
  • Fixed the launch configuration settings.

Improved

  • Replaced the plain-text fallback 404 error in tool handlers with the app's styled 404 page.

This summary was automatically generated by Gemini AI


v0.14.23 — Slack Integrations

Released on 2026-06-04

Added

  • Slack Socket Mode connection lifecycle tracking (connecting, connected, error, disconnected) and self-healing reconnection capabilities.
  • Integration status panel for Slack channels displaying transport mode, subscription state, bot/workspace identity, and webhook URLs.
  • Connection health probe to verify Slack credentials (signing secret and public URL) and report subscription states.
  • New HTTP API endpoint (/tools/agents/channels/{slug}/status) to dynamically fetch channel integration status.

Improved

  • Refactored the Slack connector cache to securely share authenticated bot user IDs with the connector, ensuring consistent identity presentation in messages.

Fixed

  • Preserved scoped sidebar navigation when transitioning to the session detail page by utilizing the session's project ID.
  • Fixed clipping of the picker dropdown inside the Manager UI card container by removing restrictive overflow styles.

This summary was automatically generated by Gemini AI


v0.14.22

Released on 2026-06-03

Fixed

  • Guarded against OS PID reuse causing false ErrAlreadyRunning errors by validating that the running process executable matches the expected daemon binary.

Improved

  • Enhanced the wick status command to display HTTP status (ok/unreachable), surfacing instances where the daemon process is active but the HTTP server failed to bind the port.

This summary was automatically generated by Gemini AI


v0.14.21 — Agent Projects

Released on 2026-06-03

Added

  • Introduced Projects to replace the Workspace concept, featuring automatic boot-time migration, customizable folders, defaults, icons, names, and pinned sessions.
  • Added a Claude-style project landing page, a sidebar Projects navigation section with pinning and drag-to-move capabilities, and a dedicated project settings page.
  • Added support for per-user pinned projects that auto-scope the agents landing page.
  • Added robust queue management capabilities, including search filters, select-all checkboxes, and a bulk "Kill selected" action in the queue panel.
  • Added origin tracking (e.g., REST, Telegram) for sessions and spawns, displaying the session ID and channel source in the Recent Spawns table.

Improved

  • Bounded spawn logs to a maximum of 50 files, implementing automatic pruning on boot, on provider page loads, and on each new spawn.
  • Enhanced the queue dequeue mechanism to clear all pending input and remove every queued entry for a session across all agents.
  • Polished the Recent Spawns UI to remember its expanded/collapsed state via localStorage and format session IDs into a shorter, cleaner representation.
  • Moved hidden-field filtering from templates to callers, making hidden channel configuration fields visible on channel config pages.

Fixed

  • Fixed queue cancellation failures caused by mismatches between the UI's agent name and the queued entry.
  • Fixed hidden variable rendering issues on the admin variables page.

This summary was automatically generated by Gemini AI


v0.14.20 — Workflow Editor V2

Released on 2026-06-03

Added

  • Svelte 5-based Workflow Editor (V2) mounted as a SPA at /workflows-v2/edit/{id}, featuring an interactive canvas with SVG bezier edges, snap-to-align, marquee multi-select, and multi-drag capabilities.
  • Database-backed workflow storage and backend APIs for managing drafts, versions, testing, execution, and validation.
  • Schema-driven inspector forms for triggers, channels, and connectors, dynamically rendered from backend configuration schemas.
  • Comprehensive testing framework featuring an inline assertion builder, test history tracking, and a JSON event test stager.
  • Backend-owned palette structure via the /api/workflows/palette endpoint, enabling dynamic registration of executors, channels, and connectors without frontend modifications.
  • Keyboard shortcuts for canvas operations, including saving (Ctrl/Cmd+S), canceling actions (Esc), and deleting nodes or triggers (Delete/Backspace).
  • Dedicated LiveDiskFS development loop allowing local frontend changes to reflect instantly without binary recompilation when WICK_DEV_REPO_ROOT is enabled.

Improved

  • Refactored chat panels to remove assistant avatars, allowing message bubbles to occupy full width on mobile devices.
  • Enhanced chat bubble headers to display the specific AI provider alongside the agent name (e.g., {agent}.{providerName}).
  • Prevented the chat header from scrolling off-screen by locking viewport overflow on the Agents shell during session switches and reloads.
  • Implemented auto-incrementing default node labels (e.g., http_1, http_2) to prevent immediate canvas validation conflicts upon node creation.
  • Integrated a lazy-loaded Ace Code Editor for Go and Python script nodes, syncing with system light/dark themes and retaining scroll/cursor positions.
  • Optimized CI pipelines by keying the templ cache on its pinned version in go.mod instead of go.sum, preventing redundant reinstalls.
  • Generalized monorepo plumbing and release pipelines to support automated bundling of multiple frontend SPA packages.

Fixed

  • Resolved installer write failures (ETXTBSY - text file busy) on Linux and Termux by stopping any active agent binary prior to executing raw curl writes.
  • Fixed a Windows binary resolution bug in safeexec by properly traversing %PATHEXT% for bare executable names.
  • Fixed a canvas persistence bug where node drag positions were discarded during JSON/YAML serialization roundtrips.
  • Fixed canvas deletion logic to ensure triggers are properly cleaned up alongside nodes when multi-selecting and deleting elements.

This summary was automatically generated by Gemini AI


Workflows: DB-primary JSON

Added

  • Version history panel with side-by-side compare. Pick two versions, the editor shows both bodies for diff.
  • MCP ops: workflow_lock (canvas freeze), workflow_guard (standalone safety review), workflow_versions + workflow_version_detail + workflow_restore_version, workflow_diff_versions, workflow_exec_node (single-node execute).
  • Test fixture ops gained name-only addressing — workflow_save_test_case / workflow_list_test_cases / workflow_delete_test_case no longer take file paths.

Changed

  • Workflow body now lives in the database as JSON. Three tables: workflows (current state), workflow_versions (append-only history), workflow_test_cases (named test fixtures). YAML codec dropped; parse.Parse / parse.Marshal are JSON-only.
  • Run state, run events, and env values stay on disk (runs/<id>/state.json, events.jsonl, env.json) — same place, JSON content.
  • Workflow editor is the Svelte SPA at /tools/agents/workflows/edit/<id>. The legacy templ+Drawflow editor is removed.

Removed

  • MCP ops: workflow_read_file, workflow_write_file, workflow_list_files, workflow_delete_file. Workflow body is not file-addressable anymore — use workflow_get and the dedicated edit ops (workflow_add_node, workflow_set_triggers, etc).
  • prompt_file: nodes/<file>.md on agent and classify nodes. Use the inline prompt field; templates resolve against .Event, .Node, .Trigger as before.

v0.14.19 — Mobile UX & PWA

Released on 2026-06-01

Added

  • Service worker and PNG/maskable icons to enable browser PWA installation prompts.
  • Custom vector wrench icon to replace the standard emoji for consistent rendering across platforms.
  • A new bool/boolean configuration widget that renders as a toggle switch.
  • Split log files per component (app, server, worker, mcp) for the headless daemon.

Improved

  • Mobile chat experience by preventing auto-refocus after sending and allowing Enter to insert a newline on touch devices.
  • Mobile layout behavior using 100dvh and interactive-widget resizing to prevent the keyboard from pushing the header or composer off-screen.
  • Chat bubble width for assistant messages on mobile screens to reduce cramping.
  • App orientation flexibility by removing the forced "any" orientation lock in the manifest.
  • Settings UI by migrating config options to the new toggle widget, applying conditional visibility to startup_script, and hiding internal configuration rows.

Fixed

  • Prevented the internal admin_password_changed flag from being accidentally toggled in the admin panel, which previously caused the default password to re-seed on boot.

This summary was automatically generated by Gemini AI


v0.14.18 — Termux & Attachments

Released on 2026-05-31

Added

  • File attachment support in the agent chat composer with features for drag-and-drop, clipboard pasting, upload limits (25 MiB/file), and an iframe-sandboxed preview modal.
  • New --host and --localhost CLI flags (and WICK_HOST environment variable) to restrict the server's bind address.
  • Support for sequential boot-time shell scripts via new startup_script and startup_script_enabled admin variables to facilitate vendor tunnel (e.g., ngrok) configuration.

Fixed

  • App-level ALLOWED_ORIGINS environment overrides failing to render in the kvlist configuration UI due to a JSON unmarshaling mismatch.
  • Codex CLI handshake failures on Termux/Android by auto-installing proot and wrapping spawned processes with necessary host-file bind mounts.

Improved

  • Revamped documentation structure, landing page, and navigation to prioritize Wick Agent use cases and partition installation guides into platform-specific pages.

This summary was automatically generated by Gemini AI


v0.14.17

Released on 2026-05-30

Fixed

  • Resolved a crash on Termux (Android kernels < 5.8) where the gotty subprocess would fail with a SIGSYS error during LookPath execution by passing the absolute shell path instead of a bare name.

This summary was automatically generated by Gemini AI


v0.14.16 — Termux Compatibility

Released on 2026-05-30

Added

  • Introduced safeexec.Command and safeexec.CommandContext wrappers to safely resolve binary paths without triggering faccessat2.
  • Added an AST-walking unit test (TestNoDirectOSExec) to prevent future direct usage of os/exec functions across the codebase.

Fixed

  • Resolved a critical process crash (SIGSYS) on Termux/Android systems running kernels < 5.8 by routing all command executions through safeexec.
  • Fixed a release asset naming mismatch for the gate sidecar (wick-agent-gate), resolving 404 download errors during installation.
  • Corrected path resolution in safeexec.LookPath on Windows by properly recognizing backslash path separators.

This summary was automatically generated by Gemini AI


v0.14.15 — Agent Routing

Released on 2026-05-30

Improved

  • Tightened routing rules between Wick and other Model Context Protocol (MCP) connectors by moving them to the immutable configuration section.
  • Implemented a read/write split fallback mechanism for Wick connector failures, requiring user confirmation for write operations to prevent unintended privilege escalation.
  • Added specific error-handling paths for Wick routing, including retrying on server errors (5xx/timeouts) and halting on authentication failures (401/403) or gate denials.
  • Simplified the Wick connector catalog header to act purely as a cold-start discovery hint.

This summary was automatically generated by Gemini AI


v0.14.14 — Agent Connectors

Released on 2026-05-30

Added

  • Injection of a ready-only connector catalog into the agent system prompt, providing models with available connector keys and descriptions to optimize tool selection.
  • Initial credential banner display and log tracing hints when running the daemon start or restart commands in the background.

Improved

  • CLI installer experience by showing a curl progress bar during binary downloads and enforcing a 15-second timeout on GitHub API resolution.

This summary was automatically generated by Gemini AI


v0.14.13 — Idempotent Installer

Released on 2026-05-30

Added

  • Added a version subcommand and -v / --version flags to wick-agent and wick-agent-gate to facilitate version tracking and automated upgrades.
  • Added documentation covering CLI version commands for both the main agent and gate sidecar binaries.

Improved

  • Enhanced the installer (install.sh and install.ps1) to skip downloads and execution when the already-installed binary matches the latest resolved version tag.
  • Replaced silent curl downloads with a visible progress bar and added a 15-second timeout on GitHub API calls to prevent indefinite hangs on slow connections.
  • Improved the Termux LAN installer to detect existing managed ALLOWED_ORIGINS in ~/.bashrc, prompting users to keep, edit, or clear rather than force-reprompting on every run.

Fixed

  • Fixed version probing in the installer to run with redirected stdin, preventing syntax errors caused by child processes consuming script lines from curl | sh.
  • Fixed version probe sequencing to prevent gotty from attempting to bind to port 8080 during version checks.
  • Resolved an issue where gate binary verification failed and polluted the installer status table with hook-error JSON.

This summary was automatically generated by Gemini AI


v0.14.12 — Mobile & Headless Support

Released on 2026-05-30

Added

  • Daemon mode and background service management (start, stop, status, restart, and service install/uninstall) for headless hosts, supporting systemd (Linux), Termux (Android), and Windows.
  • Progressive Web App (PWA) support with custom icons, theme-color configuration, Apple mobile web app tags, and standalone display mode.
  • Dynamic PWA manifest handler that reflects custom configured application names and descriptions in browser-installed instances.
  • Environment detection for headless hosts to prevent CLI execution from stalling when a graphical system tray is unavailable.

Fixed

  • Resolved SIGSYS system call crashes in Termux on older Linux/Android kernels (< 5.8) by routing executable lookups through a custom safe-execution layer instead of standard exec.LookPath.
  • Fixed a 30-second stall during installation on virtual machines with unresolved hostnames by removing hardcoded sudo prefixes from the installer script.
  • Fixed chat composer clipping on mobile browsers by locking the viewport styling to small viewport height (100svh).

Improved

  • Enhanced the installation script to probe existing component versions and skip redundant downloads when matching release versions are already installed.
  • Redesigned the agent interface for mobile devices, introducing a collapsible navigation drawer, a two-tier collapsible "More" navigation group, and notch-safe top padding.
  • Unified branding across the desktop system tray, Windows executable icon, and PWA assets using a consistent wrench logo.

This summary was automatically generated by Gemini AI


v0.14.11 — Network & Configs

Released on 2026-05-29

Added

  • Support for an ALLOWED_ORIGINS host allowlist configuration and environment variable to allow secure remote and LAN access alongside the canonical APP_URL.
  • "Detect LAN URLs" utility in the Admin UI to automatically discover reachable RFC1918 IPv4 addresses and add them with one click.
  • Dedicated CLI commands (config list/get/set and config allowed-origins ...) for managing application configuration and allowed origins from the terminal.
  • Interactive LAN IP whitelisting and automated gotty web terminal installation in the setup script (install.sh).
  • Automated bot attribution footer ("Sent using <@BotID>") appended to Slack connector send_message payloads using Block Kit.

Improved

  • Environment variables (APP_URL and WICK_ENC_KEY) now override database-stored configurations at read time, featuring read-only indicators and write protections in the Admin UI.

Fixed

  • Inline markdown rendering in agents and skills to require word boundaries for underscores, preventing snake_case identifiers from being incorrectly stripped or formatted as italics.

This summary was automatically generated by Gemini AI


v0.14.9 — Wick-Agent Rename

Released on 2026-05-29

Added

  • Standalone gate sidecar release asset, with automatic installation support for raw Linux and Termux environments to ensure end-to-end command gate functionality.

Improved

  • Renamed the runtime binary from wick to wick-agent to prevent naming conflicts with the wick CLI development tool.
  • Updated installation scripts, CI configurations, and documentation to use the new wick-agent binary name and streamlined the first-run credential generation.

Fixed

  • Resolved a CI artifact upload issue where nested directories caused release uploads to fail, restoring missing assets like the raw linux-arm64 binary.

This summary was automatically generated by Gemini AI


v0.14.8 — Connectors & Installation

Released on 2026-05-28

Added

  • Built-in Bitbucket and Loki connectors.
  • Dedicated Connectors launcher and index page featuring search, category filtering, and connector instance status tracking.
  • Floating "Jump to latest" button and Ctrl+Down shortcut in the agent chat interface.
  • Universal install.sh and install.ps1 scripts, automatically scaffolded into new projects via wick init.

Improved

  • Documentation for the connector HealthCheck hook, OpHealth contract, and system disabling model.
  • CI workflows to upload raw Linux binaries alongside Debian packages to support dpkg-less environments.

Fixed

  • Chat panel auto-scroll behavior to avoid yanking the viewport down while users are actively reading history above.

This summary was automatically generated by Gemini AI


v0.14.7 — OpenAI REST API

Released on 2026-05-25

Added

  • Full OpenAI-compatible REST API surface, including the new /integrations/rest/api/v1/openai/responses and /integrations/rest/api/v1/openai/models endpoints.
  • Live model validation against active providers, returning standard OpenAI-formatted 404 error responses for unknown model IDs.
  • Per-session in-flight locks returning a 409 Conflict status on concurrent requests within the same conversation.
  • Rewritten documentation panel featuring three dedicated tabs for Chat, Responses, and Models.

Improved

  • Standardized the chat completions endpoint path to /integrations/rest/api/v1/openai/chat/completions.
  • Switched from session_id to the standard conversation key for tracking sessions across REST endpoints.
  • Gated the agents settings page (/tools/agents/settings) and sidebar navigation link to admin users only to secure sensitive configuration data.
  • Updated the REST developer guide and channels documentation table.

This summary was automatically generated by Gemini AI


v0.14.6

Released on 2026-05-25

Added

  • Slack Canvas connector operations.

Improved

  • Support for clickable file paths in agent chat markdown. File paths within the current workspace session open directly in the preview/edit modal, while paths outside the workspace display a raw path popup with a copy option.

Fixed

  • Database compatibility issue where stuck job runs failed to recover on SQLite due to Postgres-specific interval SQL syntax.
  • Issue where panic events or timed-out contexts prevented job status updates, ensuring cleanup tasks execute properly to prevent runs from remaining permanently stuck in a "running" state.

This summary was automatically generated by Gemini AI


v0.14.4 — Realtime Storage Sync

Released on 2026-05-25

Added

  • Real-time filesystem watcher based on fsnotify that monitors storage sources dynamically and updates kernel watch sets immediately upon configuration changes.
  • Configurable watcher settings including watcher_status (enabled by default) and watcher_debounce_ms (defaults to 1000ms).

Improved

  • Redesigned the storage backup mechanism to stream files via WalkDir and io.Copy into constant-memory SHA-256 hashes, loading full contents only when database writes are required.
  • Integrated debounce logic to collapse rapid editor save events into a single sync operation.
  • Streamlined deletion handling by directly removing database rows on file removal or rename events.

Fixed

  • Resolved out-of-memory (OOM) container crashes on large directory trees by replacing the memory-intensive polling map serialization with streaming sync.

This summary was automatically generated by Gemini AI


v0.14.3 — AI Agents

Released on 2026-05-25

Added

  • Live text streaming and thinking deltas for Claude and Codex in the web UI.
  • Backend-driven agent lifecycle state machine exposed via Server-Sent Events (SSE).
  • Crash-recovery mechanism for active sessions using provider-agnostic inflight.jsonl logging.
  • Collapsible Context file panel to view, edit, download, and preview (Markdown/HTML) files in the agent's working directory.
  • Automatic chat composer focus triggered by typing anywhere on the session detail page.

Fixed

  • Incorrect dark-mode background rendering on trace cards.
  • Double-broadcasting of agent exit events in the connection pool.

Improved

  • Agent documentation covering provider features, SSE channel schemas, and file sandbox security.

This summary was automatically generated by Gemini AI


v0.14.2 — MCP Improvements

Released on 2026-05-23

Added

  • db_type and db_status fields to the wick_info MCP tool to allow clients to securely monitor database connection status without exposing sensitive credentials.
  • An environment variable allowlist (WickEnvVars) for MCP installation in Codex CLI to ensure runtime environment variables are preserved.

Fixed

  • Bug where the agent provider cache was not refreshed after switching providers.

Improved

  • Centralized database status derivation and consolidated WickInfo tests directly within the handlers package.

This summary was automatically generated by Gemini AI


v0.14.1 — Job & Skill Management

Released on 2026-05-22

Added

  • Job timeout configuration (MaxTimeoutMin field, defaulting to 30 minutes) with automatic context-based cancellation.
  • Startup bootstrap routine to reset stuck job runs that have exceeded their timeout threshold.
  • User interface option to configure max_timeout_min in job settings.
  • Detailed tracking for provider storage sync jobs, displaying changed and skipped file counts per source.
  • MCP handler modularization under a new handlers/ subpackage, introducing wick_skill_list and wick_skill_sync tools.
  • Skills Manager documentation in the agents guide.

Fixed

  • Test suite compilation by updating SyncOne caller signatures to match the new return structure.

Improved

  • Updated system prompts.

This summary was automatically generated by Gemini AI


v0.14.0 — Skills Explorer

Released on 2026-05-22

Added

  • Integrated a new skillsync package to mirror skill files across provider directories (~/.claude/skills, ~/.codex/skills, ~/.gemini/skills, and ~/.agents/skills) using modification times instead of symlinks.
  • Added a Skills explorer page in the agents sidebar with clickable rows, subfolder navigation, and a kebab menu for syncing, downloading, and deleting skills.
  • Introduced provider-scoped views with a tab switcher to compare the same skill file across different providers.
  • Added Markdown preview rendering on the skill file detail page.
  • Added a CancelJob capability to the job manager via POST /manager/jobs/{key}/cancel.

Improved

  • Refactored the provider storage sync job to remove RestoreAll from the cron tick and added a 60-second hard timeout with error reporting.

This summary was automatically generated by Gemini AI


v0.13.5

Released on 2026-05-22

Fixed

  • Fixed a workspace bootstrap fatal error that occurred when a workspace directory existed without a meta.json file, by aligning the duplicate check in Create to check for WorkspaceMeta.

This summary was automatically generated by Gemini AI


v0.13.4 — Agents & MCP Updates

Released on 2026-05-22

Added

  • Provider switching capabilities across channels using the #provider prefix command.
  • An agentctl Unix socket for interacting with the running daemon pool from MCP stdio.
  • Granular, per-instance sandbox modes (read-only, workspace-write, and danger-full-access) for Codex configurations.
  • Verbose per-file logging toggle and run ID correlation for provider-storage sync and restore runs.
  • A new system_turn SSE event and UI handler to append system turns during agent interactions.

Fixed

  • Missing builtin connectors (Slack, GitHub, and HTTP/REST) on downstream MCP stdio deployments by registering them prior to bootstrap.
  • Hidden connectors requiring setup from showing up in wick_list and wick_search.
  • Codex MCP auto-install config format errors, uninstall persistence issues, and re-installation behavior.
  • Tool result tracking to correctly extract MCP result text from content arrays and forward it via SSE.
  • Codex parser error handling, ensuring non-JSON lines are output as Thinking events instead of failing.

Improved

  • Split the immutable system prompt into distinct global, Claude-specific, and Codex-specific variants.
  • Optimized provider-storage file syncs by performing pre-upsert hash checks to skip unchanged files.

This summary was automatically generated by Gemini AI


v0.13.3 — Interactive Workflow Builder

Released on 2026-05-21

Added

  • Added interactive inspector panels for branch, end, shell, transform, classify, and database query workflow nodes.
  • Added click-to-add functionality for canvas nodes from the palette as a reliable alternative to drag-and-drop.
  • Added interactive filter condition, row, and order-by builders, alongside table and column selectors, for datatable nodes.
  • Added a /stream/snapshot JSON endpoint to replay agent lifecycle and trace events on page refresh.

Fixed

  • Fixed agent idle-kill timeout by pausing the idle timer during long-running tool executions.
  • Fixed rendering of datatable nodes (which previously fell back to shell nodes) and resolved label and expression mode persistence issues.
  • Fixed database persistence for datatable_create and datatable_insert by wiring the PgService to the MCP stdio service.
  • Fixed provider storage boot restore and upload retag issues.
  • Fixed canvas stacking context issues by adjusting the palette drawer position.

Improved

  • Overhauled the datatable node UI with grouped palette entries, a column combobox, and Fixed/Expression toggle previews.
  • Improved agent trace replay on page refresh by utilizing SharedWorker to fetch current state snapshots.
  • Streamlined the node palette by removing duplicate hardcoded entries in favor of registry-backed module registration.

This summary was automatically generated by Gemini AI


v0.13.2 — Provider Storage

Released on 2026-05-20

Added

  • UI actions to download individual files and download folders as .zip files.
  • Support for dismissing modals via backdrop click or the Escape key.

Fixed

  • Storage boot sequence to overwrite disk from the database using RestoreAllForce and remove redundant SyncAll operations.
  • Cron sync execution flow to run a guarded RestoreAll before SyncOne so missing files are refilled prior to capture.
  • Upload routing to auto-retag files to the deepest covering enabled source, ensuring manual uploads are assigned to the correct provider and instance to maintain restorability.

Improved

  • Explorer upload modal to be contextual, displaying a target path banner and requiring only the filename.

This summary was automatically generated by Gemini AI


v0.13.1 — Data Tables

Released on 2026-05-20

Added

  • High-performance Data Tables system featuring a Postgres-backed JSONB schema, auto-incrementing row IDs, system columns, and 9 matching Model Context Protocol (MCP) operations.
  • n8n-style spreadsheet grid UI for managing Data Tables, featuring column-sorting, a 10-operator filter popover, CSV import/export, and inline column management.
  • Seven dedicated database nodes in the workflow canvas palette (datatable_*) for querying, counting, inserting, upserting, and deleting records.
  • Split-bottom editor panel containing a dedicated "Validation" tab to display real-time Go template syntax check results.
  • Server-Sent Events (SSE) reconnect status pill in the session header to visually surface EventSource connection states.

Fixed

  • Fixed binary builds to correctly compile the app name and version via LDFLAGS variables instead of falling back to "dev".
  • Fixed an issue in manual triggers where saving a human-readable button caption overrode the unique validation slug label.
  • Fixed drawflow canvas deletion clicks by exempting the .drawflow-delete X chip from the marquee background selection handler.
  • Fixed editor node metadata mapping to properly handle underscore-separated trigger names (e.g., trigger_manual).

Improved

  • Transitioned workflow node and trigger IDs to internal UUIDs while maintaining clean, cascading, user-facing label slugs.
  • Replaced full-page reloads on workflow manual saves with smooth background POST requests that preserve canvas state, scroll positions, and SSE connections.
  • Split the workflow validation pipeline into lenient draft saves and strict publish-blocking checks that highlight syntax errors in the Validation panel.
  • Enhanced agent chat UI to automatically linkify URLs, apply overflow wrapping on long links, and systematically instruct AI models to wrap URLs in Markdown link syntax.

This summary was automatically generated by Gemini AI


v0.13.0 — Agent Workflows

Released on 2026-05-19

Added

  • Comprehensive workflow engine and canvas-based editor for agent orchestration.
  • Support for multiple trigger types including Cron schedules, Webhooks, Slack events, and Manual execution.
  • n8n-style debug modal featuring real-time SSE run progress, execution step isolation, and input/output inspection.
  • Draft/Publish lifecycle allowing users to test unsaved changes before deploying to production.
  • Run replay functionality to visualize historical executions and debug payload data directly in the editor.
  • Interactive "Fixed/Expression" toggle for node arguments with drag-and-drop support from the input pane.
  • Advanced canvas UX features: alignment snapping, marquee selection, multi-node dragging, and fit-to-view.
  • Sharded run index for high-performance history lookup and storage.
  • Multi-level palette drawer built dynamically from the live connector and channel registry.
  • Inline-chip multi-select picker for trigger filtering with support for ID lookup and bulk pasting.

Fixed

  • Resolved an issue where trigger fan-out edges were lost during workflow save and reload cycles.
  • Fixed a bug preventing the toggling of workflows that contained validation errors in their draft state.
  • Closed three security bypass vectors in the gate loader: enforced socket guards, relative path scope resolution, and quote-aware command tokenization.
  • Fixed UI overlap where empty state placeholders appeared on top of populated data panes.
  • Corrected trigger hint labels on canvas cards to accurately reflect channel and event types.

Improved

  • Migrated the node argument inspector to use shared fieldtype widgets for consistent UI across the platform.
  • Refactored the Slack integration into a modular, file-based architecture for better extensibility.
  • Enhanced the workflow router with a trigger index for O(1) event dispatching.
  • Optimized canvas rendering by moving the palette drawer to a transform-based overlay, preventing layout reflows.
  • Structured documentation into a multi-part roadmap and design specification.

This summary was automatically generated by Gemini AI


v0.13.0 — Workflows

Released on 2026-05-19

Added

  • Workflows — multi-step YAML DAG automations under <BaseDir>/workflows/<id>/, with typed nodes (classify, agent, connector, channel, http, shell, db_query, transform, go_script, branch, switch, parallel, merge, datatable_*, session_init, end) and triggers (cron, channel, webhook, manual, schedule_at, error). See Workflows guide.
  • Canvas editor at /tools/agents/workflows/<id> — Drawflow-based visual editor with palette, per-field inspector reflected from each executor's Describe(), top-down auto-layout, marquee select, fit-to-view, node search (Ctrl+K), and a run timeline that replays each run node-by-node.
  • MCP workflow surface — self-documenting catalog (workflow_list, workflow_describe, workflow_node_types, workflow_node_detail, workflow_diagnose, workflow_watch, workflow_scaffold, workflow_connect, workflow_patch, workflow_delete) so LLMs can author and inspect workflows over MCP.
  • Slack channel actions as workflow nodes — send_message, add_reaction, open_dm, open_modal, push_modal, update_modal, send_ephemeral, publish_home, respond_url, update_message — plus typed event triggers (event_message, event_app_mention, event_command, event_block_action, event_view_submission, event_shortcut, event_app_home_opened, event_view_closed).
  • Gate umbrella policyGateConfig now carries PermissionMode (per-tool prompts) + AskUserMode (MCP ask_user) sub-policies. Master switch snaps both to their unguarded defaults when off. MCP ask_user short-circuits with a clean tool error when disabled instead of stalling the run. See Command Gate ▶ Umbrella policy.
  • Slack OAuth on the connector row — global OAuth credentials moved to a Slack connector row with a "Connect with Slack" button; user-token auto-detected in buildSessionContext; DM via connector user token with signed footer.
  • Live agent streaming trace — tool calls, thinking, and history are streamed into the session detail page in real time.
  • MCP provider UI + session full-height layout + markdown table rendering.
  • Provider-storage sync — exclude-mode rows, glob matcher, folder cascade, retention recompute, repair tree.
  • Loki push adapter for async run events.
  • Self-updater + build metadata baked into wick_info.

Changed

  • Workflow slug field renamed to id across the codebase.
  • Channel config layer — manual field mapping replaced with MapToStruct; decryptFn callback removed from GetChannelConfigMap; wick_cenc_ tokens decrypted in-place; channel configs hidden from settings page and encrypted at rest.
  • Gate AppName derives from the binary stem only when it ends in -gate, otherwise the ldflag is the single source of truth.

Fixed

  • Slack bot replies no longer carry a duplicate signed footer (only sendHandler signs).
  • Slack cannot_dm_bot — detect bot users before calling conversations.open.
  • Slack: post with xoxp token without overriding the username, so the real user identity is preserved.
  • Slack: auto-promote U... channel IDs to target_user_id for session headers; init userTokenCache and pre-build the token map at startup.
  • Canvas: reject duplicate edges in Connect; guard against deleting the entry node.
  • wick_info uses the baked app name instead of the cwd basename.
  • Provider-storage: strings.ReplaceAll for cross-platform backslash normalisation.

Migration notes

  • The legacy agents.bypass_permissions checkbox is gone. Its value is one-shot migrated to gate.permission_mode at boot — no operator action required.

v0.12.2 — Release Infrastructure

Released on 2026-05-14

Added

  • Automated self-updater configuration using baked-in repository metadata in the installer build.

Fixed

  • Build failure on darwin/arm64 by enabling CGO for systray Objective-C bindings.

Improved

  • CI pipeline visibility through per-target status gates and detailed run summaries for disabled targets.
  • Release process robustness by allowing artifact attachment during partial-success matrix builds.

This summary was automatically generated by Gemini AI


v0.12.1 — Darwin Release

Released on 2026-05-14

Fixed

  • Resolved an issue with the release process for Darwin platforms.

This summary was automatically generated by Gemini AI


v0.12.0 — Agent Orchestration

Released on 2026-05-14

Added

  • Preset support for agent sessions, allowing system prompts to be loaded from local files on spawn.
  • Global system prompt configuration to append organization-wide instructions to every agent preset.
  • Idle subprocess preemption to immediately free pool slots for queued sessions when the agent pool is full.
  • all CLI command to run the HTTP server and cron scheduler within a single process.
  • Visual status indicators and badges to represent queued states in the sidebar and session list.
  • Manual triggers for provider storage synchronization in the settings UI.

Improved

  • User messages are now persisted to disk immediately upon sending to ensure visibility while sessions are queued.
  • Queue deduplication per session and agent to prevent redundant entries in the queue panel.
  • Background preemption logic now retries every second while the queue is non-empty.
  • UI layout for Settings and Channels pages expanded to full width with improved clickable surfaces for channel cards.
  • Application name resolution in default system prompts to support correct file paths in branded builds.
  • Automatic provider storage restoration from the database when booting standalone worker nodes.

Fixed

  • Database migration logic.

This summary was automatically generated by Gemini AI


v0.11.15

Released on 2026-05-13

Fixed

  • Restored non-root user and home directory configuration in the Dockerfile.
  • Fixed unit test failures.
  • Resolved database migration issues.

Improved

  • Added inline documentation and annotations to Dockerfile build and runtime stages.
  • Pinned the wick installation to the version specified in go.mod for more predictable builds.
  • Refined sidecar naming logic by deriving the gate binary stem from the configuration output.

This summary was automatically generated by Gemini AI


v0.11.14

Released on 2026-05-13

Fixed

  • Corrected content provider storage type handling.
  • Resolved database migration issues.

Improved

  • Synchronized go.mod templates and documentation.

This summary was automatically generated by Gemini AI


v0.11.13

Released on 2026-05-13

Fixed

  • Resolved build artifact generation issues.
  • Reverted CI/CD workflow and Dockerfile configurations to restore build stability.

This summary was automatically generated by Gemini AI


v0.11.12

Released on 2026-05-13

Fixed

  • Resolved issues with build artifacts.

This summary was automatically generated by Gemini AI


v0.11.11

Released on 2026-05-13

Fixed

  • Resolved build artifact issues by removing unnecessary caching.

This summary was automatically generated by Gemini AI


v0.11.10

Released on 2026-05-13

Fixed

  • Resolved issues with build artifact generation.

This summary was automatically generated by Gemini AI


v0.11.9

Released on 2026-05-13

Added

  • New wick init command for project initialization.

Fixed

  • Issues related to build artifact generation.

This summary was automatically generated by Gemini AI


v0.11.8

Released on 2026-05-13

Fixed

  • Build artifact generation issues.

This summary was automatically generated by Gemini AI


v0.11.7

Released on 2026-05-12

Improved

  • Optimized the build release caching process.

Fixed

  • Resolved issues related to build artifacts.

This summary was automatically generated by Gemini AI


v0.11.6

Released on 2026-05-12

Fixed

  • Added the Go bin directory to the PATH in the binary build process to ensure the templ tool is correctly located and accessible.

This summary was automatically generated by Gemini AI


v0.11.5 — CI/CD Optimization

Released on 2026-05-12

Added

  • New ci-timing.sh script for workflow performance and timing analysis.

Fixed

  • Issues with build artifact generation.

Improved

  • Optimized release workflows by building the wick CLI once and sharing it as an artifact across build-binaries and build-docker jobs.
  • Implemented binary caching for wick and templ in CI and pull request test workflows.
  • Added caching for wixl via apt cache to reduce workflow runtimes.
  • Configured separate wick CLI caching for macOS jobs to support cgo runners.

This summary was automatically generated by Gemini AI


v0.11.4 — Agent Hosting

Released on 2026-05-12

Added

  • New "agents-only" quickstart guide covering system tray, headless modes, binary downloads, and Docker/Compose configurations.
  • Comprehensive contribution guide including a commit style guide, build instructions, and repository structure mapping.
  • Two-use-case framing to documentation to distinguish between the development framework and agent-host functionality.

Fixed

  • Issues with build artifact generation.

Improved

  • Documentation hero section and README tagline for better clarity on project use cases.
  • VitePress sidebar and navigation organization to incorporate new agent-focused content.

This summary was automatically generated by Gemini AI


v0.11.3

Released on 2026-05-12

Fixed

  • Corrected issues with build artifact generation.

Improved

  • Optimized CI pipeline to initialize projects from tags and share scaffolding via artifacts.
  • Removed the mockery dependency.

This summary was automatically generated by Gemini AI


v0.11.2

Released on 2026-05-12

Fixed

  • Resolved issue where build-docker and build-binaries jobs failed to checkout from the correct tag reference.
  • Fixed build artifact generation process in CI workflows.

Improved

  • Optimized CI pipeline to run pull request tests only when Go or templ files are modified.

This summary was automatically generated by Gemini AI


v0.11.1

Released on 2026-05-12

Fixed

  • Resolved an issue with build artifact generation.

Improved

  • Upgraded Go version to 1.25.0 in project templates.
  • Removed Mockery dependency from the codebase.

This summary was automatically generated by Gemini AI


v0.11.0 — Storage & TTY Support

Released on 2026-05-12

Added

  • Provider Storage Manager tool featuring explorer and flat list modes, sync source auto-detection, and background synchronization jobs.
  • New providersync package and database entities for provider storage and sources.
  • Comprehensive documentation and user guides for Provider Storage and Web Terminal.
  • Automated release-artifacts CI workflow for binary and Docker builds.
  • Upgrade checks for Dockerfile wick versions with interactive update prompts.

Fixed

  • Connectivity issues related to TTY.
  • Upgrade prompt behavior to default to "yes" [Y/n].

Improved

  • Dockerfile runtime base switched to debian:bookworm-slim to support glibc requirements for the Claude CLI.
  • Integrated Gotty cross-compiled binaries and Claude CLI into the standard Docker image.
  • Added non-root app user with sudo privileges for secure credential management.
  • Integrated app-gate sibling binary into the application runtime image.

This summary was automatically generated by Gemini AI


v0.10.2

Released on 2026-05-12

Added

  • Hijack functionality.
  • Additional logging for improved diagnostics.

Fixed

  • Unit test failures.

Improved

  • TTY handling and configuration.

This summary was automatically generated by Gemini AI


v0.10.1 — Command Gate Enhancements

Released on 2026-05-12

Added

  • Web Terminal tool with HandleRaw router support.
  • Red and amber color tokens to UI for gate-related components and banners.
  • Automatic injection of .claude/settings.local.json during workspace creation and switching.

Fixed

  • Command gate interactions including the X button, click-outside behavior, and Block button rendering.
  • Logic for timeout auto-blocking and Telegram notification deletion on resolution.
  • Workspace hook injection and GateBinLoader wiring in the server.

Improved

  • Expanded command gate interception scope to include Bash, file tools, and MCP tools using a catch-all matcher.
  • Refined tool approval workflow with auto-allow logic for workspace-scoped file tools and interactive approval for unknown tools.
  • Documentation for command gate intercept scope and approval mode labels.

This summary was automatically generated by Gemini AI


v0.10.0 — Channels & Slack Integration

Released on 2026-05-12

Added

  • OpenAI-compatible REST channel supporting both stateful and stateless sessions via Personal Access Tokens.
  • Built-in Slack connector featuring 15 operations for message management, reactions, and lookups.
  • Health check framework for connectors and integrations to validate API permissions and connectivity.
  • SharedWorker-based SSE implementation to maintain persistent agent connections across page navigations.
  • Searchable picker UI component for granular Slack entity selection (users, groups, and channels).
  • Assistant API integration for Slack including "is thinking" status banners and thread-based activity signals.

Improved

  • Redesigned chat composer featuring an overlay style with inline provider and workspace switchers.
  • Session performance through persistent cache probing and in-memory metadata label caching for faster sidebar rendering.
  • Slack access control logic supporting complex whitelist combinations for users, groups, and channels.
  • Channel management interface with theme-aware documentation, configuration cards, and sample code blocks.
  • Refined Slack UX by deferring queued reactions and removing redundant status emojis.
  • Session detail layout with approvals moved to a dedicated tab for better space utilization.

Fixed

  • Encrypted fields tool now defaults to private visibility to ensure authenticated access.
  • Claude settings injection narrowed to project-scope to avoid affecting global machine configurations.
  • Session history and provider dropdown loading delays.
  • CSS layout issues causing scrollbar flashing on session detail pages.
  • SSE connection timeouts by removing server-side deadlines and sending immediate connection headers.

This summary was automatically generated by Gemini AI


v0.9.6 — Slack Mention Trigger

Released on 2026-05-11

Added

  • Support for app_mention events in public and private Slack channels.
  • The app_mentions:read scope to the application manifest.

Improved

  • Slack message dispatching logic to require explicit mentions in channels while maintaining direct passthrough for DMs.
  • Automatic stripping of the <@BOTID> prefix from mention events before dispatching to the message handler.
  • Application manifest configuration by replacing broad channel and group message event subscriptions with targeted app mentions.

This summary was automatically generated by Gemini AI


v0.9.5 — Multi-Provider Command Gate

Released on 2026-05-11

Added

  • Multi-provider support for Command Gate with per-provider capability detection for Claude, Codex, and Gemini.
  • Global Command Gate master switch that cascades state changes to all configured provider instances.
  • Per-instance hook configuration allowing granular opt-in/opt-out for tool execution gating.
  • Asynchronous capability probing system with UI status badges for verified, testing, and unverified states.
  • Support for --probe-deny and provider-specific flags in the gate command to verify capability layer enforcement.
  • Capability registry for self-registering provider hooks and runtime probe verification.

Fixed

  • Enforced mutual exclusivity between Command Gate and Permission Bypass mode to prevent conflicting behaviors.
  • Added missing runtime imports to ensure Codex and Gemini providers correctly self-register for capability lookups.
  • Replaced native title tooltips with theme-aware custom tooltips that respect dark and light modes.
  • Removed duplicated Command Gate descriptions across provider cards to clean up the interface.
  • Resolved a regression where Claude would ignore deny envelopes when specific permission flags were set.

Improved

  • Implemented an in-memory instance cache for providers to eliminate redundant disk reads during agent spawning.
  • Refactored the spawner factory to dispatch by ProviderType, enabling cleaner integration of future providers.
  • Optimized CI workflows to skip PR tests when targeting the release branch.
  • Updated technical documentation for Command Gate architecture, adapter patterns, and channel integration guides.
  • Enhanced the provider UI to display "locked (bypass)" states when permissions are globally bypassed.

This summary was automatically generated by Gemini AI


v0.9.4 — Channels & Command Gate

Released on 2026-05-10

Added

  • Per-transport subpackages for Slack and Telegram integrations to improve modularity.
  • New agent-channel-module skill to enhance agent capabilities.
  • Diagnostic "Test gate" button on the Providers page to verify command gate enforcement.
  • --probe-deny subcommand for the gate binary to detect contract drift in production.

Fixed

  • Command gate compatibility with Claude Code 2.1.138+ to prevent silent permission bypass.
  • Issue where the gate failed to block sessions due to incorrect exit code and stdout handling.
  • Sandbox blocking of approved tools by ensuring explicit allow signals are emitted to the permission system.
  • Permission mode conflict where --permission-mode bypassPermissions was incorrectly forced when a gate was attached.

Improved

  • Refactored channel infrastructure into a modular root registry with dedicated subpackages.
  • Streamlined transport registration and setup using a centralized composer.
  • Enhanced context for new chat threads by injecting session-specific turns for first messages.
  • Updated the Command Gate rejection contract to utilize exit-0 with specific JSON output for reliability.
  • Renamed the Command Gate modal action from "Block" to "Reject" for better clarity.
  • Migrated the Slack application manifest to JSON format.
  • Updated documentation to reflect 2.1.x compatibility, failure modes, and new testing tools.

This summary was automatically generated by Gemini AI


v0.9.3

Released on 2026-05-10

Added

  • GitHub Actions workflow to run unit tests on all pull requests.

Fixed

  • Crash in wick.yml tasks when using plain run blocks without background execution flags.
  • Template version mismatch during build processes.
  • Data races in the provider agent and pool worker logic identified during concurrent testing.
  • Permission denied errors during test cleanup on Linux caused by read-only module cache files.
  • Various broken unit tests across Slack channels, CLI doctor command, and gate manager integration.

Improved

  • Task execution now utilizes a real POSIX shell (or Bash on Windows) to support multi-line scripts, pipes, and command substitution.

This summary was automatically generated by Gemini AI


v0.9.2

Released on 2026-05-10

Fixed

  • Resolved application crashes.
  • Pinned templ CLI to the version specified in go.mod to ensure consistent release builds.

This summary was automatically generated by Gemini AI


v0.9.1 — AI Agents

Released on 2026-05-10

Added

  • Slack app manifest for the Wick agent bot.
  • Comprehensive documentation for AI Agent workspaces, providers, channels, and pools.
  • Detailed guide for Command Gate architecture, covering IPC, auditing, and the wick doctor utility.
  • Reference documentation for gate sidecar bundling.

Fixed

  • Connector registration idempotency on Meta.Key to ensure stability across server restarts.
  • Critical application crash in the core service.

Improved

  • Documentation structure to highlight AI Agent features across Slack, Telegram, and Web.
  • Environment variable management, removing deprecated GATE_ prefixes.
  • Release workflow automation to synchronize headlines within the changelog.

This summary was automatically generated by Gemini AI


v0.9.0 — AI Agents

Released on 2026-05-10

The headline release: wick can now host AI coding agents — Claude, Codex, Gemini — as long-lived subprocesses, reachable from Slack threads, Telegram chats, and the web UI at the same time. Per-command Command Gate intercepts every Bash call. Multi-instance providers (two PATs, side-by-side). Workspaces on disk. AskUser MCP tool. State persisted under ~/.<app>/agents/ — backup is tar, restart re-scans.

Plus: a generic HTTP connector, a GitHub connector, per-connector rate-limiting and per-operation access control, wick doctor, and a /metrics endpoint.

Added — AI Agents subsystem

  • Multi-channel routing. Slack (Socket Mode default + HTTP Event API), Telegram (long polling with inline-keyboard approvals), and the always-on web UI at /tools/agents. Each thread / chat / conversation = one wick session, automatically created on first message. See AI Agents and Channels.
  • Multi-session subprocess pool. Slot cap (default 2), FIFO queue, idle-kill (default 120s), --resume <cli_session_id> revive. Per-session message buffer survives wick restart via meta.PendingInput. See Pool & Sessions.
  • Workspaces. Folders on disk used as the agent's cwd — managed at ~/.<app>/agents/workspaces/<name>/files/ or any custom absolute path. Multi-session sharing without locks. Built-in default workspace seeded on fresh install. See Projects.
  • Multi-instance providers. claude/work + claude/personal with different PATs. Per-instance binary override, extra args, env vars, disabled toggle. Persistent status cache with manual / 24h-stale / boot-prime rescan. Page render never blocks on --version. See Providers.
  • Binary scan. --version lookup walks registry → PATH → known install locations (npm prefixes, nvm, fnm, volta, asdf, Homebrew, MacPorts, Claude / Codex installer paths). Closes the gap between tray-launched wick (Explorer PATH) and shell PATH.
  • Console hiding on Windows. Tray-spawned claude.exe / codex.exe / npm shims no longer flash a console window — CREATE_NO_WINDOW applied to provider probe + spawn paths.
  • Command Gate. Sidecar binary <app>-gate intercepts every Bash command via Claude's PreToolUse hook. Whitelist via glob, escalate to interactive approval modal with 4 modes: approve_once / approve_session / approve_always / block. Approval surfaces in whichever channel the conversation lives in (web modal, Slack approval message, Telegram inline keyboard). 25-second daemon deadline (under Claude's 30s hook timeout). See Command Gate.
  • Gate IPC. Unix domain socket at ~/.<app>/agents/gate/gate.sock, raw newline-delimited JSON, chmod 0600. Single shared spec / socket / audit log per app — daemon routes approvals to the right session by matching the hook's cwd against known workspace paths.
  • Gate audit. Multi-stage entries to ~/.<app>/agents/gate/commands.jsonl (receivedsocket_dialsocket_sentsocket_recvterminal), all tied by RequestID. Plus a human-readable daily tail log at ~/.<app>/logs/gate-YYYY-MM-DD.log.
  • Gate binary resolution — zero env vars. Sibling-of-executable (<app>-gate[.exe] next to the main binary, shipped by wick build --installer) → embedded //go:embed extract → PATH. WICK_GATE_BIN / GATE_BIN / WICK_GATE_SPEC / GATE_SPEC all dropped.
  • Installer ships the gate sidecar. Windows MSI ships <App>-gate.exe, Debian .deb ships /usr/bin/<app>-gate, macOS .app bundle ships Contents/MacOS/<App>-gate. Builder absorbs the gate compile step (no separate CI job); soft-skips on downstream forks without cmd/gate/.
  • AskUser MCP tool. Agent-initiated mid-turn question — wick registers the question, broadcasts SSE, blocks the MCP call, surfaces an inline card in the web UI composer. Default 5min timeout. Works in pipe mode (-p) where Claude Code's harness AskUserQuestion doesn't.
  • Provider spawn log. Per-spawn JSONL at ~/.<app>/agents/providers/spawns/<type>__<name>__<session>__<unix-ms>.jsonl with start (PID, argv, binary, first user message) and exit events. ls-friendly filter without reading file bodies.
  • Slack channel. Reaction lifecycle (⏳ → ⚙️ → ✅ / 🚫 / ❌), chunked replies at 3800 chars (under Slack's 4000 hard limit), access control (everyone / users / groups) checked per-message, hot-reload on 30s config poll, pool.OnSessionCreated hook so dashboards see new sessions immediately.
  • Telegram channel. Long polling, dormant-mode on missing/invalid token, inline-keyboard approvals with short-token mapping (Telegram's 64-byte callback_data limit), edit-in-place approval message on resolve.
  • Meta-commands intercepted in every channel before dispatch: /agent <name>, /reset, /status, /dashboard (/link), /log. Both / and ! prefixes accepted.
  • wick doctor [binary] diagnostic. Verifies environment + gate setup. Pass a binary path to inspect a specific branded build — derives its AppName, locates the matching <app>-gate sidecar, dials the socket with a probe request that auto-replies without bothering a human, verifies socket / spec paths align.
  • AppName single source of truth. internal/appname.Resolve() is the only chain: BuildAppName ldflag → wick.yml name:"wick". APP_NAME env is now a display label only (~/.<app>/ namespace stays slug-safe). Gate binary derives <app> at runtime from its own filename (strip -gate[.exe]), so a branded wick-lab-gate.exe lands in ~/.wick-lab/agents/gate/ automatically.

Added — Connectors

  • Generic HTTP/REST connector for calling JSON APIs with configurable authentication and methods.
  • GitHub connector supporting repository listing, issue management, file retrieval, and pull request tracking.
  • Per-operation access control restricting specific connector operations to administrators.
  • Sliding-window rate limiting per connector with admin UI for quota tuning.
  • Cross-connector audit log API and admin UI for monitoring run history and status across all connectors.
  • /metrics endpoint (Prometheus-compatible) for connector execution telemetry and latency.
  • pkg/conntest helper package to simplify unit testing for custom connector authors.

Fixed

  • Updater reliability on Windows and Linux: verify post-install state, use a detached helper script to swap binaries, prevent partial installs.
  • Agent pool race on Windows. markStatus(idle) now runs before releaseSlot (pool.go:378) so a fast Send arriving right after Active==0 cannot collide its meta.json write with the trailing idle write (two os.Rename to the same target). Killed flaky TestPipeline_ResumeAfterIdleKill + TestQueueWhenPoolFull.
  • Double-spawn / slot-count race. Pool now tracks an in-flight spawningKeys set; concurrent Send calls cannot each see "slot free" and call spawn simultaneously. Same guard prevents two exit hooks from popping the queue at the same time.
  • SSE delivery & flush. Switch to ResponseController for proper chunked flushing in the agent dashboard. Larger subscriber buffer + dropped-message logs.
  • Agent kill-on-respond + SSE timeout. Lifecycle FSM now correctly distinguishes "still responding" from "idle" so the kill timer doesn't fire mid-response.
  • Bypass permissions logic. --permission-mode bypassPermissions is now passed to Claude only when a gate is wired (allowed_cmds non-empty), preventing permission-less Slack sessions.
  • Gate hook injection. Hooks injected via Claude's user settings.json (per-spawn --settings flag), with fail-open behavior when no socket is present so the agent can still start during gate setup.
  • Configs back-fill. Empty config rows now back-fill from seed defaults instead of leaving the value blank — fixes "field is blank after upgrade" reports.
  • Server banner now shows the configured app_url and logs host mismatches during 403 rejections (was logging the bare listen address).
  • Lab / CLI request logs. Component-tagged logger correctly injected into the execution context — request lines no longer disappear in lab mode.

Improved

  • Claude parser + spawner aligned with real Claude 2.1.x. Verified against the live claude CLI's stream-json protocol and long-lived process lifecycle (multi-turn within one process, no respawn per message). Real-claude E2E test gated by WICK_CLAUDE_E2E=1.
  • Approval flow architecture. Two patterns of approval are now both available: system-intercept (gate, mandatory) and voluntary ask (AskUser MCP tool). Wick uses gate for security enforcement and AskUser for UX questions the agent decides to ask.
  • Workspace model rewrite. Replaced the project-centric model (1 project = 1 git repo, session = git worktree) with a workspace-centric model (folder shared across sessions, no git ops, custom paths supported). Fixes the "session without project fails to spawn" bug and matches how teams actually work — one folder full of stuff that several conversations touch.
  • Provider rename from "backend" — session.AgentEntry.Provider, pool.FactoryOptions.ProviderType/Name, userconfig.ProvidersConfig. Single package internal/agents/provider/ consolidating driver + spawner + per-instance config + spawn logger.
  • Registry split. RegisterBuiltins (default-on agents tools) vs RegisterLabSamples (lab-only); cmd/lab/ renamed to cmd/wick-lab/.
  • Multi-turn + multi-session integration tests via simulated spawners; 91 tests across 21 packages green at release.
  • Design docs synced to implementation for agent phases 1–7 (foundation, pool, gate, UI, providers, Slack, mid-session approval). Stage 9 follow-ups (env vars dropped, single shared spec/socket, installer-shipped sidecar) captured in command-gate-architecture.md.

Migration

No DB migration required — agent_channels, provider_statuses, and the gate spec/audit files are auto-created on first boot.

If you ship a downstream branded build, rebuild with the new wick build so the installer ships <app>-gate[.exe] next to the main binary. Without it the gate falls back to embedded extract on first use, which still works but loses the installer-managed sibling location. There is no env-var override (WICK_GATE_BIN / GATE_BIN were removed).


Curated for the v0.9.0 release.


v0.8.11

Released on 2026-05-07

Fixed

  • Resolved an issue where the application version was incorrectly baked during builds by aligning CI environment variables with the expected build flags.

Improved

  • Updated installer filenames to include version, operating system, and architecture details for better visibility and management.

This summary was automatically generated by Gemini AI


v0.8.10

Released on 2026-05-07

Fixed

  • Resolved an issue where the Windows updater failed to locate assets by switching from .exe to .msi format.
  • Fixed Windows silent installation failures by utilizing msiexec to ensure the update properly overwrites the existing installation.

Improved

  • Added diagnostic logging for Windows updates, saving logs to msiexec-install.log in the cache directory to aid in troubleshooting.
  • Updated the release template configuration.

This summary was automatically generated by Gemini AI


v0.8.9

Released on 2026-05-07

Added

  • Secure first-boot flow requiring password rotation and email setup upon initial login.
  • Automatic generation of a 5-word (CVCVC) admin passphrase stored in a secure local file.
  • "wickmanager" built-in connector providing 24 operations for managing app, job, tool, and connector configurations.
  • Host allowlist middleware to restrict HTTP requests to the configured application host.
  • OS toast notifications triggered upon system tray launch.
  • Auto-launch functionality for Windows systems after installation.
  • Tray menu items for quick access to initial credentials and the server URL.
  • Sensitive data redaction in logs for authentication and configuration endpoints.
  • Dedicated mcp.log for auditing management plane activities.

Fixed

  • Log file initialization on Windows to prevent 0KB log files when running without a console.
  • Windows pipe communication for MCP by replacing -H=windowsgui with dynamic console management, allowing 'mcp serve' to function correctly with external clients.

Improved

  • Migrated standard library logging to structured zerolog calls throughout the application.
  • Enhanced logging strategy to prioritize file output to ensure logs are captured in GUI environments.
  • Relocated application data storage to the user's home directory.
  • Refined process management lifecycle for server and worker components.
  • Build process feedback with status indicators for MSI and DMG packaging.
  • Documentation for environment variables, system tray usage, and secure-by-default workflows.

This summary was automatically generated by Gemini AI


v0.8.3

Released on 2026-05-06

Added

  • Installer-friendly artifact generation via the --installer flag, providing per-user .msi packages for Windows and .dmg drag-to-install images for macOS.
  • Automatic detection of MSYS2 environments on Windows to auto-register gemini-msys2, codex-msys2, and claude-code-msys2 configurations for MSYS2 shells.

Improved

  • Refactored MCP configuration to utilize a global ~/.claude.json user config instead of project-specific .mcp.json variants.
  • Standardized Windows installation paths to %LocalAppData%\Programs to ensure reliable self-updates and autostart functionality without requiring UAC elevation.

This summary was automatically generated by Gemini AI


v0.8.2

Released on 2026-05-06

Fixed

  • GitHub updater behavior to treat 404 errors as "no releases yet" instead of a hard error.
  • Build documentation.

Improved

  • Release workflow and GitHub Actions configuration by renaming environment variables to RELEASE_* prefixes to prevent reserved keyword collisions.
  • Updater security by obfuscating embedded GitHub Personal Access Tokens (PAT) using XOR and base64.
  • Logging architecture by splitting app, server, and worker logs into dated files and routing via zerolog.Ctx(ctx).
  • Log management functionality to open the logs directory instead of individual files to improve compatibility.

This summary was automatically generated by Gemini AI


v0.8.1

Released on 2026-05-06

Fixed

  • Documentation build configuration.

Improved

  • Automated build processes.

This summary was automatically generated by Gemini AI


v0.8.0

Released on 2026-05-06

Added

  • AUTO_VERSION repository variable to automate version bumping, tagging, and committing changes back to the repository during CI.
  • wick version next subcommand to increment the last numeric segment of the wick.yml version.
  • Windows executable metadata embedding, including brand icons, product descriptions, and version information.
  • Automatic bundling of binaries into platform-native distributables: .exe for Windows, .dmg for macOS (host-only), and .deb for Linux.
  • Support for multi-platform build targets using --target, --goos, --goarch, and --all flags.
  • Native self-updater support for extracting binaries from .dmg and .deb packages.

Fixed

  • Issue where the application would fail to launch from Windows Explorer due to Cobra's automatic CLI mousetrap check.
  • Console window flashing on Windows when triggering the "Open in editor" command.
  • Port collision issues by implementing synchronous pre-flight checks and reflecting failures directly in the tray menu.

Improved

  • Consolidated application logs, databases, and configuration files into the platform-specific UserConfigDir.
  • Redirected standard output and error streams to log files for Windows GUI builds to ensure diagnostic data is captured.
  • Replaced the global TCP-based single-instance lock with per-app PID files to allow different Wick-built applications to run concurrently.
  • Changed the default server behavior to opt-in, with auto_start_server now defaulting to false.
  • Refactored build orchestration into platform-specific modules to support better maintainability and future package formats.
  • Updated CI/CD release workflows and Docker multi-arch build templates to support native bundling.

This summary was automatically generated by Gemini AI


v0.8.0

Released on 2026-05-05

Added

  • AUTO_VERSION repository variable support to automatically bump versions in wick.yml and commit changes back to the repository.
  • wick version next subcommand to increment the last numeric segment of the application version.
  • Windows executable resource embedding to include brand icons and file metadata such as FileDescription, ProductName, and Version.
  • --bundle flag for wick build to generate native macOS .app bundles (including Info.plist and icons) and Linux .deb packages.
  • Automatic bundle identifier derivation based on the go.mod module path.

Fixed

  • Issue where Windows binaries failed to launch from Explorer due to the default CLI double-click guard.
  • Global single-instance lock conflict by replacing the fixed TCP port with a per-app PID file and liveness check.
  • Console window "flash" when opening editors on Windows by suppressing the command wrapper window.
  • Sample release workflow configuration.

Improved

  • Application data organization by consolidating logs, databases, and configuration files under a single UserConfigDir tree.
  • Windows logging by piping stdout and stderr to log files, ensuring output is captured for GUI-only builds.
  • System tray server management with synchronous port collision pre-flight checks and inline failure reporting in the menu.
  • Sample Docker configuration and release YAML files.
  • Documentation for CLI subcommands, single-instance locking mechanisms, and server default settings.

This summary was automatically generated by Gemini AI


v0.7.1

Released on 2026-05-05

Improved

  • Automated the generate task (templ, tailwind, and go generate) to run during wick build, streamlining CI workflows and minimizing project configuration.
  • Updated and synchronized documentation files.

This summary was automatically generated by Gemini AI


v0.7.0

Released on 2026-05-05

Added

  • System tray architecture for desktop applications, replacing the previous GUI implementation with a lightweight tray-based control center.
  • wick build subcommand to handle cross-compilation with automatic metadata injection for application name, version, and repository info.
  • Integrated self-updater for desktop binaries with support for GitHub Release tracking, SHA256 verification, and stepwise UI feedback.
  • OS-level autostart support for Windows (Registry), macOS (LaunchAgents), and Linux (XDG) via user-scoped configuration.
  • Automatic SQLite database path resolution that prioritizes environment variables, user config, or local binary paths.
  • CI/CD templates for GitHub Actions to automate version tagging and multi-platform release builds.
  • Headless build tag support to compile binaries without system tray dependencies.
  • Daily log rotation and retention management, storing logs in user cache directories.
  • Stateful tray icons that provide visual feedback on server and worker status.
  • "About" submenu in the tray displaying application version, framework version, commit hash, and build time.

Improved

  • SQLite concurrency performance by enabling Write-Ahead Logging (WAL) mode and busy_timeout settings.
  • Default application port changed from 8080 to 9425.
  • wick init process now automatically substitutes the project name into the generated wick.yml.
  • Task execution now respects double quotes in commands, allowing complex -ldflags to be passed during builds.
  • Single-instance lock mechanism using a local TCP port to prevent conflicting background processes.
  • MCP server identification now advertises the downstream application version rather than the framework version.
  • Expanded documentation for desktop tray architecture, build workflows, and environment variable references.

Fixed

  • Issue where task command parsing incorrectly split arguments containing spaces or quotes.
  • Database connection failures when running desktop binaries from arbitrary working directories.
  • Menu display errors where update status or PAT expiration feedback was not surfaced to the user.

This summary was automatically generated by Gemini AI


v0.6.4

Released on 2026-05-04

Fixed

  • Bind Stdio MCP context to a real admin identity to enable decryption of tokens in the web UI.
  • Resolved an error occurring during database migrations.
  • Updated generated template files.

Improved

  • Refined internal application workflows.

This summary was automatically generated by Gemini AI


v0.6.3

Released on 2026-05-04

Added

  • MCP instructions for wick_enc_.

This summary was automatically generated by Gemini AI


v0.6.2

Released on 2026-05-04

Improved

  • Automated the registration of encfields for all consumers by moving the registration logic into the package initialization.

Fixed

  • Resolved an issue where consumer applications lacked the /tools/encfields route, which previously caused wick_encrypt and wick_decrypt MCP redirects to fail.

This summary was automatically generated by Gemini AI


v0.6.1

Released on 2026-05-03

Added

  • At-rest encryption for configuration values tagged as secrets using a master-keyed system.
  • Per-field metadata for connector credentials, allowing for individual tracking of field types, requirements, and descriptions.

Fixed

  • Potential plaintext credential leaks in connector error messages and audit logs through a centralized masking interface.
  • Data leak paths where decrypted tokens could be passed into non-secret fields.

Improved

  • Connector configuration architecture, migrating from a single JSON blob to a normalized per-field storage schema for better queryability and performance.
  • Database migration logic to automatically backfill legacy connector configurations into the new centralized configuration table.
  • Secret field handling in the UI to allow keeping current values when input fields are left blank.

This summary was automatically generated by Gemini AI


v0.6.0

Released on 2026-05-03

Added

  • Implemented an encrypted-fields layer using AES-256-GCM and per-user HKDF salts to secure credentials flowing between LLMs and connectors.
  • Introduced wick_enc_ tokens to ensure credentials issued for one user cannot be decrypted by another.
  • Added automatic decryption of input configurations and masking of sensitive plaintext in connector responses and audit logs.
  • Created a security-tagged tool at /tools/encfields for manual JSON-based encryption and decryption.
  • Added wick_encrypt and wick_decrypt MCP tools that redirect to the UI for secure processing.
  • Introduced the encrypted-fields skill, embedded into the binary for propagation via wick skill sync.
  • Added Mask and MaskIgnoreCase methods to connector.Ctx to allow connectors to mask sensitive data dynamically.
  • Integrated encryption key bootstrapping with support for auto-generation and WICK_ENC_KEY environment overrides.

Improved

  • Refined the encryption API by splitting MaskSensitive into Mask and MaskIgnoreCase to improve call site clarity and eliminate boolean traps.
  • Updated the sample connector and crudcrud template to demonstrate response masking for secret keywords and ignore-case configurations.
  • Enhanced system documentation, including a new reference page for encrypted fields and updated guides for MCP and connector modules.
  • Updated AGENTS.md and skill labels to include and cross-link the new encryption capabilities.

This summary was automatically generated by Gemini AI


v0.5.6

Released on 2026-05-03

Added

  • New config-tags skill as a standalone, single source of truth for configurations.
  • Automatic injection of config-tags alongside design-system during wick init.
  • Support for config-tags in wick skill sync and wick skill list commands.

Fixed

  • Issue where wick:"default=..." seed values were not applied when Go fields were zero.

Improved

  • Chart functionality with the implementation of limits.
  • UI for default and secret fields, including masking set values with bullet characters.
  • Module architecture by referencing the config-tags sibling folder in tool-module and connector-module.

This summary was automatically generated by Gemini AI


v0.5.4

Released on 2026-05-02

Added

  • New kvlist editable table widget for storing values as JSON arrays.
  • Support for wick:"kvlist=..." tags to define table columns.
  • Per-field status indicators showing saving, success, and error states.
  • New config_helpers.go utility for input handling and list processing.
  • Dedicated reference/config-tags.md documentation.

Fixed

  • Non-deterministic ordering in ListOwned by implementing a declOrder slice.

Improved

  • Revamped configuration forms to use always-visible inputs instead of click-to-edit.
  • Implemented per-field auto-saving with 800ms debounce for text and immediate updates for other input types.
  • Synchronized wick tag grammar across tool, connector, and design-system modules.
  • Streamlined module documentation by centralizing configuration tag references.

This summary was automatically generated by Gemini AI


v0.5.3

Released on 2026-05-02

Fixed

  • Updated upgrade logic to fetch the latest version from both Go proxy and GitHub to ensure real-time accuracy and resolve proxy sync delays.

This summary was automatically generated by Gemini AI


v0.5.2

Released on 2026-05-02

Added

  • Added a status field to wick_list and wick_search responses to identify connectors requiring manual configuration before execution.

Fixed

  • Resolved an issue on Windows where active binaries were locked during upgrades by implementing a rename strategy for the running executable.

This summary was automatically generated by Gemini AI


v0.5.1

Released on 2026-05-02

Added

  • Model Context Protocol (MCP) support via stdio transport, enabling integration with LLM clients.
  • CLI subcommands for mcp serve, mcp config, and mcp install.
  • Support for four MCP build modes: auto, dev, build, and rebuild.
  • Automated MCP configuration installation for Claude Desktop, Cursor, Gemini, Codex, and Claude Code.
  • wick_info tool to provide version, build time, and commit metadata to LLM clients.
  • CLI commands to start the server and worker directly.

Improved

  • Automatic directory resolution to the project root during MCP startup to ensure correct loading of .env files and SQLite databases.
  • Detection for Windows Store installation paths for Claude Desktop.
  • Binary execution logic on Windows to bypass extension requirements for PE binaries.
  • MCP auto mode using mtime-based staleness checks instead of roundtrip flags.
  • Documentation for local MCP setup, including guide sections for all build modes and installation targets.
  • Metadata field naming in wick_info for better clarity in LLM responses.

Fixed

  • Versioning inconsistencies and build flag propagation across CLI tools.

This summary was automatically generated by Gemini AI


v0.4.2

Released on 2026-05-02

Improved

  • Reorganized the crudcrud connector into a three-file layout to improve maintainability.
  • Updated the connector skill functionality.

This summary was automatically generated by Gemini AI


v0.4.1

Released on 2026-05-01

Added

  • New functionality for the wick upgrade command to self-install the CLI binary.

Improved

  • Upgrade process split into distinct prompts for the CLI binary and go.mod dependencies.
  • Support for binary-only upgrades when no go.mod file is present, preventing errors during the upgrade process.

This summary was automatically generated by Gemini AI


v0.4.0 Connectors + MCP

Released on 2026-05-01

Added

  • Connector module — third class of wick module beside Tool and Job, designed for LLM consumption via MCP (Model Context Protocol). Each module wraps one external API with a typed Configs struct + N typed Operations. See Connector Module.
  • MCP server at POST /mcp with the four-tool meta-dispatch pattern (wick_list, wick_search, wick_get, wick_execute). Tool IDs are opaque (conn:{connector_id}/{op_key}) and stable across admin renames. See MCP for LLMs.
  • Personal Access Tokens at /profile/tokenswick_pat_<32hex>, hash-only stored, render-once banner. For MCP clients that cannot speak OAuth (Claude Desktop, Cursor, cURL). See Access Tokens.
  • OAuth 2.1 with Dynamic Client Registration (RFC 7591), PKCE S256 mandatory, refresh rotation + replay detection. Access wick_oat_<32hex> (1h TTL), refresh wick_ort_<64hex> (30d TTL). For browser-based MCP clients (Claude.ai). See OAuth Connections.
  • Connected Apps at /profile/connections — per-grant disconnect (revokes every token for one user × client pair).
  • Admin pages: /admin/connectors, /admin/access-tokens, /admin/connections for cross-user management.
  • Built-in System job connector-runs-purge — daily cleanup of connector_runs audit rows older than 7 days (configurable). Code-managed; cannot be disabled. See Connector Runs Purge.
  • Per-row test panel + history at /manager/connectors/{key}/{id} — Postman-style runner with URL-synced operation dropdown, prefill from history runs, paginated audit log with filter chips, expand-row inline detail, manual Retry navigation.
  • Bundled skill connector-module — added to wick skill sync and the template's bundled skill set. The example connectors/crudcrud/ ships in scaffolded projects.
  • Three-module mental model in docs — introduction page now lists Tool, Job, and Connector side by side.

Changed

  • template/AGENTS.md documents the connectors/ folder, app.RegisterConnector registration site, and the connector-module skill row.
  • template/README.md lists the connector test page URL and /profile/mcp install snippets in the Quick Start.

Migration notes

  • Existing wick deployments upgrading to this version: the connectors, connector_operations, and connector_runs tables are auto-created on first boot. The connector-runs-purge job auto-registers and auto-enables. No manual action required.

v0.3.0

Released on 2026-04-22

Added

  • SSO domain allowlisting to restrict sign-ins to specific email domains, including a chip-based editor in the admin UI for management.
  • A wick upgrade command to facilitate internal version updates.

Improved

  • Default theme resolution for new users and guests, providing GitHub-styled themes for unauthenticated or unset user sessions.
  • Tool operator interface via a unified ToolHeader component and standardized setup-required banners across all tool pages.
  • Tool rendering architecture to pull configuration state directly from context rather than manual service injection.
  • Release workflow automation to synchronize version references across documentation, templates, and agent installation hints.
  • Agent session initialization with a preflight check to verify local go and wick toolchain installations.
  • Internal Go dependencies to their latest versions.

This summary was automatically generated by Gemini AI


v0.2.0

Released on 2026-04-21

Added

  • wick skill list and wick skill sync commands to manage bundled skills and synchronize the AGENTS.md skill table.
  • MobilePrompt component to display inline prompts specifically for mobile users.
  • Downstream tool-module skill template featuring flat tool paths and mandatory clarify+plan loops.
  • Comprehensive CLI reference documentation categorizing built-in commands and YAML task shortcuts.
  • AI-agent quickstart section and skill sync pointers in the template README and AGENTS.md.

Fixed

  • License synchronization logic.
  • Text alignment for prompts on mobile devices to ensure left-alignment.

Improved

  • CI/CD pipeline configurations.
  • Homepage hero layout responsiveness for both mobile and desktop viewports.
  • wick init scaffolding to include downstream tool-module skills and shared design-system components.
  • Documentation structure by renaming agent.md to AGENTS.md across all guides and pages.
  • Prompt instructions updated to utilize the wick dev command and version v0.1.13.
  • Desktop-specific visibility for installation components via CSS optimizations.

This summary was automatically generated by Gemini AI


v0.1.13

Released on 2026-04-19

Fixed

  • Corrected project license to MIT.
  • Synchronized license documentation and repository metadata.

This summary was automatically generated by Gemini AI


v0.1.12

Released on 2026-04-19

Added

  • MIT license for the repository.

Improved

  • Project versioning and internal metadata.

This summary was automatically generated by Gemini AI


v0.1.11

Released on 2026-04-19

Added

  • Added license information to the repository.

Improved

  • Configured CI to trigger documentation and pkg.go.dev synchronization on version tags.

This summary was automatically generated by Gemini AI


v0.1.10

Released on 2026-04-19

Fixed

  • Fixed changelog formatting and removed duplicate entries for version v0.1.0.

Improved

  • Automated CI workflow to merge trigger PRs to the release branch upon release completion.
  • Enhanced changelog documentation with version comparison links for v0.1.1 through v0.1.7.
  • Synchronized documentation and go.mod.tmpl templates for version v0.1.9.
  • Performed general cleanup and synchronization of project documentation.

This summary was automatically generated by Gemini AI


v0.1.9

Released on 2026-04-19

Fixed

  • Changelog formatting and duplicate entry for version 0.1.0.

Improved

  • CI workflow to automatically trigger pull requests to the release branch after a release completes.
  • Project documentation through synchronization and the addition of comparison links for versions v0.1.1 to v0.1.7.

This summary was automatically generated by Gemini AI


v0.1.8

Released on 2026-04-19

Added

  • Retry logic with rate-limit backoff for Gemini API requests.
  • Tag comparison links to documentation changelog entries.

Fixed

  • CI reliability issues by fetching full repository history and origin/master before merging.
  • Stale branch errors by ensuring the release-sync branch is deleted prior to pushing updates.

Improved

  • Release pipeline architecture by splitting tasks into five modular jobs for easier retries.
  • CI automation by utilizing the GitHub API for PR merges and branch deletions instead of local git operations.
  • Documentation workflow by automatically syncing changelog updates directly to project docs.
  • CI security and permission management through the use of ADMIN_TOKEN for checkout and merge actions.
  • Workflow efficiency by pushing sync updates directly to the master branch and removing redundant PR steps.
  • Repository structure by removing the root CHANGELOG.md and centralizing logs within documentation.

This summary was automatically generated by Gemini AI


v0.1.7

Released on 2026-04-19

Fixed

  • Logic for automatic documentation version updates.

Improved

  • CI/CD workflow to automatically delete release-sync branches after merging.
  • Synchronization process for go.mod.tmpl and CHANGELOG files.

This summary was automatically generated by Gemini AI


v0.1.6

Released on 2026-04-19

Fixed

  • Synced go.mod.tmpl before tagging new versions.
  • Enabled automatic merging of release-sync pull requests to the master branch using ADMIN_TOKEN.

This summary was automatically generated by Gemini AI


v0.1.5

Released on 2026-04-19

Improved

  • Synced go.mod.tmpl and CHANGELOG files for v0.1.4.

This summary was automatically generated by Gemini AI


v0.1.4

Released on 2026-04-19

Improved

  • Improved auto release process.

This summary was automatically generated by Gemini AI


v0.1.3

Released on 2026-04-19

Fixed

  • Bumped go.mod.tmpl before tagging and fixed version order in the release process.
  • Resolved issue with pushing to refs/heads/release instead of HEAD in a detached state.
  • Checked out the release branch before commit and tag to prevent detached HEAD push errors.
  • Synchronized Go modules.

Improved

  • Updated pipelines.

This summary was automatically generated by Gemini AI


v0.1.2

Released on 2026-04-19

Added

  • Add version command.

Fixed

  • Resolve CI/CD issues.
  • Resolve documentation build issues.
  • Correct wick init setup call.
  • Address version-related issues.

Improved

  • Update README.md documentation.
  • Enhance CI/CD processes.
  • Update project pipelines.
  • Update go.mod template version during releases.
  • Optimize package JSON location.

This summary was automatically generated by Gemini AI


v0.1.1

Released on 2026-04-19

Improved

  • Update pipelines.
  • Update README.md documentation.
  • Update CI/CD for documentation builds.
  • Update go.mod template version during release.

This summary was automatically generated by Gemini AI


v0.1.0

Released on 2026-04-19

Initial public release.

Added

  • wick init <name> — scaffold a new project from template, auto-run go mod tidy + go run . setup
  • wick.yml cross-platform task runner — setup, dev, build, test, tidy, generate
  • Tool modules (tools/<name>/) — mount at /tools/{key}, typed Config with wick:"..." tags
  • Background job modules (jobs/<name>/) — operator surface /jobs/{key} + admin surface /manager/jobs/{key}
  • Tag system — group and filter tools/jobs with DefaultTag, admin-managed
  • Visibility control — VisibilityPublic / VisibilityPrivate per tool
  • Runtime config — Config structs reflected into admin-editable configs table rows
  • SSO support — configurable from /admin/configs, no redeploy needed
  • AES-GCM stateless sessions — per-job access, theme cookie persistence
  • Tailwind CSS + templ — standalone Tailwind CLI (no Node.js), type-safe Go templates
  • Claude Code integration — agent.md + Claude skills shipped with every wick init project
  • External link cards — register URL shortcuts as tool cards via RegisterToolNoConfig
  • Dark/light theme — user preference persisted via cookie
Built with ❤️ by a developer, for developers.