Source: karmsheel-hermes-plugin-memelord-readme-2026-05-22.md — full README + repo metadata, fetched 2026-05-22. Repo: github.com/karmsheel/hermes-plugin-memelord. Version: v0.1.0. Commits: 19 (2026-05-03 → 2026-05-20). Stars: 1. License: MIT. Language: Python (100%). Author: karmsheel.
Full-featured meme generation and gallery plugin for the Hermes Agent dashboard (hermes dashboard --tui --port 9119). 11 built-in meme templates (Drake, Distracted Boyfriend, Two Buttons, Expanding Brain, Anakin & Padme, Change My Mind, This Is Fine, Always Has Been, Bernie Sanders, Epic Handshake, Running Away Balloon) + Imgflip catalog discovery (1h cache, one-click import) + drag-and-drop custom upload with tags + JSON-backed humor profile (safe mode, blocked topics, template prefs) + exclusive KingPepe theme (PEPE aesthetic with scanline overlay, Orbitron + Share Tech Mono, glowing borders). FastAPI backend (~565 LOC, 15+ endpoints) + vanilla-JS React frontend (no build step). 1 star at ingest — fun, low-stakes, but more useful as the surface revealing the Hermes-dashboard plugin-development pattern than as a meme tool itself.
Why this matters more than the memes
The article’s most useful payload is the plugin-development pattern it documents. The README essentially functions as a worked example of a Hermes Dashboard plugin — a primitive that the wiki had not previously captured. Plugin authors targeting the dashboard surface need:
- A plugin manifest pair —
manifest.jsonat the plugin root (declares tab route) +dashboard/manifest.json(declares entry points). - A FastAPI backend at
dashboard/plugin_api.py— exports a module-levelrouter = APIRouter()(noregister()function). Hermes auto-mounts at/api/plugins/<plugin-id>/.... Sibling-package imports require asys.pathinjection at the top of the file. - A frontend bundle at
dashboard/dist/index.js— hand-written vanilla JS, no build step. Uses Hermes-injected globalswindow.__HERMES_PLUGIN_SDK__(React + hooks + UI components) andwindow.__HERMES_PLUGINS__.register(name, component)for tab registration. Directfetchto API routes, no SDK wrapper. - Cross-tab events via
CustomEvent— Upload tab dispatcheswindow.dispatchEvent(new CustomEvent('memelord:upload')); Gallery tab listens and auto-refreshes. The patterns scales to any multi-tab plugin coordination. - Backend changes require a full dashboard restart — Python modules import once at server startup.
pkill -f "hermes dashboard"+hermes dashboard --tui --port 9119 &is the dev loop. - The companion skill — README references a
hermes-dashboard-plugin-developmentskill that documents the full pattern. This skill is the unindexed primary source for any future plugin author.
That ecosystem-surface revelation is the load-bearing contribution. The fact that you can ship memes through it is the demo.
Three Hermes dashboard surfaces — distinguish carefully
This article + the herm-tui (liftaris) article + the Hermes Console (Obsidian) article together reveal that Hermes now has three distinct dashboard surfaces (the bare CLI is a fourth surface, but not a dashboard):
| Surface | What it is | Plugin-able? | Where memelord lives |
|---|---|---|---|
Hermes CLI (hermes) | Bare REPL, conversation-shaped | No (skills + skill bundles only) | — |
Hermes built-in dashboard (hermes dashboard --tui --port 9119) | First-party plugin-able TUI dashboard | Yes — via FastAPI + React plugin pattern documented in this article | Here — installs to ~/.hermes/plugins/memelord/ |
| Herm-TUI (liftaris) | Community-built alternative TUI dashboard on OpenTUI | Not documented to be plugin-able the same way; tab inventory is fixed by Herm | Not supported |
| Hermes Console (dannyshmueli) | Obsidian-embedded PTY terminal hosting Hermes | The terminal hosts whichever Hermes runtime; the dashboard plugin would need to be activated inside it via hermes dashboard --tui --port 9119 | Indirect — runs inside Console’s PTY |
This three-surface clarification matters for any operator deciding where to invest customization energy. MemeLord’s pattern only works for surface #2.
Features (the actual meme bits)
| Tab | What it does |
|---|---|
| Gallery | Unified feed of generated + uploaded memes, sorted newest first, paginated |
| Generate | Template-driven creation with top/bottom text; live preview as you type |
| Discover | Browse Imgflip’s popular catalog, search by name, one-click import |
| Upload | Drag-and-drop custom images with tags + description |
| Settings | Humor profile — safe mode, blocked topics, template preferences |
| Templates | 11 built-in (Drake / Distracted Boyfriend / Two Buttons / Expanding Brain / Anakin & Padme / Change My Mind / This Is Fine / Always Has Been / Bernie Sanders / Epic Handshake / Running Away Balloon) |
KingPepe theme — exclusive PEPE-inspired aesthetic with deep backgrounds, vibrant green accents, Orbitron + Share Tech Mono typography, scanline overlay, clipped corners with glowing borders, PEPE hero/sidebar assets. Activate via Dashboard Settings → Appearance → KingPepe.
Install
cd ~/.hermes/plugins
git clone https://github.com/karmsheel/hermes-plugin-memelord.git memelord
pkill -f "hermes dashboard"
hermes dashboard --tui --port 9119 &Plugin appears at /plugins/memelord in the dashboard. Open http://127.0.0.1:9119/plugins/memelord in a browser, or navigate to the tab inside the TUI.
Key Takeaways
- The dashboard plugin-development surface is the real find. Hermes Agent supports a documented plugin pattern (FastAPI + React + hand-written vanilla JS bundle) that this article packages in a worked example. Future Hermes plugin authors should treat MemeLord’s repo as a template even if the topic (memes) is unrelated to theirs.
window.__HERMES_PLUGIN_SDK__is an injected global, not an npm package. The frontend doesn’t import React from npm — it consumes the Hermes-supplied React + hooks + UI primitives via a global injected by the dashboard. Build implication: plugin frontends are not standalone bundles — they require the host dashboard’s runtime. Worth checking the SDK’s documented surface before relying on a specific React/hooks version.- No build step is a deliberate choice. “The frontend is hand-written vanilla JS (no build step). Edit
dashboard/dist/index.jsdirectly.” The author validates syntax withnode --check, not a bundler. This sidesteps the entire JS-toolchain complexity (webpack/vite/rollup/esbuild) but caps frontend complexity at “what you can hand-write into one file.” - Sibling-import sys.path injection is the load-bearing Python pattern. Hermes loads
plugin_api.pyas a standalone module;from memelord.generate import …would fail without a sys.path injection at the top of the file. Plugin authors must replicate this pattern or their imports break silently. Worth surfacing as a generalizable Hermes plugin gotcha. - CustomEvent-based cross-tab refresh is a clean pattern. Upload tab fires
window.dispatchEvent(new CustomEvent('memelord:upload')); Gallery listens and refetches. Avoids global state library overhead. Translates directly to any multi-tab plugin (e.g., a Hermes cron-monitoring plugin would dispatchcron:updatedevents). - 15 endpoints + ~565 LOC backend is the size of a real plugin. Not a toy. POST /generate (template or prompt), POST /preview (live preview without persistence), GET/PATCH/DELETE /memes, POST /upload, GET /templates, GET /discover (Imgflip catalog with 1h cache), POST /import (Imgflip → local template), GET/POST /settings (humor profile). Plus thumbnail serving, profile read. Reference for any plugin’s CRUD-feature scope expectations.
- JSON-backed humor profile is the safety-gate primitive.
data/profile.jsonhassafe_modeboolean +blocked_topicsarray +humor_biasarray +auto_humor_thresholdfloat. Thesafety.pymodule gates generation against these. Pattern is reusable for any Hermes plugin that needs per-user opt-in/out config (compare against Hermes Security Model’s dangerous-command-approval list — same shape, applied to content rather than commands). - Imgflip catalog discovery is a useful third-party integration pattern. GET
/discover?q=<query>searches Imgflip’s catalog with a 1h server-side cache; POST/import/<imgflip_id>downloads and registers as a local template. The pattern (cached third-party catalog + local materialization) translates to any “discover-and-register” plugin — e.g., a Hermes-side artifact gallery, a community-skill marketplace. - Companion SKILL.md indicates agent-side use. The plugin ships a SKILL.md for agent use — meaning Hermes itself can invoke MemeLord’s API as a skill, not just users via the dashboard UI. “Sync repo SKILL.md with comprehensive agent skill (template catalog, caption writing guide, safety checks, UI patterns).” (from a 2026-05-20 commit message). Two-surface plugin model: human via dashboard, agent via skill.
- Self-aware safety model. README explicitly lists
blocked_topics: ["grief", "illness"]as a default. The author has thought about the failure mode where meme generation produces tasteless or harmful content. Worth flagging — the safety-gate plus user-customizable blocklist is a good template for any user-facing generative plugin. - Adoption is nominal. 1 star, 0 forks. The plugin is recent (2026-05-03 first commit) but the pattern it documents is the artifact worth keeping. Tier-1 refresh in 30 days; tier-2 if the author publishes a
hermes-dashboard-plugin-developmentskill that scales the pattern beyond this one demo.
Where this fits
| Surface | Description | Relationship |
|---|---|---|
| Hermes Agent landing | Public landing | MemeLord is a new plugin example added here |
| Herm-TUI (liftaris) | Community OpenTUI alternative dashboard | Different surface — memelord targets the first-party hermes dashboard --tui --port 9119, not herm-tui |
| Hermes Console (Obsidian) | PTY terminal in Obsidian | Composable — Console could host a hermes dashboard instance in one of its tabs |
| Hermes Skill Bundles | Slash-command skill composition | Sister surface — bundles + plugins are the two extensibility primitives for Hermes; bundles modify behavior, plugins add UI tabs + backend endpoints |
| Hermes MemoryKit (duclamvan) | Memory routing toolkit + Hermes plugin wrapper | Sister plugin example — uses the same FastAPI + sibling-import pattern but for memory routing instead of meme generation; another worked example of the dashboard-plugin pattern |
| Hermes Skins (joeynyc) | Visual themes for the CLI banner | Adjacent — both modify visual presentation; skins theme the CLI agent banner, MemeLord’s KingPepe themes the dashboard chrome |
| Hermes Security Model | Defense-in-depth platform security | Compositional analogy — MemeLord’s blocked-topics safety model mirrors the dangerous-command-approval pattern at the content layer |
| Claude AI topic | Adjacent Claude plugin patterns | Sister ecosystem — Hermes plugin pattern is not the same as Claude Code’s plugin pattern (different SDK, different runtime); but the operator mental model is analogous |
Try It
- Install and play: clone into
~/.hermes/plugins/memelord/, restarthermes dashboard --tui --port 9119, open the dashboard, navigate to/plugins/memelord, generate your first Drake meme. - For plugin authors: read
dashboard/plugin_api.pyas a template. Note the sys.path injection at top, the module-levelrouter = APIRouter()export, the FastAPI patterns. Copy the structure for your own plugin. - For frontend plugin authors: read
dashboard/dist/index.jsto see vanilla-JS React-against-injected-globals patterns. Note thewindow.__HERMES_PLUGINS__.register("memelord", MainComponent)call as the registration point. - Pair with the companion skill: if you’re building a Hermes agent that should be able to invoke this plugin’s API, install MemeLord’s SKILL.md alongside. Two-surface model: dashboard UI for humans + skill for the agent.
- For safety-conscious operators: edit
data/profile.jsonto setsafe_mode: trueand add topics toblocked_topics. The gate is enforced server-side at the generate endpoint, not client-side — defense-in-depth applies. - Discover Imgflip templates:
curl -s "http://127.0.0.1:9119/api/plugins/memelord/discover?q=drake" | jqshows what the discover endpoint returns. Useful for testing the Imgflip integration without the UI.
Related
- Hermes Agent — topic landing
- Herm-TUI (liftaris) — alternative dashboard; does not host the same plugin pattern as the first-party dashboard MemeLord targets
- Hermes Console (Obsidian) — PTY embedding; can host any Hermes runtime including dashboard
- Hermes Skill Bundles — sister extension primitive (behavior-side vs UI-side)
- Hermes MemoryKit (duclamvan) — sister Hermes-plugin example with the same Python sys.path + FastAPI pattern
- Hermes Skins (joeynyc) — adjacent visual customization at the CLI layer
- Hermes Security Model — analogous safety-gate pattern at the platform layer
- Hermes Codex App-Server Runtime — orthogonal runtime delegation
Open Questions
- Where does the
hermes-dashboard-plugin-developmentskill live? README references it as a “see the skill for full frontend/backend patterns” pointer but doesn’t link. If shipped via Hermes itself, it’s a high-value primary source. Tier-1 refresh priority. - What’s the upper limit of a “no build step” frontend? MemeLord’s
dashboard/dist/index.jsis hand-written vanilla JS. At what complexity does the no-build-step rule break down? Worth a stress test by looking at the LOC of the currentindex.js(not pulled in this ingest). - Plugin marketplace? Is there a community registry for Hermes dashboard plugins (analogous to Obsidian’s Community Plugins or Claude Code’s plugin marketplaces)? Or is “git clone into
~/.hermes/plugins/” the canonical install path forever? - Plugin sandboxing. Hermes plugins run with full FastAPI process access — they share the dashboard’s Python interpreter, environment, and filesystem. What’s the security model? Operator risk of installing untrusted plugins seems high. Pairs with Hermes Security Model’s broader defense-in-depth — worth checking if dashboard plugins go through the same dangerous-command-approval pipeline (probably not).
- The 19-commit-in-17-days velocity. Active development. The roadmap items (multi-panel templates, discover pagination, perceptual hash dedup, batch upload, etc.) are mostly checked. Plugin is maturing fast — worth a Tier-1 refresh in 30 days to capture v0.2.0+ features.
- License audit on Imgflip integration. The plugin downloads templates from Imgflip’s catalog. Imgflip’s ToS / API license / attribution requirements aren’t documented in the README. Worth verifying before publishing a deployed instance that exposes Imgflip templates publicly.