{
  "markdown": "# 🗣️ Yapper\n\n> *Why use few words when many words paint rich tapestry of meaning, context, and elaborated conceptual understanding?*\n\n**Yapper** is a plugin/skill system for AI coding agents that enforces maximum verbosity, exhaustive elaboration, as well as relentless expansion of every response to its fullest possible expression.\n\nSame answer. Significantly more words. Intentionally.\n\n*This project is inspired by @JuliusBrussee viral [Caveman](https://github.com/JuliusBrussee/caveman)* 🪨\n\n---\n\n## 🤔 Why Would You Want This?\n\nExcellent question. Allow us to elaborate at length.\n\nThere are many legitimate scenarios in which one might *require* - a response of substantially greater verbal length and explanatory depth than what a typical AI assistant might produce:\n\n- **Onboarding developers** who need full context, not just cold answers\n- **Writing documentation** that must explain *why*, not just *what*\n- **Teaching concepts** to non-experts who benefit from elaboration\n- **PR reviews** that actually explain the problem instead of just flagging it\n- **Commit messages** that future-you will thank present-you for this\n- **You just really like reading** or have too much API credits\n\n---\n\n## 📊 Before / After\n\n### Example 1: React Re-render Issue\n\n**Normal AI:**\n```\nYour issue here is that the inline object prop causes re-render. You will need to use useMemo.\n```\n\n**Yapper (Professor mode):**\n```\nThe issue you are encountering here is a well-known and frequently misunderstood \nbehavior in React's rendering system. When you pass an inline object literal as \na prop — for example, style={{ color: 'red' }} — React creates a brand new \nobject reference on every single render cycle. This is important because React \nuses shallow reference equality to determine whether props have changed. In other \nwords, even though the object's contents are identical, the reference itself is \nnew, and React therefore concludes the prop has changed and triggers a re-render \nof the child component.\n\nTo elaborate further, this behavior is not a bug — it is a direct consequence of \nhow JavaScript object identity works. Two object literals with identical contents \nare never strictly equal (({} === {}) evaluates to false).\n\nThe idiomatic solution in React is to memoize the object using the useMemo hook, \nwhich ensures the same object reference is returned across renders unless its \ndependencies change. This is important because it breaks the chain of unnecessary \nre-renders and can meaningfully improve performance in component trees with \nexpensive child renders.\n```\n\n---\n\n### Example 2: Git Commit Message\n\n**Normal:**\n```\nfix login bug\n```\n\n**Yapper (verbose-commit):**\n```\nfix(auth): resolve token expiry race condition causing silent login failures\n\nThis commit addresses a subtle but impactful race condition in the authentication\ntoken refresh logic that was causing users to be silently logged out under specific\ntiming conditions. The root cause was that the token expiry check was being\nperformed against a cached timestamp rather than the live token value, meaning\nthat in cases where the token was refreshed in a parallel request, the expiry\nguard would still evaluate against the old (expired) timestamp and trigger an\nunnecessary logout flow.\n\nThe fix replaces the cached timestamp lookup with a direct evaluation of the\ndecoded JWT expiry field on every auth check, ensuring consistency across\nconcurrent request scenarios. This change has no performance implications as\nJWT decoding is a synchronous O(1) operation.\n\nResolves: #412\nTested on: Chrome 124, Safari 17, Firefox 125\n```\n\n---\n\n## 🎚️ Modes\n\n| Mode | Icon | Verbosity | Tone | Best For |\n|------|------|-----------|------|----------|\n| `techbro` | 💼 | +50% | Startup-polished, KPI-aware | Synergising your verbal bandwidth |\n| `professor` | 🎓 | +150% | Clear, educational | Code review, explanations (default) |\n| `thesis` | 📚 | +300% | Academic, thorough | Documentation, deep dives |\n| `victorian` | 🏛️ | +500% | Formal, dramatic, archaic | We don't really know |\n\n### 💼 Tech Bro (Lite)\nResponses are expanded slightly, but every elaboration is framed in terms of scalability, impact, and velocity. Sentences are complete and optimised for stakeholder alignment. Abbreviations are spelled out so the whole team can action on the same learnings. A touch of startup polish is applied to every reply without overwhelming the reader's bandwidth with excessive elaboration.\n\n### 🎓 Professor (Default)\nThe default mode. Every concept is defined when first introduced. The whole reasoning process is shown, not just conclusions. Important points are restated in different wording to reinforce understanding. Transitions are used liberally. This is the mode that will actually make your responses better.\n\n### 📚 Thesis (Ultra)\nMaximum academic verbosity. Step-by-step reasoning. Examples and analogies for every concept. If the subject is complex, citations enter the chat. Each conclusion is reached through a visible chain of logic.\n\n### 🏛️ Victorian Ultra\nForsooth, this mode doth render every humble technical utterance into a grand soliloquy of extraordinary formal construction, wherein even the most trifling of boolean comparisons is accorded the grave ceremonial weight it so richly deserves. \n\n---\n\n## ⚡ Installation\n\n| Agent | Command |\n|-------|---------|\n| **Claude Code** | `claude plugin marketplace add dzan314/yapper && claude plugin install yapper@yapper` |\n| **Gemini CLI** | `gemini extensions install https://github.com/dzan314/yapper` |\n\n\n---\n\n## 🗂️ Commands\n\n| Command | Description |\n|---------|-------------|\n| `/yapper` | Activate Yapper in Professor mode (default) |\n| `/yapper techbro` | Activate Tech Bro mode |\n| `/yapper thesis` | Activate Thesis mode |\n| `/yapper victorian` | Activate Victorian Ultra mode |\n| `stop yapping` | Deactivate and return to normal brevity |\n| `/yapper-commit` | Generate a verbose, fully-explained commit message |\n| `/yapper-review` | Perform a thorough multi-line PR review |\n| `/yapper-help` | Display full documentation |\n| `/yapper-expand` | Expand prose in a file (preserves code, URLs, paths) |\n\n---\n\n## 📐 Features\n\n| Feature | Status |\n|---------|--------|\n| Automatic verbosity expansion | ✅ |\n| Concept definition on first mention | ✅ |\n| Controlled redundancy (restates conclusions) | ✅ |\n| Transition phrases | ✅ |\n| Mode persistence across session | ✅ |\n| Code block preservation in expand mode | ✅ |\n| URL / filepath preservation | ✅ |\n| Verbose commit messages | ✅ |\n| Multi-line PR reviews with full reasoning | ✅ |\n| Zero technical accuracy loss | ✅ |\n| Auto-activation via session hook | ✅ |\n| Multi-agent support | ✅ |\n\n---\n\n## Metrics\n\nThe metrics are as follows:\n\n| Metric | Explanation |\n|--------|-------------|\n| Expansion | ratio word count vs. baseline (raw Claude with no system prompt) |\n| Accuracy | checks that key technical terms are present in the response (e.g. useMemo, reference, equality for the React question) |\n| Latency | avg response time per mode |\n\n**Running**\n\nFirst:\n```\ncd evals\nnpm install\n```\n\nAfterwards:\n| Command | Description |\n| --------|--------------|\n| ```ANTHROPIC_API_KEY=<your_key> npm run eval``` | full eval, all modes |\n| ```ANTHROPIC_API_KEY=<your_key> npm run eval:quick``` | 2 prompts only, fast(er) |\n| ```ANTHROPIC_API_KEY=<your_key> npm run eval:professor``` | single mode |\n| ```ANTHROPIC_API_KEY=<your_key> npm run eval:json``` | machine-readable output |\n\n\n## 🗺️ Repository Structure\n\n```\n/plugins/yapper/SKILL.md      ← Codex plugin entry point\n/skills/yapper.skill           ← Core system prompt\n/commands/yapper.md            ← /yapper command\n/commands/yapper-review.md     ← /yapper-review command\n/commands/yapper-commit.md     ← /yapper-commit command\n/commands/yapper-help.md       ← /yapper-help command\n/hooks/session_start.md        ← Auto-activation hook\n/.claude-plugin                ← Claude plugin config\n/gemini-extension.json         ← Gemini CLI config\n/evals/                        ← Evaluation and its methodology\n/docs/                         ← Extended documentation\n```\n\n---\n\n## 🧠 Philosophy\n\nMost AI tools optimise for brevity. Fewer tokens. Faster answers. Shorter everything.\n\nYapper takes the opposite position: that many questions, concepts, pull requests, and code reviews are being systematically under-explained, and that the developer reading the response would benefit enormously from a little more context, a restatement of the conclusion, and an explanation of *why* — not just *what*.\n\nIn other words: your future self (or your coworkers), reading a commit message at 11pm six months from now, deserves better than `fix bug`.\n\n****NOTE**: The use of energy and water by LLMs has a signifcant environmental and societal impact. This project does not encourage wasting precious resources.**\n\n---\n\n## 📄 License\n\nMIT. Use it. Expand upon it. Explain it at length to your colleagues.\n",
  "bytes": 8948,
  "sha": "374002a51d234d34a2369378dc44da2b593e9931842764e57035c3a13a5b8e42",
  "repo_slug": "dzan314/yapper",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_dzan314_yapper_9e994061/readme"
}