Skip to content

agent-widgets 0.3.0

Choose a tag to compare

@Surdeddd Surdeddd released this 15 Sep 16:20
· 18 commits to main since this release

Your agent's widget work now finishes in any MCP client, installs in one step and tells the truth about the desktop.

brew install surdeddd/tap/agent-widgets

In Claude Code, the plugin brings the skill and the MCP server:

/plugin marketplace add Surdeddd/agent-widgets
/plugin install agent-widgets@agent-widgets
0.2 0.3
aw_ship in Codex or Claude Desktop cut off after 60 s answers within 45 s with a job id, aw_wait returns the result
Progress and cancel none, cancel ignored a notification per stage, cancel stops the build
Install git clone + make install Homebrew or the Claude Code plugin
Tool metadata read-only hint titles, hints, output schemas with the summary inside
A wrong argument missing "id" INVALID_ARGUMENT with the reason
A dev slot behind windows SHOT_MISMATCH 9 % WIDGET_HIDDEN: show the desktop, then aw shot --dev

What's new

  • Long MCP calls fit every client. aw_ship, aw_dev, aw_slot and aw_feed_run run as jobs: a call answers within its budget (none for Claude Code, 45 s for other clients, aw mcp --call-budget) with a job id and stage, and the new aw_wait returns the final result. Codex and Claude Desktop, which stop a tool call after 60 s, now get through a ship.
  • Progress notifications for every stage of a long call, and a pulse every 10 s.
  • Cancelling an MCP call stops its work and sends no reply: a build is interrupted, waits end, an install swap already under way still finishes.
  • Claude Code plugin: /plugin marketplace add Surdeddd/agent-widgets, then /plugin install agent-widgets@agent-widgets installs the skill and the MCP server and asks for the widgets folder. A SessionStart hook explains how to install aw when it is missing.
  • Every MCP tool has a title, read-only, destructive, idempotent and open-world hints, and an output schema. The structured content carries the reply text under summary, because Claude Code shows the model that JSON instead of the text block.
  • MCP arguments are checked against the input schema: unknown names, wrong types and missing values are INVALID_ARGUMENT. Invalid widget ids are WIDGET_ID_INVALID everywhere, unknown jobs JOB_UNKNOWN.
  • Hints in MCP replies name the tool to call (aw_explain {"code": "…"}) and mark commands that only exist in a shell.
  • A dev slot covered by windows is WIDGET_HIDDEN instead of a misleading SHOT_MISMATCH: macOS does not draw desktop widgets that are not on screen, so their capture is an empty frame. aw dev no longer waits 30 s for a redraw that cannot happen, aw slot waits until the slot is visible, aw ship without a visible slot ends unverified, and aw doctor tells a placed but invisible slot from a missing one.
  • aw ship and aw dev capture and compare only the dev slot sizes the widget supports.
  • aw_preview takes lang (en / ru), like aw preview --lang.
  • Long issue labels under a preview cell wrap inside the tile instead of pushing the next cell out of the grid.
  • SAMPLE_NOT_LOCALIZED fires only when the default sample holds text; a feed of numbers has nothing to translate.
  • The contracts say how Date fields of a model decode: ISO 8601 or epoch seconds, as in the timeline envelope. The skill asks for the dev slot in the sizes the widget supports.

How it was checked

  • 210 engine tests and 69 kit tests, swiftlint --strict clean; every new test was broken on purpose and went red.
  • A protocol probe drove the MCP server by hand: with a 20 s budget a real aw_ship answered with a job id after 20 s and aw_wait returned the desktop shots 16 s later; a cancelled preview sent no reply and left no swiftc or xcodebuild behind.
  • A fresh Claude agent installed nothing but the plugin and built an uptime widget end to end in 20 minutes; its report drove the fixes for invisible dev slots, compared sizes, lang in previews and the localization warning.
  • A Grok agent on the same brief tried to script the desktop to reach the dev slot; the skill now forbids that outright.
  • The plugin was installed from this repository with claude plugin marketplace add and claude plugin install and used in a fresh session; the Homebrew formula was built from source and tested.