P4 phase skill for Headless Ghidra selected function substitution. Use after P3 when an approved batch of functions should have metadata applied, be decompiled through Ghidra, and be recorded as per-function capture/substitution YAML.
Installs into .claude/skills of the current project.
Are you the author of Headless Ghidra Batch Decompile?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/netvar1337-headless-ghidra-batch-decompile)
---
name: "headless-ghidra-batch-decompile"
description: "P4 phase skill for Headless Ghidra selected function substitution. Use after P3 when an approved batch of functions should have metadata applied, be decompiled through Ghidra, and be recorded as per-function capture/substitution YAML."
phase: "P4"
---
# Headless Ghidra Function Substitution — P4
P4 consumes the current selected batch, applies enriched metadata, runs the
approved Ghidra decompilation path, and records per-function substitution
artifacts.
## Required ghidra-agent-cli Commands
- `ghidra-agent-cli ghidra apply-renames`
- `ghidra-agent-cli ghidra verify-renames`
- `ghidra-agent-cli ghidra apply-signatures`
- `ghidra-agent-cli ghidra verify-signatures`
- `ghidra-agent-cli ghidra decompile`
- `ghidra-agent-cli ghidra rebuild-project`
- `ghidra-agent-cli substitute add`
- `ghidra-agent-cli substitute validate`
- `ghidra-agent-cli gate check --phase P4`
Locking and Ghidra invocation are handled internally by the CLI.
The public workflow surface is the CLI plus the YAML outputs below.
When `substitution/next-batch.yaml` is ready, process only functions with
clear P3 names and signatures.
## Inputs
- `artifacts/<target-id>/baseline/*.yaml`
- `artifacts/<target-id>/runtime/fixtures/`
- `artifacts/<target-id>/runtime/hotpaths/call-chain.yaml`
- `artifacts/<target-id>/third-party/identified.yaml`
- `artifacts/<target-id>/third-party/pristine/<library>@<version>/`
- `artifacts/<target-id>/third-party/compat/<library>@<version>/` if needed
- `artifacts/<target-id>/metadata/renames.yaml`
- `artifacts/<target-id>/metadata/signatures.yaml`
- `artifacts/<target-id>/substitution/next-batch.yaml`
## Outputs
- `artifacts/<target-id>/substitution/functions/<fn_id>/capture.yaml`
- `artifacts/<target-id>/substitution/functions/<fn_id>/substitution.yaml`
- Additional per-function YAML such as blocked, injected, or follow-up records
when the workflow records them
## Exit Expectations
- Function-level I/O fixtures and capture YAML are recorded before coding a
substitute.
- Each substituted function has a `substitution.yaml` with provenance, fixtures,
and status.
- P4 gate material is available under `substitution/functions/<fn_id>/`.
## Constraints
- Use Ghidra as the only decompilation backend.
- Acquire the Ghidra queue/lock before mutating or reading shared Ghidra state
when the backend requires it.
- Do not modify artifacts for functions outside the active batch.
- Do not bypass `ghidra-agent-cli` for supported apply/verify/decompile,
substitution, fixture, or gate actions.
- Do not modify pristine third-party source; place local adaptation changes under
`third-party/compat/`.
- Do not create or run a new Ghidra script if the CLI lacks a capability; pause
and ask the user first.
## Next Step
- P4 gate passes for the batch → return to P3 for another round or finish.