Skip to content

Releases

v0.58.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 13:42
1f66e31

Added

  • The task list tints to the crew member you pick. With the crew rail, picking someone tints the task panel a very light wash of their colour, so the list beside the rail says whose jobs it holds. Each member’s editor now has Task panel: their glow (the default), none, or any of the eight crew colours. Settings → Appearance → Crew tint turns it off for the whole page, and spells can set crewTint.
  • What the harnesses keep on disk, and fixes for what runs leave behind. GET /api/machine now measures every installed harness's own folders (Claude Code and Cowork's VM, Codex, Cursor, opencode, Antigravity, Copilot, Grok) with du alone, never opening a file. One click (POST /api/machine/harness/clean) removes only crash dumps and Claude Code's stale temp files; everything else says how that CLI cleans up after itself. Processes runs left behind are grouped by the command that started them and the task, and File a fix (POST /api/machine/fix) gives Bugsy, or a task in that project, the command lines and "kill what you spawn". On a Mac, each process's memory is now what Activity Monitor shows (its footprint), not RSS, which read about a quarter low.
  • See what agents cost your computer, and pause automations. GET /api/machine reports each running task's memory and CPU (summed over every process it started), per crew member too, the processes finished runs left running (a test server, a dev server, a watcher) with Stop (POST /api/machine/stop), 24 h of memory, CPU and run history, and the worktree folders that can go, grouped by merged PRs, Done tasks, finished crew jobs and leftovers. Pause automations until a time (POST /api/automations/pause), and on a Mac on battery under 20% (batteryHold: off, 20 or 40) check-ins and the crew queue wait for the charger. A heavy task's card data now carries its memory and CPU. The This Mac pane that shows it comes next.
  • This Mac: see what your agents cost your computer, and act on it. Settings → This Mac (This PC on Windows, This computer on Linux), or ⌘K → What’s using my computer, shows free memory, CPU and disk with the last hour, then each running task and crew member by RAM, CPU and folder size, with Stop and Later (in an hour, tonight or tomorrow morning: it stops and carries on then). Processes still running after their task finished can be stopped one by one or all at once, folders wisp can give back are grouped (merged PRs, Done tasks, finished crew jobs, folders no task knows) with their size and Remove, and Pause automations holds check-ins, triggers and goal rounds for an hour or until tomorrow 8:00. A chip in the top bar appears only when memory runs low, work is waiting, automations are paused or something was left behind (12% memory · 9 running), and a running task that's heavy shows its RAM on its row. Spells reach it through the machine.head slot and the machine.* parts.
  • Automations wait while your computer is short. Check-ins, triggers, goal rounds and agents' own follow-ups now wait while free memory is under 15%, the CPU stays over 200% of its cores for a minute, or wisp already has a run per 3 GB of memory going (8 on a 24 GB Mac). They go on once memory is 5 points above the floor, the load is down and a slot is free, and their row says why (Waiting for memory: 11% free, needs 20%). What you start always runs; when memory is short the page says so. Subagents count but never wait. Settings → Usage → Machine load has the three knobs, and spells can set them (memoryFloor, cpuCeiling, maxRuns).
  • Done asks about the worktree. Marking a task done in the page used to leave its folder on disk, with its node_modules and build output, and those of its subagents, delegated crew jobs and compare runs: gigabytes each, until the cleanup two weeks later. Now Mark done (the button, E, a row's ✓) opens a small dialog when any of them hold a folder, listing each with its size and state (clean, uncommitted files, commits not pushed, PR open or merged). Remove takes the clean ones; one holding uncommitted work goes only if you tick it. Keep keeps them all. Always do this remembers the answer in Settings → Worktrees → When a task is done (Ask, Remove clean ones, Keep them; spells can set worktreeOnDone), and even Remove asks before a folder with work in it goes. Done from anywhere else (a channel, wisp_task, Ship it) asks nothing and removes only clean folders with no open PR. A crew job that ends clean with no open PR loses its folder right away. Branches always stay, and a follow-up brings a folder back.
  • See when a banked Codex reset expires. When wisp reads a Codex account's usage (Check Codex while work waits, or the read before held-back work), Settings → Usage → Plan budget now shows its banked resets under the bars: 1 banked reset, expires tomorrow 17:00, or just the count when Codex doesn't list them. The day before one expires your phone gets one note for it, when ntfy or Telegram is set up. wisp only reads: it never redeems a reset. Spells can hide or restyle the line (budget.banked).
  • on laptop from Telegram, on wisp Cloud. Tell a bot on laptop fix the login and it runs on that computer, even with your cloud wisp asleep. Off unless the grid has channels.route in grid.json. Make a new bot for this and connect it on your account page (Telegram to your computers): the grid holds its webhook with a secret of its own, and only the people you list can route. Not your cloud wisp's bot: anything on your cloud wisp can read that token, and with it what goes through here, so the page warns if it's the same one. on <computer> has to come first; anything else to that bot gets a line saying what it does. A computer takes these only once you turn on Settings → Notifications → Accept tasks from channels on it, off by default, and turning it on is refused from a phone: Plan unless the message asks, Edits at most, never Full auto, on that computer's own projects. Asleep or switched off, you get a plain line back and nothing waits. Reports and replies come back in the same chat, through the grid: the computer never holds the bot. A spell can force the switch off, never on.
  • Pick element tells the agent what it's looking at. Clicking an element in Preview now puts its trimmed HTML and key computed styles (size, spacing, colour, font) in the reply box as plain text, with its selector and page, not just a line naming it. One pick stays under 2,000 characters, whatever the page holds, and leaves out what's in password and hidden fields. Nothing sends until you do. The cursor is a crosshair everywhere while you pick, also over the app's buttons and links, and only a pick you made can reach the box: a page can't write in it by itself.
  • Share to wisp from your phone. A link, text, pictures or a PDF from any app's share sheet used to need copying across by hand. Now the Android app, and a Home Screen install of your cloud wisp on Android, open New task with it in the box and attached, ready to send (below whatever you'd typed, 10 files and 20 MB at most). Nothing starts and no file leaves your phone until you press Send, and a line marks it as shared from outside wisp so you read it first. On an iPhone, a guide shows how to build a Shortcut that starts a task on your cloud wisp with an API key.
  • Discord's /wisp works on a sleeping cloud wisp. On a grid with channels in grid.json, paste the bot token and public key in the Phone dialog and copy the Endpoint URL it shows into the Developer Portal. wisp Grid checks each call's signature and answers Discord in time, the box wakes and does the work, and the reply lands in place. Mentions need a connection that stays open, so on a cloud computer only /wisp works, in threads too. Someone in a server who isn't linked gets a line only they can see, and it wakes nothing. On a cloud computer a message from any channel stays there: it never starts or follows up on a task on another machine. Message Content stays off.
  • Discord, two-way. Turn on Discord in the Phone dialog (Settings → Notifications → Phone, or ⌘K, off by default): it walks you through creating your bot in the Developer Portal, pasting its token, adding it to a server and linking yourself, then shows that it's connected, in how many servers and who's linked, or what's wrong and what to do. Or give PUT /api/remote its token (discord: { enabled, token }) and add it with the link from GET /api/remote/discord/invite. Then mention it, DM it or use /wisp, whose options fill in from your own projects, crew, machines and models. A task starts and answers in a thread of its own, or in reply in a DM. Questions come with buttons, and stop, done, status, btw and @ada work there. People link with link <code> in a DM, by their Discord user id; anyone else gets one line in a DM and silence in a server. Tasks run in Plan unless you say Edits, Full auto is refused, tool approvals stay in wisp and the thread says what's waiting there, nothing posted pings anyone or hides a link, a Discord token is scrubbed like any other secret, and in a server lists and refusals show none of your names. It needs no privileged intent, so in a thread you mention the bot or use /wisp. It won't turn on on a cloud computer, which sleeps.
  • Mail a task to your cloud wisp. On a grid with mail in grid.json, Settings → Notifications → Phone → Email gives you a secret address and asks which address you'll send from. A message from there wakes the box and starts a task from its subject and first lines, said as you'd type it in wisp, and the answer comes back as a reply in the same thread; replying follows up. Plan by default, Edits at most, and Full auto can't be asked for. Only your secret address, your one allowed address and a DKIM signature wisp verified itself, by your address's own domain, count together: anything it can...
Read more

wisp 0.57.1-nightly.20261109.1653

Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Oct 22:01
6e35fd1

A build of main at 6e35fd1, made every night once the full test suite passes there. It may break: for everyday use, take the latest release.

Since the last release

Added

  • What the harnesses keep on disk, and fixes for what runs leave behind. GET /api/machine now measures every installed harness's own folders (Claude Code and Cowork's VM, Codex, Cursor, opencode, Antigravity, Copilot, Grok) with du alone, never opening a file. One click (POST /api/machine/harness/clean) removes only crash dumps and Claude Code's stale temp files; everything else says how that CLI cleans up after itself. Processes runs left behind are grouped by the command that started them and the task, and File a fix (POST /api/machine/fix) gives Bugsy, or a task in that project, the command lines and "kill what you spawn". On a Mac, each process's memory is now what Activity Monitor shows (its footprint), not RSS, which read about a quarter low.
  • See what agents cost your computer, and pause automations. GET /api/machine reports each running task's memory and CPU (summed over every process it started), per crew member too, the processes finished runs left running (a test server, a dev server, a watcher) with Stop (POST /api/machine/stop), 24 h of memory, CPU and run history, and the worktree folders that can go, grouped by merged PRs, Done tasks, finished crew jobs and leftovers. Pause automations until a time (POST /api/automations/pause), and on a Mac on battery under 20% (batteryHold: off, 20 or 40) check-ins and the crew queue wait for the charger. A heavy task's card data now carries its memory and CPU. The This Mac pane that shows it comes next.
  • This Mac: see what your agents cost your computer, and act on it. Settings → This Mac (This PC on Windows, This computer on Linux), or ⌘K → What’s using my computer, shows free memory, CPU and disk with the last hour, then each running task and crew member by RAM, CPU and folder size, with Stop and Later (in an hour, tonight or tomorrow morning: it stops and carries on then). Processes still running after their task finished can be stopped one by one or all at once, folders wisp can give back are grouped (merged PRs, Done tasks, finished crew jobs, folders no task knows) with their size and Remove, and Pause automations holds check-ins, triggers and goal rounds for an hour or until tomorrow 8:00. A chip in the top bar appears only when memory runs low, work is waiting, automations are paused or something was left behind (12% memory · 9 running), and a running task that's heavy shows its RAM on its row. Spells reach it through the machine.head slot and the machine.* parts.
  • Automations wait while your computer is short. Check-ins, triggers, goal rounds and agents' own follow-ups now wait while free memory is under 15%, the CPU stays over 200% of its cores for a minute, or wisp already has a run per 3 GB of memory going (8 on a 24 GB Mac). They go on once memory is 5 points above the floor, the load is down and a slot is free, and their row says why (Waiting for memory: 11% free, needs 20%). What you start always runs; when memory is short the page says so. Subagents count but never wait. Settings → Usage → Machine load has the three knobs, and spells can set them (memoryFloor, cpuCeiling, maxRuns).
  • Done asks about the worktree. Marking a task done in the page used to leave its folder on disk, with its node_modules and build output, and those of its subagents, delegated crew jobs and compare runs: gigabytes each, until the cleanup two weeks later. Now Mark done (the button, E, a row's ✓) opens a small dialog when any of them hold a folder, listing each with its size and state (clean, uncommitted files, commits not pushed, PR open or merged). Remove takes the clean ones; one holding uncommitted work goes only if you tick it. Keep keeps them all. Always do this remembers the answer in Settings → Worktrees → When a task is done (Ask, Remove clean ones, Keep them; spells can set worktreeOnDone), and even Remove asks before a folder with work in it goes. Done from anywhere else (a channel, wisp_task, Ship it) asks nothing and removes only clean folders with no open PR. A crew job that ends clean with no open PR loses its folder right away. Branches always stay, and a follow-up brings a folder back.
  • See when a banked Codex reset expires. When wisp reads a Codex account's usage (Check Codex while work waits, or the read before held-back work), Settings → Usage → Plan budget now shows its banked resets under the bars: 1 banked reset, expires tomorrow 17:00, or just the count when Codex doesn't list them. The day before one expires your phone gets one note for it, when ntfy or Telegram is set up. wisp only reads: it never redeems a reset. Spells can hide or restyle the line (budget.banked).
  • on laptop from Telegram, on wisp Cloud. Tell a bot on laptop fix the login and it runs on that computer, even with your cloud wisp asleep. Off unless the grid has channels.route in grid.json. Make a new bot for this and connect it on your account page (Telegram to your computers): the grid holds its webhook with a secret of its own, and only the people you list can route. Not your cloud wisp's bot: anything on your cloud wisp can read that token, and with it what goes through here, so the page warns if it's the same one. on <computer> has to come first; anything else to that bot gets a line saying what it does. A computer takes these only once you turn on Settings → Notifications → Accept tasks from channels on it, off by default, and turning it on is refused from a phone: Plan unless the message asks, Edits at most, never Full auto, on that computer's own projects. Asleep or switched off, you get a plain line back and nothing waits. Reports and replies come back in the same chat, through the grid: the computer never holds the bot. A spell can force the switch off, never on.
  • Pick element tells the agent what it's looking at. Clicking an element in Preview now puts its trimmed HTML and key computed styles (size, spacing, colour, font) in the reply box as plain text, with its selector and page, not just a line naming it. One pick stays under 2,000 characters, whatever the page holds, and leaves out what's in password and hidden fields. Nothing sends until you do. The cursor is a crosshair everywhere while you pick, also over the app's buttons and links, and only a pick you made can reach the box: a page can't write in it by itself.
  • Share to wisp from your phone. A link, text, pictures or a PDF from any app's share sheet used to need copying across by hand. Now the Android app, and a Home Screen install of your cloud wisp on Android, open New task with it in the box and attached, ready to send (below whatever you'd typed, 10 files and 20 MB at most). Nothing starts and no file leaves your phone until you press Send, and a line marks it as shared from outside wisp so you read it first. On an iPhone, a guide shows how to build a Shortcut that starts a task on your cloud wisp with an API key.
  • Discord's /wisp works on a sleeping cloud wisp. On a grid with channels in grid.json, paste the bot token and public key in the Phone dialog and copy the Endpoint URL it shows into the Developer Portal. wisp Grid checks each call's signature and answers Discord in time, the box wakes and does the work, and the reply lands in place. Mentions need a connection that stays open, so on a cloud computer only /wisp works, in threads too. Someone in a server who isn't linked gets a line only they can see, and it wakes nothing. On a cloud computer a message from any channel stays there: it never starts or follows up on a task on another machine. Message Content stays off.
  • Discord, two-way. Turn on Discord in the Phone dialog (Settings → Notifications → Phone, or ⌘K, off by default): it walks you through creating your bot in the Developer Portal, pasting its token, adding it to a server and linking yourself, then shows that it's connected, in how many servers and who's linked, or what's wrong and what to do. Or give PUT /api/remote its token (discord: { enabled, token }) and add it with the link from GET /api/remote/discord/invite. Then mention it, DM it or use /wisp, whose options fill in from your own projects, crew, machines and models. A task starts and answers in a thread of its own, or in reply in a DM. Questions come with buttons, and stop, done, status, btw and @ada work there. People link with link <code> in a DM, by their Discord user id; anyone else gets one line in a DM and silence in a server. Tasks run in Plan unless you say Edits, Full auto is refused, tool approvals stay in wisp and the thread says what's waiting there, nothing posted pings anyone or hides a link, a Discord token is scrubbed like any other secret, and in a server lists and refusals show none of your names. It needs no privileged intent, so in a thread you mention the bot or use /wisp. It won't turn on on a cloud computer, which sleeps.
  • Mail a task to your cloud wisp. On a grid with mail in grid.json, Settings → Notifications → Phone → Email gives you a secret address and asks which address you'll send from. A message from there wakes the box and starts a task from its subject and first lines, said as you'd type it in wisp, and the answer comes back as a reply in the same thread; replying follows up. Plan by default, Edits at most, and Full auto can't be asked for. Only your secret address, your one allowed address and a DKIM signature wisp verified itself, by your address's own domain, count together: anything it can't prove gets no answer, and Settings says why the last message was ignored. Your provider has to sign ...
Read more

v0.57.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 07:34
a8cfca8

Added

  • Usage receipt on every turn, and Past your plan. Each finished turn's trail bar now says what the run took, quietly: 38k tokens · 71% cache · 3% of weekly (tokens read and written, Claude's cache reads and writes counted in; the share of the account's longest window, as wisp traced it). When a run is billed beyond the plan (Claude Code's extra usage, Codex credits, or Claude Code using an API key instead of your plan), the turn says Past your plan (or API credit), and Settings → Usage → Plan budget shows how many runs did that in the last 7 days, with Open it for the last one. An account that reports only a weekly window (Claude's plans without the 5-hour one) shows no empty 5-hour row, waits for the weekly reset at a limit, and tells you once that the 5-hour window is gone. Spells: turn.receipt, turn.overage, budget.overage. API: turn.overage, overage on /agents budgets, cacheReadTokens/cacheWriteTokens on Claude turns' stats.
  • Tokens per turn by account. With two or more accounts on a harness, Settings → Usage (⌘K → Usage) shows, per model, each account's median turn over the last 7 days: output and input tokens and the share read from the cache, with a line such as Work uses 1.9× the output tokens per turn of Personal (n=14 / 11), once each account has 5 finished turns on that model. When Claude Code ran with different tools on the two accounts (one's settings deny WebFetch, an MCP server only one has), the line says so: …; Personal has no WebFetch. Copy report puts both accounts' numbers in one block for a bug report to the vendor, and a turn's receipt tooltip has the same medians. It's a diagnostic only: it never suggests an account, and wisp never switches accounts. Spells: budget.compare. API: compare on /agents (missing per account), details.tools (hash, and list the first time in a task) on Claude turns.
  • wisp on your iPhone's Home Screen (wisp Grid). In iPhone Safari on your cloud computer, Share → Add to Home Screen now gives a full-screen wisp with its own icon: it opens from its cache at once, then refreshes, reloads onto a new build after a grid update, and keeps clear of the status bar, the notch and the home indicator in portrait and landscape. Home shows Add wisp to your Home Screen once, with ×, in an iPhone's browser on a Grid. Alerts there come from the ntfy app (Settings → Phone): iOS lets a home-screen app notify only through Web Push, which wisp doesn't send yet. Signed out of the grid, it drops its cache and goes to the sign-in. Desktop browsers and the Android app are unchanged (the manifest is only added on a Grid). Spells: home.install.
  • Where a turn's tokens went: by model and by subagent. When Claude Code ran subagents, the turn's trail bar says so beside the receipt: 3 web-fetch agents · Opus 5.5 · 27k of 41k output, with every subagent type and the tokens per model in its tooltip (from the run's modelUsage, and each Agent call's messages). When the run's tools had no WebFetch but a web-fetch agent ran, it says Claude Code ran page reads as an agent on on this account (anthropics/claude-code#106743: an experiment that runs page reads as an Opus subagent drains limits faster). Settings → Usage → Where it went adds Where it went: subagents: each subagent type's share of the account's longest window. Spells: turn.agents, budget.subagents. API: models and subagents on Claude turns' stats, where.subagents on /agents budgets.

Changed

  • A hand-off to another harness keeps your rules and your effort. When a task goes to another harness (Hand to … after a refusal or at a usage limit, or picking another harness for a follow-up), the turns it hears first now open with What still holds: the lines from your own messages that rule something out or narrow it (don't touch the migrations, only change server/auth, leave the tests alone, no new dependencies) and the task's Done when while its goal is open. The task also keeps its thinking level, as the new harness names it (Claude Code max goes to Codex as xhigh, its highest), instead of the new harness's default; picking a level with the switch still wins.

Fixed

  • A Codex model at capacity moves the task on in Auto. When Codex ends a run with Selected model is at capacity (openai/codex#59045), Auto now treats that model as unavailable, not as failing the task: it rests that model for 10 minutes (other Codex models can still run), the run doesn't count against it, and the task moves on with … is at capacity · moving to …. Before, the run counted as a failure and the task either stopped on the error or was handed off as if the model had got the task wrong.

Get wisp 0.57.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.57.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.56.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 03:43
d073ba2

Added

  • Hand a refused task to another agent. When a harness turns a task down (Claude Code's usage-policy refusal on security, reverse-engineering or game work, or a short "I can't help with that" from a run that changed nothing), the task says so and offers Hand to under the hero: one click sends the same prompt and its files there, with the task's turns so far. It only offers a harness on another company's model: after a Claude refusal, Copilot CLI, opencode, Cursor or Antigravity are offered only on a GPT, Gemini or other non-Anthropic model, which the hand-off pins (and the same for OpenAI). wisp never hands it over by itself, and never retries on another account of the same harness.
  • wisp asks before a repo's hooks, MCP servers and worktree setup run. Claude Code runs a repo's .claude/settings.json hooks and .mcp.json servers without asking when wisp runs it, whatever the mode, Plan included, and wisp runs .wisp/worktree.json / .cursor/worktrees.json setup on each new worktree. Now the first run in such a repo, and the first after one of them changes, waits on a card listing each hook, server, helper command, plugin and setup step with its command and Open file: Trust and start (remembered per repo, its worktrees included), Run without them (Claude Code with only your own settings and wisp's MCP server, no setup; that task keeps running that way) or Skip this run. Repos with none of these files run as before. Subagents and side discussions never wait: they run without them until the repo is trusted. Take over no longer marks such a repo's worktree as trusted in Claude Code, Codex or Copilot, so their own trust question shows. Turn it off with Ask before a repo’s hooks, servers and setup run in Settings → Privacy (on by default). It lists what a repo asks to run; it can't tell you whether that's safe. Spells: the settings.projectAsk and project.without parts and the projectAsk setting. API: held.project on a held turn, action: "without" on POST /sessions/:id/held.
  • Review by another harness before Merge. Turn on Settings → General → Review by another harness and, when a task's PR is open, a harness other than the one that wrote it (Codex reviews Claude Code's work, Claude Code reviews Codex's, on the plans you already have) reads the diff against the base and lists what it would fix, and the project's tests run again on the PR's head. The PR row shows Not reviewed, Reviewing, N issues, Tests fail or Reviewed; the PR panel lists each finding with Send to agent and Review again; Merge's confirmation says when the PR isn't reviewed or what the review found, but Merge stays possible. Pick Another harness than the author or one harness by name. It runs on that harness's own signed-in account and never switches accounts; past Automations stop at it waits. Off by default; spells can set it (review) and restyle the chip and section (split.pr.review, panel.pr.review).

Changed

  • Tasks whose agent scheduled a check-in move from Needs you to Scheduled. When a task finishes and its agent has said it will look again later (a follow-up it scheduled), the task waits under Scheduled with the check-in's time instead of sitting in Needs you, and it no longer counts in the tab title or a crew member's dot. It keeps its unread dot and one-click done there, and home's Coming up lists the check-in. Tasks asking you, due reminders and tasks with only your own reminders ahead stay in Needs you.

Fixed

  • Accented letters and emoji in a long prompt or request no longer turn into �. The server decoded each piece of a request body on its own, so a character whose bytes landed on both sides of a network chunk was garbled; it now decodes the whole body at once. The 2 MB body limit is also counted in bytes, as intended.
  • A machine that refuses an attachment says why. When sending a file to another machine or a cloud computer was refused with an answer that isn't wisp's JSON (a proxy's Request Entity Too Large, a gateway's error page), you saw a JSON parse error (Unexpected token 'R'…) as a 500; now you see that answer and its status, as other requests to a machine already did.

Get wisp 0.56.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.56.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.55.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 00:18
593b08c

Added

  • .env values are hidden on screen. When a task's activity, a diff or Changes shows a .env or .env.* file (not .env.example or .env.sample), its values read KEY=••••: the edits wisp captured, the git diff in Changes, a diff or code block about one, and what a command like cat .env printed. Reveal above it shows that one view as it is, until Hide. The server masks before anything goes to the page, so the browser, the phone app and wisp Grid all get it; the file itself, rollback and Revert are untouched, and the agent still reads it. Turn it off with Hide .env values in Settings → Privacy (on by default). Spells: the env.masked, env.reveal and settings.maskEnvFiles parts and the maskEnvFiles setting.
  • Home says when plan allowance would go unused. When a Claude Code or Codex account's weekly (or longer) window resets within a day with a fifth or more of it left, split view's home shows a row under Needs you: 38% of Codex’s weekly window left · resets Thu 21:00, with Use Codex, which picks that harness and account in the prompt box for you to send. × hides it until that window resets. It's advice only: wisp never switches accounts or spends a reset by itself. Turn it off with Spare allowance in Settings → Usage (on by default). Spells: the split.spare part with its hours prop (24), split.spare.start (Use …), settings.spareCard and the spareCard setting.
  • wisp says when a plan's usage window changes. When a Claude Code or Codex account's window appears, goes, changes its length or moves its reset off its schedule (Codex’s weekly window now resets Sun 09:00 (was Thu 21:00)), Settings → Usage shows a line in that account's block and split view's home a row under Needs you, each with × to hide it until that window changes again. The first sighting of an account announces nothing, the 5-hour window's moving reset never counts, and what wisp last saw is kept in budget.json, so a restart doesn't announce it again. Advice only: wisp never switches accounts. Turn it off with Window changes in Settings → Usage (on by default). Spells: the split.windowNotice, settings.windowNotice and settings.windowNotice.line parts and the windowNotice setting. API: budget[].notices on GET /agents, POST /agents/:id/windows/dismiss.

Changed

  • Crew members and subagents can change the crew too. wisp_crew_add, wisp_crew_edit and wisp_crew_remove work from a crew member's job and from a subagent, not only from a task you started, so a lead can hire help for a job. A member's job can't remove that member.

Get wisp 0.55.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.55.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.54.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 21:50
d5607e6

Added

  • Phone app: dictate a prompt. In the Android app a mic next to the paperclip, in New task and in a task's reply box, types what you say into the box as you speak, using the phone's own speech recognition. Tap it again to stop. wisp asks for the microphone the first time; refused, it says how to allow it. Browsers and the desktop app are unchanged. Spells: the composer.mic and launcher.mic parts and the mic icon.
  • wisp says when a harness's program changed. The first time wisp runs Claude Code, Codex, Cursor, opencode, Copilot or another harness it keeps where its program is, its size, sha256 and version. If that changes, the task and Settings → Agents say so (“Codex changed since 2 Nov: 0.1.2 → 0.1.3”) with Trust this version: a newer version in the same install folder is a plain line, another folder or the same version with other bytes is a warning. Nothing is blocked unless you turn on Ask before running a changed harness (Settings → Agents, off by default): then a run on a changed harness waits for Trust and start or Skip this run. Spells: the harness.change and settings.harnessAsk parts and the harnessAsk setting.

Fixed

  • Codex limits are told apart. Codex sometimes answers “429 Too Many Requests” while your plan still has room: with its usage windows known and none full, Auto now rests it one minute instead of ten, and tries it again once when nothing else can run. When Codex refuses because too many devices or sessions are signed in, the task says so and what to do (close Codex elsewhere, then Rerun) instead of a bare error. A real usage limit still shows the card where you pick wait, another account or hand-off; wisp never switches accounts by itself.
  • Claude Code no longer spends extra calls on progress summaries. With CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES exported in your shell, every Claude Code run wisp started (tasks and Take over terminals) made extra model calls to summarise its subagents' progress. wisp now leaves it out of the runs it starts; a Shell beside the task keeps your environment as it is.

Get wisp 0.54.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.54.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.53.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 19:58
03c2ef4

Added

  • Phone app: attach a photo or a video straight from the camera. In the Android app the paperclip in New task and in a task's reply box opens Take photo, Record video and Choose files: a photo or video you take goes in the tray and uploads like a picked file, with no camera permission to grant. Browsers and the desktop app are unchanged, apart from a video in the tray now showing a video icon. Spells: the composer.attachMenu part and the camera and video icons.

Fixed

  • A terminal in wisp starts at its real size. On a busy computer, a program started in a wisp terminal (Take over, /terminal, Shell) could see a 0×0 screen on its first look and draw itself wrong until the next resize: the size is now set before the program starts.

  • Changes keeps a long folder readable. In the side panel's Changes, a file deep in a long folder squeezed the folder to a sliver that showed one dot of its ellipsis, so the row read as ./a-file…; the folder now keeps room for …/.

Get wisp 0.53.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.53.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.52.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:17
78d56f3

Added

  • Side discussions: talk a task over on a page of its own. Type /side and a message in a task's reply box (or pick Side discussion… in its More, its right-click menu or ⌘K) to open a side discussion about it: a task of its own, with full answers (blocks, apps, follow-ups) where /btw gives one quick reply under the turn. It reads the main task's folder as it is now, and every message you send it comes with the main task's latest state (what it's doing, what it changed, what it last said), so it can always check on the work, even while the main task runs. It changes nothing: it runs in Plan, anything that would change something is refused without asking, wisp's tools that act (launch, delegate, crew edits…) aren't offered, and its page has no Rerun, Take over, Ship it, revert, commit or run buttons for the main task's folder. Archiving the main task keeps its worktree while a side discussion runs; deleting it stops them. Its bar says Side discussion of … (click to go back), and the main task's says N side discussions. New POST /api/sessions/{id}/side; summaries carry sideOf and sides. Spells: the side action, the card.sideOf, card.sides, card.sidePill and turn.sideStart parts and the discuss icon.

Fixed

  • Goals: picking a judge's harness opens its picker over the Judges editor instead of behind it.

Get wisp 0.52.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.52.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.

v0.51.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 09:01
4c251b2

Added

  • Sandboxes: a task in a fresh box of its own. Type /sandbox and a task in New task, and it runs in a new box on your wisp Grid instead of on this computer or in your cloud computer. Your project goes along as it is here, uncommitted changes included, so private repos need no login there. Deleting the task deletes its sandbox. Inside, the agent has root (sudo apt-get, under gVisor), and what it installs comes back when the sandbox wakes. It also has a real browser it drives through the new Browser connector. You watch that browser live, and can click in it, in the task's new Browser tab in the side panel. A project's .wisp/sandbox.sh runs once when a sandbox gets it. You sign in to Claude once for all sandboxes in Settings → Cloud → Sandboxes (in a cloud computer: Settings → Connect). wisp runs claude setup-token, and the token goes straight to your grid, sealed there and never kept on your computer. The same card has Env vars every sandbox starts with, and lists every sandbox with what it's for. Subagents can run in a sandbox of their own: pick Sandbox as a delegate's place. Crew members can run each job in a fresh sandbox, or keep one of their own: Their jobs run on → A sandbox per job / A sandbox of their own. Only Claude Code (or Auto) runs in sandboxes for now. Previews of a box's pages now load inside wisp on a computer too (their cookie works in a frame of another site). Grid: up to 10 sandboxes per user (sandboxes.perUser), 2.5 GB each (hostd.container.sandbox); see grid/README.md → Sandboxes. Spells: the settings.cloud.sandboxes and panel.browser parts, the browser panel tab and the box icon.

  • Drafts, and tasks that start after another. Type /draft and a task in New task (or in any task's reply box) to save it without starting it: it waits in the new Drafts section, above For later. Click it to edit the prompt, then Start now, Start later… or Delete. Type /after, pick a task (a menu searches your tasks as you type; pasting a task's ID works too), then the prompt: the new task waits in Scheduled and starts once that task is marked done (at once if it already is). From a task's reply box it runs in that task's project, on its harness. If the task it waits for is deleted or archived first, it moves to Drafts. API: draft: true or after: <task id> instead of a time on POST /later. Spells: the section.drafts and drafts.row parts.

  • Run the task's app and see it beside the task. The side panel has a Preview tab (after Shell) on a task with a worktree: Run starts the app from the worktree, with PORT set to a free port wisp keeps for the task, and shows it in the panel. The command comes from run in .wisp/worktree.json (with an optional port), else a guess from package.json (npm run dev, else npm start, said to be a guess), and you can edit it before you run. While it runs, a slim bar says where (Running · localhost:41664) with Pick element, Logs, Restart, Stop and Open in browser; until the app answers, its output shows in its place, and if it exits it says the exit code and its last lines with Run again. Pick element outlines what's under the pointer in the page; a click adds a line naming it (In the preview, <button class="primary"> "Save" (selector: main > form > button.primary):) to the task's reply box. Stop ends everything the command started; deleting or archiving the task, or quitting wisp, stops it too. Also Run app / Stop app in the task's More, its right-click menu and ⌘K. New GET/POST/DELETE /api/sessions/{id}/run and GET /api/sessions/{id}/run/log; spells reach it through the panel.preview, panel.preview.bar, panel.preview.run, panel.preview.pick and panel.preview.logs parts and panel's tab: "preview".

  • Start tasks from Slack, Linear or any webhook. Automations → Triggers has three new kinds: When a webhook is called, When someone mentions wisp in Slack and When a Linear issue is created. Each gets a secret URL (Copy, Regenerate) to paste where the calls come from: anything that can POST (its JSON or form body fills the prompt through {{body.ref}} and {{text}}, optionally signed with an HMAC secret), your Slack app's Event Subscriptions (the signing secret is checked and old requests are refused; mentions and messages in one channel, optionally only with a keyword; {{text}}, {{user}}, {{channel}}), or a Linear webhook (its signature checked; issues created, optionally only with a label; {{title}}, {{url}}, {{description}}). They start in Plan mode, at most one task per trigger every 30 seconds, and the trigger's editor lists its last five calls with what came of them (started, skipped or rejected, and why). Off by default: Settings → Automations → Webhook triggers; off, the URLs answer 404. On wisp Cloud the URL works as it is; on your computer, put a tunnel in front of it. New POST /api/hooks/{token}; spells set the switch with webhookTriggers and reach the rows through the settings.webhookTriggers, automations.hookUrl and automations.deliveries parts.

  • Start a task from an issue. New task has an Issue button at the end of its project row (in the phone app, in the bar after Delegate; behind More options until your first task) that lists the picked project's open GitHub issues, newest first: #123 title, its labels and who it's assigned to. Type to filter, or past the 50 newest to search GitHub. Picking one fills the prompt with Fix #123: title, the link and the issue's text, the caret at the end, so you can add to it before you send; a draft it replaces comes back with Undo. With a Linear connector that has an API key, the same picker lists the Linear issues assigned to you; without one it offers Connect Linear… (Settings → Connectors). When gh isn't installed or signed in, or the project has no GitHub remote, the picker says so with the button that fixes it. Also in ⌘K: Start from an issue…. New GET /api/issues?project=&q=&source=github|linear; spells reach it through the launcher.issue and issues.picker parts and the issue icon.

  • Stage and commit from Changes. In a worktree task's Changes, each file has a + before Viewed to stage it (− on a tint once it's all staged, a dot on the + when part of it is), and each hunk a Stage / Unstage beside its Revert, so you pick what goes in a commit as in VS Code's Source Control. A commit row under the summary takes a one-line message (the task's title when you focus it empty), says 2 staged, and Commit (Enter) commits those, or everything when nothing is staged; the toast says Committed abc1234. Every flip is instant and comes back with a red toast if git refuses; nothing is staged or committed while the agent works. ⌘K on a task has Commit staged changes…. Spells reach the toggle, the hunk's button and the commit row (panel.changes.stage, panel.changes.stageHunk, panel.changes.commit); the API is POST /sessions/:id/changes/stage and /changes/commit.

  • Review Changes like a pull request: revert a hunk or a file, tick files Viewed. In the side panel's Changes, hover a hunk of a diff and click Revert on its first line (always shown on a phone) to put just that part back as it was before the task; a file's ⋯ has Revert file…, which asks first, then brings a changed or deleted file back from where the branch left the base, or removes a file the task added. Both happen at once with Reverted and Undo on the toast, which puts the file back exactly as it was. wisp won't revert while the agent is working on the task, or a part that changed since you looked (Changes reloads instead). Each file also has a Viewed box, as on GitHub: ticking it folds the file and dims its row, the summary counts 2 of 7 viewed, and a file whose diff changes afterwards is unviewed again (kept per task in this browser). New POST /api/sessions/{id}/changes/revert; spells reach it through the panel.changes.revertHunk, panel.changes.viewed and panel.changes.viewedCount parts.

  • Worktrees bring what git ignores, and set themselves up. A task's new worktree now gets the ignored files the repo's .worktreeinclude lists (gitignore-style lines, as Claude Code reads them; without one, the root's .env files), and runs the repo's setup commands from .wisp/worktree.json ({ "setup": ["npm ci"] }) or a Cursor .cursor/worktrees.json (setup-worktree), in the worktree, with ROOT_WORKTREE_PATH set to your checkout. A step that fails stops the rest and the task's branch line says Worktree setup failed (its tooltip says why); the branch's tooltip lists what was copied and run. Spells reach the warning through the card.setupWarn part.

  • Your plan's usage before you start. The harness picker in New task (and a reply's) now says how much of each harness's plan is gone, its fullest window (5h 40% used), not only when it's near your line; the tooltip says when it resets.

  • @ a file in a prompt. Typing @ and part of a name in New task (with a project on this computer picked) or in a task's reply box now offers the folder's files too, under Files, after the crew and My Stuff; / in what you type looks in paths. Picking one puts its path in (@src/auth.js), the way the harnesses read a file mention. New GET /api/files?project=; spells reach it through the mention.picker and mention.file parts.

  • Jira in the issue picker, and Sentry and PagerDuty triggers. New task's Issue picker lists the Jira issues assigned to you when a Jira or Atlassian connector has its site, email and API token (Jira's search with assignee = currentUser(), still open), beside GitHub and Linear; source=jira on GET /api/issues. Automations' new trigger offers Sentry alert and PagerDuty incident: a webhook trigger...

Read more

v0.50.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 00:23
05f8209

Added

  • Open a delegate's task by itself. A delegate's live row and its report's → (or Open @… task) open its whole run in the main pane, a subagent nested under its lead in the list, a crew member's job under the member. The head names the tasks above it (Lead › Ada › job; deeper chains fold into …), each a click away, and Esc, × or Back go up one level to the task you came from. A subagent has no follow-up box of its own: its dock sends you to the lead. Links to a subagent (#/s/<id>) open it under its lead. Spells reach it through the delegate.go, delegate.row, delegate.dock and split.trail parts.

  • Watch a running app. wisp_watch can also show the real thing: an agent building a web app opens its dev server's address (url) beside the task, then navigates to the page it just changed (a path like /settings, or another address) and reloads when hot reload misses an edit, while the caption says what it's doing. The caption line shows the address, with a button to open it in its own tab. It loads like a preview block (sandboxed, and on a wisp Grid at your box's preview address).

  • Publish an app from My Stuff to your wisp Grid. Signed in to a grid (Settings → Cloud), or in your cloud wisp, an app's ⋯ menu and its bar while it runs offer Publish to <grid>: its files go up to the grid, which serves them at <app>--app--<you>.<grid> to anyone with the link, no sign-in, while your computer or cloud wisp sleeps (kept out of search engines). The link is copied, the card shows Public (click to copy it again), and once an agent changes the app Update public link puts the new version at the same address. Unpublish takes it down; removing the app from My Stuff does too, and your grid account page lists what you published, with Unpublish. New POST/DELETE /api/stuff/{id}/publish; spells reach it through the stuff.public, stuff.frame.publish and stuff.block.public parts.

  • Agents publish for you. Ask “publish it” or “deploy this so I can share it” and the agent saves the app with wisp_save publish: true (or an id alone, for one already in My Stuff): it answers with the public link, and the app's card in the reply shows it with Copy link. publish: false takes it down.

  • Apps can keep data. An app whose wisp-app.json says "db": true (or "db": "seed.sql", made from that file the first time) gets its own SQLite database, used from its pages with import { sql } from '/_wisp/db.js'. Launched in wisp it lives beside the app and survives updates (⋯ → Reset data starts it over); published, the grid keeps one for everyone who opens the link (10 MB). Queries run in a separate process that's stopped after 5 s, without ATTACH or PRAGMA. Needs Node 22.13+.

  • Launch My Stuff apps in the phone app. Connected through wisp Cloud (your cloud computer, or one of your computers via the grid), Launch opens the app inside the app, as on desktop, instead of saying apps need a browser. Over SSH it still can't reach the app's port and says so.

  • Watch agents work. On long tasks (a migration across many files, a test or benchmark run, a data job) the agent can put a page beside the task with the new wisp_watch tool and keep it current as it goes, so you follow the work instead of waiting for the answer. The agent decides what it shows (a progress bar and checklist, a table filling in, a chart) and sends its progress as it works; the page updates in place without reloading. It opens by itself in the side panel when you're looking at the task, under a caption line saying what the agent is doing now, with Run it yourself under it (the command to run or check it, copied with its folder). Elsewhere, the task's Watch button, its working card, More, the right-click menu and ⌘K open it; on a phone it's a page with Back. The page runs sealed (no network, no wisp API; scripts and styles from https CDNs load) and stays on the task with its last state once the agent is done. Settings → Watch agents work turns it off. New GET /api/sessions/{id}/watch; spells reach it through the split.watch, panel.watch, watch.caption and watch.run parts, panel.tab: "watch", the watch setting and the eye icon.

  • Agents drive wisp. Ask the agent in a task to “have codex review this”, “run the tests on my devbox” or “start a task to update the docs” and it does: delegate now creates subagents on the fly on any harness, model, thinking level or machine (no team needed at launch; they join the task's team, show on its card, and naming one again continues it), wisp_available tells it what harnesses, machines, projects and presets you have, wisp_launch starts a new task (here or on a machine, with its own team) that shows as started by the asking task, and wisp_task follows up, stops, marks done, archives, renames or waits on another task. Subagents can't, at most 8 tasks start per turn, and a chain of agent-started tasks stops 3 deep. The external wisp mcp gains machine on wisp_launch (and on each subagent) and lists your machines in wisp_agents.

Grid

  • POST /_grid/preview?port=&path= on a wisp's or computer's address: a one-time link into its p<port>-- preview, for a page signed in there but not to the grid (the phone app's).
  • Published apps (grid/sites.js): PUT/DELETE/GET /api/sites with a device token, or the cloud wisp's own secret; files under <data>/sites/, served at <slug>--app--<handle>.<domain> (on-demand TLS allows those names). grid.json "sites": { "enabled", "maxBytes", "perUser", "dbBytes" } (on, 50 MB, 20 apps, 10 MB). Deleting an account deletes its published apps and their data.

Fixed

  • Watch and previews in the phone app through wisp Grid. A page on your computer's localhost (a running app in Watch, a preview block) stopped at the grid's sign-in, which can't be shown in a frame (Webpage not available). They now start at a one-time link that signs the frame in, as My Stuff apps do.
  • Interactive answers follow your computer's light or dark switch while they're open, with the theme on System; they kept the colours they opened with until a reload.
  • Removing an app from My Stuff on Windows no longer fails with directory not empty right after the app was running: wisp retries while Windows lets go of the files it just served, without holding them open itself.
  • Removing an app that keeps data ("db" in its wisp-app.json) no longer fails on Windows with resource busy or locked: its database is closed before its file goes.

Get wisp 0.50.0

macOS (Apple silicon) wisp-mac-arm64.dmg
macOS (Intel) wisp-mac-x64.dmg
Windows wisp-windows-x64-setup.exe · Arm
Linux AppImage · .deb · Arm: AppImage, .deb
npm (Node 20+) npx wisp-agents@0.50.0 or npm install -g wisp-agents
Homebrew brew install m0xoo/tap/wisp-agents

The desktop app updates itself from these releases. Checksums are in SHA256SUMS.txt.