What problem does it solve? Hermes Agent plugins fail silently when packaged wrong: flat .py files are invisible to the loader, hooks never fire without plugins.enabled opt-in, and payload keys differ between plugin and shell-hook surfaces. This Skill encodes the verified plugin ABI so hooks actually load and fire. ## Core Features & Use Cases - Directory plugin packaging: Enforces the plugin.yaml + init.py with register(ctx) shape, the VALID_HOOKS list, per-hook payload keys, and the plugins.enabled opt-in requirement. - Memory provider plugins: Covers the MemoryProvider ABC (4 abstract members plus ~14 optional hooks), threading and lifecycle contracts, config schema surface, and the MCP-bridge shim pattern for server-backed memory. - Empirical verification: Provides a checklist (pycache, agent.log, live side-effect probes) to prove a plugin actually loaded instead of inferring from file contents. - Use Case: Your post_tool_call hook never fires after copying a .py file into ~/.hermes/plugins/. Use this Skill to repackage it as a directory plugin, enable it, and verify with a fresh one-shot session probe. ## Quick Start Help me write a Hermes plugin that registers a post_tool_call hook and verify it actually loads in a fresh session.