First-read approachability lens. Read code as a newly onboarded TypeScript developer to surface indirection, misleading names, type-system-only tricks, and wrong-owner boundaries. Cited by post-implementation-review and collapse-pass as their readability pass; also use directly when code feels clever or hard to follow on first read.
52
58%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.agents/skills/first-read-review/SKILL.mdRead the code like a smart but newly onboarded TypeScript developer.
Related skills: use post-implementation-review for the full second-read
ritual after implementation, refactoring for caller counting and inlining
mechanics, and greenfield-clean-breaks when a readability issue points to the
wrong public boundary.
The goal is not "make it shorter" or "make it more abstract." The goal is:
as assertions outside a clear parse or interop boundaryearns its keepprobably inlineablewrong ownership boundarymisleading nametype-system workaroundWhen reporting findings, prioritize:
When editing code:
*Bridge, *Contract, *Parser, *Factory, *Stateexport type SessionContract = { ... };Portable type, honest name, obvious job.
export type AppAuth = {
options: { plugins: [...] }
};If this is not the real auth type, do not name it like it is.
export type CustomSessionClientBridge = { ... };If a library forces a type trick, keep it local and name it as a bridge.
A new developer's first read of a foreign symbol is Go-to-Def. Treat it as the canonical readability tool: pressing it from a call site should land on the actual source of truth in as few hops as possible. Counting hops (review method, step 3) means counting Go-to-Def hops.
The smell catalog that bloats the hop count (re-export chains, destructure-re-exports, no-op adapters, identity-obscuring annotations) lives in typescript "Go-to-Definition Awareness". Each extra hop has to earn its keep: if a layer doesn't own a real invariant, name non-obvious domain behavior, or isolate unsafe input, collapse it.
The code should leave a new teammate thinking:
cb12bcc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.