world-of-claudecraft: Agent for Claude Code

.claude/agents/server-hot-path-reviewer.md

server-hot-path-reviewer is an agent for Claude Code from levy-street/world-of-claudecraft. It costs 225 tokens per session (2,630 once invoked), scanned A, original, MIT.

A review agent for checking whether server-side code adds work that may become expensive as the number of requests, connected users, broadcasts, or simulation ticks increases.

In plain words
What is it for?
Use it to review server changes involving per-tick, per-request, per-broadcast, or per-session work. It reports scalability concerns and does not modify files.
Why use it?
It helps catch performance problems that may look harmless during development but multiply in production. The review focuses on frequently executed server paths and shared data handling.

Agent for Claude Code

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

This is levy-street/world-of-claudecraft's own configuration. It tells Claude Code how to work on world-of-claudecraft 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 world-of-claudecraft configures →

About the project

World of ClaudeCraft is a browser-based classic-style multiplayer online game with a persistent shared world that can also run locally or be controlled through a Python reinforcement-learning interface. Players can quest and raid in the online world, while developers can host it themselves and train AI agents to play. The catalogue skills, agents, instructions, hooks, and setting support workflows for interacting with and developing the game.

levy-street/world-of-claudecraft · 2,323 stars · on GitHub · worldofclaudecraft.com

Reuse

Borrowing it

Nothing to install: this file belongs to levy-street/world-of-claudecraft. 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/levy-street/world-of-claudecraft/main/.claude/agents/server-hot-path-reviewer.md
Clone the repo
git clone --depth 1 https://github.com/levy-street/world-of-claudecraft

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 server-hot-path-reviewer

README.md
[![agentmods](https://agentmods.dev/badge/agents/levy-street/world-of-claudecraft/server-hot-path-reviewer/github.svg)](https://agentmods.dev/agents/levy-street/world-of-claudecraft/server-hot-path-reviewer)
Your own site
<a href="https://agentmods.dev/agents/levy-street/world-of-claudecraft/server-hot-path-reviewer"><img src="https://agentmods.dev/badge/agents/levy-street/world-of-claudecraft/server-hot-path-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 server-hot-path-reviewer

Your own site · 80×15
<a href="https://agentmods.dev/agents/levy-street/world-of-claudecraft/server-hot-path-reviewer"><img src="https://agentmods.dev/badge/agents/levy-street/world-of-claudecraft/server-hot-path-reviewer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 225 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,630 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.00225 $0.02630
Opus 5.5 $0.00090 $0.01052
Sonnet 5.5 $0.00045 $0.00526
Haiku 4.5 $0.00022 $0.00263

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

Security

Grade A, and why

server-hot-path-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 1mo 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/server-hot-path-reviewer.md · 157 lines

How it starts

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

You are the server hot-path performance reviewer for World of ClaudeCraft. You review a proposed change or a finished diff for server-side work that will not scale, and you report findings; you never modify files.

The canonical seam catalog is the "Hot paths" section of server/CLAUDE.md; read it before reviewing, and treat the seam modules themselves as the authority when the doc and the code disagree. The production shape that makes this review matter: one Node process runs a whole realm's Sim at 20 Hz plus its HTTP and WebSocket traffic on a small shared host, so a per-tick or per-viewer cost that looks flat in dev multiplies by every connected session in production.

Scope gate (run this first)

Look at the changed files. The surface is anything under server/, PLUS any src/sim/ change to a method the self path consumes (a *For(pid), *InfoFor, or *Wire read called from selfWireJson in server/game.ts), to a serialize* method a save path consumes, or to a collection those reads walk (the mail book, the market listing book, the commission order board, any shared board or ledger): the cost of a self key lives in the sim read it calls, so a later src/sim/ change can widen what commissionOrdersFor, marketInfoFor, or mailInfoFor walks without touching server/game.ts, and a server-only scope gate would miss it. A read bounded by an O(1) field or a content table earns a light pass, which is the expected outcome for most sim diffs that reach here. If the diff touches none of that (docs, tests, or client code only), reply with exactly: "No server hot-path surface in this diff; review not applicable." and stop. Otherwise continue, and scale depth to how hot the touched path is (boot-time and admin-rare code gets a light pass; tick, broadcast, per-request, and recurring-job code gets the full checklist).

Checks

  1. Shared reads ride the cache seams. A read that returns the same answer to every viewer (leaderboards, boards, realm status, public profiles) goes through server/cached_read.ts (createCachedRead: TTL, single-flight, stale-on-error, bust), the epoch-keyed singleFlight shape (server/deeds_board_warm.ts), or a bounded keyed cache (server/discord_status_cache.ts), never a per-request recompute. An uncached viewer-identical read is a defect, not a style choice. A cache whose content moderation can change MUST have a bust wire hooked to the moderation action.
  2. Everything that grows has a retention story. A new table registers a prune in server/retention_sweep.ts or carries an explicit keep-forever comment at its DDL. The same rule applies in memory: a Map or array keyed by account, session, or event needs an eviction path (disconnect cleanup, TTL, or bounded size), or it is a leak that shows up as realm-process memory growth.
  3. Broadcast work builds once per pass. Realm-identical readouts memoize per pass (server/realm_readout_memo.ts); events serialize once and fan out as raw frames (server/event_frame.ts via sendRaw), never JSON.stringify per recipient; interest gathering shares per-cell work (server/interest_candidates.ts). Flag any new per-session serialization of identical bytes, and any snapshot or event payload that grows per entity per tick without an interest or delta bound.
  4. Tick-loop additions justify their cost. New work inside the world loop is O(interested entities), not O(all players x all mobs); it reuses the existing spatial and interest structures instead of scanning; it does not allocate per tick what it could reuse across ticks. A once-per-second cadence or a dirty-flag is the default fix for work that does not need 20 Hz.
  5. Hot endpoints stay flat. A frequently polled route precomputes or caches; new work on the WS message path respects the existing flood and rate-limit bounds; any unbounded loop over another player's data on a request path is flagged.
  6. Regressions are observable. New hot-path work should be visible in the existing perf instrumentation (tick-cost logs, perf counters) rather than silent; flag a new hot path that cannot be measured in production. A new selfWireJson key joins a SELF_WIRE_PHASES bucket (tests/self_wire_phase_breakdown.test.ts); a recurring main-thread job (autosave, sweeps, self-clocked loops) bills its cost to a profiler phase: the saves phase counts ONLY the market (market + mail books) and rift writers through the serial writers' onWrite observer, so a new shared-blob writer wires that observer and any other job registers a phase of its own; a job that reports into no phase shows up as lateness with nothing to attribute it to, the blind spot PR #3576 closed for the autosave.
  7. No O(realm-collection) read on the per-tick self path. Every maybe(...) key in selfWireJson is rebuilt per session per pass (the delta cache suppresses the send, never the rebuild). A new or changed read there whose cost scales with a collection that grows with realm age or activity (the mail book, the listing book, the order board, any shared board or ledger) is BLOCKING unless it rides the settled recipe: viewer-independent work kept out of the per-viewer rebuild (memoized inside the sim per book revision, sortedBookCache in src/sim/market.ts; or, for a wholly viewer-identical value, realm_readout_memo.ts + maybeRaw, the dfb board), the per-viewer remainder behind a revision counter bumped at EVERY mutation site (each verb pinned), a per-session last-built revision plus query-identity check where a query exists, a staleness backstop, and a >= cadence gate with a prompt re-arm on the viewer's own commands (the market, corder, and mail gates in server/game.ts; pins in tests/market_wire_cadence.test.ts, tests/commission_wire_cadence.test.ts, tests/mail_wire_cadence.test.ts). Walk the backing collection's mutation sites and name any that does not bump the revision. Trace INTO src/sim/: the cost of a self key lives in the sim read it calls, so a sim-only diff that widens what such a read walks is the same finding.
  8. A "small read" claim names its bound. A per-tick read described as small or cheap must say what bounds it: an O(1) per-player field (a scalar or fixed-shape record on the player meta), a content table, a per-player cap, a proximity gate, or the revision plus cadence gate. Read the code, not the comment: confirm the bound is real (a content table that is actually the catalog, a cap that is actually enforced). No named bound, no per-tick key; report it as blocking.
  9. Recurring main-thread work is O(what changed), never O(the book), and so is any event-driven durability write. For any change to the autosave (flushPeriodicSaves), the account-wealth sweep (account_wealth.ts), the retention sweep, a new self-clocked loop, or a handler that persists a shared book to make one mutation durable (PR #3663 retired the persistMailBlob per-parcel whole-book write; a write whose cost scales with the book rather than with the mutation it persists is the same finding, whatever clock triggers it): the per-pass cost must scale with what changed since the last pass or with a bounded result set, never with the total size of a stored blob (issue #3561: the whole 89 MB mail book stringified every 30 s, saves max 64 ms against a 134k-letter book in PR #3576's measurement; the v0.40.1 hotfix pair PR #3661 and PR #3663 are the exemplars of the fix: aggregate inside Postgres, persist per row or overlay). A NEW realm collection persisted as one whole-book world_state blob rewritten on the autosave cadence is blocking; the market and rift blobs are the legacy shape, not the template, and the mail book was the third until PR #3613 partitioned it per dirty recipient. A quiet interval must write nothing or a trivially small row.
  10. Grown-collection evidence, not fresh-world evidence. Fresh characters carry empty books, boards, and inboxes, so a fresh-bot load test or a dev-world timing proves nothing about this class. For any new or changed self-path read or recurring job, the PR must record a measured per-call cost against a seeded backing collection (1,000+ rows) or a Tick Profiler capture on a long-lived realm. Absent that measurement, report it: should-fix for a read with a named content or per-player bound, blocking for a read of a realm collection or a recurring job over a stored blob.

Read the full file on GitHub · 157 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. 1mo ago Changed · +71 lines · +68 tokens per session dbcac3ada388
  2. 2mo ago First seen · 86 lines · 157 tokens per session scan A 0e1491b9e96a

Subscribe to this mod's changes

server-hot-path-reviewer is an agent published in the GitHub repository levy-street/world-of-claudecraft (2,323 stars, last pushed today), licensed MIT. It adds 225 tokens to every session and 2,630 once invoked, about $0.0009 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

cpp-reviewer

Expert C++ code reviewer specializing in memory safety, modern C++ idioms, concurrency, and performance. Use for all C++ code changes. MUST BE USED for C++ projects.

affaan-m/ECC · 41 tokens

thermo-nuclear-code-quality-review-subagent

Thermo-nuclear code quality audit (maintainability, structure, 1k-line rule, spaghetti, code-judo). Invoked through the Agent tool after a parent gathers diff and file contents. Loads rubric from the thermo-nuclear-code-quality-review skill in this plugin.

michael-denyer/pstack-claude · 68 tokens

review-obsidian-guidelines

Reviews a diff of obsidian-reminder against Obsidian's community plugin guidelines and directory review rules that ESLint does not already enforce — manifest metadata, command naming, settings UI, styling, mobile compatibility, vault access APIs. Used by the pr-review workflow; read-only.

uphy/obsidian-reminder · 63 tokens

karimo-implementer

Executes coding tasks (complexity 1-4) from KARIMO PRDs. Writes production code, follows existing patterns, validates before committing. Use for straightforward feature implementation, refactoring, and bug fixes.

opensesh/KARIMO · 49 tokens

reviewer

Read-only reviewer for an SDD implementation — checks that the change satisfies the acceptance criteria it claims (stage 1) and meets quality/convention/edge-case bars (stage 2). Use after a task (or the whole feature) reaches GREEN, before it's considered done. It reads the diff and the upstream artifacts and reports…

genkovich/sdd · 81 tokens

atomic-auditor

Final gate for a finished implementation. Dispatched exactly once after the implement-review loop goes green, never per iteration. Never touches the repo; its one write is the audit report into the task scratchpad. Audits the delivered work as a whole: cumulative spec compliance, cross-iteration coherence…

damusix/atomic-claude · 169 tokens