Repository navigation
Releases: Surdeddd/agent-widgets
Release list
agent-widgets 0.4.0
A gallery with a reason to install
Seven ready-made widgets ship with the engine. aw gallery lists them, aw gallery add <id> copies one into your workspace — feed, samples and tests included.
- ai-limits — what is left of your Claude and Codex windows, the pace against an even spend, a forecast of when you run out and a week of history
- agents — which Claude Code and Codex sessions wait for you, went silent or are working, with live timers
- github — contribution year, streaks, the review queue, the last 14 days
- ai-spend — your Claude Code tokens at API prices: today, week, month, by model
- tiles — 2048 played with widget buttons
- system-pulse and focus, redrawn
aw gallery add ai-limits && aw feed run ai-limits && aw ship ai-limitsBig widgets that earn their size
The preview now measures the largest empty area of every size and warns with UNDERFILLED; the sheet outlines the hole. Templates fill the sizes they declare, and the skill is rewritten around a ladder — each size answers a bigger question. On the same brief a fresh agent went from an extra large widget that was 71 % empty to 15 %.
Three more ways to install
- npm —
npm install -g agent-widgets, or straight into an MCP config:npx -y agent-widgets mcp --workspace ~/Widgets - Claude Desktop — download
agent-widgets-0.4.0.mcpbbelow and open it - MCP registry —
io.github.Surdeddd/agent-widgets
aw_init creates the workspace from an MCP client, so clients without a shell can start from an empty folder.
Also
- Feeds that print the same output while nothing changed cost no reloads; the gallery feeds are built that way, and a change reaches the desktop about a second after it is published.
- System date text follows the widget language;
context.localefor your own formats. AWSparkline(values, range: 0...100)pins the scale of a percentage.- Sample dates can be offsets from now:
"+90m","-4m". SAMPLE_NOT_LOCALIZEDonly for feeds that readAW_LANG.
Full list: CHANGELOG.
Upgrade: brew upgrade agent-widgets, or git pull && make install.
agent-widgets 0.3.1
Two fixes for problems that shipped in 0.3.0. If you installed with Homebrew, upgrade: aw new did not work there.
brew update && brew upgrade surdeddd/tap/agent-widgetsFixed
aw newbehind a symlink. A Homebrew install keeps the engine behind a symlink (opt/agent-widgets/libexec→Cellar/…), andaw newfailed there withUNEXPECTED … couldn’t be copied: the created paths were cut at the wrong place once the symlink was resolved. It now works from any install location.- Widgets with a running timer settle on the desktop.
aw shipandaw devcompared captured frames byte by byte, so aText(date, style: .timer)or anAWCountdown, which changes every second, never looked still: every window waited its full 30 s and the run endedunverifiedwithSHOT_UNCHANGEDalthough the slot had redrawn within a second. Frames are now compared as pictures: a ticking clock is neither a redraw nor a widget that keeps redrawing, and the same ticking widget is still reported as unchanged. On a real desktop the capture of four sizes went from 120 s to under 7 s.
How it was checked
- Both bugs are reproduced by tests that fail on 0.3.0: an engine reached through a symlink, and real captures of a dev slot with six live timers.
aw newwas run against the released 0.3.0 and the fixed build behind the same symlink: exit 1 before, six files created after.- 219 engine tests and 69 kit tests,
swiftlint --strictclean, CI green. The Homebrew formula test now creates a workspace and a widget instead of only printing the version.
agent-widgets 0.3.0
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-widgetsIn 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_slotandaw_feed_runrun 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 newaw_waitreturns 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-widgetsinstalls the skill and the MCP server and asks for the widgets folder. A SessionStart hook explains how to installawwhen 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 areWIDGET_ID_INVALIDeverywhere, unknown jobsJOB_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_HIDDENinstead of a misleadingSHOT_MISMATCH: macOS does not draw desktop widgets that are not on screen, so their capture is an empty frame.aw devno longer waits 30 s for a redraw that cannot happen,aw slotwaits until the slot is visible,aw shipwithout a visible slot endsunverified, andaw doctortells a placed but invisible slot from a missing one. aw shipandaw devcapture and compare only the dev slot sizes the widget supports.aw_previewtakeslang(en/ru), likeaw 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_LOCALIZEDfires only when the default sample holds text; a feed of numbers has nothing to translate.- The contracts say how
Datefields 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 --strictclean; 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_shipanswered with a job id after 20 s andaw_waitreturned the desktop shots 16 s later; a cancelled preview sent no reply and left noswiftcorxcodebuildbehind. - 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,
langin 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 addandclaude plugin installand used in a fresh session; the Homebrew formula was built from source and tested.
agent-widgets 0.2.0
The loop is closed: an agent now sees its widget on the real desktop and compares it with the preview, and a ship nobody has seen is no longer a success. A free Apple ID is enough to sign.
Upgrade: git pull && make install, then aw geometry --measure once to read the real widget sizes of this Mac.
Behavior change: aw ship without a desktop screenshot now exits 5 (SHIP_UNVERIFIED) instead of 0. Put the dev slot on the desktop once; aw slot waits for it.
What's new
aw slotwaits until the person puts the dev slot on the desktop, then measures sizes and captures it (SLOT_TIMEOUT).- A free Apple ID is enough for signing: docs and
SIGNING_MISSINGnow say so;aw previewneeds no certificate. Verified: this repository is built, signed and installed with a free Personal Team. aw shipwithout a desktop screenshot no longer reports success: exit 5, stageunverified(SHIP_UNVERIFIED).aw geometry [--measure]reads the real desktop widget sizes of this Mac from the system log; previews, the sheet and window matching use them, andaw doctorwarns while they are unknown (GEOMETRY_UNKNOWN).- The dev slot shot is compared with the preview cell of the sample it shows:
aw shotandaw shipwrite<id>-<family>-compare.png(preview, desktop, outlines) and warns withSHOT_MISMATCHwhen the size or the outlines differ. - Feeds are never silent: exit 127 / 126 become
FEED_COMMAND_NOT_FOUNDwith the missing program and the feed PATH, the status keeps the exit code and the last stderr lines, andaw doctorreports every feed — ok N min ago, the last failure, orSTALE_DATAafter three missed runs. - Feed secrets live in
aw.local.json: a feed gets only the names it lists infeed.secrets, a missing value stops it withFEED_SECRET_MISSING, andaw doctorwarns whensecretsare in the sharedaw.json(SECRETS_IN_CONFIG). - A feed widget previewed with
--lang ruand nosamples/default.ru.jsonwarns withSAMPLE_NOT_LOCALIZED, with the command that writes that sample. aw devandaw_devwait until the desktop has redrawn the dev slot, then capture it and compare it with the preview; before, a shot right afteraw devcould still show the previous widget.- The app window edits widget settings: every widget whose feed takes
settingsgets a form (text, numbers, toggles, JSON for the rest); edits are saved in the App Group, win over widget.json inAW_SETTINGSand make the feed run at the next tick. The kit is unchanged. - Templates lay out extraLarge: metric, chart, list, ring, card, image and timer get two-column dashboards (the timer also a large layout with an elapsed ring), and new widgets from them include the family. The template test renders all of them.
- The preview matrix gets a Tahoe clear row:
defaultis also rendered as dark clear glass in the accented rendering mode, where color disappears.
agent-widgets 0.1.0
First public version of agent-widgets: a harness that lets coding agents build native macOS desktop widgets. The agent writes a Codable model, a SwiftUI view and, for live data, a small feed script; aw previews every size and theme with layout checks, builds and signs the app, installs it with backups, shows the widget in a dev slot on the desktop and captures the real window.
git clone https://github.com/Surdeddd/agent-widgets && cd agent-widgets
make install && aw doctor
aw init ~/Widgets && cd ~/Widgets
aw new weather --template metric && aw preview weather && aw ship weatherHighlights
aw previewrenders family × light/dark × idle desktop × sample into one sheet in about a second and reportsOVERFLOW(naming the tallest parts),TRUNCATION,DECODEand more, each with a hint.aw shipbuilds, installs atomically with three backups, keeps the installed app the only registered widget extension, points the dev slot at the widget and screenshots it.- Feeds in any language, published only on change and scheduled by a LaunchAgent; buttons with state that do not spend the reload budget.
- MCP server with 11 tools (the preview tool returns the sheet image), the
agent-widgetsskill for Claude Code and Codex,--jsoneverywhere, English and Russian throughout. - Eight example widgets, each written by a fresh agent from a one-paragraph brief and the skill.
Requirements: macOS 14+, Xcode 16.3+, brew install xcodegen, an Apple Development certificate. Full list of changes in CHANGELOG.md.