review-ui-leak-via-listeners

review-ui-leak-via-listeners is a skill for Claude Code, Codex from explyt/spring-plugin. It costs 99 tokens per session (3,469 once invoked), scanned A, original, Apache-2.0.

A code-review checklist for finding memory leaks caused when short-lived user-interface parts are kept alive by long-lived services or global objects. A memory leak occurs when unused objects cannot be cleared from memory.

In plain words
What is it for?
Use it when reviewing panels, settings screens, dialogs, wizard steps, and similar UI code. It checks listener bindings, observable properties, singleton references, and cleanup during disposal.
Why use it?
It helps detect UI components that remain in memory because listeners or global references still point to them after the UI is closed. This can cause memory use to grow over time.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: agent in frontmatter.

Good fit Use it when reviewing panels, settings screens, dialogs, wizard steps, and similar UI code. It checks listener bindings, observable properties, singleton references, and cleanup during disposal.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/explyt/spring-plugin/review-ui-leak-via-listeners
Install

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.

Any agent
npx skills add explyt/spring-plugin --skill review-ui-leak-via-listeners
Clone the repo
git clone --depth 1 https://github.com/explyt/spring-plugin

Made for: Claude Code, Codex.

Wrote 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.

agentmods badge for review-ui-leak-via-listeners

README.md
[![agentmods](https://agentmods.dev/badge/skills/explyt/spring-plugin/review-ui-leak-via-listeners/github.svg)](https://agentmods.dev/skills/explyt/spring-plugin/review-ui-leak-via-listeners)
Your own site
<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.

agentmods 80×15 button for review-ui-leak-via-listeners

Your own site · 80×15
<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>
Per session 99 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,469 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 11d ago against content hash 0f6a72bb1dce, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

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.

.explyt/skills/review-ui-leak-via-listeners/SKILL.md · 207 lines

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, G12 when 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).

Read the full file on GitHub · 207 lines

Changes

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.

  1. 11d ago First seen · 207 lines · 99 tokens per session scan A 0f6a72bb1dce

Subscribe to this mod's changes

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.

Related

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.

Atmosphere/atmosphere · 29 tokens

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…

giuseppe-trisciuoglio/developer-kit · 77 tokens

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…

giuseppe-trisciuoglio/developer-kit · 113 tokens

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…

giuseppe-trisciuoglio/developer-kit · 86 tokens

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…

giuseppe-trisciuoglio/developer-kit · 81 tokens

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…

giuseppe-trisciuoglio/developer-kit · 101 tokens