{"slug": "i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about", "title": "I built two small Claude Code plugins this week - here's what I learned about hooks", "summary": "A Citrix software engineer built two open-source plugins for Claude Code that hook into the AI assistant's lifecycle events to improve long agentic sessions. The earshot plugin narrates spoken summaries of agent responses, while waypoint injects a persistent goal reminder into every prompt. Both plugins are MIT-licensed and available on GitHub.", "body_md": "I use Claude Code daily as a Software Engineer at Citrix, and two small frictions kept showing up in long agentic sessions:\n\nClaude Code plugins can hook into lifecycle events (`Stop`\n\n, `Notification`\n\n, `UserPromptSubmit`\n\n, etc.) with a single command, so I built one plugin for each problem.\n\n[ earshot](https://github.com/absep98/earshot) hooks\n\n`Stop`\n\nand `Notification`\n\n. Instead of reading the agent's full response, it narrates a short spoken summary — and by default says That \"silent by default\" behavior wasn't my first instinct — it came from reading two peer-reviewed studies on blind and low-vision developers using AI coding tools. Both found the core problem was auditory overload, not silence. Developers already running a screen reader don't want a second voice narrating the same text.\n\n[ waypoint](https://github.com/absep98/waypoint) hooks\n\n`UserPromptSubmit`\n\n. You set a goal once:\n\n```\n/goal-set Fix the login bug on the checkout page\n```\n\nFrom then on, every prompt you send silently carries a one-line reminder of that goal as injected context — until you clear it with `/goal-done`\n\n. No manual re-explaining 40 messages into a session that's drifted.\n\n```\n$ /goal-status\nActive goal (set 2h 15m ago): Fix the login bug on the checkout page\n```\n\n`~/.claude/<plugin>/`\n\n,Both plugins are MIT-licensed and install in one command:\n\n```\n/plugin marketplace add absep98/earshot\n/plugin marketplace add absep98/waypoint\n```\n\nRepos: [github.com/absep98/earshot](https://github.com/absep98/earshot) · [github.com/absep98/waypoint](https://github.com/absep98/waypoint)\n\nHappy to answer questions about the hook lifecycle or plugin structure in the comments.", "url": "https://wpnews.pro/news/i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about", "canonical_source": "https://dev.to/abhishek_sharma_a9792aee8/i-built-two-small-claude-code-plugins-this-week-heres-what-i-learned-about-hooks-2f29", "published_at": "2026-08-17 08:01:47+00:00", "updated_at": "2026-08-17 08:12:11.164125+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-products"], "entities": ["Citrix", "Claude Code", "earshot", "waypoint", "absep98"], "alternates": {"html": "https://wpnews.pro/news/i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about", "markdown": "https://wpnews.pro/news/i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about.md", "text": "https://wpnews.pro/news/i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about.txt", "jsonld": "https://wpnews.pro/news/i-built-two-small-claude-code-plugins-this-week-here-s-what-i-learned-about.jsonld"}}