{"about":"Drive and debug Android apps from the command line: agent-first UI automation, a streaming JSON event timeline (UI, crashes, network), HTTP(S) interception, and an in-process runtime for debuggable apps.","commands":[],"effect_model":{"effects":[{"description":"reads host files or persistent host state","name":"host_read","wildcard":false},{"description":"creates, changes, or removes host files or persistent host state","name":"host_write","wildcard":false},{"description":"observes an Android device, emulator, or an already-running in-app endpoint","name":"device_read","wildcard":false},{"description":"changes Android device, emulator, app, debugger, or proxied-traffic state","name":"device_mutate","wildcard":false},{"description":"installs, replaces, or uninstalls an Android package","name":"package_install","wildcard":false},{"description":"starts a managed long-lived process or boots an emulator; short-lived helper probes are excluded","name":"process_start","wildcard":false},{"description":"stops a managed long-lived process, app, server, recorder, or emulator-owned process","name":"process_stop","wildcard":false},{"description":"creates, repairs, or removes an adb forward or reverse mapping","name":"port_mapping_mutate","wildcard":false},{"description":"downloads an external release, update, or dependency asset","name":"network_download","wildcard":false},{"description":"opens a persistent host listener such as the capture proxy or recorder control plane","name":"network_listen","wildcard":false},{"description":"runs an external subprocess whose transitive effects Olef cannot bound","name":"unbounded_external_command","wildcard":true},{"description":"reads, starts, extends, or ends a remote device provider session billed to the person's cloud project","name":"remote_device_session","wildcard":false},{"description":"changes Olef Cloud account, org, project, workspace, sharing, secret, or billing state","name":"remote_state_mutate","wildcard":false}],"global_conditional_effects":[{"effect":"host_write","reason":"the cross-cutting usage recorder appends one local metadata line after the invocation","when":"usage logging is explicitly enabled"}],"mode":"conservative_upper_bound","namespace_scope":"namespace commands expose the union of every public executable descendant","schema_version":1,"semantics":"listed effects may occur depending on flags and configuration; an effect omitted from both effects and conditional_effects is forbidden for Olef's implementation, except for transitive subprocess effects when unbounded_external_command is listed","wildcard_semantics":{"does_not_cover":"side effects performed directly by Olef","effect":"unbounded_external_command","scope":"transitive_external_subprocess_effects"}},"global_args":[{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":"dir","env":"OLEF_AUTHORITY_DIR","exclusive":false,"global":true,"help":"Shared same-host ownership directory. All cooperating clients must use the same authority","ignore_case":false,"last":false,"long":"authority-dir","name":"authority_dir","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"AnyPath","value_names":["AUTHORITY_DIR"],"value_terminator":null},{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":"OLEF_DEVICE","exclusive":false,"global":true,"help":"ADB serial. Defaults to $OLEF_DEVICE / $ANDROID_SERIAL / sole attached device","ignore_case":false,"last":false,"long":"device","name":"device","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":"d","takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["DEVICE"],"value_terminator":null},{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":"OLEF_TARGET","exclusive":false,"global":true,"help":"Named project device target (for example `mobile` or `tv`). Resolves a configured stable AVD name or physical serial. An explicit --device takes precedence","ignore_case":false,"last":false,"long":"target","name":"target","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["TARGET"],"value_terminator":null},{"action":"SetTrue","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":null,"exclusive":false,"global":true,"help":"Reassign an AVD target currently claimed by another project. This is an explicit isolation override and has no effect on direct --device use","ignore_case":false,"last":false,"long":"takeover","name":"takeover","num_args":null,"positional":false,"possible_values":["true","false"],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":false,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["TAKEOVER"],"value_terminator":null},{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":null,"exclusive":false,"global":true,"help":"Wait up to this many milliseconds for a device, lifecycle or named-AVD resolution lock held by another command. Use 0 to fail immediately. Default: 2000, or 15000 for read verbs (`ui dump`, `ui wait`, …) so parallel reads queue behind a running command","ignore_case":false,"last":false,"long":"lock-timeout-ms","name":"lock_timeout_ms","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["LOCK_TIMEOUT_MS"],"value_terminator":null},{"action":"Set","aliases":["apk"],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":"in","env":"OLEF_SERVER_APK","exclusive":false,"global":true,"help":"Olef's own device server from a local build, instead of the release's (not your app's APK): the server's test APK (app-debug-androidTest.apk, with the main APK found beside it), or a directory holding both. `--apk` and $OLEF_APK still work","ignore_case":false,"last":false,"long":"server-apk","name":"apk","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"AnyPath","value_names":["PATH"],"value_terminator":null},{"action":"SetTrue","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":null,"exclusive":false,"global":true,"help":"Skip the version check when installing — assume any provided/discovered APK is the right one. Implied by --server-apk; you only need this explicitly to override the cached download flow during local development without it","ignore_case":false,"last":false,"long":"any-apk-version","name":"any_apk_version","num_args":null,"positional":false,"possible_values":["true","false"],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":false,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["ANY_APK_VERSION"],"value_terminator":null},{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":"in","env":"OLEF_PROJECT","exclusive":false,"global":true,"help":"Path to an app's source project (Gradle root). Maps layout nodes and debugger locations to files and is surfaced by `doctor`. Defaults to the `project` field in config","ignore_case":false,"last":false,"long":"project-root","name":"project_root","num_args":null,"positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"AnyPath","value_names":["PATH"],"value_terminator":null},{"action":"SetTrue","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":null,"exclusive":false,"global":true,"help":"Silence Olef's own operational logs (the `tracing` lines written to stderr) so command output on stdout stays clean — handy when piping with `2>&1` or for the tidiest agent output. Real errors are still reported, and an explicit `RUST_LOG` still takes precedence","ignore_case":false,"last":false,"long":"quiet","name":"quiet","num_args":null,"positional":false,"possible_values":["true","false"],"require_equals":false,"required":false,"requires":[],"short":"q","takes_value":false,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["QUIET"],"value_terminator":null},{"action":"SetTrue","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":null,"exclusive":false,"global":true,"help":"Redact common secrets, PII, identifiers, and configured patterns from supported JSON/text output and diagnostic artifacts. Video applies it to marker labels; recovery identifiers and MP4 pixels remain sensitive","ignore_case":false,"last":false,"long":"redact","name":"redact","num_args":null,"positional":false,"possible_values":["true","false"],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":false,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["REDACT"],"value_terminator":null}],"name":"olef","next_actions":["olef commands --json --depth 1","olef commands --json --describe 'ui tap'","olef commands --guide net --json","olef config schema --json"],"remote_model":{"args_without_dir":"not a host path; never rewritten","dir":[{"description":"read by the command (file or directory tree): inside the project it becomes project-relative, otherwise it is uploaded before the exec","name":"in"},{"description":"written by the command (file, or a directory it creates): pointed at the exec's output area and downloaded to the given path before the exit code is returned","name":"out"},{"description":"read and written by the command: uploaded before the exec and downloaded again after it","name":"dir"}],"env_classes":[{"description":"passed to the worker unchanged","name":"forward"},{"description":"a host path the worker needs: rewritten like an `in` path argument","name":"translate"},{"description":"never sent to the worker","name":"drop"}],"env_vars":[{"about":"device selector (adb serial)","class":"forward","name":"OLEF_DEVICE"},{"about":"named project device target","class":"forward","name":"OLEF_TARGET"},{"about":"driver token of a device reservation","class":"forward","name":"OLEF_SESSION"},{"about":"the agent the viewer and MCP texts name (claude, codex, other)","class":"forward","name":"OLEF_AGENT"},{"about":"silence operational logs","class":"forward","name":"OLEF_QUIET"},{"about":"redact secrets and PII from output","class":"forward","name":"OLEF_REDACT"},{"about":"no in-band crash events","class":"forward","name":"OLEF_NO_EVENTS"},{"about":"don't inherit an MCP server's device lease","class":"forward","name":"OLEF_NO_INHERIT_SESSION"},{"about":"don't record the last error for feedback","class":"forward","name":"OLEF_NO_LAST_ERROR"},{"about":"the person turned agent device control off","class":"forward","name":"OLEF_DISABLE_AGENT_CONTROL"},{"about":"MCP viewer policy (always)","class":"forward","name":"OLEF_VIEWER"},{"about":"MCP server doesn't reserve attached devices","class":"forward","name":"OLEF_PANE_NO_RESERVE"},{"about":"MCP server's idle reservation release","class":"forward","name":"OLEF_PANE_IDLE_RELEASE_SECS"},{"about":"app apply library-change handling opt-out","class":"forward","name":"OLEF_APPLY_LIBS"},{"about":"app apply no-op skip opt-out","class":"forward","name":"OLEF_APPLY_SKIP"},{"about":"persistent Gradle worker opt-out","class":"forward","name":"OLEF_GRADLE_WORKER"},{"about":"debugger daemon idle timeout","class":"forward","name":"OLEF_DEBUGD_IDLE_TIMEOUT_MS"},{"about":"runtime daemon idle timeout","class":"forward","name":"OLEF_RUNTIMED_IDLE_TIMEOUT_MS"},{"about":"JDWP source-name filter opt-out","class":"forward","name":"OLEF_JDWP_NO_SOURCE_NAME_MATCH"},{"about":"native debugger: LLDB's own logs","class":"forward","name":"OLEF_LLDB_LOG"},{"about":"native debugger: trace process events","class":"forward","name":"OLEF_LLDB_TRACE"},{"about":"native debugger: lldb-server log","class":"forward","name":"OLEF_LLDB_SERVER_LOG"},{"about":"net check canary host name","class":"forward","name":"OLEF_NET_CANARY_HOST"},{"about":"0 turns off the session's cached facts","class":"forward","name":"OLEF_SESSION_CACHE"},{"about":"the test step a command belongs to (session journal)","class":"forward","name":"OLEF_STEP"},{"about":"the viewer's own helper commands stay out of the session journal","class":"forward","name":"OLEF_NO_JOURNAL"},{"about":"session evidence default under test run (steps, failures, off)","class":"forward","name":"OLEF_CAPTURE"},{"about":"the test a session runs; set by test run","class":"forward","name":"OLEF_TEST_NAME"},{"about":"marks commands run by test run","class":"forward","name":"OLEF_TEST_RUN"},{"about":"project root: the workspace root on the worker","class":"translate","name":"OLEF_PROJECT"},{"about":"driver-token file: upload it, or send its token as OLEF_SESSION","class":"translate","name":"OLEF_SESSION_FILE"},{"about":"debugger dex override file","class":"translate","name":"OLEF_JDWP_DEX"},{"about":"the session folder test run assigns a test","class":"translate","name":"OLEF_RUN_DIR"},{"about":"the test folder (its recorded screens); set by test run","class":"translate","name":"OLEF_TEST_DIR"},{"about":"the test script; set by test run","class":"translate","name":"OLEF_TEST_SCRIPT"},{"about":"host state directory; the worker sets its own","class":"drop","name":"OLEF_HOME"},{"about":"SHADOWDROID_* names this run read, for doctor","class":"drop","name":"OLEF_LEGACY_ENV_READ"},{"about":"host ownership directory","class":"drop","name":"OLEF_AUTHORITY_DIR"},{"about":"local server APK build","class":"drop","name":"OLEF_APK"},{"about":"local server APK build","class":"drop","name":"OLEF_SERVER_APK"},{"about":"skip the local server APK version check","class":"drop","name":"OLEF_ANY_APK_VERSION"},{"about":"local runtime agent build","class":"drop","name":"OLEF_RUNTIME_DIR"},{"about":"local dev-build discovery switch","class":"drop","name":"OLEF_DISABLE_DEV_SOURCES"},{"about":"host adb executable","class":"drop","name":"OLEF_ADB"},{"about":"Google Cloud access token for DDP remote devices","class":"drop","name":"OLEF_DDP_ACCESS_TOKEN"},{"about":"DDP credential source (`gcloud` skips ADC)","class":"drop","name":"OLEF_DDP_AUTH"},{"about":"set by net start for its daemon: the device relay token","class":"drop","name":"OLEF_NET_RELAY_TOKEN"},{"about":"host emulator executable","class":"drop","name":"OLEF_EMULATOR"},{"about":"host emulator GPU mode; the worker image sets its own","class":"drop","name":"OLEF_EMULATOR_GPU"},{"about":"host NDK","class":"drop","name":"OLEF_NDK"},{"about":"host:port JDWP endpoint on this host","class":"drop","name":"OLEF_JDWP_TCP"},{"about":"set by the CLI for its LLDB driver","class":"drop","name":"OLEF_LLDB_PORT"},{"about":"set by the CLI for its LLDB driver","class":"drop","name":"OLEF_LLDB_TOKEN"},{"about":"init: Claude Code executable","class":"drop","name":"OLEF_CLAUDE_BIN"},{"about":"init: Codex executable","class":"drop","name":"OLEF_CODEX_BIN"},{"about":"init: plugin marketplace","class":"drop","name":"OLEF_PLUGIN_MARKETPLACE"},{"about":"local skill refresh opt-out","class":"drop","name":"OLEF_NO_SKILL_REFRESH"},{"about":"local update check opt-out","class":"drop","name":"OLEF_NO_UPDATE_CHECK"},{"about":"update check endpoint","class":"drop","name":"OLEF_UPDATE_LATEST_URL"},{"about":"local usage log","class":"drop","name":"OLEF_USAGE_LOG"},{"about":"feedback target repository","class":"drop","name":"OLEF_FEEDBACK_REPO"},{"about":"known-issues endpoint","class":"drop","name":"OLEF_KNOWN_ISSUES_URL"},{"about":"0 runs one call locally in a linked project","class":"drop","name":"OLEF_CLOUD"},{"about":"cloud API base URL (development)","class":"drop","name":"OLEF_CLOUD_API"},{"about":"the org cloud calls act in, for one call","class":"drop","name":"OLEF_CLOUD_ORG"},{"about":"cloud credential store: keychain, secret_service or file","class":"drop","name":"OLEF_CLOUD_CREDENTIALS"},{"about":"connect straight to a worker, skipping the API (development)","class":"drop","name":"OLEF_CLOUD_DEV_CONNECT"},{"about":"worker mode; set by the worker","class":"drop","name":"OLEF_CLOUD_WORKER"},{"about":"viewer hub public origin; set by the worker","class":"drop","name":"OLEF_PANE_PUBLIC_ORIGIN"},{"about":"viewer proxy key; set by the worker","class":"drop","name":"OLEF_PANE_PROXY_KEY"},{"about":"MCP bridge whose lease an exec inherits; set by the worker from the exec's lease","class":"drop","name":"OLEF_LEASE_OWNER"},{"about":"set by `lab` when it re-runs itself with the lab's adb server and key","class":"drop","name":"OLEF_LAB_ENV"},{"about":"device host: the local relay token for `devices attach --relay`","class":"drop","name":"OLEF_RELAY_TOKEN"},{"about":"device host: the lab device's name for `devices attach --relay`","class":"drop","name":"OLEF_RELAY_NAME"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_BASE_URL"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_MAIN_APK_SHA256"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_TEST_APK_SHA256"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_RUNTIME_ARM64_V8A_SHA256"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_RUNTIME_ARMEABI_V7A_SHA256"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_RUNTIME_X86_64_SHA256"},{"about":"build time","class":"drop","name":"OLEF_RELEASE_RUNTIME_X86_SHA256"},{"about":"build time","class":"drop","name":"OLEF_VERSION_SUFFIX"},{"about":"build time","class":"drop","name":"OLEF_THIRD_PARTY_NOTICES"},{"about":"build time","class":"drop","name":"OLEF_REQUIRE_NOTICES"},{"about":"tests","class":"drop","name":"OLEF_BLESS"},{"about":"tests","class":"drop","name":"OLEF_TEST_PANIC"},{"about":"tests","class":"drop","name":"OLEF_TEST_APP_STATE_FAILPOINT"},{"about":"tests","class":"drop","name":"OLEF_WIRE_TEST_SERIAL"}],"runs":[{"description":"executed on the cloud worker; host-path arguments and the environment are rewritten","name":"remote"},{"description":"executed on this host, never sent to the worker","name":"local"},{"description":"executed on this host and on the worker; the client merges both results (`devices`: the worker part only while a session is running)","name":"both"}],"schema_version":1,"unlisted_env":"drop"},"root_args":[{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":[],"default_values":[],"dir":null,"env":"OLEF_SESSION","exclusive":false,"global":false,"help":"Driver token returned by session open or handoff; required for a reserved device. Pass it before the subcommand (`olef --session TOKEN ui dump`)","ignore_case":false,"last":false,"long":"session","name":"session_token","num_args":null,"position":"before_subcommand","positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"Unknown","value_names":["session_token"],"value_terminator":null},{"action":"Set","aliases":[],"allow_hyphen_values":false,"allow_negative_numbers":false,"conflicts_with":["session_token"],"default_values":[],"dir":"in","env":"OLEF_SESSION_FILE","exclusive":false,"global":false,"help":"Read the driver token from a private file created by session open/handoff --token-out","ignore_case":false,"last":false,"long":"session-file","name":"session_file","num_args":null,"position":"before_subcommand","positional":false,"possible_values":[],"require_equals":false,"required":false,"requires":[],"short":null,"takes_value":true,"trailing_var_arg":false,"value_delimiter":null,"value_hint":"AnyPath","value_names":["SESSION_FILE"],"value_terminator":null}],"schema_version":4,"version":"3.0.2"}