agents - 1-3-7/disrobe GitHub Wiki
disrobe agent setup registers the MCP server with coding agents by editing each agent's user-level configuration file, and installs an investigation skill where the agent reads skills from a directory. Every change is shown as a unified diff first; nothing is written without consent.
disrobe agent setup # every agent whose configuration directory exists
disrobe agent setup --agent codex --agent cursor # only these agents
disrobe agent setup --root /srv/samples # let the server read /srv/samples as well
disrobe agent status # what each agent has registered
disrobe agent remove # take the registration out again--agent |
Agent | Configuration file | Entry | Skill file |
|---|---|---|---|---|
claude-code |
Claude Code |
~/.claude.json, or $CLAUDE_CONFIG_DIR/.claude.json
|
mcpServers.disrobe, "type": "stdio"
|
~/.claude/skills/disrobe/SKILL.md, or under $CLAUDE_CONFIG_DIR/skills
|
claude-desktop |
Claude Desktop | macOS ~/Library/Application Support/Claude/claude_desktop_config.json; Windows %APPDATA%\Claude\claude_desktop_config.json; Linux $XDG_CONFIG_HOME/Claude/claude_desktop_config.json
|
mcpServers.disrobe |
none |
codex |
Codex |
~/.codex/config.toml, or $CODEX_HOME/config.toml
|
[mcp_servers.disrobe] with tool_timeout_sec = 1800
|
~/.agents/skills/disrobe/SKILL.md |
cursor |
Cursor | ~/.cursor/mcp.json |
mcpServers.disrobe, "type": "stdio"
|
none |
gemini |
Gemini CLI |
~/.gemini/settings.json, or $GEMINI_CLI_HOME/.gemini/settings.json
|
mcpServers.disrobe |
~/.agents/skills/disrobe/SKILL.md, or under $GEMINI_CLI_HOME
|
vscode |
VS Code | the user-profile mcp.json: Windows %APPDATA%\Code\User\mcp.json, macOS ~/Library/Application Support/Code/User/mcp.json, Linux $XDG_CONFIG_HOME/Code/User/mcp.json
|
servers.disrobe, "type": "stdio"
|
none |
windsurf |
Windsurf | ~/.codeium/windsurf/mcp_config.json |
mcpServers.disrobe |
~/.codeium/windsurf/skills/disrobe/SKILL.md |
devin |
Devin Desktop | Windows %APPDATA%\devin\mcp_config.json; elsewhere $XDG_CONFIG_HOME/devin/mcp_config.json
|
mcpServers.disrobe |
~/.codeium/windsurf/skills/disrobe/SKILL.md |
copilot |
GitHub Copilot CLI |
~/.copilot/mcp-config.json, or $COPILOT_HOME/mcp-config.json
|
mcpServers.disrobe, "type": "local", "tools": ["*"]
|
~/.copilot/skills/disrobe/SKILL.md |
qwen |
Qwen Code |
~/.qwen/settings.json, or $QWEN_HOME/settings.json
|
mcpServers.disrobe |
~/.qwen/skills/disrobe/SKILL.md |
opencode |
OpenCode |
~/.config/opencode/opencode.json (opencode.jsonc when only that file exists), under $XDG_CONFIG_HOME when set |
mcp.disrobe, "type": "local", the command as an array, "enabled": true
|
~/.config/opencode/skills/disrobe/SKILL.md |
kimi |
Kimi Code |
~/.kimi-code/mcp.json, or $KIMI_CODE_HOME/mcp.json
|
mcpServers.disrobe |
~/.agents/skills/disrobe/SKILL.md |
$XDG_CONFIG_HOME defaults to ~/.config and %APPDATA% to ~\AppData\Roaming. An override that starts with ~ is expanded against the home directory; a relative one is resolved against the working directory.
On Windows, the Microsoft Store build of Claude Desktop keeps its own copy of the file at %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json once it has saved its settings, and reads that copy instead of the %APPDATA% file. Setup edits that copy when it exists. Quit Claude Desktop completely before running setup, because a running instance can write its configuration back from memory.
Devin Desktop is the current name of the Windsurf editor. Builds that still read ~/.codeium/windsurf/mcp_config.json are configured with --agent windsurf; builds that read the Devin location are configured with --agent devin.
Without --agent, setup configures every agent whose configuration file or configuration directory exists. --agent all does the same and can be combined with named agents, which are configured even when their directory does not exist yet.
The entry starts the running disrobe executable by its absolute path with the mcp subcommand, plus --root <dir> for each --root given to setup. For most agents it looks like this:
{
"mcpServers": {
"disrobe": {
"type": "stdio",
"command": "/opt/disrobe/bin/disrobe",
"args": ["mcp", "--root", "/srv/samples"]
}
}
}Codex gets a TOML table. Its tool timeout is raised to 30 minutes so a long run_command (unpacking or decompiling a large file) is not cut off at the 60-second default:
[mcp_servers.disrobe]
command = "/opt/disrobe/bin/disrobe"
args = ["mcp"]
tool_timeout_sec = 1800The server reads files inside the agent's working directory and the --root directories, and nowhere else; see the MCP security posture.
Setup reads every selected file first and prints, per file, whether it will be created, updated or left unchanged, followed by a unified diff. Then:
- On a terminal, it asks
apply these changes? [y/N]. -
--yes(-y) applies without asking. - Without a terminal and without
--yes, it prints the plan and writes nothing. -
--dry-runprints the plan and writes nothing. -
--jsonprints the plan, the diffs and the outcome as one JSON document (disrobe.agent-plan/v1) and never prompts.
Edits change only the disrobe entry. Other servers, other settings, key order, indentation and comments stay byte-for-byte as they were; JSON files with // and /* */ comments and trailing commas (VS Code, Gemini CLI and OpenCode accept them) are edited in place. Before replacing an existing file, setup writes a copy beside it named <file>.disrobe-backup-<UTC timestamp>, then writes the new content to a temporary file in the same directory and renames it over the original. A run that would produce identical content writes nothing and makes no backup, so running setup twice is harmless.
Setup refuses, by file name and without writing anything, a configuration file that is not valid JSON or TOML, is not UTF-8, or holds the server table under a value that is not an object (DR-CLI-0964), and one it cannot read or that is larger than 64 MiB (DR-CLI-0963). If a file changes on disk while the prompt is open, setup stops before touching it (DR-CLI-0968).
Agents with a skill directory get disrobe/SKILL.md in it. The skill describes the workflow the tools are built for:
-
open_targeton the file, keeping thetarget_id, SHA-256, format and architecture. -
target_layoutandlist_functionsfor sections, imports, exports and functions. -
disassemble_functionanddecompile_functionon the functions that matter. -
references_to,call_path,neighborhoodandxrefsto follow callers, callees and data references. -
find_strings,read_bytes,search_bytesandlocatefor data. -
run_commandfor every otherdisrobesubcommand:identify,auto,native unpack,py deob,strings,iocand the rest of the read-only setlist_commandsshows. -
add_noteandlist_notesto keep findings with the target.
It asks the agent to report evidence (addresses, file offsets, section names, SHA-256 of inputs and recovered files) and to quote a refusal's DR-* code and reason as a finding.
Cursor, VS Code and Claude Desktop have no user skill directory. Setup leaves their instruction settings alone and prints where to paste the skill text instead: Cursor's Settings > Rules > User Rules, a user-level instructions file for VS Code chat, or a Claude Desktop project's instructions. When none of the selected agents has a skill directory, setup prints the text itself. Codex, Gemini CLI and Kimi Code share ~/.agents/skills, so one file serves all three.
disrobe agent status reports, for every supported agent (or the ones named with --agent):
- whether the configuration file exists,
- whether it holds a
disrobeentry, - the command that entry runs, whether that file exists, and whether it is this
disrobebinary, - whether the skill file is installed.
A registration that points at another disrobe binary, or at a path that no longer exists after a move or an upgrade, shows up here; run setup again to point it at the current binary. --json prints the same as disrobe.agent-status/v1.
disrobe agent remove deletes the disrobe entry from every agent that has one, or from the agents named with --agent, with the same diff, backup and consent rules as setup. Nothing else in the file changes: removing an entry that setup added to an existing server table restores the file byte-for-byte. In a JSON file, a server object that setup created stays behind empty. The skill file is deleted once no remaining registered agent uses its directory, and only when it is the disrobe skill: an unmodified copy goes without a backup, together with its then-empty disrobe directory, and an edited copy is backed up first.
- Only user-level files are edited. Project files such as
.cursor/mcp.json,.vscode/mcp.json,.gemini/settings.jsonor a project.codex/config.tomlare left alone, and an agent may let a same-named project entry replace the user entry. - Agents read their configuration at start; restart them after setup or removal.
- The registration records this binary's absolute path. Re-run setup after moving or reinstalling
disrobeelsewhere. - Setup needs a
disrobebuild with the defaultserverfeature, because the entry runsdisrobe mcp.