# What Is the Tool Registry in reverse-skill and Where Is It Located?

> Discover the tool registry in reverse-skill. Learn its purpose as the central source for tool availability, paths, and versions, and find its exact location within the repository.

- Repository: [ZhaoXu/reverse-skill](https://github.com/zhaoxuya520/reverse-skill)
- Tags: how-to-guide
- Published: 2026-09-02

---

**The tool registry in *reverse-skill* is the auto-generated file [`skills/tool-index.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.md) (and its JSON counterpart [`skills/tool-index.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md)**, which declares: "[`tool-index.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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 (`yes` if found on host, `no` if 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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.md) and [`skills/tool-index.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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:

```bash

# 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:

```powershell

# 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:

```python
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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.md) (human-readable) and [`skills/tool-index.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.json) (machine-readable), both located in the `skills/` 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.template` as 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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/scripts/refresh-tool-index.sh) (Linux/macOS) or `refresh-tool-index.ps1` (Windows), which only detect existing tools without installing software.
- [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) mandates that all CLI clients treat [`tool-index.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/tool-index.md) as 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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.md) and [`skills/tool-index.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.json) with current availability and paths.

### Why is the tool-index.md file git-ignored?

[`skills/tool-index.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/tool-index.md) and [`skills/tool-index.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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`](https://github.com/zhaoxuya520/reverse-skill/blob/main/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.