An attacker did not steal a private key, exploit a zero-day vulnerability, or break a smart contract to drain $150,000–$200,000 from an autonomous AI agent wallet. They posted a public X reply encoded in Morse code dots and dashes.

Because the agent relied on a probabilistic Large Language Model (LLM) to both decode untrusted social replies and invoke state-mutating wallet transfer tools inside a single shared context window, the encoded instruction bypassed keyword guardrails, decoded into a transfer command, and executed immediately.

Here is the architectural post-mortem of how encoded indirect prompt injection bypasses prompt guardrails and "multi-model LLM juries"—and how the {^} Protocol One trust stack (Identity Physics, DocLock 1.5 with CLK-ATTEST-1, Tri-Signature HITL quorum, Alfa Code, G.A.I.L., and the ACP (Alfa Command Protocol) pre-deterministic outcome engine) stops unsealed tool calls in < 1 ms.

1. Anatomy of the $150k–$200k Morse Code AI Wallet Drain

The vulnerable agent architecture combined three patterns that are now common across autonomous treasury, support, and DevOps bots:

  1. Public Untrusted Ingestion: The agent continuously read public X replies and mentions to interact with community members.
  2. Lexical & Prompt-Level Guardrails: The system prompt instructed the model never to send funds without authorization, while surface string filters scanned incoming text for forbidden words (transfer, send, drain, withdraw).
  3. Direct Tool-Call Execution: When the LLM emitted a structured tool call (transfer_funds(...)), the host runtime executed the wallet transaction using its hot key.

When the attacker replied with Morse code dots and dashes (.... . .-.. .--. / ...), the string filter saw zero English keywords. Inside the LLM's transformer blocks, however, token attention decoded the Morse sequence and collapsed the data plane (untrusted user reply) into the control plane (system execution instructions).

In the {^} Protocol One architecture (0x7B 0x5E 0x7D), two foundational canons prohibit this design:

  • G.A.I.L. (Guardian Adaptive Intelligence Layer) Canon: "The AI reads the proof; it is never the proof."
  • DocLock 1.5 (CLK-ATTEST-1) Boundary: "DocLock proves a document is unchanged, not that what it says is true."

2. Why "Multi-Model LLM Juries / Greyboxing" Still Fail Under Encoding & Semantic Drift

A popular reaction to the Morse code exploit is Multi-Model LLM Juries ("Greyboxing"): placing three or five separate LLMs in front of the agent to paraphrase, rewrite, and vote on whether an incoming message is safe before allowing the wallet agent to act.

From a formal systems-security perspective, multi-LLM voting has three structural flaws:

Architectural Axis Multi-Model LLM Juries ("Greyboxing") {^} Identity Physics + Pre-Deterministic ACP Engine
Evaluation Function Probabilistic consensus over untrusted text tokens Deterministic 5-input state table (0% LLM text influence)
Obfuscation Surface Vulnerable to novel ciphers, split-turn payloads, and semantic drift across rewrites Immune: raw or decoded prompt text has zero fields in ACPProofInputs
Human Intent Binding (WHO) None (infers intent from conversation text) Tri-Signature HITL quorum inside a [0.05s, 10.0s] physical signing burst
Artifact & Time Integrity (WHAT / WHEN) Unsigned JSON arguments DocLock 1.5 SHA-256 payload seal + CLK-ATTEST-1 RFC 3161 attested time
Origin & Audit (WHERE / OVERSIGHT) Non-deterministic model explanations Alfa Code coordinate + G.A.I.L. SHA-256 receipt re-derivation
Execution Latency 800 ms – 4,500 ms across multiple LLM API calls < 1 ms in pure Python 3 Standard Library

Instead of asking five probabilistic models whether a Morse code string "sounds malicious," Identity Physics + ACP (Alfa Command Protocol) separates text comprehension from execution authority. Every state-mutating tool call must resolve to a finite pre-deterministic outcome:

  • REJECT_UNSEALED_ARTIFACT
  • HOLD_STEP_UP_HITL
  • QUARANTINE_BROKEN_SEAL (plus REJECT_BURST_WINDOW_EXCEEDED / REJECT_ATTESTATION_MISMATCH)
  • ALLOW_EXECUTE

3. Reproducible Python 3 Snippet (acp_engine.py --demo-morse-attack)

Below is the exact zero-dependency Python 3 verification showing how acp_engine.py evaluates the Morse code wallet drain attempt in < 1 ms:

# File: acp_engine.py (Zero-Dependency Python 3 Standard Library) # Run: python3 acp_engine.py --demo-morse-attack from acp_engine import ( ACPProofInputs, TIER_1_TREASURY_OR_PRIVILEGE, DOCLOCK_VERIFIED, TIME_ATTESTED, evaluate_acp_outcome, ) # Even after an LLM decodes a Morse code X reply into a proposed $200k transfer, # the pre-deterministic ACP gate checks the 5 Identity Physics proof inputs: morse_attack_vector = ACPProofInputs( action_id="WALLET-TX-2026-1027-MORSE-REPLY", action_tier=TIER_1_TREASURY_OR_PRIVILEGE, tri_signature_verified=False, # Public X reply has NO Tri-Signature HITL quorum  tri_signature_burst_seconds=0.0, # Outside [0.05s, 10.0s] physical signing burst  doclock_verdict=DOCLOCK_VERIFIED, payload_sha256_match=True, alfa_code_valid=False, # Untrusted external sender lacks Alfa Code coordinate  cryptolock_time_axis=TIME_ATTESTED, ) receipt = evaluate_acp_outcome(morse_attack_vector) assert receipt["predetermined_outcome"] == "REJECT_UNSEALED_ARTIFACT" assert receipt["execution_permitted"] is False assert receipt["matched_rule_id"] == "ACP-RULE-04-UNSEALED-OR-UNSIGNED" assert receipt["gail_audit"]["gail_verdict"] == "AUDIT_PASS_DETERMINISTIC" print(f"Blocked in <1ms: {receipt['predetermined_outcome']} ({receipt['matched_rule_id']})") 

Because a public social reply cannot forge an out-of-band Tri-Signature human intent receipt or a registered Alfa Code coordinate (ALFA-P1-ORG-MESA-85206-000001-E3), the ACP truth table returns REJECT_UNSEALED_ARTIFACT every single time—regardless of whether the prompt was written in English, Morse code, Base64, Braille, or hexadecimal.

4. Interactive Simulator & Production Governance Toolkits