Inspiration

We run Edmund Cloud Solutions, a small cloud/AI consultancy. Inquiry emails to bookings@ used to wait hours for a reply. We wanted an agent that answers in minutes — without ever sending a word unsupervised.

What it does

A customer email arrives. Drago, our Qwen-powered agent, classifies it against six service domains, recalls context from memory, and drafts a quote/booking reply — then stops. The draft goes to Telegram with one-tap Approve/Reject. Only on approval is the reply released, the booking logged to Notion, and the run traced. Reject, and nothing ever reaches the customer.

How we built it

All reasoning routes through qwen3.7-plus on Qwen Cloud via a single entry point (src/agent.py::qwen()). The pipeline is Contract → Execute → Verify → Observe → Control: a typed inquiry schema and acceptance criteria written before the agent runs; deterministic checks plus Qwen grading on every draft (fail → forced retry → escalate); every run logged as a replayable JSON trace; and a human gate on Telegram plus a one-action kill switch. The handler (src/handler.py) is built for Alibaba Cloud Function Compute.

Challenges we ran into

Alibaba Function Compute activation entered Alibaba's manual review queue right at submission time — so the FC-ready handler runs locally in our demo, while every model call already runs on Alibaba Cloud via Qwen Cloud (see proof clip). Getting the verify layer to reject confidently-wrong drafts without blocking good ones took the most iteration.

What we learned

Human-in-the-loop is an architecture decision, not a feature: making "the agent cannot send" a structural property (Drago has no send tool) is far more robust than prompting it to be careful.

What's next

Deploy the handler to Function Compute the moment activation clears, wire the live bookings@ inbox end-to-end, and point our website's contact form into the same pipeline.spiration

Built With

Share this project:

Updates

Submission history