Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add OutlineDriven/outline-driven-development --skill dwarf-expertgit clone --depth 1 https://github.com/OutlineDriven/outline-driven-developmentWrote 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/outlinedriven/outline-driven-development/dwarf-expert)<a href="https://agentmods.dev/skills/outlinedriven/outline-driven-development/dwarf-expert"><img src="https://agentmods.dev/badge/skills/outlinedriven/outline-driven-development/dwarf-expert/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/outlinedriven/outline-driven-development/dwarf-expert"><img src="https://agentmods.dev/badge/skills/outlinedriven/outline-driven-development/dwarf-expert.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.00050 | $0.02055 |
| Opus 5 | $0.00025 | $0.01027 |
| Sonnet 5 | $0.00010 | $0.00411 |
| Haiku 4.5 | $0.00005 | $0.00205 |
Grade A, and why
dwarf-expert 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.
How it starts
The opening of the file, as written. The whole thing — 41 lines — stays where its author put it; the contents beside it link to each section on GitHub.
DWARF expert
Contract
| Field | Bound contract |
|---|---|
| Trigger | The user asks to inspect, search, verify, explain, or programmatically parse DWARF debug information, DIEs, DW_TAG_/DW_AT_ entries, .debug_* sections, line tables, or llvm-dwarfdump/readelf output. |
| Authority | Reversible local: inspect binaries and print query or integrity results; write only a verifier summary via --verify-json or code the user explicitly requests as a parser. Input binaries, object files, and dSYM bundles remain unchanged. |
| Side effect | Default operations read binaries and print to the terminal; --verify-json may write a machine-readable verifier summary, and an explicit parser-development request may create code. No mutation of input binaries, object files, or dSYM bundles. |
| Done | The requested DIE/address/name query, integrity verification, standard explanation, or parser implementation is complete; tool implementation and platform/container format are identified; searches escalate from accelerator lookup to exhaustive search to structured parsing; optional attributes, abstract-origin/specification indirection, and wrapped type chains are handled; and any written parser or JSON output matches the requested surface. |
Inputs
- A binary, object file, or dSYM bundle to inspect (required for query, search, and verification work; not required for pure standard-explanation questions).
- The query surface: a DIE name or address to look up, an attribute or type predicate to filter, a structural query, an integrity-verification request, a DWARF-standard question, or a parser-development request.
- Optional: target DWARF version, compiler, or optimization level when relevant to verification or quality comparison.
Procedure
- Identify the tool implementation and platform before running anything. Run
dwarfdump --versionfirst: a baredwarfdumpmay be libdwarf's or LLVM's, and the options below are LLVM's. On macOS, linked Mach-O executables do not carry DWARF; it stays in.ofiles untildsymutilcollects it into a.dSYMbundle; point the tool at the dSYM or object files, not the executable.pyelftoolsis ELF-only, so for Mach-O scripted work stay with the LLVM tools. Done when: the tool implementation and platform are identified. - Prefer
dwarfdumpoverreadelffor DWARF-specific work. Usereadelf --debug-dump=<section>(with--dwarf-depth=<n>/--dwarf-start=<n>to limit depth or start offset) only for general ELF structure or whendwarfdumpis unavailable. Done when: the appropriate tool is selected for the query type. - For a name or address match, escalate: try
--find=<name>(accelerator-table exact lookup, fast but not exhaustive) first, fall back to--name=<pattern>(--ignore-case,--regexavailable) for exhaustive DIE-name search, and use--lookup=<address>to find the DIE covering a program address. Done when: the name or address is found or the escalation ladder is exhausted with a not-found report. - For an attribute or type query (e.g. all parameters of type
float *), dump and filter:grep -B 1 <pattern>pulls in the header line carrying each DIE's offset, then print each DIE at its offset with--debug-info=<offset> --show-children(--lookuptakes a program address, not a DIE offset). Use--show-children/--show-parents(with--recurse-depth/--parent-recurse-depth) to include child or parent DIEs, and--show-formwhen attribute encoding details matter. Done when: every matching DIE is printed with its offset and the requested children/parents/forms. - For a multi-attribute or structural query where grep pipelines turn brittle, write a Python script using
pyelftoolsonly if the user has explicitly requested a script or parser; otherwise, continue dumping and filtering and report the findings without creating code. Done when: the structural query is resolved, either with apyelftoolsscript (if requested) or a terminal report. - For integrity verification, run
llvm-dwarfdump --verify <binary>for structural checks (unit chains, DIE relationships, address ranges); control detail with--error-display=<quiet|summary|details|full>, write a machine-readable summary with--verify-json=<path>, and use--quietfor exit-code-only checks. Runllvm-dwarfdump --statistics <binary>for debug-info quality metrics as JSON to compare across compiler versions or optimization levels. Verify after producing DWARF (compilers, binary rewriters), when a debugger misbehaves on a binary, and when developing DWARF tooling against known-good files. Done when: the--verifyexit code and error detail are reported, and--statisticsJSON is produced when quality comparison was requested. - When a current-generation compiler emitted an old DWARF version, the build explicitly passed
-gdwarf-N; modern gcc and clang default to v4/v5, so check the build system rather than assuming a toolchain default. GCC embeds its flags inDW_AT_producer(the pin is often readable there); clang's producer string carries no flags. Old versions read the same way apart from surface forms: in v2 output, member offsets appear as location expressions (DW_OP_plus_uconst) and linkage names asDW_AT_MIPS_linkage_name. Done when: the DWARF version is confirmed from the build system or producer string. - For a DWARF-standard question where precision matters, look the detail up instead of answering from memory, escalating through authoritative sources: dwarfstd.org (the official specification; web-search specific sections), LLVM's
llvm/lib/DebugInfo/DWARF/(DWARFDie.cpp,DWARFUnit.cpp,DWARFDebugLine.cpp,DWARFVerifier.cppas a reference implementation), and libdwarf at github.com/davea42/libdwarf-code (the reference C implementation). Done when: the question is answered with a citation naming which source answered it. - For an explicitly requested parser, prefer an existing library over parsing by hand:
libdwarf(C/C++, low-level, used to implementdwarfdump),pyelftools(Python, also parses ELF),gimlipaired withobject(Rust, to load container files),debug/dwarf(Go standard library), orLibObjectFile(.NET, also handles ELF/PE). Default to Python withpyelftoolsfor one-off scripts unless the task dictates otherwise. Done when: the parser is implemented using a named library. - In every search, verification, and parser, handle the DWARF-specific pitfalls: attributes are optional (a DIE may omit
DW_AT_name,DW_AT_type, ranges); attribute indirection resolves throughDW_AT_abstract_origin(inlined instances) andDW_AT_specification(out-of-line definitions) before concluding data is absent; and type chains walkDW_AT_typelinks through qualifiers and modifiers (DW_TAG_const_type,DW_TAG_pointer_type, ...) to reach the base type. Done when: optional attributes, abstract-origin/specification indirection, and wrapped type chains are handled in every search, verification, and parser.
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.
- 2d ago Changed · -17 tokens per session 07a3ecd410f1
- 5d ago First seen · 41 lines · 67 tokens per session scan A 1fc6ce80af2d
dwarf-expert is a skill published in the GitHub repository OutlineDriven/outline-driven-development (52 stars, last pushed 3d ago), licensed Apache-2.0. It adds 50 tokens to every session and 2,055 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-09-03.
Other skills, from other repositories
mintlify-api
Interact with the Mintlify REST API to manage deployments, trigger builds, and query documentation site metadata programmatically.
pi-loop-forensics
Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases. Discriminates genuine model repetition collapse from a race, a tool-parse failure, or a too-low guard, and A/B replays a seed session across providers.
python-run
Run and debug Python scripts in the project. Use when the user says "run python", "execute this script", "debug this py file", or wants to run/modify a .py file. Handles dependency checks, linting, execution, and error analysis.
bug-root-cause-finder
Root cause analysis methods for PHP bugs. Provides 5 Whys technique, fault tree analysis, git bisect guidance, and stack trace parsing.
error-handling
Implement Go error handling patterns including error wrapping, sentinel errors, custom error types, and error handling conventions. Use when handling errors, creating error types, or implementing error propagation. Trigger words include "error", "panic", "recover", "error handling", "error wrapping".
cs0618-hunter
Detects and fixes CS0618 obsolete API warnings in .NET builds. The compiler is the authoritative source for what your project actually triggers — it catches transitive obsoletions, overload-resolution surprises, and project-local [Obsolete] attributes that static inspection cannot see. Pair with the repository-pinned…