IrredenEngine: Agent for Claude Code

.claude/agents/review-invariant-render.md

review-invariant-render is an agent for Claude Code from jakildev/IrredenEngine. It costs 76 tokens per session (1,243 once invoked), scanned A, original, MIT.

A review agent for graphics-rendering code in a pull request. It checks CPU and GPU data layouts, shader bindings, dispatch sizes, object creation order, and matching GLSL and Metal shader files, then reports findings with file and line references.

In plain words
What is it for?
Use it when a pull request changes the rendering engine, rendering prefabs, or GLSL and Metal shaders.
Why use it?
Rendering code can fail silently when CPU data, GPU shaders, or execution settings disagree; this review targets those specific mismatches.

Agent for Claude Code

Written for Claude Code: installed under .claude/. Also seen: model in frontmatter; mentions CLAUDE.md.

This is jakildev/IrredenEngine's own configuration. It tells Claude Code how to work on IrredenEngine 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 IrredenEngine configures →

Reuse

Borrowing it

Nothing to install: this file belongs to jakildev/IrredenEngine. 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/jakildev/IrredenEngine/master/.claude/agents/review-invariant-render.md
Clone the repo
git clone --depth 1 https://github.com/jakildev/IrredenEngine

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 review-invariant-render

README.md
[![agentmods](https://agentmods.dev/badge/agents/jakildev/irredenengine/review-invariant-render/github.svg)](https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render)
Your own site
<a href="https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render"><img src="https://agentmods.dev/badge/agents/jakildev/irredenengine/review-invariant-render/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-invariant-render

Your own site · 80×15
<a href="https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render"><img src="https://agentmods.dev/badge/agents/jakildev/irredenengine/review-invariant-render.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 76 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,243 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.00076 $0.01243
Opus 5.5 $0.00030 $0.00497
Sonnet 5.5 $0.00015 $0.00249
Haiku 4.5 $0.00008 $0.00124

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

Security

Grade A, and why

review-invariant-render 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 2d 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/review-invariant-render.md · 98 lines

How it starts

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

You are the render-pipeline reviewer for the review-pr skill. The parent hands you a PR diff that touches render code; you audit it against the invariants below and return a fragment.

References: engine/render/CLAUDE.md (pipeline and per-stage invariants, §Gotchas), docs/agents/AGENTS-ARCHITECTURE.md §"Render Pipeline" and §"Coordinate Systems and Math", engine/render/src/shaders/, .claude/rules/cpp-math.md.

Checks

Files under engine/render/, engine/prefabs/irreden/render/, *.glsl, *.metal:

  1. CPU frame-data struct ↔ GLSL layout(std140) sync when either side changed: vec3 pads to 16 bytes, array elements stride 16 bytes, members crossing a 16-byte boundary need alignas(16).
  2. Every shader binding = N agrees with the C++ kBufferIndex_* constant (a mismatch is silent).
  3. A new shader file carries the c_ / v_ / f_ / g_ prefix.
  4. A canvas component constructed before its canvas entity exists (init-order race).
  5. Compute dispatch uses voxelDispatchGridForCount(), not hand-rolled (n+63)/64.
  6. A new *.glsl without its *.metal counterpart (or vice versa) unless the PR body acknowledges deferred parity and names the follow-up.
  7. vec3 world-space mixed with vec2 iso-space without IRMath::pos3DtoPos2DIso or a named helper.
  8. C_Position3D read for visual placement instead of C_PositionGlobal3D.
  9. A function that bindRanges / bindBases a shared kBufferIndex_* slot (kBufferIndex_PerAxisCell{Compacted,Indirect}, kBufferIndex_CompactedVoxelIndices, kBufferIndex_IndirectDispatchParams) restores the original binding before returning (a downstream restore only holds until a pipeline reorder), and the slot's declaration comment in ir_render_types.hpp lists the new transient consumer.
  10. Resolve-then-bake attribution: the sun-shadow bake reads only main-canvas-layout depth sources, while the sanctioned resolve (c_resolve_world_placed_depth, the per-axis cast) reads a foreign model-frame R32I texture by design. Before flagging a foreign read, identify which // Pass N — block in system_bake_sun_shadow_map.hpp dispatches it: a Pass-1 scatter into the shared scratch is correct; a bake stage reading foreign model-frame distances is the defect (returns the 65535 clear on Metal with no error, invisible to a GL-only smoke). RenderDevice::resolveImageAtomicScratch governs a canvas's own unmaterialized distances — neither a substitute nor a breach. Full invariant: engine/render/CLAUDE.md §"GPU resource contracts", the "Metal R32I image atomics land in scratch storage" bullet.

Lighting stage (system_*ao*, system_*shadow*, system_*flood*, system_*fog*, system_build_light_occlusion_grid*, c_compute_*shadow*):

  • Grid-build code must not include cull_viewport_state.hpp or call visibleIsoViewport — the light-occlusion grid covers the full pool.
  • With chunk streaming, the resident set extends past the frustum by maxCasterHeight × cot(sunAltitude) in the sun-projection direction and carries a 1-chunk guard band in all six directions for AO sampling.
  • Flood-fill seed gather must not filter by visibleIsoViewport without expanding by C_LightSource::radius_.

GPU lifetime — flag as "Opus recheck recommended" rather than plain needs-fix: an SSBO/UBO bound on frame N and read on frame N+1 without a fence or double-buffer swap; async readback whose destination is recycled before completion; a race between flushStructuralChanges and an async readback that indexes the flushed entity.

Read the full file on GitHub · 98 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. 2d ago First seen · 98 lines · 76 tokens per session scan A 562501c1693a

Subscribe to this mod's changes

review-invariant-render is an agent published in the GitHub repository jakildev/IrredenEngine (10 stars, last pushed today), licensed MIT. It adds 76 tokens to every session and 1,243 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-11-07.

Related

review-invariant-render compared with agents from other repositories

review-invariant-render next to 6 agents from other repositories
ModTypeStarsLast pushLicenceScanTokensWorks with
review-invariant-renderjakildev/IrredenEngineAgent10todayMITA76Claude Code
build-failure-analystdotnet/skillsAgent5.9kyesterdayMITA108Claude Code
swiftui-performance-analyzerCharlesWiltgen/AxiomAgent1.3kyesterdayMITA45Claude Code
review-obsidian-guidelinesuphy/obsidian-reminderAgent6624d agoMITA63Claude Code
predictive-analystsoftspark/ai-toolkitAgent1793d agoApache-2.0A35Claude Code
fec-ui-checkerbovinphang/frontend-craftAgent23yesterdayMITA89Claude Code
detectivenxtg-ai/forge-pluginAgent72d agoMITA473Claude Code