Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add explyt/spring-plugin --skill review-ui-leak-via-listenersgit clone --depth 1 https://github.com/explyt/spring-pluginWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/explyt/spring-plugin/review-ui-leak-via-listeners)<a href="https://agentmods.dev/skills/explyt/spring-plugin/review-ui-leak-via-listeners"><img src="https://agentmods.dev/badge/skills/explyt/spring-plugin/review-ui-leak-via-listeners/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/explyt/spring-plugin/review-ui-leak-via-listeners"><img src="https://agentmods.dev/badge/skills/explyt/spring-plugin/review-ui-leak-via-listeners.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00099 | $0.03469 |
| Opus 5 | $0.00049 | $0.01734 |
| Sonnet 5 | $0.00020 | $0.00694 |
| Haiku 4.5 | $0.00010 | $0.00347 |
Grade A, and why
review-ui-leak-via-listeners scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 207 lines — stays where its author put it; the contents beside it link to each section on GitHub.
UI lifetime vs long-lived listeners reviewer
You are a specialized reviewer for one class of memory leaks: UI components and view objects that outlive their logical lifetime because a listener in a long-lived source retains them (APP/Project @Service, top-level object, companion object, static/global state).
This is a normative skill. It does not replace review-async-lifecycle (which covers MessageBus, scope ownership, and disposal hygiene broadly); this skill is narrowly focused on listener leaks through ObservableProperty/ObservableMutableProperty, transformed/composite properties, Kotlin UI DSL bindings, and singleton holder objects.
Typical UI surfaces in explyt/spring-plugin: the Explyt Spring Boot tool-window panel, the Endpoints tool window, floating toolbar buttons, settings pages (Configurables such as SpringToolRunConfigurationConfigurable), the Spring Initializr wizard steps, and popups/dialogs opened from gutter actions.
Owned checklist IDs
Use and reference these checklist IDs when applicable:
LEAK1,LEAK2,LEAK3,LEAK4,LEAK5,LEAK6,LEAK7,LEAK8- also reference
H47,G1,G12when a leak fundamentally breaks correctness or resilience
Checklist definitions
| ID | Rule |
|---|---|
LEAK1 |
Subscription to an ObservableProperty of an APP-level @Service(Service.Level.APP) without parentDisposable, where the lambda captures UI/view. |
LEAK2 |
Subscription to an ObservableProperty of a Project-level @Service(Service.Level.PROJECT) without parentDisposable, where the lambda captures UI/view. |
LEAK3 |
Subscription to a composite/transformed property (transform, .and, .or, .not) whose roots are in APP/Project @Service or a top-level object, without parentDisposable. |
LEAK4 |
IntelliJ UI DSL binding (Cell.visibleIf / enabledIf / bindText / bindIntText / bindSelected, one-argument JComponent.bindEnabled / bindVisible) on a long-lived property without a disposable-aware alternative. |
LEAK5 |
ObservableProperty.afterChange { } without parentDisposable, while the source property outlives the objects captured in the lambda. |
LEAK6 |
Singleton/object holder (var holder: T? in an object/companion object, register-style setters) stores a strong reference without WeakReference and without a paired unbind*/clear. |
LEAK7 |
parentDisposable is one level above the actual lifetime of the UI component (tool-window-level instead of panel/row-level) — listeners accumulate on every re-render. |
LEAK8 |
Listener is tied to scope.asDisposable(), but the scope is not actually cancelled when the view/dialog/panel closes (or the cancel is not proven). |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 207 lines · 99 tokens per session scan A 0f6a72bb1dce
review-ui-leak-via-listeners is a skill published in the GitHub repository explyt/spring-plugin (160 stars, last pushed today), licensed Apache-2.0. It adds 99 tokens to every session and 3,469 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
ai-assistant
Streaming chat assistant with conversation memory. Use as a general-purpose assistant for multi-turn conversations where streaming output and context retention matter.
learn
Provides autonomous project pattern learning by analyzing the codebase to discover development conventions, architectural patterns, and coding standards, then generates project rule files in .claude/rules/. Use when user asks to "learn from project", "extract project rules", "analyze codebase conventions", "discover…
memory-md-management
Provides comprehensive memory file management capabilities including auditing, quality assessment, and targeted improvements for files such as CLAUDE.md. Use when user asks to check, audit, update, improve, fix, maintain, or validate project memory files. Also triggers for "project memory optimization", "CLAUDE.md…
nextjs-code-review
Provides comprehensive code review capability for Next.js applications, validates Server Components, Client Components, Server Actions, caching strategies, metadata, API routes, middleware, and performance patterns. Use when reviewing Next.js App Router code changes, before merging pull requests, after implementing…
react-code-review
Provides comprehensive code review capability for React applications, validates component architecture, hooks usage, React 19 patterns, state management, performance optimization, accessibility compliance, and TypeScript integration. Use when reviewing React code changes, before merging pull requests, after…
pr-review-comments
Posts review findings from a JSON file as inline comments on a GitHub Pull Request, attaching each comment to its file and line. Use when you have a list/JSON of review findings (each with a file path, line number, and a message such as summary/failurescenario) and want them published on a PR as inline review…