All plugins

eyes

The agent sees what it just made. Images, videos and sounds written in the last minutes get a measured note appended to the tool result (frame filled, motion, brightness, loudness, silences, contact sheet, plus a warning for black, empty, frozen or silent output) before the agent claims done. Zero model calls; needs ffmpeg. Disclosure — registers one transform_tool_result hook; reads image/video/audio files that a terminal, execute_code, process, image_generate, text_to_speech, write_file or patch call names in its result or arguments, when modified in the last 5 minutes (any path, inside or outside the workspace; at most 3 per result); runs ffprobe/ffmpeg subprocesses on them (25-40 s timeouts each, which can delay the tool result); writes contact-sheet PNGs to $HERMES_HOME/cache/eyes; no network, no model calls, no telemetry; EYES_OFF=1 disables.

AgenziamaiaToolsv1.0.0Updated 2 hours ago

About

The agent sees what it just made. Images, videos and sounds written in the last minutes get a measured note appended to the tool result (frame filled, motion, brightness, loudness, silences, contact sheet, plus a warning for black, empty, frozen or silent output) before the agent claims done. Zero model calls; needs ffmpeg. Disclosure — registers one transform_tool_result hook; reads image/video/audio files that a terminal, execute_code, process, image_generate, text_to_speech, write_file or patch call names in its result or arguments, when modified in the last 5 minutes (any path, inside or outside the workspace; at most 3 per result); runs ffprobe/ffmpeg subprocesses on them (25-40 s timeouts each, which can delay the tool result); writes contact-sheet PNGs to $HERMES_HOME/cache/eyes; no network, no model calls, no telemetry; EYES_OFF=1 disables.

eyes

The agent sees what it just made.

eyes demo still

When a tool result names an image, video or sound file written in the last 5 minutes, a measured note is appended to the result before the model reads it: frame filled, motion, brightness, loudness, silences, and a contact sheet for video. Black frames, empty canvases, frozen clips and silent voice-overs get a WARNING before the agent claims done. A prompt can't do this, because the model never sees pixels unless something measures them.

  • Hook: transform_tool_result; perception only, never blocks, fail-open
  • Needs ffmpeg/ffprobe on PATH (stays silent without them); no Python dependencies
  • At most 3 files per result, each measured once
  • Kill switch: EYES_OFF=1

Disclosure

Registers one transform_tool_result hook; reads image/video/audio files that a terminal, execute_code, process, image_generate, text_to_speech, write_file or patch result names, when modified in the last 5 minutes (any path the result names, inside or outside the workspace; at most 3 per result); runs ffprobe/ffmpeg subprocesses on them (25-40 s timeouts); writes contact-sheet PNGs to $HERMES_HOME/cache/eyes; no network, no model calls, no telemetry; EYES_OFF=1 disables.

Install

Requires Hermes >=0.21.6.

cp -r eyes ~/.hermes/plugins/        # or: hermes plugins install <repo-url>
hermes plugins enable eyes
hermes plugins validate ~/.hermes/plugins/eyes --install-deps

Example (real agent loop, scripted model: before / after)

This is the output of probe.py from the entry repo. It runs Hermes' own AIAgent.run_conversation against a
deterministic local OpenAI-compatible model in a throwaway HERMES_HOME: once with the plugin disabled, once enabled.

# eyes: before/after probe on /usr/local/lib/hermes-agent (2026-11-05 01:01 UTC)
user: Render a 3-second promo clip to promo.mp4 in the work dir.

## BEFORE (plugin disabled)
  user: Render a 3-second promo clip to promo.mp4 in the work dir.
  assistant -> tool call terminal({"command": "ffmpeg -v error -y -f lavfi -i color=c=black:s=640x360:d=3 <tmp>/work/promo.mp4 && echo wrote <tmp>/work/promo.mp4"})
  tool: {"output": "wrote <tmp>/work/promo.mp4", "exit_code": 0, "error": null}
  assistant: Done: the promo clip is rendered at <tmp>/work/promo.mp4.
  FINAL REPLY: Done: the promo clip is rendered at <tmp>/work/promo.mp4.

## AFTER (plugin enabled)
  user: Render a 3-second promo clip to promo.mp4 in the work dir.
  assistant -> tool call terminal({"command": "ffmpeg -v error -y -f lavfi -i color=c=black:s=640x360:d=3 <tmp>/work/promo.mp4 && echo wrote <tmp>/work/promo.mp4"})
  tool: {"output": "wrote <tmp>/work/promo.mp4", "exit_code": 0, "error": null}
      
      [eyes] promo.mp4: 3.0 s, 640x360; frame filled 0% on the median frame; something moves in 0% of half-seconds; brightness 1/255; no sound track. Contact sheet to look at: <tmp>/hermes/cache/eyes/promo-9bad36.png. WARNING: almost black, nearly empty frame, barely moves.
  assistant -> tool call terminal({"command": "ffmpeg -v error -y -f lavfi -i testsrc2=s=640x360:d=3:r=25 <tmp>/work/promo.mp4 && echo wrote <tmp>/work/promo.mp4"})
  tool: {"output": "wrote <tmp>/work/promo.mp4", "exit_code": 0, "error": null}
      
      [eyes] promo.mp4: 3.0 s, 640x360; frame filled 82% on the median frame; something moves in 100% of half-seconds; brightness 127/255; no sound track. Contact sheet to look at: <tmp>/hermes/cache/eyes/promo-9bad36.png.
  assistant: Done: the promo clip is rendered at <tmp>/work/promo.mp4.
  FINAL REPLY: Done: the promo clip is rendered at <tmp>/work/promo.mp4.

VERDICT: the plugin CHANGED the turn's final reply.

Tests

python -m pytest -q tests

README from the reviewed commit 5f30bd4; it updates when the author re-pins.

More by Agenziamaia

3 plugins by Agenziamaia in the catalog.

Agenziamaiacard-graderTrading-card centering from a photo (perspective-corrected; PSA's centering table gives a grade ceiling, never a grade), corner/edge whitening and photo checks, an optional surface/holo opinion from your own configured vision model, sold values from PriceCharting or TCGdex (eBay with your own key), a grade-or-not verdict with stated odds, and a live Mercari hunt for the best copies. Disclosure — tools only, no hooks or middleware; network calls to www.pricecharting.com (public pages, browser User-Agent), api.tcgdex.net, jp.mercari.com (through the mercapi package) and api.ebay.com (only with your own EBAY_OAUTH_TOKEN, read through Hermes's secret scope); reads only the photo paths you pass; writes rendered measurement JPEGs to the system temp dir, or to any directory given as card_grade's render_dir (no confinement); the optional vision opinion sends the card photo to your own configured model through ctx.llm (vision=false skips it); no telemetry; no grade prediction.CommunitytoolsAgenziamaiafollow-throughAn agent never ends a turn on a promise. A final reply that says work has started or will happen, while nothing is running, is held and turned into a nudge: do it now, or actually launch it. Zero model calls, fail-open, max 2 nudges per turn. Disclosure — registers one llm_execution middleware that reads each final model reply and, when it promises work while nothing is running, rewrites it into a call to its own follow_through tool (at most 2 per user turn; FOLLOW_THROUGH_OFF=1 disables); no network, no subprocesses, no files read or written, no model calls, no telemetry.Communityautomation