plugins/deep-research/skills/binary-inspection/SKILL.md
Use this skill when investigating compiled programs, executables, shared libraries, or any binary file where you need to understand its structure, embedded content, or build-time decisions. Trigger when: - User asks to inspect, analyze, or reverse engineer a binary - Finding hardcoded values, URLs, config keys, or strings in a compiled program - Understanding what libraries a binary links against - Investigating build-time decisions embedded in an executable - Extracting embedded resources or metadata from compiled code - Checking what symbols/functions a library exports Do NOT trigger for: - Text files, YAML, JSON, scripts (read directly with Read tool) - Running or executing binaries (binary-inspector is read-only) - Dynamic analysis, tracing, or debugging (strace/gdb are out of scope)
npx skillsauth add nsheaps/ai-mktpl binary-inspectionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use the binary-inspector agent from the deep-research plugin to analyze binary files without modifying them.
Spawn the binary-inspector agent with a clear goal and output path:
Agent(binary-inspector, "Inspect <path/to/binary>. Goal: <what you're looking for>. Save findings to docs/research/<topic>-binary-inspection.md")
Always specify:
Agent(binary-inspector, "Inspect /usr/local/bin/claude. Goal: find any hardcoded channel names, URL allowlists, or API endpoint strings. Save findings to docs/research/claude-binary-strings.md")
Agent(binary-inspector, "Inspect /usr/lib/libssl.so. Goal: show all shared library dependencies and exported symbols. Save findings to docs/research/libssl-dependencies.md")
Agent(binary-inspector, "Inspect /path/to/unknown-binary. Goal: identify file type, architecture, and whether it is stripped. Save findings to docs/research/unknown-binary-identity.md")
Agent(binary-inspector, "Inspect /usr/local/lib/libfoo.so. Goal: list all exported function names, especially those related to authentication. Save findings to docs/research/libfoo-symbols.md")
One concrete use case is inspecting the Claude Code binary (/usr/local/bin/claude) to understand behavior that is not documented — for example, finding what channels or URLs are baked into the binary at build time.
Agent(binary-inspector, "Inspect /usr/local/bin/claude. Goal: find any strings related to channel names, API endpoints, authentication URLs, or allowlists. Pay special attention to strings containing 'api.anthropic.com', 'claude.ai', or channel identifiers. Save full findings to docs/research/claude-binary-channel-analysis.md and raw strings output to .claude/tmp/claude-binary-strings-raw.txt")
The agent will:
file to confirm it is a valid executablestrings -n 8readelf -d for linked librariesnm for symbol names (may be empty if stripped)The binary-inspector saves a structured Markdown report to the path you specify. The report includes:
Large raw outputs (full strings list, nm output) are saved as companion files in .claude/tmp/ to keep the main report readable.
The binary-inspector performs static analysis only:
strace, ltrace, or a debugger for that)file, strings, xxd, readelf, nm, ldd) — note if any are missingPer the research-output rules, commit inspection findings to docs/research/ on the main branch. Binary inspection results have lasting value for understanding tool internals and should not be left in .claude/tmp/.
tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su