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.DefaultProfilesets the profile used whensession_openis called with noprofileargument (an explicit argument still wins);ForceDefaultProfilepins every session toDefaultProfile, ignoring anyprofileargument passed in. Turning onForceDefaultProfilewithout aDefaultProfileset fails atsession_openwith a clear error. Connector bumped to 0.9.0. See Playwright Browser ▶ Making a profile the default.
Fixed
todotool over MCP + goal-only calls: Todo calls arriving over MCP asmcp__wick__todoare 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 withtodo{goal_done:true}and noitemsis now accepted (theitemsarray 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 sendthinkingBudget: 0, which Gemini 3.x models reject with400 INVALID_ARGUMENT. Wick now omitsThinkingConfigfor 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. /thinkingtoggle no longer resets on idle/refresh: Session overrides (the/thinkingpopover's on/off + effort level) were runtime-only and dropped on engine exit. They are now persisted to anoverrides.jsonsidecar 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_turnsnow defaults to0(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 alongsidemax_model_retriesandmodel_call_timeout_sec. A cut turn now shows[wick] turn cut: …inline in the transcript instead of silently ending. - The shared
todotool gains an optional goal latch (goal/goal_done/goal_abandonfields): 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
@vendoroverride (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. wickis now a first-class skill provider:~/.<app>/skillsis registered alongside~/.claude/skillsetc., 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'sSKILL.mdon demand, andread_filenow 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
ReasoningEffortknob, 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_urldata-URL, Anthropic base64 image block, Geminiinline_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/thinkingslash 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|highalso 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;
turnToContentnow re-appends the path block on replay, mirroring the live send. read_fileis 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
/providercommand 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
wickmodel can now store a discovery filter (e.g.,termfor includes,-term/!termfor 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).
- 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:
- The
/providercommand 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
/compactcommand 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_KEYplaceholder). - 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, other4xx) fail fast. Configurable viamax_model_retriesandmodel_call_timeout_sec.
Connectors
Added
- Connector runs are cancellable: A ✕ Cancel button on a
runningrow 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
runningforever: A background reaper job periodically reclaims any row stillrunningwell past every legitimate op's ceiling.CancelSessionaborts 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 freecloakbrowser. It is managed by the officialcloakbrowserCLI + 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 configuredMaxLiveSessionsonce its license resolves to a paid tier. Thecloak_use_clitoggle 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. Newprofile_listandprofile_deleteoperations are available, andsession_listgains 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 withget_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.detailis forwarded asclickCountfor 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_requestno longer crashes the Node driver or hangs the run by reading only initializer-cached fields in theOnRequestFinishedcallback.- Hard Go-level deadline applied to every browser operation (ephemeral + live) plus a bounded connection close to prevent goroutines from blocking indefinitely.
browser_statusflicker on the Pro engine's status row when runningcloakbrowser infois 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-blockliston Windows and adding--start-maximizedfor 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/geminiinstances: 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.jsonbaseline, overlaid by a GitHub-raw copy (refreshed lazily or on Rescan) and a hand-editable disk cache under~/.<app>/— merged per-model byupdated_at(newest wins); disabled models are hidden. - The composer's provider picker gained a full type ▸ instance ▸ model drill-down (a new reusable
ProviderPickercomponent), 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/geminialternative talking straight to a vendor API), the CLI model picker + model catalog, theAllow shell metacharacterscommand-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.Disabledsupport; 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.mdguidance 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.
AllowShellMetacharsconfiguration 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
titleanddescriptionfields, and optional nestedsubsteps. - 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_attimestamps from trace events are parsed and displayed inToolCards. TodoCardsums 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
stepfield 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, andedit_filetools 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_ENABLEDenvironment toggle for disabling the service worker in development.
Improved
fe/scripts/dev.mjsdebounce 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_propertiesfornotion_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. Takespage_id(the row) andproperties(JSONname → value, using the same shapes ascreate_page). The operation refuses a plain page (one without a property schema, directing users toset_titleorupdate_blockinstead) and returns unknown or read-only property names inskipped_propertiesrather than failing the call. Returns{id, updated, skipped_properties}. Calldescribe_databasefirst to retrieve exact property names, types, and options. See Notion (Unofficial) ▶ Writing database row properties.notion_unofficialrequires 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 consideredneeds_setupuntil 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 toreadyonce 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-inMeta.RequireAIDescriptionconnector 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_notein the connector meta-tools:wick_list,wick_search, andwick_getnow include a separateoperator_notefield. This field carries the admin-written per-instance AI description, distinguishing it from the connector's built-indescription. 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_blocksreturns each top-level block as{id, type, text, editable};update_blockrewrites one block's text (and optionally its type) in place;delete_blockremoves one block — all addressed by block id, so neighbouring blocks are never touched.append_contentadds new blocks from markdown at the end, or mid-page viaafter_block_id. Two guards keep an edit from breaking the page:update_blockrefuses non-text blocks (images, embeds, tables, dividers — markededitable:false), andappend_contentrejects anafter_block_idthat 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 enabledplaywright_browserinstance 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 forcloakbrowser(patched Chromium) instances. It supports pop-out/floating and fullscreen views, zoom, an address bar withchrome://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/.crxupload or Chrome Web Store id) into its live sessions. NewMaxTabsPerSessionconfig caps tabs per session (default 1, opt-in multi-tab) andrun/session_listgained atabinput /max_tabsfield 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_browserinstallation. - Updated connector documentation: New documentation pages were added for
lokiandhttpbinconnectors, and these, along withplaywright_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 atoken_v2session cookie (with a paste-a-cURL setup widget). Sees everything the logged-in user can see, including embedded/filtered database views. Providesdescribe_database(schema + options + view filter) andcreate_pagewith typed properties (date/select/relation), plusquery_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
Productivityconnector 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
wickmanagerconnector surfaces it to an LLM (connector_list,connector_get). See Connector Module ▶ AI description. - Enhanced Connector Configuration UX:
ConfigOnlyOperations: Introducedconnector.OpConfigOnlyfor operations that back a config-form widget (e.g., pickers, status) but are not agent tools. These are hidden from the MCP surface, blocked viawick_executefor 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_idanddatasource_uidare now HTML pickers, utilizingConfigOnlyoperations (list_orgs,list_datasources).- A
connection_statuswidget shows Grafana version and reachability. auth_mode(basic|token) provides conditional visibility for username/password vs. token fields.- Configs are regrouped into
Connection,Authentication, andDatasourcesections. labelsandlabel_valuesoperations now accept optionalstart/endparameters.- 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 (likedlv) to a running plugin instance. A key fix ensuresClientConfig.Pluginsis 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'sdatasource_uidis now a required field.
Fixed
- Agent Visibility Gate for Shared Resources: Corrected an issue where
callerProjectAccessfor 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
setHistoryfunction 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 honorvisible_whenconditions, 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/9routerinstead of the updatedguide/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 oldsession-config-purgejob 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 --logstill finds the right file by tailing the newestdaemon-*.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
AbortControllerfortext/event-streamrequests, widening the/airouter/*skip to include the base-prefixed mount (/tools/agents/airouter/), and adding 15-second keepalive comments and a leading: connectedmessage 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-coverrides) as a raw override. A new master switch (AirouterEnabled), replacingRouter9Enabled, 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 assrc/foostays 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
EventSourceon its 8s navigation-timeout and never bypassed the base-prefixed/tools/agents/airouter/mount; it now skips anytext/event-streamrequest 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, andAdminSeeAllpermissions, applied across the/data-tablesUI list, detail views, and mutations. - Admin Grant Page: A new
/admin/data-tablespage allows administrators to share data tables by tag, mirroring the existing workflow sharing mechanism. - MCP Scoping: The
connector.Ctxnow includesCallerUserID, stamped byconnectors.Servicefrom 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}/rowsis introduced for programmatic access, guarded by permissions. - Sandboxed Widget Access:
window.wickDataTable.query,insert,update, anddeletemethods 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 aswindow.wickReadFile. - Agent Prompt Documentation: The system prompt has been updated to document this new bridge, enabling agents to build database-backed widgets.
- JSON Row API: A new API endpoint
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.
- Resolved an issue in the
- Provider Test Flakiness:
- Fixed flaky
TestRenameandTestSwitchtests within the agent provider package, which were failing under the-raceCI gate. This was due to a race condition whereSave's async probe goroutine for reloading and rewritingconfig.jsonsometimes conflicted with subsequent synchronous test operations. AsaveSeedhelper now ensures this goroutine is drained after each seedSave, serializing config writes and preventing stale reloads or file access denials on Windows. (Internal stability improvement.)
- Fixed flaky
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 fromGET /api/composer/commands, scoped withscope=new(skills only, for pre-session pages) andprovider=<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 (
```htmlfilefence): A new fence previews a saved.htmlfile by its session-relative path instead of pasting the markup into the transcript — same sandboxed preview (Full screen / Show code / Download) as inline```htmlblocks and file artifacts, but the transcript only ever stores the path. Clicking a.htmlfile 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'tfetch()(the CSP blocks it by design), so the runtime now injectswindow.wickReadFile(path), returning a Promise of a session file's text contents fetched by the parent page and handed back overpostMessage. 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-tableslists only tables the signed-in user owns or was granted via anowner:<slug>tag — the same ownership model as Workflows and Skills — with admins seeing every table only whenadmin_see_allis on. A new/admin/data-tablesgrant page lets an admin share a table with other users. The agent's MCPdatatable_*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: AlongsidewickReadFile, the runtime now injects awickDataTable.{query,insert,update,delete}bridge into every artifact, proxied by the parent over the same postMessage channel — nofetchever 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 trackinguserMsgNotifiedand skipping the second call.entity.ScheduledMessage: Clamped negativeMaxRunsvalues to 0 inBeforeCreateto 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 onjson.Marshalerrors, consistent with other publishers.
- Slack:
getReactions: Now rejects requests if bothfileandchannel+tsparameters are supplied, enforcing the documented either/or contract.shapeReadFile: When Slack reports no mimetype, the function now falls back toutf8.Validto 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-basefallback 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 notReadyguard (page-shell handlers don't callnotReady; theschedulesAllUIdata endpoint already guards nil) were reviewed and rejected as not applicable.
- Correctness:
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_messageMCP tool (create/list/cancel/pause/resume/reschedule), specifying timing withrun_at,every, orcron. 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, offeringlist_files,get_file_info, andread_file.read_filedownloads file bytes using the bot token, returning UTF-8 text as a string or binary/images as base64, with amax_bytesguard. Additionally,get_reactionshas been added to read existing reactions on messages or files, alongside the existing add/remove operations. These operations requirefiles:readandreactions:readscopes 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_messageSSE 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
npmon 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:
evalmarked destructive: Theevaloperation, which allows running arbitrary JavaScript in the page, is now gated behind the same destructive opt-in as therunoperation 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 theSessionDirconfiguration 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.devbefore 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
writeFileFromdid 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
probeVersionby executable path significantly reducesbrowser_statuspoll times from approximately 3-4 seconds to about 1 second. - Provider Storage Retention job no longer auto-enables: The
provider-storage-retentionjob now starts disabled on fresh installs, aligning its behavior withprovider-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
HtmlFieldcomponents; 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_browserconnector 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 scriptedrunop 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 adata-op/data-argconvention (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|collapsednow 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
groupconfig tag: The connector detail JSON response was missing thegroupfield, so fields configured withgroup=...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
EnableSSOconnectors (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 carryaccount_idalongsiderow_idto pin a run to a specific connected account; the engine injects that account's token at run time. Seeconnectornode. - 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 existingmessagetrigger. 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/.cmdlaunches doesn't matchcmd.exe's own re-parsing, so an argument with a space (or a shim path underC:\Program Files\...) could fail with'C:\Program' is not recognized as an internal or external command. Wick's internal process spawner now builds thecmd.execommand line itself for.bat/.cmdtargets.
v0.28.2 — Providers & Projects
Released on 2026-07-06
Changed
DefaultProvideris now a dynamic dropdown: Theagents.default_providersetting no longer offers a fixedclaude|codex|geminichoice — its options are your live configured provider instances (bare type, ortype/namewhen several instances share a type). It's unset by default and falls back toclaudeat spawn time, so a fresh install doesn't pin a provider the operator never chose.- Removed the operator-wide
default_project_idsetting: 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 staleagents.default_project_idconfig row. - Personal projects are undeletable: Auto-created per-user personal projects (tagged
personal) are now protected from deletion, same as the built-indefaultproject — the delete button is hidden and the API rejects the request.- The project settings API field
is_defaulthas been renamed tois_protectedto reflect this change.
- The project settings API field
Improved
- Frontend build process optimized: Replaced the per-workspace
vite build --watchfan-out with a single recursivefs.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(orclaude) 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/startcould return a 504 because the process died immediately —9router's#!/usr/bin/env nodeshebang doesn't resolve on Termux (no/usr/bin/env). Wick now launches it asnode <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 directoryerror. 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 (vianpm 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/v1proxy 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. Requiresnpmon host PATH. See 9router guide. - Route providers through 9router:
claudeandcodexprovider 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 tosk_9router. See 9router — routing providers through 9router. - Unauthenticated
/9router/v1proxy: 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 oldtype/namekey 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, andcmd.exewith 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/nameinstances (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
Selectcomponent 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
/processesendpoint are now correctly tagged askind:"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
CodeEditorcomponent 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_urifor 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 setreaction_channels_mode(allorwhitelist, defaultwhitelist). Thereaction_channelspicker controls which channels honour the switch. - Threads are still created by
@mentiononly — the switch never starts a new session, it only gates replies to an existing one. - Slack app must subscribe to
reaction_added,reaction_removed, andmessage.channelsevents, with scopesreactions:read+channels:history. The shippeddocs/slack-app-manifest.jsonalready includes them. See the Reaction auto-reply section of the channels guide.
- Enable on the Slack channel config page: toggle
Config field grouping (
wick:"group=..."tag): Config struct fields can now be grouped into titled section cards in the admin Settings UI by addinggroup=Title(orgroup=Title|Description) to thewick:"..."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/pluginsnow 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.
AllowOthersConfigureusers are intentionally excluded — the policy controls who receives that grant. The API response carries a newcan_manage_policyfield 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 viausers.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_shareevents), 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_messageandupdate_messagenow 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 optionalsession_idinput; the MCP transport also auto-injects it via theX-Wick-Session-Idheader so no manual wiring is needed in workflow nodes.update_messagenow 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_listandwick_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
Disabledflag. - 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-disableand/type-enable.
- Disabling a type immediately removes all its instances and operations from
- 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 thedisabled_typefield, 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_latestinput 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 regeneratesplugins.jsonfrom live GitHub releases. This replaces thejqpipeline previously used inrelease-plugins.yml, and its output uses the sameAvailablestruct the app reads, preventing catalog shape drift. Seewick plugin catalog.- Plugin DefaultTags — Plugins now declare
Meta.DefaultTagsusing the sharedplugins/tagscatalog. 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
wickbinary. They now ship as independently versioned and downloadable plugin binaries located underplugins/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
agentbuild profile no longer includes GitHub; it now contains onlyhttprestandslack. - The
fullprofile now registers 4 built-in connectors (HTTP REST, Slack, Loki, Phoenix), down from 7.
- You can install them on a running app using commands like
- 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 thewick.dbtree. 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 withWICK_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 aslinux/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/latestreturns 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: truefor core andfalsefor plugin releases. - Robustness: Added
update-branchand a 3-attempt retry mechanism to themerge-to-masterstep, resolving 405 "Base branch was modified" errors. - Performance: Enabled Go's test cache by removing the
-count=1flag fromgo testcommands, allowing unchanged packages to be skipped during subsequent test runs. Removed redundantgo buildsteps before tests.
v0.26.1 — Plugin Builds
Released on 2026-06-28
Improved
- Unified plugin build targets with the shared
BUILD_TARGETSvariable.- Previously, plugin releases hardcoded build targets independently of the
BUILD_TARGETSActions variable, which already gated thewickbinary build. - Now, a single
BUILD_TARGETSvariable controls bothwickbinary and plugin OS/architecture sets, streamlining the build configuration.
- Previously, plugin releases hardcoded build targets independently of the
- The
wick plugin build --targetcommand now accepts a comma-separated list of targets (e.g.,linux/arm64,darwin/amd64,windows/amd64). - The
release-plugins.ymlworkflow now readsvars.BUILD_TARGETSwith the same default and "all" semantics asrelease-artifacts.yml. - Added
TestResolvePluginTargetsto cover the new--targetparsing 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 aplugins-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 enforcesMeta.Keymatching 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
PluginManagerwith 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/disablestates 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 andResolveIdentityRPC for OAuth identity resolution. - Refactored the plugin monorepo path from
wick-plugins/toplugins/(modulegithub.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-keygencommand 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: passTOKEN=ghp_xxx(authenticated 5 000/hr), pinVERSION=vX.Y.Z(skips the API), or wait for the hourly reset. - Plugin Platform Stability:
- Improved JSON serialization for connector module manifests to ensure
OperationandModulefields are correctly marshaled and unmarshaled viajson:"-"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.Commandinstead ofos/exec. - Ensured
Manager.KillAllis 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.
- Improved JSON serialization for connector module manifests to ensure
- 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
templfiles are generated before building thewickCLI 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 (
imagecardfence): A new```imagecardfenced block renders web-search image results as a masonry gallery — each image at natural height, with a favicon + domain pill. Oneurl | captionper line;urlis 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 readableurl | captionlines.
Fixed
wick_executebatch mode over SSE/Streamable-HTTP transport: Acalls: [...]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
/healthand 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/healthto 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/-yflag: Pass-yto 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 upgradeno longer auto-starts dev server: After upgrading, wick exits cleanly instead of launching thedevtask. Start the dev server manually withwick devif 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-checkendpoint: 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-warmworkflow, which only warmed shared caches forpr-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 viaRequestRouter.OwnsRequestrather 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 onToolUseorToolResultevents). 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 ondone/erroror when a turn is superseded.
v0.25.0 — Platform Updates
Released on 2026-06-25
Added
- MCP —
wick_executebatch mode: Pass acallsarray 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. Settimeout_msto 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 (
identityorchannels) 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, leavingapp.css,icon.svg, and similar files stuck at "pending" until the boot restore finished. Because these paths are served fromembed.FSand 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
AbortControllertimeout 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) leftfetch()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 pastrespondWithviawaitUntil. - 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.jsasset.
Changed
wick build— build time always stamped:BuildTimeis now injected as an-Xldflag (RFC3339 UTC, set atwick buildinvocation time) for every build path. Previously it relied solely on Go'svcs.timeVCS metadata, which is absent inside thewick initscaffold (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 inwick_infoMCP 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.categorieslegend and set_meta.categoryon individual tools in theirtools/listresponse. 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_metawill 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-userwick_enc_prefix was matched during decryption, resulting in the ciphertext being sent verbatim as theAuthorization: Beareror 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-mdbundle, 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 -iviapkexec/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.debfile and swapping it in place usingsyscall.Exec, mirroring theinstall.shscript's approach. - The updater now provides a clear error message if the install directory is not user-writable (e.g., a root-owned
/usr/bininstallation), 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.,
allorserver) 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/configslets 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 whatwick_inforeports over MCP. See Admin Panel — System.
Changed
- Auto-update default changed to off:
auto_updateinconfig.jsonnow defaults tofalse(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
dpkgviapkexec/sudo. Self-update now mirrors the installer — it never escalates privilege. On Linux/Termux it extracts the inner binary from the staged.deband swaps it in place (syscall.Exec), so updates work on Termux (user-owned prefix, nopkexec/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> serverservice 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.Usemiddleware. - 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.,
innerHTMLreset), 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_alladmins, and ownerless unscoped sessions are unaffected. - Updated
admin-panel.mdto 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 viaselector:wick_getnow navigates connector operations across three levels instead of returning all schemas at once.- Call with
idonly 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'sinput_schema. - Flat connectors with no named categories list their ops directly at level 1.
- The
categoryandop_keyargument names are accepted as aliases forselector. - 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.
- Call with
- Documentation: Updated
mcp.mdand the changelog to reflect thewick_getthree-level drill-down with theselectorargument.
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>withmin-h-0for 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).
- Kebab Menu: Improved behavior to flip up near the viewport bottom and portal the popup to
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/connectorsinside 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/managerand are unaffected. - Agents sidebar — Connectors link: A dedicated Connectors navigation item has been added to the Agents sidebar, visible to all users.
/launcherrenamed to/mini-tools: The tools-grid launcher page has been moved from/launcherto/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/connectorsinstead 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
.svgfile instead of silently producing no output.
v0.22.1 — Connectors
Released on 2026-06-20
Fixed
- Corrected the
crudcrudsample template to return[]connector.Categorywhen registering operations. This resolves a build failure in the materialized template (wick-agent) by aligning withapp.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 declareDefaultAccess connector.AccessDefaultson theirModuleto pre-seed per-row access-policy flags (EnableSSO,AllowOthersConnectSSO,MultiAccount,AllowOthersConfigure) onto every freshly created instance. The Google Workspace connector shipsEnableSSO: true, AllowOthersConnectSSO: trueso 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
```htmlblocks 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.darkclass in dark mode — so generated HTML matches the chat's active light/dark theme. The agent system prompt instructs the model to usevar(--wick-*)for theming by default. See Agents — Artifacts. - Artifact kinds — markdown and text:
.mdfiles 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, keyprofile). 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/launcherin 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/connector—Category/Cat(): Built-in connector authors now group operations into titled sections usingconnector.Cat(title, description, ops...).Module.Operationsis[]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_workspaceconnector (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 viaadd_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.
- Gmail (6 ops):
Breaking
- Custom connectors — ops storage format changed: The stored
opscolumn 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_titleandwick_session_infoto 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_infoauthorization: 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:mmstamp 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:mmtimestamp 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_allat/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_allis off, instead of being reachable by any logged-in user. - See Admin Panel — Admin session visibility.
Improved
- Chat conversation rendering:
- SVG support:
svgfences 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
renderLiveaction managesinnerHTMLand 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).
- SVG support:
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_deltafragment 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
ConnectorRunstring columns, such asConnectorID, were too short (varchar(36)) to store session-workspace instance IDs (e.g.,sw_<UUID>, which are 39 characters). These columns have been widened totextto 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.gitignoreentries, removing the need for manual configuration.
v0.19.1 — Artifact Gallery
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 asandboxCSP header; HTML and other types forced to download). Path-traversal protection via the samesafeJoinsandbox as the rest of the agents file API. - Conversation API —
artifacts[]andhas_artifactper turn — each turn in the conversation API response now carries anartifactsarray (path, kind, MIME type) and ahas_artifactboolean. 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_reloadstate). 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/listand 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 atracefield. 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
PreToolUseCommand Gate hook (shown only when the master gate is enabled). The status badge distinguishesenabled ✓,enabled (unverified),ready, anddisabledstates. 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
localStorageacross 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 blocksnow 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.mdso 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/tointernal/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/errorevent, so the server-derivedartifacts/has_artifactdata 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
lifecycleandgit_statusevent, so generated files appear on their own without a refresh. - Connector operation toggle no longer silently no-ops on first disable —
SetOperationin the connector repo was usingdb.Save()which resolves to anUPDATEwhen the primary key is set, leaving a missing row untouched (andEnabled=falsewas dropped as a zero-value on struct insert). Rewritten as a GORMOnConflictupsert with a map payload so theenabledcolumn 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 sendsapplication/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 forenv(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_idin 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
AskUserapproval card is now restored when the page is loaded or refreshed mid-turn, so the question is never lost. - Conversation — orphan
tool_resultturns 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-rtkscript 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.enabledper workflow and set a global cap viaworkflow_max_parallel_globalin 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
thinkingdropdown (on|off, defaulton) and a conditionalmax_thinking_tokensnumber field are now available on the workflow agent node.offsetsMAX_THINKING_TOKENS=0(extended thinking disabled);onwithmax_thinking_tokens: 0leaves the env unset (unlimited / provider default);onwithmax_thinking_tokens ≥ 1024caps 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
ExtraArgsandEnvsettings configured in the providers UI were not being forwarded from theInstanceto the agent subprocess during spawning, resulting in agents running without their intended custom configurations.
Added
- Instance-Level Argument Flow:
ExtraArgscan now be passed viaSpawnOptions, mirroring the existingExtraEnvfunctionality to ensure instance-level arguments are correctly delivered. - Test Injection Utility: A new
InstanceOverrideinClaudeFactoryfacilitates test injection without requiring modifications to user configuration files. - Enhanced Testing for Claude: Dedicated
spawn_test.goadded for the Claude provider to specifically validatespawnerandopt ExtraArgshandling. - Configuration Contract Test: A new test,
TestFactoryInstanceConfig_ExtraArgsAndEnv, was implemented to establish a contract, ensuring all future providers correctly process and forwardExtraArgsandEnvconfigurations.
Improved
- Universal Spawner Compatibility: All agent spawners (Claude, Codex, Gemini) now correctly append
opt.ExtraArgsafter their inherents.ExtraArgs, preserving compatibility with existing static test fixtures. - Consistent Configuration Forwarding:
ExtraArgsare now consistently forwarded throughagent.Optionsand bothSpawncall-sites (StartandrespawnWithMessage). - Extended Provider Test Coverage: Existing Codex and Gemini spawn tests have been expanded to include
opt.ExtraArgscases, 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()withundefined. 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) returnednot authenticatedwhen 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.ymlworkflow warms shared caches (Go build, module, and templ binary) onpush: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-raceonly 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.ymlworkflow runs the full-racesuite daily, ensuring race conditions are caught in packages not frequently touched by PRs.
- Shared caches: A new
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, andcreate_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.
- Repositories:
- Health Check: Integrated a token-based
HealthCheckfor the connector (GET /user), providing an "auth"OpHealthentry. - Documentation: Added comprehensive documentation for the full operation set, health check, and required OAuth scopes.
- Pull Request Operations: Introduced new operations including
Changed
- Renamed the
install-rtk-termux.shscript.
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/sessionsand/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, andGET /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 endpoint —
POST /api/workflows/template-testnow accepts anexpressionsarray 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+ optionalhealth_expectinSourceMeta). 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, whenhealth_expectis 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 byErrOwnerTagImmutableguard.- Contextual filtering for
owner:tags: hidden from the/admin/tagspage, 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 frommissingkey=errortomissingkey=zero. A payload field that is simply absent (e.g. a webhook body without anactionkey) 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 discoverability —
wick_list,wick_search, andwick_getnow accept an optionalsession_idargument. Passing it causeswick_listto include this session'ssw_…workspace instances alongside regular connectors and return asession_config_basesarray (connectors that can be cloned but haven't been added yet).wick_searchnow also matches workspace instances so a connector spun up for the session is findable. Forwick_get,session_idis a separate argument — never append it to the connector id. - Session instance status — a workspace instance in
wick_list/wick_searchresults reportskind: "session". When its config is incomplete the status isneeds_setup_workspace(distinct from a saved connector'sneeds_setup), directing the user to the session Workspace tab rather than the admin dashboard. AllowSessionConfigauto-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"withoutsession_init— agent nodes withsession: "new"(or any ad-hocwf_adhoc_<uuid>session) no longer fail with "cannot find the path" when there is nosession_initnode 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 -winLDFLAGSand 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, withdef_schemareturning full draft reference (supported widgets, template syntax, validation, icon rules, categories, examples, and decision points) anddef_validatedry-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 withTokenURLandExtraParamssupport), andsso(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/templaterequest recipes.
- 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
- 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 newcustom-connectormanagement 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-onlygoogle_driveconnector, joined by 12 new ops: file creation (create_doc,create_sheetfrom 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 todrive,spreadsheets,documents,presentations,userinfo.email; the health check probes the granted scopes and reports per-op availability. See Google Workspace. - Session workspace (
wick_session_workspaceMCP 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 inwick_list/wick_get/wick_executefor 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 declaresAllowSessionConfigand an admin enables the per-instance toggle (the custom-connector definition carries the sameallow_session_configflag). 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_usermulti-question wizard — passquestions[]instead of a singlequestionto collect multiple answers in one step-by-step modal. Each question has akey,type(choice/multi/rank/dropdown/text/secret), optionaloptionswith per-optiondescription,required,placeholder, andhelp. Single-select options auto-advance; Enter also advances. Response is{"values": {"key": "answer", ...}}.ask_userfrom stdio — anaskuser.sockUnix socket bridgesask_usercalls 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 includesask_userandwick_session_workspaceso they are never blocked at the hook level.- Per-channel
ask_user_enabled— Slack, Telegram, and REST channels each gain anask_user_enabledconfig field (defaultfalse). Web UI and interactive MCP clients use the globalAskUserModesetting. See AskUser policy. - Attention notifications — when an
ask_userorapproval_requestSSE event fires while the session tab is in the background, wick plays a short two-tone chime and (with permission) fires a browserNotification. Audio and notification permission are unlocked on the first user gesture. - Access control — App Owner tier & per-user isolation — a new
is_ownertier 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 thewick_session_infoandwick_set_titleMCP tools. TheProviderssection 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, withcreated_bykept 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 withcreated_bystamped 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_channelsrow (user_id = <id>); the App Owner row usesuser_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_sessionop +PublishSessionMetaSSE;stdio set_titlerelays 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 decoupled —
GateEnablednow controls only thePreToolUsecommand-gate hook. Turning the gate off no longer disablesask_user. google_drive→google_workspace— the code-only Google Drive connector was replaced by the broader Google Workspace connector under a new key. Existinggoogle_driveinstance 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-sessionsoul.mdpreset was previously passed via the unknown keyinstructions_files(silently ignored by Codex), so the model never received the session identity block or wick rules. Fixed to usemodel_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
secretlikewise requires admin or the connector's owner. The OAuthConnectorAccountschema separatesExternalUserID(provider-side) fromWickUserID(wick platform), fixing session-ownership stamping for connections such as Slack. Thewick_skill_syncMCP tool is restricted to admins. - The
allow_session_configflag 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_MCPenvironment variable has been added to the server configuration.- Generic OAuth path:
response_type=codeis added toExtraParams, andGetUserIdentityfailures are handled correctly. Ignored errors inuploadMultipartfor Google Workspace are fixed. - Session ownership checks (
ownsSessionhelper) are now used consistently, and thesessionProcessesguard pattern is fixed. OwnerUserIDis 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.
SetSkillStoreis now correctly wired at server startup.created_byis now stamped in the database on skill upload, alongside the owner tag.addSlidefor Google Slides now uses actual API-assigned placeholder IDs for title/body text.- Interface maps in the registry are now copied using
maps.Copyinstead of manual loops. - Unused
loadChannelRowsremoved; all callers now useloadChannelRowsForUser. - All Slack channel instances are now wired at boot; a break that skipped multi-instance wiring has been removed.
- The
seedOwnermigration logic now promotes the oldest admin-role user to App Owner whenis_owneris 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;
HasAnyKeyedguards per-user channel fallback. - The Channels menu is now visible to all users, not just admins, aligning with per-user channel configuration.
- The
seedOwnermigration 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
upgradetoken from theConnectionheader. The system now correctly re-injects theupgradetoken ifUpgrade: websocketis 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 installcommand 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.systemdStatusnow 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_spansurfaces tool catalog and span metadata: Theget_spanfunction 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'stool_callsto understand why a model picked or ignored a tool.invocation_parameters: Model parameters such astemperature,reasoning_effort, andtool_choice(the redundant tools array is stripped).metadata: Passthrough of the producing application's span metadata, includingrequest_id,room_id,user_id,langgraph_node, andquestion_history_id.token_count *_details: A breakdown ofcache_readandreasoningtokens.
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
PartialTextby guardingturnBufwrites with a mutex. - Propagated request context to
PublishAndReloadandToggleAndReloadin workflows to ensure proper cancellation and timeout. - Prevented timer leak in
terminateProcby replacingtime.AfterwithNewTimerandStop. - Resolved agent deadlock by releasing agent mutex before stdin write in
send()to prevent conflict withdrainPending.
Improved
- Gate auto-approves wick read-only / info MCP tools: The
PreToolUsegate 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, andwick_set_title. These no longer trigger the per-tool approval prompt.wick_executeandwick_skill_syncremain 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
titleandtitle_customflag. The agent reads these from the prompt at spawn time instead of making awick_session_inforound-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 tosystemctl --userwhen 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_infoMCP tool: A read-only tool that returns an active session'ssession_id,title,title_custom,origin,status, andproject_id. This allows agents to determine if a session already has an explicit title before attempting to set one.wick_set_titleMCP tool: Sets the session's sidebar label and markstitle_custom = true. This prevents the auto-derived first-message label from overwriting a chosen title.session.Meta.TitleCustomflag: A new boolean on session metadata. Whentrue, thesetLabelIfEmptyprocess skips the auto-label step, preserving any title set by a human or by an agent viawick_set_title.- Auto-title via system prompt: The immutable agent system prompt now instructs the agent to call
wick_session_infoat conversation start and set a short descriptive title usingwick_set_titlewhentitle_customisfalse. 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 likewick_session_infoandwick_set_title. - Documentation: Updated documentation for the new
wick_session_infoandwick_set_titleMCP 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
/healthand/boot-status) now receive an HTTP 503 page. This holding page displays a spinner and live phase label, auto-pollsGET /boot-statusevery 1.5 seconds, and reloads automatically once the server reports readiness. The/healthendpoint 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/healthcheck.- 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
iterAllfunction used GORM'sFindInBatcheswith a customORDER BY (provider_type, instance_name, rel_path).FindInBatchespaginates using a primary-key cursor (WHERE id > last_max_id), which is only correct when the results are ordered byid. 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 replacesFindInBatcheswith a plainRows()cursor iterator, which streams every row in a single query pass. This ensures memory usage remains constant while safely allowing custom ordering by includingidas 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_LIMITenvironment 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 (
RepairProviderStorageTreeandstore.repairOrphans) to no longer loadContentblobs 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 theprovidersyncgate. It now runs in a background goroutine only when the sync job is enabled andprovider-storageis 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
RepairProviderStorageTreeimplementation.
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_LIMITto thedocs/reference/env-vars.md. - Included changelog entries for the new soft memory limit and the
repairOrphansmemory 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
sizecolumn 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
httpworkflow node and the generic internal HTTP client now cap response buffering at 64 MiB and return an error for larger responses. Previously these were unboundedio.ReadAllcalls. - Webhook body cap: inbound webhook trigger requests are now rejected with
413if the body exceeds 10 MiB. - Access-log middleware: large or streaming request bodies (
multipart/form-data,application/octet-stream,text/event-stream, orContent-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 on127.0.0.1:6060for 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 ofGOMEMLIMIT. See Environment Variables ▶ WICK_MEMORY_LIMIT. repairOrphansno longer loads file content: the twoFindInBatchespasses in the provider-storage tree-repair path now omit theContentcolumn, 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.
RestoreAllcompletion reports detailed metrics includingtotal_files,processed,restored,skipped_match,skipped_diverged, andskipped_uncoveredto 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
Restoreoperations now correctly useRestoreAllForceto overwrite diverged files, ensuring desired changes are applied instead of retaining disk copies. - Error Handling:
iterAllbatch errors are now properly returned instead of being swallowed. - Postgres Compatibility:
purgeExpirednow uses a Postgres-native interval query, resolving an error caused by the SQLite-onlydatetime()function on Postgres.
This summary was automatically generated by Gemini AI
v0.16.6
Released on 2026-06-11
Fixed
- Agent node
max_turnsnot cleared on reuse: When a workflow reused an existing session and the agent node hadmax_turns: 0(unlimited), the previously-persisted cap from an earlier run was silently kept. The node now always writes the value — including0— 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 optionalmerge_strategy(merge_commit,squash,fast_forward),message, andclose_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
WICK_PROVIDERSYNC_DISABLEenv var: Set totrueto disable sync, boot restore, and the realtime watcher for a specific instance without touching the DB. Useful when multiple servers share one database. See Provider Storage → Per-instance kill switch and Environment Variables.
Fixed
- Bounded boot restore memory:
restoreAllnow 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
providersyncrestore operations for reduced memory usage and enhanced user feedback.- Switched from
listAlltoiterAllwithFindInBatches(50)to process content blobs in batches, significantly reducing peak memory consumption. - Implemented
countAllto 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.
- Switched from
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, andworkflow_env_deleteoperations 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_getare masked as••••••••. - When setting secret fields via
workflow_env_set, callers must providewick_enc_tokens.
Fixed
- Provider Storage Sync: The
provider-storage-syncjob 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-syncnow 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.txtto 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.shandinstall.ps1wrappers 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
APPandREPOenvironment 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 (
fullmode) 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
localStoragekeyed 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_respondnode andRespondMode: Added awebhook_respondnode for custom HTTP responses (status, body, headers) from workflows and introducedTrigger.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
warnlevel instead oferror, reducing noise for expected client errors. - GORM
record not foundlog noise: GORM logger is set toSilent, preventingrecord not foundqueries 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_tokenanduser_tokenfields 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
yamland file-based references with format-neutral descriptions to reflect DB-primary JSON storage for workflows. - Workflow data storage optimization: Removed unused
yaml:"..."struct tags andMarshalYAMLmethods 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_listcommand now supports filtering bykind=connector|accountwith 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:
ClientIDandClientSecretmoved from a shared server-wide setting to each connector instance'sConfigs. Every instance now carries its own OAuth app registration, so different instances can use different OAuth apps. ConnectorAccounttable: connected OAuth accounts are stored as sub-records of a connector instance, not as duplicate rows. Each account storesDisplayName,AccessToken, and aDisabledOpsJSON 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
OpsSectioncomponent is reused across the detail page and per-account op views. - Per-account operation disable list — each
ConnectorAccountcan carry a JSON list of op keys to disable.wick_executewith an account-scopedtool_idrejects those ops before reachingExecuteFunc. - MCP
wick_list—kindandparent_idfields: every entry now includeskind("connector"for a standard instance,"account"for a connected OAuth account) andparent_id(the connector row ID whenkind="account"). - MCP
wick_get— composite id: accepts aconnectorID/accountIDcomposite id returned bywick_listaccount entries; tool IDs are scoped with an@accountIDsuffix when a specific account is targeted. - MCP
wick_execute— account token injection:AccountIDis extracted from the compositetool_id; the selected account'sAccessTokenis injected asuser_token/auth_mode=user_tokenbeforeExecuteFuncruns. Per-account disabled ops are enforced before execution. - Destructive op warning in MCP responses: ops marked
OpDestructivenow append⚠ DESTRUCTIVE: Always confirm with the user before executing this operation.to their description inwick_list,wick_search, andwick_getresults. - Slack connector:
BotTokenandUserTokenare now always visible in the admin form (removedvisible_whenconditional display).ClientIDandClientSecretare new per-instance fields for OAuth app setup used by the Connect Account button.
Changed
- Destructive ops default ON:
connector.OpDestructiveops now default toEnabled=trueon every new row (previously defaultedfalse). The LLM is responsible for confirming destructive intent with the user; the system-level default-off gate is removed. SystemDisabledis advisory-only: a health-check lock (system_disabled=true) no longer hard-blocks execution. If the admin has explicitly setEnabled=true, the call proceeds; the advisory is recorded in run history. PreviouslySystemDisabledwas 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 bymetadata['app_id']), andget_span(full detail: messages, tool calls, token usage, cost). Registered under theObservabilitytag. 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, sowick_manager_*(andwick_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 inworkflows.env_valuesDB 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
pathfield now stores only the URL-safe slug (no leading slash, nowf_idprefix). 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) returns202 Acceptedat enqueue and runs async.last_nodeblocks until the workflow finishes (≤ 30 s) and returns the last node's JSON output with200.respond_nodeblocks until awebhook_respondnode fires, then returns that node's custom status, body, and headers. Both blocking modes time out with504after 30 seconds. webhook_respondnode: 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 hasrespond_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_nodeon a webhook trigger but no reachablewebhook_respondnode from the trigger'sentry_nodenow raises a Warning in the Validation panel. The publish still proceeds; at runtime the caller receives502 Bad Gatewayif 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_nodewith 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_modesset tofixedcontains 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
wickmanagerconnector's operations are now surfaced directly intools/listaswick_manager_<op>tools (e.g.,wick_manager_app_list). This allows LLM clients to discover and call manager operations without thewick_list→wick_get→wick_executediscovery cycle. These tools work over both stdio and the Streamable HTTP/SSE transport. To avoid double-exposure,wickmanageris excluded fromwick_listandwick_search.
Fixed
- MCP SSE transport dispatch: Tools such as
wick_info,ask_user,wick_list_providers,wick_skill_list, andwick_skill_syncnow work correctly over the Streamable HTTP/SSE transport. Previously, they were advertised intools/listbut returned "unknown tool" ontools/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 releasedwick-agentbinary by integrating its call intopostgres.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-agentbinary. The previous fix (#589) wirednetboot.Setup()only into the in-repo entry points; Go's internal-package rule prevented the separatewick-agentwrapper module from importing it, so the fallback was dead-code-eliminated from the shipped binary. Setup is now called insidepostgres.NewGORM()— a chokepoint every entry point reaches before the first DNS lookup — and is guarded bysync.Onceso it runs exactly once. - Empty Slack pings (bare
@botmentions) 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_turnstoclaude --max-turnsfor 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
--resumesessions by clearing thecli_session_idif 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
hoverOnlyWhenSupportedto 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_ORIGINSto~/.bashrcduring 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_FILErequired. When/etc/resolv.confhas 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 newWICK_DNS_SERVERSenv var (comma/space-separated) overrides all of these. TLS: when$PREFIXis set and no system cert store exists,SSL_CERT_FILEis 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
@botmention 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 inlocalStorage); per-file stage (+), unstage (−), and discard (↺) actions (discard is destructive — confirms before runninggit 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 inlocalStorage. Live updates via a server-side fs watcher that pushesgit_statusSSE events — the Changes section and th e Source rail tab badge refresh with zero polling. Backend: new Go packageinternal/agents/scm/; endpoints under/tools/agents/api/sessions/{id}/git/*. RequiresgitonPATH.
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-wrapCSS utilities. - Hover styles are now only emitted for devices that support hover (
hoverOnlyWhenSupported), preventing buttons from staying stuck in:hoverstate 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-colorwith the active theme (all 12 themes) via runtime CSS variable sync.
Fixed
- Resolved 403 errors for internal agent MCP connections by exempting
/mcprequests from loopback hosts (127.0.0.1,::1,localhost) in thehostAllowlistHandler. - Corrected workflow version history display and functionality:
- Added JSON tags to
entity.WorkflowVersionfor 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
SaveDraftskip new snapshots when the body is identical to the last draft. - Introduced new API endpoints:
DELETE /api/workflows/versions/{id}/{versionID}andDELETE /api/workflows/versions/{id}. - Adjusted autosave debounce from 800ms to 2000ms.
- Added JSON tags to
Improved
- Replaced the free-text "Workspace override" input on the
session_initnode 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) andDELETE /api/workflows/versions/{id}(all snapshots). - Version compare now renders a real colored diff with an "All / Diff only" toggle; the same
JsonDiffcomponent is reused by the JSON preview tab.
Fixed
- Agent-node
max_turnsis now wired to Claude's--max-turnsflag. Previously the field was stored but never forwarded to the subprocess, making it a silent no-op.0continues 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--allowedToolsat 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/skillswhen the directory exists; the system-prompt path table carves outskills/**as read-allowed while the rest of~/.claude/**stays denied. - Persistent (workflow_global) sessions now self-heal a stale
--resumeID. 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_executionresult subtype is no longer surfaced as a blank "agent error: " message. - Workflow version history (History tab) now correctly receives
id,kind,message,created_at, andbodyfields; 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_initnode "Workspace override" field is now a dropdown populated from existing projects instead of a free-text input, preventing theensure session: project not foundruntime error caused by typing a non-existent project ID.
v0.15.3
Released on 2026-06-06
Added
- Automated crediting of contributors with
@mentionsin GitHub release bodies. - Enhanced release preparation to paginate commit lists and extract GitHub
@loginhandles for contributors. - Updated release creation to include a "Contributors" section in the release body.
Fixed
- Resolved HTTP 500 errors for the
GET /mcpSSE handler by correctly probing and usinghttp.Flushersupport via the middleware Unwrap chain withhttp.NewResponseController. - Corrected the
tools/callSSE path, which was silently falling back to JSON due to the samehttp.Flusherdetection issue. - Added a regression test to ensure
GET /mcpproperly opens SSE streams throughUnwrap-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-syncsubagent with aPreToolUse(Bash)hook to keepdocs/synced with code changes before pull requests. - Introduced a per-provider
SendModeconfiguration (default, append, queue, spawn) for agent instances. - Added a cross-session
Active Processespanel (accessible from session view and providers page) for real-time visibility into provider, PID, queued count, and agent lifecycle. - Integrated
internal/processctlfor 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
/mcpand setting anMcp-Session-Idheader 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
ReconcileDeadto correctly skip respawn-mode agents when they are idle between turns. - Wired Codex
stdinto the null device to prevent hangs on Windows. - Resolved a data race in
capacity_testby injecting provider capacity directly instead of relying on asynchronousprovider.Saveoperations.
Improved
- Relaxed Claude spawn behavior to drop
--strict-mcp-configby default, merging the Wick server with existing MCP servers, while offeringWICK_STRICT_MCPfor isolation. - Updated the contributing guide to include details about the
doc-syncworkflow. - Synchronized public documentation with
v0.15.1features, includingtransform(jq engine),slack(channel-node workflow actions),workflow(import/publish),workflow/state(run detail/delete),branch/classify, and thebitbucketconnector. - Documented
WICK_STRICT_MCPandWICK_DISABLE_SHARED_MCPenvironment variables. - Enhanced agent message handling by replacing the single-slot
pendingMsgwith apendingQueueto 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
\nas 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_commentoperation now supports inline comments by specifyinginline_pathandinline_to/inline_fromparameters. - Workflow events API now supports
events_limitfor tailing the last N events, returns total and truncated counts, and evicts the index cache upon workflow deletion. - Transform nodes now include a
jqengine for advanced JSON processing usinggojq. - 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_secandrequire_statuscontracts, 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
TraceEventInlineKBandTraceEventMaxKBagent configurations to control trace event storage. - Created new API endpoints (
GET /sessions/:id/turns/:turn_idand/events/:event_id) for lazy fetching of conversation traces. - Integrated UI lazy-loading of conversation traces when "show trace" is clicked.
- Added an
Interruptedfield toConversationTurnto 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
ReadJSONLfor large conversation files by replacingbufio.Scannerwithjson.Decoder. - Updated tests to reflect the trace split storage refactor.
- Ensured
prootis 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.goto 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
MaxAssistantTurnBytescap 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_fileoperation using the Slack v2 three-step upload flow.
Improved
- Optimized
providersyncperformance by eliminating N+1 queries in folder pruning using a single subquery. - Reduced peak memory usage in
providersyncby batch-fetching orphan repairs in chunks of 500. - Batched subtree deletions in
providersyncto 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
globMatchwhere Windows-style backslash patterns failed to match on Linux and macOS environments. - Fixed a pool process termination bug where
Killfailed on stale agent names by falling back to session prefix scanning. - Fixed a 422 'no agent' error in channel sessions on
sendMessageby implementing anOnAgentAddedcallback 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/newendpoint 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
ErrAlreadyRunningerrors by validating that the running process executable matches the expected daemon binary.
Improved
- Enhanced the
wick statuscommand 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/paletteendpoint, 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_ROOTis 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
templcache on its pinned version ingo.modinstead ofgo.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 rawcurlwrites. - Fixed a Windows binary resolution bug in
safeexecby 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_caseno 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.Marshalare 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 — useworkflow_getand the dedicated edit ops (workflow_add_node,workflow_set_triggers, etc). prompt_file: nodes/<file>.mdon agent and classify nodes. Use the inlinepromptfield; templates resolve against.Event,.Node,.Triggeras 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/booleanconfiguration 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
100dvhand 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_changedflag 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
--hostand--localhostCLI flags (andWICK_HOSTenvironment variable) to restrict the server's bind address. - Support for sequential boot-time shell scripts via new
startup_scriptandstartup_script_enabledadmin variables to facilitate vendor tunnel (e.g., ngrok) configuration.
Fixed
- App-level
ALLOWED_ORIGINSenvironment 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
prootand 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
gottysubprocess would fail with aSIGSYSerror duringLookPathexecution 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.Commandandsafeexec.CommandContextwrappers to safely resolve binary paths without triggeringfaccessat2. - Added an AST-walking unit test (
TestNoDirectOSExec) to prevent future direct usage ofos/execfunctions across the codebase.
Fixed
- Resolved a critical process crash (
SIGSYS) on Termux/Android systems running kernels < 5.8 by routing all command executions throughsafeexec. - Fixed a release asset naming mismatch for the gate sidecar (
wick-agent-gate), resolving 404 download errors during installation. - Corrected path resolution in
safeexec.LookPathon 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
versionsubcommand and-v/--versionflags towick-agentandwick-agent-gateto 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.shandinstall.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_ORIGINSin~/.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
gottyfrom 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, andservice 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
SIGSYSsystem call crashes in Termux on older Linux/Android kernels (< 5.8) by routing executable lookups through a custom safe-execution layer instead of standardexec.LookPath. - Fixed a 30-second stall during installation on virtual machines with unresolved hostnames by removing hardcoded
sudoprefixes 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_ORIGINShost allowlist configuration and environment variable to allow secure remote and LAN access alongside the canonicalAPP_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/setandconfig allowed-origins ...) for managing application configuration and allowed origins from the terminal. - Interactive LAN IP whitelisting and automated
gottyweb terminal installation in the setup script (install.sh). - Automated bot attribution footer ("Sent using <@BotID>") appended to Slack connector
send_messagepayloads using Block Kit.
Improved
- Environment variables (
APP_URLandWICK_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
wicktowick-agentto prevent naming conflicts with thewickCLI development tool. - Updated installation scripts, CI configurations, and documentation to use the new
wick-agentbinary 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-arm64binary.
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+Downshortcut in the agent chat interface. - Universal
install.shandinstall.ps1scripts, automatically scaffolded into new projects viawick init.
Improved
- Documentation for the connector HealthCheck hook,
OpHealthcontract, 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/responsesand/integrations/rest/api/v1/openai/modelsendpoints. - 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_idto the standardconversationkey 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
fsnotifythat monitors storage sources dynamically and updates kernel watch sets immediately upon configuration changes. - Configurable watcher settings including
watcher_status(enabled by default) andwatcher_debounce_ms(defaults to 1000ms).
Improved
- Redesigned the storage backup mechanism to stream files via
WalkDirandio.Copyinto 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.jsonllogging. - 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_typeanddb_statusfields to thewick_infoMCP 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
WickInfotests 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 (
MaxTimeoutMinfield, 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_minin 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, introducingwick_skill_listandwick_skill_synctools. - Skills Manager documentation in the agents guide.
Fixed
- Test suite compilation by updating
SyncOnecaller 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
skillsyncpackage 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
CancelJobcapability to the job manager viaPOST /manager/jobs/{key}/cancel.
Improved
- Refactored the provider storage sync job to remove
RestoreAllfrom 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.jsonfile, by aligning the duplicate check inCreateto check forWorkspaceMeta.
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
#providerprefix command. - An
agentctlUnix socket for interacting with the running daemon pool from MCP stdio. - Granular, per-instance sandbox modes (
read-only,workspace-write, anddanger-full-access) for Codex configurations. - Verbose per-file logging toggle and run ID correlation for provider-storage sync and restore runs.
- A new
system_turnSSE 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_listandwick_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/snapshotJSON 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_createanddatatable_insertby 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
RestoreAllForceand remove redundantSyncAlloperations. - Cron sync execution flow to run a guarded
RestoreAllbeforeSyncOneso 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-deleteX 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'sDescribe(), 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 policy —
GateConfignow carriesPermissionMode(per-tool prompts) +AskUserMode(MCPask_user) sub-policies. Master switch snaps both to their unguarded defaults when off. MCPask_usershort-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
slugfield renamed toidacross the codebase. - Channel config layer — manual field mapping replaced with
MapToStruct;decryptFncallback removed fromGetChannelConfigMap;wick_cenc_tokens decrypted in-place; channel configs hidden from settings page and encrypted at rest. - Gate
AppNamederives 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
sendHandlersigns). - Slack
cannot_dm_bot— detect bot users before callingconversations.open. - Slack: post with
xoxptoken without overriding the username, so the real user identity is preserved. - Slack: auto-promote
U...channel IDs totarget_user_idfor session headers; inituserTokenCacheand pre-build the token map at startup. - Canvas: reject duplicate edges in
Connect; guard against deleting the entry node. wick_infouses the baked app name instead of the cwd basename.- Provider-storage:
strings.ReplaceAllfor cross-platform backslash normalisation.
Migration notes
- The legacy
agents.bypass_permissionscheckbox is gone. Its value is one-shot migrated togate.permission_modeat 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.
allCLI 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
wickinstallation to the version specified ingo.modfor 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 initcommand 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
templtool 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.shscript 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-dockerandbuild-binariesjobs 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
providersyncpackage 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-slimto support glibc requirements for the Claude CLI. - Integrated Gotty cross-compiled binaries and Claude CLI into the standard Docker image.
- Added non-root
appuser with sudo privileges for secure credential management. - Integrated
app-gatesibling 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.jsonduring 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_mentionevents in public and private Slack channels. - The
app_mentions:readscope 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-denyand 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-moduleskill to enhance agent capabilities. - Diagnostic "Test gate" button on the Providers page to verify command gate enforcement.
--probe-denysubcommand 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 bypassPermissionswas 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.ymltasks when using plainrunblocks 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 doctorutility. - Reference documentation for gate sidecar bundling.
Fixed
- Connector registration idempotency on
Meta.Keyto 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 viameta.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-indefaultworkspace seeded on fresh install. See Projects. - Multi-instance providers.
claude/work+claude/personalwith 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.
--versionlookup 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_WINDOWapplied to provider probe + spawn paths. - Command Gate. Sidecar binary
<app>-gateintercepts every Bash command via Claude'sPreToolUsehook. 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'scwdagainst known workspace paths. - Gate audit. Multi-stage entries to
~/.<app>/agents/gate/commands.jsonl(received→socket_dial→socket_sent→socket_recv→terminal), all tied byRequestID. 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 bywick build --installer) → embedded//go:embedextract → PATH.WICK_GATE_BIN/GATE_BIN/WICK_GATE_SPEC/GATE_SPECall dropped. - Installer ships the gate sidecar. Windows MSI ships
<App>-gate.exe, Debian.debships/usr/bin/<app>-gate, macOS.appbundle shipsContents/MacOS/<App>-gate. Builder absorbs the gate compile step (no separate CI job); soft-skips on downstream forks withoutcmd/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 harnessAskUserQuestiondoesn't. - Provider spawn log. Per-spawn JSONL at
~/.<app>/agents/providers/spawns/<type>__<name>__<session>__<unix-ms>.jsonlwithstart(PID, argv, binary, first user message) andexitevents.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.OnSessionCreatedhook 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_datalimit), 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 itsAppName, locates the matching<app>-gatesidecar, dials the socket with a probe request that auto-replies without bothering a human, verifies socket / spec paths align.AppNamesingle source of truth.internal/appname.Resolve()is the only chain:BuildAppNameldflag →wick.ymlname:→"wick".APP_NAMEenv 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 brandedwick-lab-gate.exelands 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.
/metricsendpoint (Prometheus-compatible) for connector execution telemetry and latency.pkg/conntesthelper 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 beforereleaseSlot(pool.go:378) so a fastSendarriving right afterActive==0cannot collide its meta.json write with the trailing idle write (twoos.Renameto the same target). Killed flakyTestPipeline_ResumeAfterIdleKill+TestQueueWhenPoolFull. - Double-spawn / slot-count race. Pool now tracks an in-flight
spawningKeysset; concurrentSendcalls cannot each see "slot free" and callspawnsimultaneously. Same guard prevents two exit hooks from popping the queue at the same time. - SSE delivery & flush. Switch to
ResponseControllerfor 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 bypassPermissionsis now passed to Claude only when a gate is wired (allowed_cmdsnon-empty), preventing permission-less Slack sessions. - Gate hook injection. Hooks injected via Claude's user
settings.json(per-spawn--settingsflag), 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_urland 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
claudeCLI's stream-json protocol and long-lived process lifecycle (multi-turn within one process, no respawn per message). Real-claude E2E test gated byWICK_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 packageinternal/agents/provider/consolidating driver + spawner + per-instance config + spawn logger. - Registry split.
RegisterBuiltins(default-on agents tools) vsRegisterLabSamples(lab-only);cmd/lab/renamed tocmd/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
.exeto.msiformat. - Fixed Windows silent installation failures by utilizing
msiexecto ensure the update properly overwrites the existing installation.
Improved
- Added diagnostic logging for Windows updates, saving logs to
msiexec-install.login 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.logfor 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=windowsguiwith dynamic console management, allowing 'mcp serve' to function correctly with external clients.
Improved
- Migrated standard library logging to structured
zerologcalls 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
--installerflag, providing per-user.msipackages for Windows and.dmgdrag-to-install images for macOS. - Automatic detection of MSYS2 environments on Windows to auto-register
gemini-msys2,codex-msys2, andclaude-code-msys2configurations for MSYS2 shells.
Improved
- Refactored MCP configuration to utilize a global
~/.claude.jsonuser config instead of project-specific.mcp.jsonvariants. - Standardized Windows installation paths to
%LocalAppData%\Programsto 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_VERSIONrepository variable to automate version bumping, tagging, and committing changes back to the repository during CI.wick version nextsubcommand to increment the last numeric segment of thewick.ymlversion.- Windows executable metadata embedding, including brand icons, product descriptions, and version information.
- Automatic bundling of binaries into platform-native distributables:
.exefor Windows,.dmgfor macOS (host-only), and.debfor Linux. - Support for multi-platform build targets using
--target,--goos,--goarch, and--allflags. - Native self-updater support for extracting binaries from
.dmgand.debpackages.
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_servernow 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_VERSIONrepository variable support to automatically bump versions inwick.ymland commit changes back to the repository.wick version nextsubcommand 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.
--bundleflag forwick buildto generate native macOS.appbundles (includingInfo.plistand icons) and Linux.debpackages.- Automatic bundle identifier derivation based on the
go.modmodule 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
UserConfigDirtree. - Windows logging by piping
stdoutandstderrto 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
generatetask (templ, tailwind, and go generate) to run duringwick 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 buildsubcommand 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_timeoutsettings. - Default application port changed from 8080 to 9425.
wick initprocess now automatically substitutes the project name into the generatedwick.yml.- Task execution now respects double quotes in commands, allowing complex
-ldflagsto 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
encfieldsfor all consumers by moving the registration logic into the package initialization.
Fixed
- Resolved an issue where consumer applications lacked the
/tools/encfieldsroute, which previously causedwick_encryptandwick_decryptMCP 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/encfieldsfor manual JSON-based encryption and decryption. - Added
wick_encryptandwick_decryptMCP tools that redirect to the UI for secure processing. - Introduced the
encrypted-fieldsskill, embedded into the binary for propagation viawick skill sync. - Added
MaskandMaskIgnoreCasemethods toconnector.Ctxto allow connectors to mask sensitive data dynamically. - Integrated encryption key bootstrapping with support for auto-generation and
WICK_ENC_KEYenvironment overrides.
Improved
- Refined the encryption API by splitting
MaskSensitiveintoMaskandMaskIgnoreCaseto improve call site clarity and eliminate boolean traps. - Updated the sample connector and
crudcrudtemplate 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.mdand 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-tagsskill as a standalone, single source of truth for configurations. - Automatic injection of
config-tagsalongsidedesign-systemduringwick init. - Support for
config-tagsinwick skill syncandwick skill listcommands.
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-tagssibling folder intool-moduleandconnector-module.
This summary was automatically generated by Gemini AI
v0.5.4
Released on 2026-05-02
Added
- New
kvlisteditable 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.goutility for input handling and list processing. - Dedicated
reference/config-tags.mddocumentation.
Fixed
- Non-deterministic ordering in
ListOwnedby implementing adeclOrderslice.
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
wicktag 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_listandwick_searchresponses 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, andmcp install. - Support for four MCP build modes:
auto,dev,build, andrebuild. - Automated MCP configuration installation for Claude Desktop, Cursor, Gemini, Codex, and Claude Code.
wick_infotool 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
.envfiles 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
automode 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_infofor 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 upgradecommand 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.modfile 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
Configsstruct + N typedOperations. See Connector Module. - MCP server at
POST /mcpwith 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/tokens—wick_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), refreshwick_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/connectionsfor cross-user management. - Built-in System job
connector-runs-purge— daily cleanup ofconnector_runsaudit 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 towick skill syncand the template's bundled skill set. The exampleconnectors/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.mddocuments theconnectors/folder,app.RegisterConnectorregistration site, and theconnector-moduleskill row.template/README.mdlists the connector test page URL and/profile/mcpinstall snippets in the Quick Start.
Migration notes
- Existing wick deployments upgrading to this version: the
connectors,connector_operations, andconnector_runstables are auto-created on first boot. Theconnector-runs-purgejob 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 upgradecommand 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
ToolHeadercomponent 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
goandwicktoolchain 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 listandwick skill synccommands to manage bundled skills and synchronize theAGENTS.mdskill table.- MobilePrompt component to display inline prompts specifically for mobile users.
- Downstream
tool-moduleskill 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
READMEandAGENTS.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 initscaffolding to include downstream tool-module skills and shared design-system components.- Documentation structure by renaming
agent.mdtoAGENTS.mdacross all guides and pages. - Prompt instructions updated to utilize the
wick devcommand 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.tmpltemplates 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.tmplandCHANGELOGfiles.
This summary was automatically generated by Gemini AI
v0.1.6
Released on 2026-04-19
Fixed
- Synced
go.mod.tmplbefore tagging new versions. - Enabled automatic merging of release-sync pull requests to the
masterbranch usingADMIN_TOKEN.
This summary was automatically generated by Gemini AI
v0.1.5
Released on 2026-04-19
Improved
- Synced
go.mod.tmplandCHANGELOGfiles 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.tmplbefore tagging and fixed version order in the release process. - Resolved issue with pushing to
refs/heads/releaseinstead ofHEADin 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 initsetup call. - Address version-related issues.
Improved
- Update
README.mddocumentation. - Enhance CI/CD processes.
- Update project pipelines.
- Update
go.modtemplate 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.mddocumentation. - Update CI/CD for documentation builds.
- Update
go.modtemplate 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-rungo mod tidy+go run . setupwick.ymlcross-platform task runner —setup,dev,build,test,tidy,generate- Tool modules (
tools/<name>/) — mount at/tools/{key}, typedConfigwithwick:"..."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/VisibilityPrivateper tool - Runtime config —
Configstructs reflected into admin-editableconfigstable 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 everywick initproject - External link cards — register URL shortcuts as tool cards via
RegisterToolNoConfig - Dark/light theme — user preference persisted via cookie