AI & agents
One sentence go in, one funnel come out — and then the same checks like everybody else
"Win back customers wey buy once last year and no open anything since." You put dat one in; one funnel graph come back. Wetin make am worth having no be the generation — plenty things dey generate — but say dem put the result through exactly the validator wey dey gate one human work, and then dry-run so you fit read every message wey e go send before anybody receive one.
Two jobs, wey dem keep separate
Funnel generation dey take one description and e go return one graph. Na deliberately di same contract wey di ecosystem other AI panels dey use — one message, one optional object, and whether to replace or patch — over di same gateway, on di same operational path wey already dey run for production elsewhere.
Creative generation na di same contract wey dem apply to one document: generate or patch one e-mail, one page or one form. Because one creative na document wey get published schema, when one model dey patch am, e dey do something structured instead of to produce plenty HTML and dey hope.
Di system prompt na distilled copy of di funnel schema, and dem dey update am anytime di schema grow one key. One stale prompt na di failure mode here: di model go dey write vocabulary wey no dey exist again, di result go look totally reasonable, and di validator go reject am for reasons wey di person wey dey read no fit see.
Personalisation per contact, wey dem cache
One ai_generate node dey fill merge variables at send time for each contact. Dem dey meter am against your quota and dem dey cache am by di creative and one hash of di contact attributes wey e depend on — without dat cache, you go pay for one generation per recipient on every single send, and na bill wey nobody go budget for two times.
- 1Your sentence"Win back customers wey buy once last year and no open anything since den."
- 2Graph wey dem returnEntry, waits, one condition, two sends, one goal. Named nodes, real vocabulary.
- 3Dem don validate amOne entry, all nodes dey reachable, every cycle get one wait, every send get one creative and one subject.
- ↻Dem don repair amIf di check fail, dem go hand am back with di errors and dem go try again — and dem go report di attempt count, dem no go hide am.
- 4Dem don simulate amEvery message wey e go send and di day wey e go land, before you don publish anything.
Di same validator like one human ownDem no send anything
Di MCP server
Make one agent fit operate di product properly
Dem dey serve am by di same process at /mcp over streamable HTTP, dem dey authenticate am with one castomo token or one API key, and dem scope am to one project. E dey exist because "one agent fit call your REST API" na true for everything and e no useful for anything; wetin one agent need na one described surface with di dangerous parts wey dem gate.
Contacts
list_contacts, get_contact, upsert_contact, list_segments, preview_segment. Ask who dey inside one segment before you do anything to dem.
Funnels
list_funnels, get_funnel, create_funnel, generate_funnel, check_funnel, publish_funnel, pause_funnel, start_funnel_run.
simulate_funnel
Di most valuable tool inside di set by far. Dry-run one contact through one funnel and you go get back di path wey dem take and di messages wey dem go send. Without am, one agent go dey write automations blind.
Content
create_email and preview rendering. Markdown go in, one rendered creative go come out — e far more reliable than to ask one model for e-mail HTML directly.
Campaigns and reports
list_campaigns, get_campaign, report_campaign. One agent wey fit read di numbers na agent wey fit tell you something wey you no already know.
Resources
Di funnel schema, di creative schema, di merge-variable catalogue and di segment predicate grammar — dem dey serve all of dem as resources, so one agent go work from di current definitions instead of from memory.

E go write di variant. You go keep di veto.
Di gate, and why e be one hard stop
Every send-capable tool dem don gate am. One test send to yourself na free. Anything wey reach real people need one explicit confirmation flag and your billing quota go cap am — both, no be either one.
Di reason simple and e no shine. One agent wey misread one prompt no suppose fit mail fifty thousand people, and no amount of careful prompting na control. Na one of di few places wey one hard stop truly beat one good default, and dem implement am as one hard stop.
Di same reasoning run through di design. One agent fit draft, check, simulate, preview and report all day without one single message comot. Di one action wey no fit reverse na di one action wey need one human to don say yes.
- ✓Read anything wey dey inside scopeContacts, segments, funnels, campaigns, reports — inside one project.
- ✓Write am and check amMake funnel, fix creative, run validator, run simulation.
- ✓Send testGo your own verified address. E free, and e use the real renderer.
- !Send am for realClear
confirm: true, and e dey inside quota. Both of dem. None of dem na suggestion.
E dey limited to one projectQuota na the ceiling
Wetin the model really know about your business
Generator wey get nothing except your sentence go write generic copy, and everybody go see am. If you give am URL, ClickSomo fit read your site — small crawl, company profile — so the funnel wey e draft go dey about wetin you really dey sell, and the copy go use your own words back to you. Na that one be the whole difference between demonstration and feature.
We dey treat scraped text like input wey fit harm. We fence am before any model read am, and we clean am before we render any part of am, because text from page wey you no write na exactly where instruction wey target model fit hide.
The honest part: generated funnel na good draft, no be finished campaign. E go get one wait wey you no agree with and one subject line wey you no go write. Twenty minutes of editing na normal — and na twenty minutes instead of whole afternoon because the shape, the checks and the simulation don already dey there. Generation sef no dey available on deployment wey no get AI key configured, and the API go talk am plainly instead of failing in a confusing way.