Skip to content

TaskWindow v0.2.9

Choose a tag to compare

@github-actions github-actions released this 01 Oct 07:49
· 5 commits to main since this release
879282d

Added

Wonder: human mode for input that pages actually react to. Pass
human: true to computer on a click, scroll, type or mouse_move and the
action reaches the page as the event stream a real hand produces rather than
one synthetic jump.

This is a correctness fix more than a cosmetic one. A single wheel event
carrying 1600px gave the page two scroll events where a real wheel gives
ninety-nine, so infinite scroll, lazy images and anything gated on
IntersectionObserver simply never fired. A cursor that teleported onto a
button never fired the mouseenter that opens a hover menu. Input.insertText
fires no key events at all, so type-ahead and autocomplete inputs stayed empty.

Pointer moves now follow a curved, decelerating path with an overshoot and a
dwell before the press; scrolls are split into uneven wheel gestures using
Chrome's own smooth-scroll synthesiser; text is typed character by character
with human intervals (and pasted above 200 characters, as a person would).
Coordinates and deltas land exactly where you asked — the variation is in the
path, never the destination. targetWidth lets Fitts's Law pick the approach
speed for the thing being clicked.

The new computer action idle drifts the cursor without clicking; with dy
it also rocks the wheel by that many pixels and returns to the same offset.

The cursor drawn on the page follows the same path at the same pace, and its
click ring appears when the button actually goes down, so what you watch is
what the page received.

Off by default: it costs a few hundred milliseconds per action.

Codex is now a first-class installer option. A normal guided install
detects Codex alongside the other supported agents, and the explicit
taskwindow install --codex command adds TaskWindow as an authenticated
user-level MCP server shared by the Codex app, CLI, and IDE extension.
taskwindow doctor reports it and taskwindow uninstall removes it with the
other agent registrations.

Registration checks the saved connection and authentication, protects the
config file containing the token, and restores the original config if setup
fails. Restart the agent after setup to load the browser tools.

Fixed

The agent's cursor points where it clicks, and looks like TaskWindow. The
arrow drew 3px right of and 1px below the real click point, so a screenshot
taken to check a target showed the cursor slightly off it. The tip now sits on
the exact point. The black arrow is replaced by one filled with the blue
texture from the icon, drifting slowly so it looks alive while it waits. Longer
moves glide for longer, up to 300ms, and each click shows a brief ring. Page
styles can no longer restyle the cursor, and reduced motion turns off the
drift and the ring.

set_viewport reuses its tabs instead of breeding them. Every call opened
a fresh harness tab, plus one more tab for each viewport that could not be
framed — so iterating on a responsive design left a tab group full of
duplicates of the same page. The view is now opened once per session and
re-pointed on later calls: changing the url or the viewport list navigates the
tabs that already exist, a viewport you stop asking for has its tab closed, and
repeating the same call costs nothing.

Closing a responsive view actually closes it, and says so honestly. Two
separate faults: a set_viewport with no viewports and no sessionToken
invented a token, found nothing under it, and answered "no responsive view is
open (it may have been closed already)" — which reads like success, so agents
moved on believing they had cleaned up. And even with the right token it
removed the window the harness was created in, which is never the window it
ends up in, since joining the session's tab group moves it. A tokenless close
is now an error naming the missing token, a close with nothing to close says
so plainly, and a real close removes the tabs by id and reports how many.

A local file no longer costs eight seconds and a pile of tabs. <all_urls>
does not grant the file:// scheme — that is the per-extension "Allow access
to file URLs" toggle — so a file:// page in the harness iframe never loaded,
and every call waited out the full frame deadline before falling back. It is
now checked up front: the frame attempt is skipped and the result names the
toggle that would make side-by-side work.

Concurrent agents stop clobbering each other's framing rules. The
header-stripping rule used one fixed id for the whole extension, so a second
session's view silently unscoped the first's. Each session now holds its own
rule id and releases it on close.

Install

Run npm install -g taskwindow@latest, then taskwindow install. The guided installer configures the daemon and selected coding agents and opens the Chrome Web Store listing; the extension pairs on its own after "Add to Chrome" and Chrome keeps it updated.

Manual archives are attached below (the extension zip is for taskwindow install --extension <zip>, the unpacked development route). Run taskwindow doctor for connection diagnostics or taskwindow pair for manual recovery.

See the README for the full guide.