AI copilot layer for the Chameleon Ultra RFID emulation device. Provides an enhanced REPL shell with Kimi AI assistant integration for reading, cracking, emulating and writing RFID/NFC cards.
Rango defines 12 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (run_, get_, dict_, card_). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. However, parameter descriptions lack detail on constraints, formats, and valid ranges. Output schemas are not documented. Error handling is minimal, no guidance on recovery or retryability. Security concerns: run_chameleon_command accepts arbitrary CLI strings, risking command injection if user input is not sanitized. dict_import accepts arbitrary file paths without validation. No confirmation gates documented for destructive operations (card_remove). Composition is reasonable, tools are single-purpose and chainable (dict_show output feeds into run_chameleon_command). Overall: solid foundation, but lacks LLM-optimization depth in parameter constraints and error messaging.
Save a card dump file into the host library under a user-chosen name.
List the host-side card library (saved dumps, independent of the 8 device slots).
Remove a card from the host library.
Show metadata + dump path of a library card (use the path with 'hf mf eload -f').
Create a .dic key dictionary from a list of 12-hex-char Mifare keys.
Import an existing key file from an arbitrary path into the dictionary store.
List local Mifare key dictionaries (.dic files) with key counts and paths.
Parameter descriptions lack format constraints and valid ranges. E.g., 'keys' in dict_create says 'List of 12-hex-char Mifare keys' but does not specify: must be exactly 12 hex chars, case-insensitive or uppercase only, or what happens if invalid. LLMs cannot infer these constraints from names alone.
Output schemas are not documented. Tools return results but LLMs do not know the structure of dict_list, card_list, dict_show, or card_show responses. Without documented output schemas, agents cannot reliably extract fields for downstream tool calls.
run_chameleon_command accepts arbitrary CLI strings with no input validation or sanitization. If user input is passed through to this tool, command injection is possible. No mention of confirmation gates for write/flash/cracking commands in the schema, only in the description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Merge several dictionaries into a new one (deduplicated).
Create the starter dictionary of well-known public default Mifare keys (factory defaults, MAD key, etc.). Good first step before dictionary attacks.
Return the keys of a dictionary as a list of 12-hex strings. Use to build 'hf mf fchk' commands with positional keys — on this CLI build fchk's --dic flag is a broken upstream stub, keys must be passed positionally.
Get the exact usage/parameters of a Chameleon CLI command, e.g. 'hf mf nested'.
Execute a Chameleon Ultra CLI command on the device and return its output. Use exact CLI syntax; call get_command_help first if unsure. Write, flash and cracking commands require user confirmation, which is handled automatically.
dict_import accepts arbitrary file paths without validation. No checks for path traversal (e.g., '../../../etc/passwd'), symlink attacks, or file size limits. LLMs could be tricked into importing sensitive files.
Error handling is absent. No guidance on retryability, user-fixable errors, or recovery steps. If run_chameleon_command fails, the LLM has no actionable next step. If dict_create rejects invalid keys, the error message is not specified.