Repository navigation
0.8.0
MCP tools named for what they do (verb_noun: renamed, see below), with
descriptions that say when to use each; MCP revisions 2025-11-25 and
2026-07-28; pictures sized for the model looking at them, bounded
answers, and a program's text marked as its own. Waiting for a spawned
program's window by its name, window waits that say what's there, and
sessions killed outright cleaned up, with sessions --stale and
--clean for what was left before.
Changes to check when upgrading
-
An unknown MCP tool is a protocol error: a tools/call of a tool
shotbox doesn't have is a JSON-RPC error, -32602, as the spec has it,
not anisErroranswer. -
MCP's tools are named verb_noun, so an agent can guess what each
does from its name. A client's permission list that names them
(Claude Code'smcp__shotbox__click, say) needs the new names; a call
by an old one is refused, naming the new one. Their arguments and
answers are as before.Was Now spawnspawn_programprogram_outputget_program_outputaccessible_treeget_accessible_treescreenshottake_screenshotrecordrecord_videoclickclick_elementscrollscroll_wheelgamepaduse_gamepadlintcheck_accessible_namescontrastcheck_contrasttab_walkcheck_focus_orderannouncementslist_announcementssoundrecord_audiostart_session,stop_session,press_keys,type_textand
wait_forkeep theirs. The commands (shotbox click,a11y lint...)
are as they were. -
MCP marks a program's text:
get_program_output's lines, the line
wait_forline andrecord_video'suntil_lineend on, and
list_announcementscome a line each after|, and the instructions
say such lines, and quoted names and titles, are the programs', not
the person's. A client reading
wait_forline's answer as the bare line needs to take the|off.
Added
shotbox --version: which shotbox this is.shotbox sessions --stalelists scratch dirs whose sessions have gone,
with each one's size and the command, pid and time that made it, which
ashotbox.jsonin it now says, and lasting sessions unused for a day;
shotbox sessions --cleanremoves those dirs, with what's left running
of their sessions (an older shotbox's, which say nothing, only with
--unmarked).shotbox doctorsays how many there are, and their
size.- MCP's
wait_fora window takes the name a program was spawned by, and
waits for a window of that program's, whatever its title, on X11 and
Wayland, over one titled the name (^name$still waits for that),
which is taken if the program has none of its own, as a daemon's
window is;spawn_program's answer says so. - MCP revisions 2025-11-25 and 2026-07-28, with
server/discover. - MCP's
take_screenshotandrecord_videosay a picture's size, and
shrink one past what Claude sees unscaled (a 1568 px long edge or 1568
patches of 28 px: 1920x1080 to 1456x819), saying the scale, so an x,y
read off it can be mapped back forclick_element. A burst's and a
clip's sheet lays its pictures out as many to a row as shrinks them
least, two 1920x1080 screens to a row, not always four. - MCP's
start_session, without the system's PyGObject in sight (plain
pipx install, uvx), starts anyway and says which tools won't work
and how to fix it, as it says what it couldn't seal.
Changed
- A session killed outright (SIGKILL) no longer leaves its scratch dir
in$TMPDIR, nor its X server, bus and programs running, nor those of
a session started in it: a watchdog process of its own stops them,
letting a recording finish its file
within 5 seconds, and removes the dir (not one kept
with--keep), asshotbox mcp's does for its sessions, which it now
stops with SIGTERM too, before SIGKILL 5 seconds on. - MCP's answers are bounded:
start_session's screen is at most
7680x4320;get_accessible_tree, the checks andlist_announcements
stop at 500 lines, saying how many more and to narrow it with window;
and a program's line, or a tree line, stops at 500 characters. - docs/mcp.md says that
wait_forline reads any text file under the
allow file's directory, so it belongs in its own or the project's, not
your home, and that allowing a terminal, browser or file manager hands
the agent arbitrary commands throughtype_text. - A command that needs PyGObject, run from uvx or
uv tool install,
whose environments can't see the system's, says to install with
pipx install --system-site-packages shotbox, not to make the
virtualenv with--system-site-packages, which uv's tools can't. - MCP's tool descriptions say when to use each tool and which to use
instead, what its answer holds, and its defaults:get_program_output
reads a program that has exited,list_announcementskeeps what was
said, oldest first, andcheck_contrastraises the window it measures. - MCP's
check_focus_order, when nothing has the focus to start from,
says to click the window withclick_element, not to run
shotbox focus, which an agent can't. - A window wait that gives up (
wait window,Screen.wait_window, a
--windowthat waits, MCP'swait_for) lists the windows there are,
the nearest first, with their app ids on Wayland, as a click by name
lists the nearest names; so does a--windowwith no such window.