š¹ļø Hermes Arcade
A neon arcade cabinet inside Hermes Agent. Three playable games in the
dashboard, a persistent high-score board with arcade-style initials entry,
and agent-facing tools so Hermes itself can answer "what's my high score?".
Games
| Game | How it plays | Scoring |
|------|--------------|---------|
| Neon Snake | Arrows/WASD. Speed ramps with every pellet. | 10 pts per pellet |
| Neon Breakout | Arrows or mouse. Ball angles off the paddle edges, speeds up per brick. 3 lives, levels regenerate faster. | 10ā50 pts per brick, 250 bonus per level |
| Neon Pong | Arrows or mouse vs the machine, first to 7. | 100 per point, 500 win bonus |
Everything is hand-drawn on HTML5 canvas: glow trails, particle bursts,
screen shake, CRT scanlines, and a WebAudio chiptune synth for sound effects.
No game engine, no build step ā one IIFE bundle.
Why it's more than a prompt
Hermes Arcade uses three plugin surfaces at once:
- Dashboard UI plugin (
dashboard/manifest.json+dist/index.js) ā
the playable arcade tab, registered at/arcade. - Dashboard backend plugin (
dashboard/plugin_api.py) ā FastAPI routes
under/api/plugins/hermes-arcade/that persist plays and scores. - Agent plugin (
plugin.yaml+__init__.py) ā LLM-callable tools and
a/arcadeslash command.
Scores flow between the browser and the agent through a shared store
(store.py, JSON under $HERMES_HOME/plugin-data/hermes-arcade/), so the
agent can read the same leaderboard you just played on.
Agent tools
arcade_gamesā list the cabinet's games and how to open the arcade.arcade_top_scoresā top-10 leaderboard for one game or all of them.arcade_player_statsā total plays, per-game champions, and optionally
every leaderboard entry for a given player's initials.
Try asking Hermes: "how many times have I played pong and who's the snake champion?"
Install
cp -R hermes-arcade ~/.hermes/plugins/
hermes plugins enable hermes-arcade
hermes plugins doctor ~/.hermes/plugins/hermes-arcade # optional sanity check
Then play:
hermes dashboard # ā open the "Arcade" tab
If the dashboard was already running, restart it (backend routes mount at
startup) or hit GET /api/dashboard/plugins/rescan for the tab alone.
Controls
- Select a game with the cabinet buttons, ENTER to start.
- In game: arrows / WASD / mouse (Breakout and Pong).
- New high score? Enter your initials arcade-style:
ā²ā¼ changes the letter, āāŗ changes the slot, ENTER locks it in.
Attract mode
The cabinet plays itself: click ā¶ ATTRACT in the tab (or open
/arcade?attract=1) and it cycles Snake ā Breakout ā Pong with built-in
autopilots ā perfect for demos and screen recordings. Attract runs never
touch the leaderboard or play counters.
Files
hermes-arcade/
āāā plugin.yaml # agent plugin manifest
āāā __init__.py # tool + slash command registration
āāā schemas.py # tool schemas (what the LLM sees)
āāā tools.py # tool handlers (JSON in, JSON out)
āāā store.py # shared score store (agent ā dashboard)
āāā dashboard/
āāā manifest.json # dashboard tab registration
āāā plugin_api.py # FastAPI routes for plays/scores
āāā dist/
āāā index.js # the arcade (canvas games, no build step)
āāā style.css # neon CRT styling
License
MIT
README from the reviewed commit 2daa7be; it updates when the author re-pins.

leoresendedop-sys