Borrowing it
Nothing to install: this file belongs to N0zoM1z0/th08. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/N0zoM1z0/th08/main/.agents/skills/th08-typed-re/SKILL.mdgit clone --depth 1 https://github.com/N0zoM1z0/th08Wrote 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.
[](https://agentmods.dev/skills/n0zom1z0/th08/th08-typed-re)<a href="https://agentmods.dev/skills/n0zom1z0/th08/th08-typed-re"><img src="https://agentmods.dev/badge/skills/n0zom1z0/th08/th08-typed-re/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.
<a href="https://agentmods.dev/skills/n0zom1z0/th08/th08-typed-re"><img src="https://agentmods.dev/badge/skills/n0zom1z0/th08/th08-typed-re.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00054 | $0.02695 |
| Opus 5 | $0.00027 | $0.01347 |
| Sonnet 5 | $0.00011 | $0.00539 |
| Haiku 4.5 | $0.00005 | $0.00269 |
Grade A, and why
th08-typed-re 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.
How it starts
The opening of the file, as written. The whole thing — 183 lines — stays where its author put it; the contents beside it link to each section on GitHub.
TH08 typed reconstruction
Use the helper as a read-only fact extractor below the semantic decompiler layer. It consumes only the hash-attested TH08 image and repository ledgers; it never edits source, analysis databases, or tracking state.
Generate a packet
-
Follow
$th08-repreflight and single-session scope rules. -
Run:
python3 scripts/typed-re.py ADDRESS --compare --json \ > build/typed-re-ADDRESS.json -
Read
exact_observationsfirst: target bytes, stack accesses, register homes, saved registers, direct calls, absolute operands, and return cleanup. -
Treat
inferences.compiler_recommendationsonly as source-shaping probes. -
Accept matching only through the canonical
comparison.report.resultfromscripts/compare-function.py.
If no match unit owns the address, the packet remains useful for ABI recovery,
but comparison state is not_configured; define and review a canonical unit
before claiming exactness.
Shape source
- Prefer a type or lifetime change that explains several observed instructions.
- Preserve signed and unsigned narrow types when
movsxormovzxrequires them. - Diagnose frame differences through declaration order and real lifetimes; never add anonymous filler, inert locals, fake behavior, or ABI lies.
- For a large dispatcher, derive switch-wide scratch locals from stable target EBP homes across several handlers. Reuse a real outer scalar/index home when the target does, and keep a table lookup direct when the target has no stable pointer home. Probe one slot at a time so movement of later homes remains attributable.
- If a target branches once around an entire large dispatch but VC7 emits a short inverse branch followed by a near jump, test the positive condition with the whole dispatch lexically nested inside it. Equivalent early exits and gotos can produce a different branch shape.
- Under the repository's VC7
#pragma var_orderwrapper, local identifiers can affect allocation. After a stack layout is proven, treat a rename as a code-generation change and recompare it; prefer a semantic comment over a readability-only rename while tuning exact stack homes. Use the pragma only to express an already-observed lifetime/order:Player::RegisterChainat0x0044C230has the resource pointers atEBP-4andEBP-0xC, with theg_Playerlocal atEBP-8; the natural preserve-reset-restore flow plus#pragma var_order(primaryShtFile, player, secondaryShtFile)exactly reproduces that target layout. It is not a license for inert locals or arbitrary stack shaping. - When a target resolves one value into a stack home and then uses that same
value both to write a field and to call a setter, first test the natural
chained assignment
setter = (field = ReadValue(...)). It preserves the C++ value flow while allowing VC7 to retain one temporary; a separately named local can move fastcall parameter homes. Verify the whole function, since this is a source-shaping hypothesis rather than a byte-forcing device. - For a fixed-size slot allocator, retain the target-observed aggregate layout
and express the scan as a real
forloop over the active member. Under this VC7/Odprofile,for (index = 0; index < limit; index++, slot++)withif (!slot->active) break;preserves the target's initial jump, increment block, and split false/continue branches; assigningFloat2::xandyseparately preserves two source-address loads and stores. This is evidence for reusable allocator semantics, not permission to copy the limit, stride, offsets, or field meanings into another subsystem. TH08 Player slot allocators at0x0044DE60..0x0044E0D8are the exact corpus example. - When a recovered leaf accepts a pointer to a prefix of a larger aggregate,
inspect its target callers before freezing the parameter type: a caller may
prove the owning aggregate even when the leaf reads only a smaller prefix.
Update the mapping signature and decorated match-unit symbol together, then
re-run every affected comparator.
Player::FUN_0044de60reads only x/y but is called withPlayer::position(Float3) by exact0x0044D2C0. - In a VC7
/Odcounted loop, an earlycontinuecan preserve a target's explicit fall-through body and separate jump back to the increment block where a positiveifscope emits a shorter inverse branch. Use it only when the target's condition and the skipped work establish the same semantics;Player::FUN_0044c5b0at0x0044C5B0is the exact corpus example. - If an inlined fixed-size structure-tail
memcpyhas the correct semantics, size, andrep movsdbut schedules its count and source setup differently, probe the typed address of the first copied field instead of byte-pointer arithmetic from the parent object. This is a source-shape hypothesis, not a shortcut around full relocation replay;ReplayManager::SaveReplayat0x004531F0is the exact corpus example. - An ECX home proves only that incoming ECX was saved to a stack slot. Decide whether it is a C++ receiver or fastcall argument zero from the decorated symbol, ledger convention, and call sites; never create inert code merely to reproduce the home.
- Keep target facts separate from field names, calling-convention guesses, compiler recommendations, and TH06/TH07 hypotheses.
- Do not name an absolute memory operand as a standalone global from read-side
evidence alone. Search write, construction, and destruction xrefs for a
known global owner. If the target address is
global + member_offset, keep that ownership in source so VC7 emits aDIR32relocation to the base symbol with the real addend; a zero-addend alias records the wrong layout even when it resolves to the same runtime address. RunEcl's enemy ANM pointers at0x00F54E0Cand0x00F54E10are the corpus example: both are members ofg_EnemyManager, not independent globals. Likewise,GameManager::AddToYoukaiGaugeat0x0043C0BBreads0x017D6ED4; Player receiver reads and writes establish it asg_Player + 0xFDC. Modelling it asPlayer::frameStopproduces the requiredg_PlayerDIR32 relocation with addend0xFDC, whereas a standalone symbol cannot faithfully replay it. - Resolve comparison destinations by each CSV header's named
addresscolumn; the function/global ledgers place it differently from float/string ledgers. Keep attested IAT slots, import thunks, and other non-inventory symbols inconfig/reccmp-relocations.csv. Never add a fake function or global merely to make relocation replay pass. A destination being ledgered only removes an evidence gap: require exact isolated extent and full zero-difference replay before adding a match. The zwave and AnmManager unblocked batches are the corpus example (15 functions, 5,259 authored bytes, 146 relocations). - Test every source-shaping change through
$th08-matching. - If target code ends before the next mapped function but the COFF auxiliary
size continues through switch tables, compare the complete associated extent
with
compare_sizewhile keepingsizeat the authored code extent. Report and count authored coverage fromsizeonly. Normalize compiler-local table symbols by relocation offset and resolved target, and replay every entry. A size error is a boundary question before it is a source-shaping instruction. The four exact AnmVm accessors at0x0045E650..0x0045E953are the compact corpus: 615 authored bytes plus 136 associated table bytes, all 751 compared. - Large dispatchers may own several adjacent compiler tables. Prove each table
boundary from code-local pointers and the next trusted function start, keep
all table-entry relocations in the canonical manifest, and require exact
relocation replay over the full COFF auxiliary extent.
AnmManager::ExecuteScriptis the corpus example:0x366Dcode plus0x1A0bytes of 91+6+7 entries. - Do not infer a local vector type solely from matching three
f32fields. An observed default-constructor call is a type/translation-unit fact: test the candidate type in the affected handler and retain it only if the span crosswalk improves. In particular, TH08RunEclopcode 140's0x0040B460construction is not reproduced by substituting SDKD3DXVECTOR3or the projectFloat3: both probes grew the handler by 11 bytes because they moved the vector home from the target'sEBP-0x60to the object'sEBP-0x90. Reconcile the dispatcher stack layout first. - When a dispatcher’s COFF extent grows or shrinks, make a read-only span
crosswalk before changing source: resolve every target jump-table slot and
every COFF table
DIR32relocation to its handler start, deduplicate and sort starts in physical order, then compare adjacent target and object handler spans. This attributes a size delta to a bounded handler (including shared/default handlers) without treating Ghidra/IDA extents as compiler boundaries. It is a diagnostic fact map, not a matching claim; retain full relocation replay and canonical comparison as the acceptance gate. - When a target passes a raw float operand with
mov/pushbut VC7 emits anfld/fstpargument shuffle, changing only a byte-tail reinterpret cast into an overlay union can leave the COFF completely unchanged. Reject that no-op probe; investigate the resolver call expression or ABI instead. TH08RunEclopcodes 34 and 39 are the corpus case. - For a dispatcher handler, do not accept a lower total COFF size as evidence
that a source-shape probe is closer. Crosswalk the handler itself. In TH08
RunEclopcode 39, fusing the two subtraction operands into each resolver branch shortened the whole object by 42 bytes, yet disagreed with the target's four independent resolved-value homes followed by two subtractions. Restore such a probe unless its target handler sequence improves. TH07 may suggest an expression form, but it is corroboration only; modelling TH08's operand tail asi32[1]rather than a byte tail did not alter this COFF.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 11d ago First seen · 183 lines · 54 tokens per session scan A f300b37851cd
th08-typed-re is a skill published in the GitHub repository N0zoM1z0/th08 (92 stars, last pushed today), licensed MIT. It adds 54 tokens to every session and 2,695 once invoked, about $0.0003 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.
Other skills, from other repositories
idapython
IDA Pro Python scripting for reverse engineering. Use when writing IDAPython scripts, analyzing binaries, working with IDA's API for disassembly, decompilation (Hex-Rays), type systems, cross-references, functions, segments, or any IDA database manipulation. Covers ida modules (50+), idautils iterators, and common…
ghidra-agent-cli
Rust CLI reference for the headless-ghidra pipeline. Covers command syntax, flags, output contract, artifact paths, and workspace layout for all ghidra-agent-cli subcommands. Load when: constructing a ghidra-agent-cli command, interpreting its output, resolving a flag or artifact path question, or debugging CLI…
headless-ghidra-analyze-function
Thoroughly analyze a single function by first recovering its type definitions, constant definitions, vtables, function name and signature, then producing the final decompilation. Use when the user wants a complete per-function analysis following the strict recovery order: types → constants → vtables → function…
headless-ghidra
Entry skill for the Headless Ghidra YAML-first reverse-engineering pipeline. Use when the user asks to analyze, decompile, triage, resume, or iterate on a binary target with Ghidra/headless-ghidra. Reads artifacts/ /pipeline-state.yaml, routes P0–P4 phase skills, runs gate checks, and manages review pauses. Performs…
headless-ghidra-evidence
P2 phase skill for Headless Ghidra third-party evidence. Use after P1 to review baseline/runtime artifacts, identify or rule out third-party code, record pristine sources, classify functions, and capture evidence before metadata recovery.
headless-ghidra-baseline
P1 phase skill for Headless Ghidra baseline and runtime evidence. Use after P0 when the target must be imported into Ghidra, auto-analyzed, exported to baseline YAML, and given reproducible runtime or hotpath observations without decompiling function bodies.