Skip to main content
WARDEN’s core path is pure Python and the standard library, so a fresh clone runs with no native toolchain (no Ghidra, no Emscripten, no WABT).

Install

1

Clone and create a virtual environment

2

Install the package

The base install is dependency-light (just a CLI shell).
Verify it worked: warden version prints the installed version.

Run the whole pipeline (offline)

This generates sample modules and walks every stage end-to-end, with no network and no toolchain. You’ll see the Oracle identify runtime functions at score 1.00 and infer the Emscripten version, the agent crew recover a name from a string cross-reference to reach 100% coverage, and a v1 → v2 diff carry annotations forward and print a semantic changelog.
warden demo is the fastest way to understand WARDEN. Run it once, then point the real commands below at your own module.

Reverse-engineer your own module

1

Create a project and ingest the target

Ingestion parses the .wasm (and optional Emscripten JS glue), fingerprints every function, and seeds names for free from exports, imports, and the name section.
2

Identify runtime code with the Oracle

Build a signature corpus from any module that still carries a name section (a debug or --profiling-funcs build), then identify the stripped target against it. This typically collapses a large fraction of a module to known musl/runtime code instantly.
To build a full corpus from the Emscripten toolchain across a version × flag matrix, use the containerized farm in scripts/corpus/. See the Oracle guide.
3

Name the rest with the agent crew

The crew proposes names for the application-specific remainder, gated by a verifier and the provenance/confidence economy. Runs with an offline heuristic by default; set OPENAI_API_KEY or ANTHROPIC_API_KEY (and pip install -e '.[agents]') for the LLM crew.
4

Review, lock, and export

Record verified names (sovereign over agents), then emit a deliverable.
5

When a new version ships, diff it

Carry annotations forward automatically and review only the genuine deltas.
The changelog separates real app changes (review these) from runtime/toolchain churn (an Emscripten bump, safely ignored). Read about diffing →

Optional power-ups

The base install is intentionally minimal. Opt into extras as you need them.

Next: the mental model

Three ideas make every WARDEN command click. Read them before going deeper.

The reverse-engineering loop

The practical, command-by-command guide to reverse-engineering a real module as a loop.
Last modified on June 10, 2026