Getting a screenshot in front of an agent from a terminal prompt has meant dealing with file paths. This week the prompt accepts images the way a chat window does, and over SSH too. Alongside that, hooks get a way to stop a turn before the model sees it, and scripted runs finally say why they ended early.
This update covers week 44 (October 27-30, 2026): versions 1.4.8 to 1.4.12, five releases and 40 changelog entries. The main topic is image input. The rest is hooks, scripting, plugins and a pile of smaller fixes in /diff, rendering and approvals.
Attach images by pasting or dragging them into the prompt
Paste works with your terminal’s own shortcut. In 1.4.9 you can attach an image with whatever paste shortcut your terminal uses, such as Cmd+V or Ctrl+Shift+V. The clipboard should contain only an image at that moment.
Dragging files attaches them. Drag image files into the prompt and they are attached. Before, the prompt inserted their paths instead.
It also works over SSH. Image paste now works over SSH with X11 or Wayland forwarding. If you run the CLI on a remote machine and copy a screenshot locally, this is the setup the change covers.
Failures tell you what to do. When there is nothing to attach, the CLI’s paste key says No image or video found in the clipboard. If a clipboard tool is missing, the message names the one to install, for example wl-clipboard on Wayland.
Conditions to check before you rely on it:
- Only an image should be copied. Mixed clipboard content is not what the feature describes.
- Over SSH you need X11 or Wayland forwarding set up.
- On Wayland you need
wl-clipboard. Other setups may need a different clipboard tool, and the error message names it.
A related fix from the same week affects what happens after attaching. Images are now capped at 2000 pixels per side, and large PNGs are sent as JPEGs when that makes them much smaller, which avoids request size rejections. Corrupt images, or files with text before the header, are rejected with an error that says where the real header starts. Previously they could break later requests with INVALID_MEDIA.
Changes for everyday work
Hooks can stop a turn. PreInvocation hooks gain a terminationBehavior option in 1.4.11. If a hook returns "terminate", the turn stops before the model is called. The documented example is blocking a prompt that contains sensitive data. The prompt never leaves for the model.
Hooks can show you an error without telling the model. A hook can now inject an errorMessage, and its userMessage is shown to you and not sent to the model. In a -p run this also produces a non-zero exit code, so a blocked prompt fails a script visibly.
Scripted runs report why they stopped. Results from --output-format json and stream-json now carry a finished_reason field when a turn ends early. The values are:
print_timeoutwhen--print-timeoutexpired and the response is partialinterruptedwhen the run was canceled, for example withCtrl+Cerrorfor any other failure
The field is omitted when the turn finishes normally. A script can therefore treat its presence as a signal that the answer is cut off.
Plugins can have optional API keys. In 1.4.12 a plugin’s auth.json accepts "optional": true for an API key provider. This suits services that work without a key but raise rate limits with one. If you haven’t set the key, the plugin’s commands see the variable as unset and make unauthenticated requests at the free rate limit. Before, you got 401 errors or a sign-in prompt.
The plugin Discover tab has sections. The /plugin Discover tab (1.4.9) groups marketplace plugins into the same sections as the Antigravity plugin marketplace instead of one flat list. A plugin that belongs to several sections appears under each.
Technical notes
Plugin authoring and import. agy plugin validate now warns when a plugin’s name isn’t lowercase kebab-case, such as Neo4j or foo_bar, because the marketplace can’t publish those. It suggests a valid name and fails under --strict. It also checks the logo: it notes a missing logo in plugin.json and warns about blank paths, backslashes, absolute paths, paths outside the plugin, folders the marketplace bundle leaves out (such as .github/), and URLs that won’t be shown. The same checks apply to context provider iconUri values.
agy plugin import claude (1.4.11) no longer prints No claude extensions found. for plugins installed from a Claude Code marketplace. It reads Claude Code’s list of installed plugins and skips those disabled in Claude Code’s settings or installed for a single project only. Imported plugins keep their remote MCP servers ("type": "http" with url and headers) and servers from .mcp.json files without an mcpServers wrapper. ${CLAUDE_PLUGIN_ROOT} expands to the installed plugin’s directory. Servers that can’t be converted, such as ones on the legacy SSE transport, are listed with a warning and no longer reported as installed.
/diff. Several changes in 1.4.8 make /diff quicker and more robust:
- In the Per Turn tab,
[and]jump to the first file of the previous or next turn and wrap around. Key-hint footers now wrap on narrow terminals. - /diff opens faster in large repos and long conversations. Untracked files load in the background, Per Turn shows the newest turns first, and finished turns are cached.
- Binary files and untracked files over 1 MB are listed with a note instead of being read into memory. A file deleted mid-load no longer breaks the list.
Terminal rendering. Streaming agent replies write about 70% fewer bytes to the terminal (1.4.10) and stay smoother over slow SSH. Scrolled-off lines go into your terminal scrollback. In 1.4.12, Markdown tables in long streaming replies reach scrollback with final column widths instead of misaligned borders.
Approvals and permissions. An execute_url approval for a Google site such as www.google.com no longer covers sensitive apps like mail.google.com or drive.google.com. Each needs its own approval (1.4.9). Always-allow rules for multi-line commands, such as multi-line python -c or node -e scripts, now take effect (1.4.9). Auto mode’s review of out-of-sandbox commands times out less often (1.4.8, 1.4.9), so it asks you to approve safe commands less often.
Billing. After signing in with Google Cloud, you can choose a billing model: a Gemini subscription or Pay As You Go (1.4.11).
What to take away
If you work in a terminal:
- Copy a screenshot, press your terminal’s paste shortcut and check that it attaches. If it doesn’t, read the message and install the clipboard tool it names.
- Try dragging an image file into the prompt. It should attach, with no path inserted.
- Open /diff in a big repo and try
[and]in the Per Turn tab.
If you run parallel sessions or long conversations:
- /diff should open faster in long conversations, with the newest turns first.
- The 70% reduction in terminal output should help most over slow SSH links.
- Auto mode should ask for approval on safe out-of-sandbox commands less often. Re-check any multi-line always-allow rules you had set, since they now apply.
If you administer integrations or company deployments:
- Consider a
PreInvocationhook withterminationBehaviorset to"terminate"for prompts that must never reach the model. Test thaterrorMessageanduserMessageshow what you expect, and that a-prun exits non-zero. - Add a check for
finished_reasonin scripts that consumejsonorstream-jsonoutput, so partial answers don’t pass as complete ones. - Run
agy plugin validate --stricton your plugins to catch naming and logo problems before publishing. - Re-run
agy plugin import claudeif it previously found nothing. For plugins whose service tolerates missing keys,"optional": trueinauth.jsonavoids401errors for users without a key. - Review any
execute_urlapprovals for Google sites, since they no longer extend to Gmail or Drive hosts.
Sources: Antigravity CLI changelog, versions 1.4.8 to 1.4.12 (October 27-30, 2026), and the Antigravity CLI documentation. Availability of features may change, especially for anything marked beta.