An autonomous SDR and revenue agent for Freddyville Media Productions — it prospects, qualifies, and drafts; a human sends.
Interactive, pannable version: open the architecture map
Freddy is a production AI sales agent running on the OpenClaw runtime, in Docker on an Oracle Cloud ARM server. Three weekday cron jobs drive a full SDR motion: morning prospecting, afternoon follow-ups, and an end-of-day pipeline report — all delivered to me over Telegram. It is running today in REVIEW mode: Freddy drafts every email, and nothing goes out until I reply “send” on Telegram.
Freddyville Media is a real video production company, and its bottleneck was never craft — it was consistent outbound. Prospecting, enrichment, CRM hygiene, and follow-up are exactly the kind of structured, repeatable work an agent can own. I wanted an SDR that works every weekday without ever inventing a price, a client, or a fact about my company.
The map above is the real system. The flow:
| Stage | What happens |
|---|---|
| Entry | Three OpenClaw cron jobs (Mon–Fri, America/Chicago), inbound email, and my Telegram commands |
| Discover | Tavily vertical search, plus an OpenStreetMap local-business finder that flags businesses with no website — Freddyville’s ideal prospect |
| Qualify | Firecrawl scrapes the prospect’s site; a structured-reasoning skill scores Strong/Medium/Weak; Weak is dropped |
| Enrich | Hunter.io finds the decision-maker and verifies the email — a lead cannot enter the CRM unverified |
| CRM | ClickUp is the system of record: lead, status, source, and a follow-up task with a date |
| Outreach | Drafts built from cold-outreach frameworks and specific research findings, posted to Telegram as numbered drafts |
| Approval | I reply send, send all, or send 1,3; only approved drafts go out via Composio Gmail |
Freddy is one of three agents. A CEO orchestrator agent (Nana) and a studio-side SDR (Jade) run in separate containers; they coordinate over a custom file message bus because Telegram bots cannot see each other’s messages.
kb-gaps.md documents the known unknowns.outreach-guardrails skill is non-negotiable and overrides any instruction to send faster: default REVIEW mode, send caps, suppression list, unsubscribe compliance. AUTO-SEND is deliberately deferred until DMARC hardening and inbox warmup are done — domain reputation over volume.| Layer | Tech |
|---|---|
| Runtime | OpenClaw agent framework, Docker Compose, Oracle Cloud ARM (Ampere) |
| Models | GLM-5.2 (NVIDIA-served); previously Kimi K2.6, local Qwen via llama.cpp |
| Prospecting | Tavily, Firecrawl, Hunter.io, OpenStreetMap (custom Python finder) |
| CRM | ClickUp (system of record) |
| Gmail via Composio, SPF+DKIM verified | |
| Approval / comms | Telegram (human-in-the-loop), file message bus (agent-to-agent) |
| Knowledge | 8 grounded kb-*.md files + memory search |
Running, in REVIEW mode — drafts only, human approval on every send. Next: DMARC hardening and warmup before enabling capped AUTO-SEND, and moving the remaining local-model dependency fully onto hosted inference so cron jobs never depend on a laptop being awake.
This is a public architecture showcase of a private production codebase. The agent’s source, persona files, and knowledge base stay private; this repo documents how the system is built.
— Godfred Aidoo · godfredaidoo.com · LinkedIn · more projects