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:

  1. A plugin manifest pairmanifest.json at the plugin root (declares tab route) + dashboard/manifest.json (declares entry points).
  2. A FastAPI backend at dashboard/plugin_api.py — exports a module-level router = APIRouter() (no register() function). Hermes auto-mounts at /api/plugins/<plugin-id>/.... Sibling-package imports require a sys.path injection at the top of the file.
  3. A frontend bundle at dashboard/dist/index.js — hand-written vanilla JS, no build step. Uses Hermes-injected globals window.__HERMES_PLUGIN_SDK__ (React + hooks + UI components) and window.__HERMES_PLUGINS__.register(name, component) for tab registration. Direct fetch to API routes, no SDK wrapper.
  4. Cross-tab events via CustomEvent — Upload tab dispatches window.dispatchEvent(new CustomEvent('memelord:upload')); Gallery tab listens and auto-refreshes. The patterns scales to any multi-tab plugin coordination.
  5. 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.
  6. The companion skill — README references a hermes-dashboard-plugin-development skill 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):

SurfaceWhat it isPlugin-able?Where memelord lives
Hermes CLI (hermes)Bare REPL, conversation-shapedNo (skills + skill bundles only)
Hermes built-in dashboard (hermes dashboard --tui --port 9119)First-party plugin-able TUI dashboardYes — via FastAPI + React plugin pattern documented in this articleHere — installs to ~/.hermes/plugins/memelord/
Herm-TUI (liftaris)Community-built alternative TUI dashboard on OpenTUINot documented to be plugin-able the same way; tab inventory is fixed by HermNot supported
Hermes Console (dannyshmueli)Obsidian-embedded PTY terminal hosting HermesThe terminal hosts whichever Hermes runtime; the dashboard plugin would need to be activated inside it via hermes dashboard --tui --port 9119Indirect — 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)

TabWhat it does
GalleryUnified feed of generated + uploaded memes, sorted newest first, paginated
GenerateTemplate-driven creation with top/bottom text; live preview as you type
DiscoverBrowse Imgflip’s popular catalog, search by name, one-click import
UploadDrag-and-drop custom images with tags + description
SettingsHumor profile — safe mode, blocked topics, template preferences
Templates11 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.js directly.” The author validates syntax with node --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.py as 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 dispatch cron:updated events).
  • 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.json has safe_mode boolean + blocked_topics array + humor_bias array + auto_humor_threshold float. The safety.py module 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-development skill that scales the pattern beyond this one demo.

Where this fits

SurfaceDescriptionRelationship
Hermes Agent landingPublic landingMemeLord is a new plugin example added here
Herm-TUI (liftaris)Community OpenTUI alternative dashboardDifferent surface — memelord targets the first-party hermes dashboard --tui --port 9119, not herm-tui
Hermes Console (Obsidian)PTY terminal in ObsidianComposable — Console could host a hermes dashboard instance in one of its tabs
Hermes Skill BundlesSlash-command skill compositionSister 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 wrapperSister 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 bannerAdjacent — both modify visual presentation; skins theme the CLI agent banner, MemeLord’s KingPepe themes the dashboard chrome
Hermes Security ModelDefense-in-depth platform securityCompositional analogy — MemeLord’s blocked-topics safety model mirrors the dangerous-command-approval pattern at the content layer
Claude AI topicAdjacent Claude plugin patternsSister 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

  1. Install and play: clone into ~/.hermes/plugins/memelord/, restart hermes dashboard --tui --port 9119, open the dashboard, navigate to /plugins/memelord, generate your first Drake meme.
  2. For plugin authors: read dashboard/plugin_api.py as a template. Note the sys.path injection at top, the module-level router = APIRouter() export, the FastAPI patterns. Copy the structure for your own plugin.
  3. For frontend plugin authors: read dashboard/dist/index.js to see vanilla-JS React-against-injected-globals patterns. Note the window.__HERMES_PLUGINS__.register("memelord", MainComponent) call as the registration point.
  4. 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.
  5. For safety-conscious operators: edit data/profile.json to set safe_mode: true and add topics to blocked_topics. The gate is enforced server-side at the generate endpoint, not client-side — defense-in-depth applies.
  6. Discover Imgflip templates: curl -s "http://127.0.0.1:9119/api/plugins/memelord/discover?q=drake" | jq shows what the discover endpoint returns. Useful for testing the Imgflip integration without the UI.

Open Questions

  • Where does the hermes-dashboard-plugin-development skill 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.js is 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 current index.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.