-
-
Notifications
You must be signed in to change notification settings - Fork 0
config
disrobe reads an optional .disrobe.toml so a project can set its own defaults instead of repeating the same global flags on every invocation.
Values are merged from three layers, lowest precedence first:
-
Built-in defaults: what
disrobedoes with no config and no flags. -
.disrobe.toml: the discovered or explicitly named config file. - CLI flags: anything you type on the command line.
A flag you actually pass always wins over the config file; a flag you leave off falls back to the config value, and only then to the built-in default. "Did the user pass this flag" is decided by clap's value source, so there is no ambiguity between --json being absent and being false.
- With
--config <PATH>, that file is loaded. A missing path is a hard error (DR-CLI-0332). - Without
--config,disrobewalks up from the current working directory looking for.disrobe.toml, exactly the way cargo findsCargo.toml. The first one found wins. If none exists, the built-in defaults are used.
Malformed TOML (DR-CLI-0330) and unknown keys are hard errors: a typo fails fast instead of being silently ignored.
| Command | Purpose |
|---|---|
disrobe config / disrobe config show
|
Print the resolved effective config and the file it came from. Honors --json. |
disrobe config init [--out <PATH>] [--force] |
Write a fully documented .disrobe.toml template (default ./.disrobe.toml). |
[output]
dir = "out" # default output directory for chain/auto runs
emit = ["source", "manifest"] # default --emit kinds where a pass accepts them
json = false # default machine-output toggles (CLI flags still override)
ndjson = false
sarif = false
color = "auto" # auto | always | never
progress = "auto" # auto | always | never
verbosity = "warn" # warn | info | debug | trace
quiet = false
[execution]
threads = 8 # worker pool size (default: detected CPU count)
force = false
in_place = false
no_cache = false
cache_dir = "/var/cache/disrobe" # content-addressed .dr envelope cache (default: OS cache dir)
dry_run = false
seed = 42 # RNG seed for non-deterministic backends
max_depth = 8 # default chain depth for `auto`
[backends]
py = "native" # native (in-tree CPython 1.0..3.15 engine; the only supported value)
jvm = "cfr" # cfr | vineflower | procyon | jadx
dotnet = "ilspy" # ilspy | dnspy | dnspyex | de4dot
wasm = "wat" # json | rust | ts | wat | c
lua = "native"
[passes]
enable = ["pyarmor.unpack", "py.decompile"] # restrict chain runs to these passes
disable = ["native.packer-unpack"] # never run these passesAll tables and all keys are optional. An empty file is valid and resolves to the built-in defaults.
This wiki is generated from docs/src in the disrobe repository by scripts/wiki_sync.py. Edit the docs there, not the wiki pages here.
Getting started
Architecture
- Overview
- The five-rung IR ladder
- Passes and the capability model
- The chain runner
- The .dr envelope
- LLM sidecar and provenance
Reverse-engineering toolkit
Language and format guides
- Python
- JavaScript / TypeScript
- WebAssembly
- JVM and Android
- .NET / CIL
- Native (PE / ELF / Mach-O)
- Go
- Lua
- PHP
- Ruby
- BEAM (Erlang / Elixir)
- Swift / Objective-C
- ActionScript 3 / Flash
- Mobile (Hermes / Flutter)
- Python pickle
- Shell / PowerShell
- Containers and archives
Reference
- CLI overview
- Global flags
- Command reference
- Project configuration
- Batch directory processing
- Run reports
- Analysis-depth commands
- Diff and guard tooling
- The daemon: HTTP, gRPC, LSP, MCP
- Use it as a library
- Python bindings
- The browser playground
- Forensics and malware-safety posture
- Threat model
Integrations
Project