# CLI Command Reference Complete reference for the `binary` CLI — every command, its flags, output format, and exit codes. Load this when you need exact flag syntax, want to understand what a command returns, or need to look up an exit code. ## Global Flags These flags apply to every command and are registered on the root parser: | Flag | Type | Default | Description | |------|------|---------|-------------| | `--json` | flag | off | Emit machine-readable JSON output with the standard envelope | | `--quiet` | flag | off | Suppress progress messages and non-error diagnostics on stderr | | `--limit` | int | 100 | Maximum number of results (positive integer, max 1000) | | `--timeout` | int | 300 | Operation timeout in seconds (positive integer) | | `--max-output-size` | int | 67108864 | Maximum output size in bytes (default 64MB, max 256MB) | | `--max-memory` | int | 0 | Maximum memory in bytes (0 = no explicit limit) | ### Global Flag Behavior - `--json` produces a standard envelope on stdout: `schema_version`, `command`, `generated_at`, `duration_ms`, `success`, `partial`, `warnings`, `diagnostics`, `provenance`, `data`. Without `--json`, output is human-readable text. - `--quiet` suppresses stderr diagnostics. Only fatal errors appear on stderr. Exit codes are unchanged. - `--limit` clamps to the range [1, 1000]. Values outside this range produce a diagnostic but use the clamped value. - `--timeout` clamps to the range [1, 3600]. Values <= 0 are rejected with exit code 2. - `--max-output-size` triggers truncation with a diagnostic when output exceeds the limit. ## JSON Envelope Every `--json` response follows this structure: ```json { "schema_version": "1.0.0", "command": "functions", "generated_at": "2026-07-30T12:00:00Z", "duration_ms": 183, "success": true, "partial": false, "warnings": [], "diagnostics": [], "provenance": { "cli_version": "0.1.0", "schema_version": "1.0.0", "adapter": "fake", "adapter_version": "0.1.0", "backend": "FakeAdapter", "backend_version": "0.1.0", "project_id": "", "binary_id": "", "binary_sha256": "", "analysis_profile": "standard", "platform": "arm64", "architecture": "x86:LE:64:default" }, "data": {} } ``` ### Envelope Field Semantics - `success: true, partial: false` — Complete success. - `success: true, partial: true` — Bounded success; some analyzers failed or timed out. Results are valid but incomplete. Review `diagnostics`. - `success: false, partial: true` — Timeout or partial failure. Some results may be present. - `success: false, partial: false` — Hard failure. No usable results. ### Structured Addresses All addresses use a canonical structured object: ```json { "space": "ram", "offset": "0x4018d0", "display": "0x4018d0", "file_offset": 6352 } ``` ## Exit Codes | Code | Name | When | |------|------|------| | 0 | SUCCESS | Success or explicit valid partial result | | 1 | GENERIC_ERROR | Generic failure | | 2 | INVALID_ARGS | Invalid arguments, missing required args, invalid flag values | | 3 | DEPENDENCY_MISSING | Missing or incompatible dependency (Java, Ghidra, PyGhidra) | | 4 | INVALID_CONFIG | Invalid configuration (corrupted manifest, bad settings) | | 5 | UNSUPPORTED_FORMAT | Unsupported binary format or architecture | | 6 | PROJECT_NOT_FOUND | Project name or UUID not found | | 7 | BINARY_NOT_FOUND | No binary imported into the project | | 8 | AMBIGUOUS_SELECTOR | Selector resolved to multiple entities | | 9 | ENTITY_NOT_FOUND | Specific entity (function, address) not found | | 10 | IMPORT_FAILED | Import operation failed | | 11 | ANALYSIS_FAILED | Analysis operation failed (hard failure) | | 12 | OPERATION_TIMEOUT | Timeout or cancellation | | 13 | BACKEND_FAILURE | Backend or internal failure (unexpected) | ## Command Reference ### Environment & Setup #### `binary doctor` Check dependency health. Reports Java, Ghidra, and PyGhidra status. ``` binary doctor [--json] [--quiet] [--require-ready] ``` | Flag | Description | |------|-------------| | `--require-ready` | Exit code 3 if any component is missing (for scripting) | **Exit codes:** 0 (all healthy), 3 (dependency missing) **Output:** `data.components[]` with `name`, `status`, `message`, `remediation` for each component. Each `diagnostics[]` entry has `severity`, `component`, `message`, `remediation`. #### `binary bootstrap` Discover and install dependencies (PyGhidra only — Java and Ghidra must be installed manually). ``` binary bootstrap [--json] [--quiet] (--plan | --apply) ``` | Flag | Description | |------|-------------| | `--plan` | Show install targets without making changes | | `--apply` | Download and install missing dependencies | **Exit codes (--plan):** 0 (all present), 3 (some missing) **Exit codes (--apply):** 0 (all installed), 1 (partial failure) **`--plan` output:** `data.components[]` with `name`, `status` (`missing` or `present`), `action` (`install` or `skip`), `source`. **`--apply` output:** `data.components[]` with `name`, `status` (`installed` or `failed`). On failure, `success: false`, `partial: true`, and failed components have a `reason` field. #### `binary version` Report all component versions. ``` binary version [--json] [--quiet] ``` **Exit code:** 0 **Output:** `data` containing `cli_version`, `schema_version`, `workspace_version`, `adapter` (`name`, `version`), `backend` (`name`, `version`), `platform`. ### Project Management #### `binary project create` Create a new analysis workspace. ``` binary project create [--json] [--quiet] [--dry-run] ``` | Flag | Description | |------|-------------| | `--dry-run` | Report planned creation without creating files | **Exit codes:** 0 (created), 1 (duplicate name) **Output:** `data` with `id` (UUID), `name`, `state` (`CREATED`), `created_at`, `directory`. #### `binary project list` List projects with pagination. ``` binary project list [--json] [--quiet] [--limit N] [--cursor ] ``` **Exit code:** 0 **Output:** `data.items[]` with each project's `id`, `name`, `state`, `created_at`, `binary_count`. `data.total`, `data.next_cursor`, `data.has_more`. #### `binary project status` Show full project state and metadata. ``` binary project status [--json] [--quiet] ``` **Exit codes:** 0 (found), 6 (not found) **Output:** `data` with `state` (ProjectState enum), `binary_count`, `created_at`, `updated_at`, `is_stale`, `lock` (holder string or null). #### `binary project clean` Reset a FAILED project to CREATED. ``` binary project clean [--json] [--quiet] [--yes] [--force] ``` | Flag | Description | |------|-------------| | `--yes` | Skip confirmation prompt | | `--force` | Same as `--yes` | **Exit codes:** 0 (cleaned), non-zero (denied, or project not in FAILED state) **Note:** Only works on FAILED projects. Other states are rejected. #### `binary project remove` Delete an entire project workspace. ``` binary project remove [--json] [--quiet] [--yes] [--force] [--dry-run] ``` | Flag | Description | |------|-------------| | `--yes` | Skip confirmation prompt | | `--force` | Same as `--yes` | | `--dry-run` | Report deletion plan without deleting | **Exit codes:** 0 (removed), non-zero (denied or not found) #### `binary project migrate` Upgrade project workspace format. ``` binary project migrate [--json] [--quiet] (--plan | --apply) [--dry-run] ``` | Flag | Description | |------|-------------| | `--plan` | Show migration path without changes | | `--apply` | Perform the migration | | `--dry-run` | Preview migration (alias for `--plan`) | **Exit codes:** 0 (migrated or plan shown), non-zero (locked or incompatible) ### Import & Analysis #### `binary import` Import a binary into a project. ``` binary import --project [--json] [--quiet] [--reference] ``` | Flag | Description | |------|-------------| | `--project` | Project name or UUID (required) | | `--reference` | Use reference mode (track source path, do not copy) | **Exit codes:** 0 (imported), 5 (unsupported format), 6 (project not found), 10 (import failed) **Output:** `data` with `binary_id` (UUID), `binary_sha256` (hex), `binary_path`, `format`, `import_mode` ("copy" or "reference"), `size_bytes`. Copy mode (default) copies the binary into the project's `samples/` directory. Reference mode records the source path — faster but the project becomes STALE if the source changes. #### `binary analyze` Run analysis on an imported binary. ``` binary analyze --project [--json] [--quiet] [--profile PROFILE] [--timeout N] ``` | Flag | Description | |------|-------------| | `--project` | Project name or UUID (required) | | `--profile` | Analysis profile: `standard` (default), `quick`, or `deep` | **Exit codes:** 0 (analyzed), 7 (no binary), 11 (analysis failed), 12 (timeout) **Output:** `provenance.project_state` reflecting the state transition. `diagnostics` includes lock acquisition/release records. ### Structural Queries All structural queries support `--limit` and `--cursor` for pagination. #### `binary metadata` Show canonical metadata for the imported binary. ``` binary metadata --project [--json] [--quiet] ``` **Exit codes:** 0, 6 (project not found), 7 (no binary) **Output:** `data` with `format`, `architecture`, `endianness`, `size_bytes`, `entry_point` (address object or null). No backend-specific keys at root of `data`. #### `binary sections` List sections in the binary. ``` binary sections --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Output:** `data.items[]` with `name`, `address`, `virtual_size`, `raw_size`, `flags` (array of "r"/"w"/"x"), `entropy` (float or null). #### `binary entrypoints` List entry points with confidence scoring. ``` binary entrypoints --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Output:** `data.items[]` with `address`, `kind` ("program"/"library"/"boot"/ "firmware"/"unknown"), `confidence` ("HIGH"/"MEDIUM"/"LOW"/"UNKNOWN"), `name`. #### `binary imports` List imported symbols with resolution status. ``` binary imports --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Output:** `data.items[]` with `module`, `symbol`, `address` (or null), `resolution` ("RESOLVED"/"PARTIAL"/"UNRESOLVED"), `ordinal` (or null). #### `binary exports` List exported symbols. ``` binary exports --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Output:** `data.items[]` with `name`, `address`, `ordinal` (or null), `forwarder` (or null), `kind` ("function" or "data"). #### `binary symbols` List symbols with source and scope. ``` binary symbols --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Output:** `data.items[]` with `name`, `address`, `source` (FunctionNameSource enum), `scope` ("global"/"local"/"unknown"). #### `binary strings` List decoded strings. ``` binary strings --project [--json] [--quiet] [--limit N] [--cursor C] [--min-length N] [--contains PATTERN] ``` | Flag | Description | |------|-------------| | `--min-length` | Minimum string length (default: 4) | | `--contains` | Substring filter (case-sensitive) | **Output:** `data.items[]` with `text`, `encoding` ("ASCII"/"UTF-8"/"UTF-16"), `address`, `length`. `data.applied_filters` lists active filters. #### `binary functions` List functions. ``` binary functions --project [--json] [--quiet] [--limit N] [--cursor C] [--no-exclude-external] [--no-exclude-thunks] ``` | Flag | Description | |------|-------------| | `--no-exclude-external` | Include external (imported) functions | | `--no-exclude-thunks` | Include thunk functions | **Output:** `data.items[]` with `name`, `address`, `size_bytes`, `confidence` ("HIGH"/"MEDIUM"/"LOW"/"UNKNOWN"), `name_source` (FunctionNameSource enum). External and thunk functions are excluded by default; use the flags to include them. `data.applied_filters` documents active exclusions. ### Focused Analysis #### `binary decompile` Decompile a function to reconstructed pseudocode. ``` binary decompile --project [--json] [--quiet] [--timeout N] ``` **Selector format:** `function:` or `function:
` **Exit codes:** 0 (decompiled), 8 (ambiguous selector), 9 (function not found), 12 (timeout) **Output:** `data.pseudocode` (string), `data.address_map` (line-to-address mapping), `data.diagnostics[]`. The output is labeled as reconstructed pseudocode, not original source. #### `binary disassemble` Disassemble instructions in a function or address range. ``` binary disassemble --project [--json] [--quiet] [--limit N] ``` **Target formats:** - `function:` or `function:
` — a function - `..` — an explicit address range **Exit codes:** 0, 2 (no target specified), 9 (unmapped range) **Output:** `data.instructions[]` with `mnemonic`, `operands`, `bytes` (hex string), `address`. Partially mapped ranges return `partial: true` with a diagnostic about the unmapped gap. #### `binary bytes` Read raw bytes at an address. ``` binary bytes --project
[--json] [--quiet] ``` **Exit codes:** 0, 2 (non-positive length), 9 (unmapped address) **Output:** `data.hex`, `data.base64`, `data.address`, `data.length`. Requests extending past segment boundaries return truncated results with `partial: true`. #### `binary xrefs` List cross-references to/from an entity. ``` binary xrefs --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Selector format:** `function:`, `function:
`, or raw address. **Exit codes:** 0, 9 (entity not found) **Output:** `data.references[]` with `from`, `to` (address objects), `kind` (ReferenceKind enum: CALL/JUMP/READ/WRITE/DATA/IMPORT/EXPORT/INDIRECT/UNKNOWN), `confidence`. #### `binary callers` List functions that call the target. ``` binary callers --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Exit codes:** 0, 8 (ambiguous), 9 (not found) **Output:** `data.callers[]` — each a function object with name and address. #### `binary callees` List functions called by the target. ``` binary callees --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Exit codes:** 0, 8 (ambiguous), 9 (not found) **Output:** `data.callees[]` — each a function object with name and address. #### `binary callgraph` Build a bounded call graph. ``` binary callgraph --project [--json] [--quiet] [--depth N] ``` | Flag | Description | |------|-------------| | `--depth` | Maximum depth (default: 3, max: 10) | **Exit codes:** 0, 2 (invalid depth), 8 (ambiguous selector), 9 (not found) **Output:** `data.graph` with `nodes[]` (functions) and `edges[]` (call relationships). Root node is the target function. Depth limit is disclosed. #### `binary search` Search for entities by name or pattern. ``` binary search --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Exit codes:** 0 **Output:** `data.results[]` — matching entities. `data.next_page_token` for cursor-based pagination. #### `binary trace` Find call paths between two entities. ``` binary trace --project --from --to [--json] [--quiet] [--depth N] ``` | Flag | Description | |------|-------------| | `--from` | Source entity selector (required) | | `--to` | Target entity selector (required) | | `--depth` | Maximum path depth (default: 5) | **Exit codes:** 0 **Output:** `data.paths[]` — each path is an ordered sequence of entities. Empty array if no path found. ### Security Analysis #### `binary triage` Run automated triage analysis. ``` binary triage --project [--json] [--quiet] [--profile PROFILE] [--limit N] ``` **Exit codes:** 0 (complete or partial), 11 (analysis failed) **Output:** Three separate categories: - `data.observations[]` — deterministic facts (no `confidence` field) - `data.heuristics[]` — rule-derived interpretations with `confidence` - `data.unknowns[]` — unresolved questions with `address` and `question` No free-form narrative or agent conclusions. Complete `provenance` block. #### `binary diagnostics` List all persistent diagnostics from the project lifecycle. ``` binary diagnostics --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Exit codes:** 0, 6 (project not found) **Output:** `data.items[]` with `severity` (INFO/WARNING/ERROR), `category`, `message`, `recoverable` (boolean), `timestamp`. #### `binary suspicious-apis` Detect suspicious API usage. ``` binary suspicious-apis --project [--json] [--quiet] [--limit N] ``` **Exit codes:** 0, 6 (project not found), 7 (no binary) **Output:** `data.matches[]` with `api_name`, `risk_score` (numeric), `confidence`, `rule_id`. `data.rules_applied[]` lists evaluated rule IDs. #### `binary capability-map` Suggest functional capabilities. ``` binary capability-map --project [--json] [--quiet] [--limit N] ``` **Exit codes:** 0, 6 (project not found), 7 (no binary) **Output:** `data.capabilities[]` with `name` (e.g., "cryptography", "networking"), `confidence`, `evidence[]` — each evidence item references a concrete source (import API, string, section pattern). ### Reporting #### `binary export-report` Export an analysis report. ``` binary export-report --project [--json] [--quiet] [--type {triage,focused,project}] [--format {markdown,json,html,pdf}] [--selector SELECTOR] [--profile PROFILE] [--output PATH] ``` | Flag | Description | |------|-------------| | `--type` | Report type: `triage` (default), `focused`, or `project` | | `--format` | Output format: `markdown` (default), `json`, `html`, or `pdf` | | `--selector` | Entity selector for `focused` reports (required for that type) | | `--profile` | Analysis profile to reference in methodology | | `--output` | Custom output path (must be within project directory) | **Exit codes:** 0, 6 (project not found) Markdown and JSON are authoritative formats. HTML and PDF are optional renderings — if a rendering dependency is unavailable, the command exits 0 with a warning and the canonical Markdown path. #### `binary audit` List append-only audit events. ``` binary audit --project [--json] [--quiet] [--limit N] [--cursor C] ``` **Exit codes:** 0, 6 (project not found) **Output:** `data.items[]` with `command`, `args`, `result` (SUCCESS/PARTIAL/ FAILED/CANCELLED/REFUSED), `duration_ms`, `timestamp`. ### Worker #### `binary worker` Manage the optional local worker daemon. ``` binary worker {start,stop,status} [--json] [--quiet] ``` | Subcommand | Description | |------------|-------------| | `start` | Start the worker (idempotent — reports "already running" if running) | | `stop` | Stop the worker (idempotent — reports "not running" if stopped) | | `status` | Report `running` (with PID and uptime) or `stopped` | The worker is optional. All commands function without it (one-shot mode). ## Pagination Cursor-based pagination is the standard for list commands. The pattern: 1. First call: `binary --project --limit 50 --json` 2. Read `data.next_cursor` and `data.has_more` from the response 3. Next page: `binary --project --limit 50 --cursor --json` 4. Final page: `data.next_cursor: null`, `data.has_more: false` **Cursor scoping:** Cursors are scoped to the combination of command, project, filters, and sort order. Using a cursor from a different filter set returns an error or empty result. ## Selector Syntax Entity selectors identify specific entities for focused analysis commands. | Format | Example | Resolves To | |--------|---------|-------------| | `function:` | `function:main` | Function by name | | `function:
` | `function:0x401000` | Function by entry address | | `
` | `0x402080` | Address (for xrefs, bytes) | | `..` | `0x401000..0x401200` | Address range (for disassemble) | **Disambiguation:** If a function selector matches multiple functions (e.g., common names or substring matches), the CLI returns exit code 8 (AMBIGUOUS_SELECTOR) with a list of candidates. Use a more specific selector (full name or address) to disambiguate.