How Qwen 3.8 Max Turns Plain English Into On-Chain Guardrails A developer built Sentinel, an AI policy assistant for the Monad Metropolis hackathon that uses Alibaba's Qwen 3.8 Max (qwen-max via the DashScope OpenAI-compatible API) to translate plain-English intent into on-chain guardrail parameters such as spending limits, recipient whitelists, time-locks, and circuit breaks. The assistant returns strict JSON matching a fixed PolicyParams schema at temperature 0.3, prefills the policy-creation form, and submits a real transaction to the SentinelRegistry/SentinelGuard contracts on Monad Testnet, with a local parser fallback when no API key is set. Sentinel — AI Policy Assistant, built for the Monad Metropolis hackathon Alibaba Cloud / Qwen 3.8 Max bounty Sentinel puts hard limits on AI agents before they can move money on-chain: spending limits, recipient whitelists, time-locks, and circuit breaks. The contracts enforce them. But there was a UX gap — the people who most need guardrails solo developers running trading agents know what they want "don't let my agent lose more than X" , but not how to translate that intent into smart-contract parameters. What does "1 MON per transaction" become? What's a sane daily limit? How long should a time-lock be? Before Qwen, users had to hand-fill six numeric fields and hope. Qwen 3.8 Max closes that gap. We integrated it as the AI Policy Assistant : you type your intent in plain language, Qwen parses it into exact on-chain policy parameters, and the policy is created — a real transaction on Monad Testnet. The assistant lives in frontend/src/components/AiAssistant.tsx and calls the DashScope API OpenAI-compatible mode with the qwen-max model: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions model: "qwen-max" temperature: 0.3 The system prompt tells Qwen it is a policy-configuration assistant for an on-chain guardrail system, and constrains it to respond only with valid JSON matching a fixed schema: { "maxSpendPerTx": "