Skip to content

Develop AUZM Modules

An AUZM module is a Rust cdylib loaded inside a matching app process. Keep the payload small, prove readiness before action, and expose the final behavior as one MCP tool.

Start From the Template

sh
kam init my-auzm -t auzm_template
cd my-auzm
tools/build.sh

The template embeds metadata strings into the .so:

text
androiduse.auzm.module_id=<module-id>
androiduse.auzm.author=<author>
androiduse.auzm.email=<email>
androiduse.auzm.project_url=<url>
androiduse.auzm.license=<license>

Development Loop

  1. Define auzm/scope.
  2. Build payload.so.
  3. Install or hotpush the registry entry under .config/androiduse/auzm.d/<module-id>/.
  4. Restart the target app.
  5. Verify through MCP response, logcat, or app-visible proof.

Start With a Probe

The first payload should be read-only. Report:

  • active activity or process name
  • fragment or object candidates
  • target class names
  • readiness state
  • why the action cannot run yet

Do not report success from "JNI returned", "no Java exception", queued request completion, or a generic byte signal. Report success only after a target-specific app callback, response object, server receipt, or user-visible confirmation.

Verification Gates

sh
tools/closed_loop_local.sh
tools/closed_loop_mcp_http.sh
cargo fmt -- --check
cargo check -p androiduse-cli
cargo check -p androiduse-payload
tools/build_zygisk_module.sh
tools/build_payload_module.sh

tools/closed_loop_local.sh runs the MCP HTTP loop by default. If a restricted sandbox cannot bind 127.0.0.1, run ANDROIDUSE_SKIP_LOCAL_MCP_HTTP=1 tools/closed_loop_local.sh for the remaining local checks, then run tools/closed_loop_mcp_http.sh again outside the sandbox.

When a device is connected, run the read-only device gate:

sh
tools/closed_loop_device_readonly.sh

It checks module files, root access, MCP tools/list, dynamic_tool_status, and Zygisk/payload logs without installing or mutating the device. If more than one authorized ADB device is attached, run it with ANDROIDUSE_ADB_SERIAL=<serial>. The gate fails when logcat has no AndroidUseZygisk or AndroidUsePayload evidence.

Research and education use only.