thunderbolt: Agent for Claude Code

.claude/agents/react-effect-reviewer.md

react-effect-reviewer is an agent for Claude Code from thunderbird/thunderbolt. It costs 81 tokens per session (743 once invoked), scanned A, original, MPL-2.0.

A read-only reviewer for changed React TypeScript files. React is a tool for building user interfaces, and useEffect is a feature for responding to changes or running side effects.

In plain words
What is it for?
Reviewing only changed .tsx and .ts files, identifying listed useEffect patterns, suggesting alternatives, and reporting a PASS or CONCERNS result.
Why use it?
It catches common uses of useEffect that can make code harder to understand or maintain, before a change is merged.

Agent for Claude Code

Written for Claude Code: installed under .claude/. Also seen: mentions CLAUDE.md.

This is thunderbird/thunderbolt's own configuration. It tells Claude Code how to work on thunderbolt itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything thunderbolt configures →

About the project

Thunderbolt is an open-source AI client that lets people connect their chosen models and run the client on their own infrastructure, including local or on-premises deployments. It is aimed at organizations and individuals who want to use different model providers while keeping control of their data.

thunderbird/thunderbolt · 4,816 stars · on GitHub · thunderbolt.io

Reuse

Borrowing it

Nothing to install: this file belongs to thunderbird/thunderbolt. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/thunderbird/thunderbolt/main/.claude/agents/react-effect-reviewer.md
Clone the repo
git clone --depth 1 https://github.com/thunderbird/thunderbolt

Made for: Claude Code.

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 react-effect-reviewer

README.md
[![agentmods](https://agentmods.dev/badge/agents/thunderbird/thunderbolt/react-effect-reviewer/github.svg)](https://agentmods.dev/agents/thunderbird/thunderbolt/react-effect-reviewer)
Your own site
<a href="https://agentmods.dev/agents/thunderbird/thunderbolt/react-effect-reviewer"><img src="https://agentmods.dev/badge/agents/thunderbird/thunderbolt/react-effect-reviewer/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 react-effect-reviewer

Your own site · 80×15
<a href="https://agentmods.dev/agents/thunderbird/thunderbolt/react-effect-reviewer"><img src="https://agentmods.dev/badge/agents/thunderbird/thunderbolt/react-effect-reviewer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 81 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 743 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.
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.00081 $0.00743
Opus 5.5 $0.00032 $0.00297
Sonnet 5.5 $0.00016 $0.00149
Haiku 4.5 $0.00008 $0.00074

Measured 21d ago against content hash c5ed9fb05a09, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

react-effect-reviewer 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 21d 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.

.claude/agents/react-effect-reviewer.md · 45 lines

How it starts

The opening of the file, as written. The whole thing — 45 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are a specialized reviewer enforcing the Thunderbolt project's React / useEffect discipline as defined in CLAUDE.md. Treat every useEffect in the diff as a code smell until proven necessary. Cross-reference https://react.dev/learn/you-might-not-need-an-effect.

Scope

  • Review ONLY .tsx/.ts React code changed in the PR. Use Read on the patch supplied by the dispatching skill, then Read/Grep/Glob for source context. Never flag pre-existing effects you didn't see change.
  • Report each finding as file:line + the anti-pattern name + the prescribed replacement. Severity: blocker (clear anti-pattern) / warning (likely) / note.
  • Read-only. Do NOT edit. End with a PASS/CONCERNS verdict.

Anti-patterns to flag (never use useEffect for these)

Smell in the diff Prescribed fix
Deriving state from props/state (setState in effect from props) Compute during render: const x = derive(props) or useMemo
Syncing a prop into state Use the prop directly, or a ref to detect prop changes during render
Notifying a parent of a state change Call the callback in the event handler that caused the change
Resetting state when a prop changes key prop on the component, or a useState lazy initializer
One-time init from already-available data useState(() => computeInitial())
Navigation side effect in an effect Return <Navigate replace /> in JSX
Assigning to a ref in an effect Assign ref.current directly in the render body

Prefer these hooks (suggest when applicable)

  • useSyncExternalStore — subscribing to external stores / browser APIs (matchMedia, addEventListener).
  • useEffectEvent — extract handler logic out of effects to kill stale closures + dependency bloat.
  • useOptimistic + useTransition — optimistic UI instead of useState + useEffect + useMutation.
  • useTransition — wrap async ops for automatic isPending instead of manual loading state.
  • useDeferredValue — defer expensive re-renders instead of timer-based debounce.

Read the full file on GitHub · 45 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. 21d ago Changed c5ed9fb05a09
  2. 2mo ago First seen · 45 lines · 81 tokens per session scan A 24fc6dc4c99a

Subscribe to this mod's changes

react-effect-reviewer is an agent published in the GitHub repository thunderbird/thunderbolt (4,816 stars, last pushed today), licensed MPL-2.0. It adds 81 tokens to every session and 743 once invoked, about $0.0003 per session on Opus 5.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 agents, from other repositories

architecture-guard

Audits PR diffs for architecture boundary violations, design simplicity, dependency drift, and established-pattern mismatches. Use during code review when architecture, layering, or framework conventions may be affected.

HoangNguyen0403/agent-skills-standard · 42 tokens

pr-reviewer

Summarizes GitHub PR, GitLab MR, or Azure DevOps PR metadata, review threads, changed files, and template completeness. Use during review-ticket or code-review workflows when PR/MR context exists.

HoangNguyen0403/agent-skills-standard · 47 tokens

test-gap-finder

Finds missing, weak, or stale test coverage in a diff. Use during review when production logic, user flows, error paths, or acceptance criteria changed.

HoangNguyen0403/agent-skills-standard · 37 tokens

check

Code quality auditor for the Trellis channel runtime. Reviews uncommitted diffs against task artifacts and specs, self-fixes issues, and reports verification results.

yuqie6/ProductFlow · 34 tokens

react-software-architect-review

Expert React software architect that provides frontend architecture, component design patterns, state management strategies, and performance optimization guidance. Reviews React codebases for architectural integrity, proper component composition, and best practices across React 19, Next.js, Remix, and modern frontend…

giuseppe-trisciuoglio/developer-kit · 79 tokens

code-reviewer

Reviews a change against this repository's layer, tenancy, security and testing contracts. Use proactively after completing a feature or before opening a pull request.

krivoox/agent-stack-template · 33 tokens