Quick Start
One Ghidra. Many heads. One shared daemon for every client.
Hydra Engine is an Apache-2.0 headless, Ghidra-derived reverse-engineering engine.
It provides a shared daemon for multiple AI agents and tools, with fast, warm decompiles.
- JDK 25
- Python 3.10+
- Windows x64 release
Fastest: let your AI set it up
Paste this into Claude Code, Codex, OpenCode or Qoder. It installs Hydralysis, which installs the pinned Hydra Engine release, and registers it as an MCP server:
Set up Hydralysis and Hydra Engine from github.com/RusticStack/Hydralysis. Ask me which AI harnesses to add it to if you can; otherwise, use this one.Prefer to do it by hand, or want Hydra Engine without Hydralysis? Follow the steps below.
1.Get the headless install
On Windows x64, download hydra-engine-<version>-win_x86_64.zip from the releases, check it against SHA256SUMS and unzip it. Everywhere else, build it from source:
1git clone https://github.com/RusticStack/hydra-engine.git2cd hydra-engine3./gradlew -I gradle/support/fetchDependencies.gradle -DnoEclipse4./gradlew buildHeadlessOn Windows use gradlew.bat. Output: build/dist/ghidra_12.3_DEV. More in Installation.
2.Start the daemon
Start the Hydra Engine daemon using the headless session helper.
1GS=build/dist/ghidra_12.3_DEV/Ghidra/Features/HeadlessSession/support/ghidra_session.py2python $GS ensure3.Open a project & decompile
Open a project, load a program and run a decompile, over one connection to the daemon.
1python - <<'EOF'2import sys; sys.path.insert(0, "build/dist/ghidra_12.3_DEV/Ghidra/Features/HeadlessSession/support")3import ghidra_session as gs4with gs.connect(client="quickstart") as s:5 s.call("open_project", path="/re/MyProject")6 s.call("open_program", path="target.exe")7 print(s.call("decompile", address="rva:0x1000")["c"])8EOF9python $GS statusRead-only projects open without a lock. Warm decompiles in milliseconds.
4.Connect from Python
Connect to the running daemon from your own Python tool or agent.
1import ghidra_session as gs2with gs.connect(client="my-tool", harness="claude-code") as s:3 s.call("open_project", path="/re/MyProject")4 s.call("open_program", path="target.exe")5 print(s.call("decompile", name="main")["c"])Each python $GS call ... is a new client that leaves when it returns, so keep one connection for anything that takes more than one request. No project yet? See Projects.