::demo::agents ns
::store ::hot::store
LeadQualifier
meta {
doc: "Qualifies inbound leads, scores them, and routes to sales or nurture.",
agent: {
name: "Lead Qualifier",
tags: ["sales", "ai"],
},
}
type { threshold: Dec, model: Str }
qualifier LeadQualifier({threshold: 0.7, model: "claude-sonnet"})
leads ::store/Map({name: "demo:leads"})
on-signup
meta {
doc: "Accepts inbound signups via webhook and queues them for qualification",
agent: LeadQualifier,
webhook: {service: "leads", path: "/signup"},
}
fn (request) {
lead or(request.body, request.data)
::store/put(leads, or(lead.email, Uuid()), lead)
send("lead:new", lead)
{ok: true}
}
qualify-lead
meta {
doc: "Scores a lead and routes to sales if qualified, nurture otherwise",
agent: LeadQualifier,
on-event: "lead:new",
}
fn (event) {
lead event.data
score add(mul(rand(), 0.6), 0.3)
if(gte(score, qualifier.threshold),
send("lead:qualified", {email: lead.email, score: score}),
send("lead:nurture", {email: lead.email, score: score}))
}
notify-sales
meta {
doc: "Posts a Slack alert when a lead scores above threshold",
agent: LeadQualifier,
on-event: "lead:qualified",
}
fn (event) {
send("slack:post", {
channel: "#sales",
text: `Hot lead: ${event.data.email} (score ${round(mul(event.data.score, 100))})`,
})
}
weekly-pipeline
meta {
doc: "Generates a weekly pipeline summary and posts it to Slack",
agent: LeadQualifier,
schedule: "every monday at 9am",
}
fn (event) {
total add(20, rand-int(30))
qualified add(5, rand-int(10))
send("slack:post", {
channel: "#sales",
text: `Pipeline: ${total} leads, ${qualified} qualified this week`,
})
}