What Is the Tool Registry in reverse-skill and Where Is It Located?
The tool registry in reverse-skill is the auto-generated file skills/tool-index.md (and its JSON counterpart skills/tool-index.json) that serves as the single source of truth for external tool availability, paths, and versions on the host machine.
The reverse-skill framework maintains a centralized tool registry to coordinate external dependencies across reverse engineering workflows. This machine-specific index records which reverse engineering tools are installed, where they reside on the filesystem, and how to obtain any missing utilities. According to RULES.md (lines 115-116), all CLI clients read from this shared registry and write back to it after installations, ensuring consistent state across all skill modules.
Where the Tool Registry Is Located
The primary tool registry resides at skills/tool-index.md in the repository root. This markdown file contains a machine-generated table mapping tool names to their system locations. A parallel machine-readable version exists at skills/tool-index.json for programmatic consumption by scripts and AI agents.
Both files are git-ignored because they contain host-specific absolute paths and availability states. The repository instead tracks skills/tool-index.md.template, which documents the expected schema and instructs users to run the refresh scripts on first use.
The registry concept is formally defined in RULES.md, which declares: "tool-index.md is the shared registry — all CLIs read from it, all CLIs write to it after installing."
Registry Schema and Data Columns
The markdown registry follows a structured table format with eight distinct columns. Each row represents one external tool and its relationship to the host system:
- Tool — The executable name (e.g.,
jadx,frida,apktool) - Skill — The specific skill module that consumes the tool
- Purpose — Functional category such as decompiling, dynamic analysis, or disassembly
- Available — Detection status (
yesif found on host,noif absent) - Path — Absolute filesystem path to the binary or launch script
- Version — Version string obtained via the tool's native version command
- Source — Discovery mechanism:
command(PATH lookup),path-probe(known location), or— - Install hint — Platform-specific guidance for obtaining the tool if missing
This schema allows the framework to distinguish between tools available via system PATH versus those installed in custom directories like ~/tools/ or C:\tools\.
How the Registry Is Generated
The tool registry is generated automatically by platform-specific refresh scripts that probe the system without installing software. These scripts are detection-only utilities that query the host environment and emit updated registry files.
Linux, macOS, and Kali Linux:
The bash script skills/scripts/refresh-tool-index.sh performs the detection. It checks for tools using command -v, scans known installation directories, and writes both skills/tool-index.md and skills/tool-index.json.
Windows:
The PowerShell script skills/scripts/refresh-tool-index.ps1 performs equivalent detection on Windows hosts, handling .exe and .bat extensions and Windows-specific installation paths.
Both scripts execute version commands on discovered binaries to populate the Version column and generate installation hints for missing tools based on the skill requirements.
Working with the Tool Registry
Refresh the Registry on Linux or macOS
After installing new reverse engineering tools, regenerate the index to update availability and paths:
# Generate fresh registry files
bash skills/scripts/refresh-tool-index.sh
# Verify a specific tool entry
cat skills/tool-index.md | grep frida
Example output showing a detected Frida installation:
| frida | reverse-engineering | Dynamic instrumentation CLI | yes | /home/user/.local/bin/frida | 16.0.0 | command | pipx: pipx install frida-tools |
Refresh the Registry on Windows
On Windows systems, use the PowerShell equivalent to update the tool index:
# Execute the refresh script
powershell -NoProfile -ExecutionPolicy Bypass -File "skills/scripts/refresh-tool-index.ps1"
# Search for a specific tool entry
Select-String -Path "skills\tool-index.md" -Pattern "jadx"
Example output showing JADX detection:
| jadx | apk-reverse | APK Java/Kotlin decompiler | yes | C:\tools\jadx\bin\jadx.bat | 1.2.1 | command | GitHub release: download jadx ZIP to ~/tools/jadx |
Programmatic Access via JSON
For automation scripts or AI agents, parse the JSON registry instead of the markdown table:
import json
import pathlib
# Load the machine-readable registry
registry_path = pathlib.Path("skills/tool-index.json")
registry = json.loads(registry_path.read_text())
# Locate Ghidra's installation path
ghidra_entry = next(e for e in registry if e["Tool"] == "ghidra")
print(ghidra_entry["Path"])
# Output: /home/user/tools/ghidra/ghidraRun
This approach eliminates string parsing of the markdown table and provides direct access to structured fields like Version and Install hint.
Summary
- The tool registry consists of
skills/tool-index.md(human-readable) andskills/tool-index.json(machine-readable), both located in theskills/directory and generated from host system state. - These files are git-ignored because they contain machine-specific absolute paths; the repository tracks
skills/tool-index.md.templateas documentation. - The registry tracks eight data points per tool: name, skill association, purpose, availability, absolute path, version, discovery source, and installation guidance.
- Generation is handled by
skills/scripts/refresh-tool-index.sh(Linux/macOS) orrefresh-tool-index.ps1(Windows), which only detect existing tools without installing software. RULES.mdmandates that all CLI clients treattool-index.mdas the single shared source of truth for tool locations across the framework.
Frequently Asked Questions
What is the purpose of the tool registry in reverse-skill?
The tool registry serves as the central coordination point for external dependencies. It allows skill modules to locate tools like apktool or ghidra dynamically without hardcoding paths, while providing installation guidance when tools are missing. This ensures portability across different development machines and operating systems.
How do I update the tool registry after installing new software?
Run the appropriate refresh script for your platform. On Linux or macOS, execute bash skills/scripts/refresh-tool-index.sh. On Windows, run powershell -NoProfile -ExecutionPolicy Bypass -File "skills/scripts/refresh-tool-index.ps1". These scripts will probe your system and rewrite skills/tool-index.md and skills/tool-index.json with current availability and paths.
Why is the tool-index.md file git-ignored?
skills/tool-index.md and skills/tool-index.json are git-ignored because they contain absolute file system paths and machine-specific availability states that vary between environments (e.g., /home/user/.local/bin/frida versus C:\Users\name\tools\frida.exe). Including these in version control would cause conflicts between different developer machines. The repository tracks skills/tool-index.md.template instead, which documents the format without host-specific data.
Can I manually edit the tool-index.md file?
While technically possible, manual edits are discouraged because the refresh scripts will overwrite your changes on the next execution. According to RULES.md, the registry is maintained exclusively through the detection scripts or CLI write-back operations after successful tool installations. For persistent custom tool locations, modify the detection logic in the refresh scripts rather than the generated registry files.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →