← Marketplace
3 agents
4 chests
4 contexts
1 loop
1 table
1 vault10 yokes
9 belts
Agency Outreach Starter
Find, verify, draft, approve, send: one-off outreach to agency founders on treg data. Human tap before every send.
Run Agency Outreach Starter using Yoke Credits. Compute, AI calls, and retained storage are metered. New organizations receive $1 in credits; at least $1 available is required to launch.
No subscription · pause whenever you like
The board
commsdatarelation
What's inside
- agents
- Prospector, Writer, Sender
- chests
- Outreach Chest, Outreach Side Chest 1, Outreach Side Chest 2, Outreach Side Chest 3
- contexts
- PROSPECTS SCHEMA, PROSPECTING RULES, OUTREACH OFFER, OUTREACH SETUP
- loop
- Outreach Loop
- table
- prospects
- vault
- OUTREACH VAULT (fill in)
Swarm file
View the swarm file (691 lines)
# Agency Outreach Starter v0.5 — belt run, vault, table schema; ships no approval or email-provider Scripts (buyer wires their own; see OUTREACH SETUP). Layout is grid-position based: keep the loop, belt, loader, agent and chest tiles adjacent as placed (their order is the flow). One fire = one package: Loop -> belts -> loader -> Prospector -> loader -> belts -> loader -> Writer -> ... -> Sender -> loader -> belts -> loader -> Outreach Chest. Side loader + side chest under each agent hold overflow. Set the loop to FIRE ON DEMAND for the pilot. Models pinned: Prospector/Sender haiku, Writer sonnet.
pipes = []
cam_x = 0.0
cam_y = 0.0
cam_zoom = 1.0
prompt_loaders = []
http_fetch_loaders = []
webhook_loaders = []
trash = []
last_seq = 0
last_hash = ""
[[agents]]
id = "aos-vault"
name = "OUTREACH VAULT (fill in)"
gx = 0
gy = 0
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-vault"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-schema"
name = "PROSPECTS SCHEMA"
gx = 2
gy = 0
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
PROSPECTS SCHEMA (table `prospects`; one row per person; row key = email with @ -> _at_ and . -> _)
Required: status (new | ready | review-risky | hold | review | approved | skipped | sent | replied | unsubscribed | converted), first_name, last_name, title, company_name, company_url, email, email_source (search_free | find), verify_status (valid | risky | invalid | unknown), verify_provider, country.
Optional: industry, revenue, employee_count, linkedin, find_cost_micro, verify_cost_micro, call_id, hold_reason, draft_subject, draft_body, draft_version, approved_by, approved_at, sent_at, provider_message_id, replied, unsubscribed, converted, batch.
Index row `_index`: {"rows":[{"key","email","company","verify","status"}], "count", "updated"} — keep it current; `yoke ls` shows 0 rows for tables.
Engine behaviour: `yoke read prospects/<key>` returns {"content": "<json>"} — unwrap once; strip the engine's "id" field before writing the row back.
Vault key names (OUTREACH VAULT): TREG_TOKEN (treg agent token; Prospector) · EMAIL_PROVIDER_KEY (Sender). Add others as your provider needs; never write values into contexts or rows.
"""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-table"
name = "prospects"
gx = 8
gy = 0
width = 2
height = 2
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-table"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-rules"
name = "PROSPECTING RULES"
gx = 5
gy = 1
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
PROSPECTING RULES (fill the {PLACEHOLDERS}; keep the budgets)
Segment: {TITLES} at {COMPANY_TYPES} in {COUNTRY}, <= {MAX_EMPLOYEES} staff.
Search (free): POST https://treg.to/call/quickenrich.people.search {"title":{"include":[{TITLES}]},"country_code":{"include":["{COUNTRY_CODE}"]},"bio_li":{"include":[{BIO_KEYWORDS}]},"has_email":true,"per_page":50,"page":1}; page with meta.next_cursor.
Find (per hit): POST /call/blitzapi.people.email.find {"person_linkedin_url": <employee_linkedin>} - misses are free.
Verify: GET /call/contactout.people.email.verify?email=<email> (free; may be out of capacity) else POST /call/trykitt.people.email.verify {"email": <email>, "realtime": true}. Keep output.validity; send only "valid".
Headers on every treg call: X-Treg-Route-Max-Cost: 0.002 | X-Treg-Route-Waterfall: 0 | X-Treg-Meta: customer={CUSTOMER_TAG},agent=<your name> | Idempotency-Key: <row key>-<step>. Record cost_micro and X-Treg-Call-Id on the row. Token: yoke secret get "OUTREACH VAULT"/TREG_TOKEN - never print it.
Rows: key = email with @ -> _at_ and . -> _. Fields include provider_message_id for the send. Status flow: new -> ready | review-risky | hold -> review -> approved | skipped -> sent -> replied | unsubscribed | converted. Keep <table>/_index current (yoke ls shows 0 rows). yoke read returns {"content": "<json>"}: unwrap once; strip the engine "id" field before writing back.
Exclusions: outside {COUNTRY}; role addresses; domains in {EXCLUDED_TLDS}; companies > {MAX_EMPLOYEES}; anyone already in the table or on your suppression list.
Budgets: BATCH_SIZE = 20 rows per run; RUN_BUDGET_MICRO = 50000 ($0.05) per run; campaign ceiling {CAMPAIGN_CEILING_USD}. Expected ~$0.002 per verified prospect with paid verify.
"""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-offer"
name = "OUTREACH OFFER"
gx = 11
gy = 1
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
OUTREACH OFFER (fill every {PLACEHOLDER} before the first run)
Who we write to: {SEGMENT, e.g. US founders of small marketing/automation agencies}.
The one idea: say plainly how this email was made (found, verified, drafted, approved by a human) and offer one next step.
Voice: plain, short, specific. No hype words. No fake personalization. One link. First person from a named human. 80-120 words. Subject <= 6 words.
Must include: one CTA line ("Book a call: {BOOKING_LINK}" or "See how it works: {SITE_LINK}"); who you are in one clause; your postal address; a working opt-out.
Must not: claims about the recipient you did not read from the row; urgency or discounts; more than one follow-up; non-{COUNTRY} addresses; role addresses (info@, hello@); any row whose verify_status is not valid; sending without the approval tap.
Template:
Subject: {SUBJECT}
Hi {first_name},
{ONE SENTENCE on how this email was made and what it cost.}
{ONE SENTENCE on what you do.} {Company type} like {company_name} use it to {OUTCOME}, with a human approving the steps that matter.
Book a {LENGTH}-minute call with {SENDER_FIRST_NAME}:
{BOOKING_LINK}
This is a one-off note, not a sequence. If you'd rather not hear from me, reply "no thanks" and I won't email you again.
{SENDER_FIRST_NAME}
{COMPANY}
{LEGAL_NAME} · {POSTAL_ADDRESS}
"""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-setup"
name = "OUTREACH SETUP"
gx = 17
gy = 1
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
OUTREACH SETUP (buyer checklist)
1. OUTREACH VAULT (shipped, wired to Prospector and Sender (the engine requires secret:write alongside secret:read; agents still never see other keys)): store a treg AGENT token (treg.to -> your org -> agents -> new; member role) under TREG_TOKEN. Never paste tokens into contexts, rows or messages.
2. OUTREACH VAULT: add your email provider key under EMAIL_PROVIDER_KEY (Sender reads it). Use a dedicated sending domain or subdomain for outreach, not your transactional domain.
3. Review channel: wire Writer to your approval surface (Telegram card script, or a human agent). A tap sets <table>/<row>.status = approved | skipped.
4. Suppression: give Sender read access to your opt-out list and require a check before every send; honor opt-outs within 10 days.
5. Fill OUTREACH OFFER and PROSPECTING RULES placeholders. Create row prospects/_index = {"rows":[]}.
6. Loop: FIRE ON DEMAND for the pilot. Fire once -> Prospector finds ~20 -> Writer drafts -> you approve -> Sender sends (>= 90 s apart). Watch delivery/bounce/opt-out write-backs, then set the loop to daily.
Runtime and cost: Prospector, Writer and Sender ship on the cloud runtime (24/7, engine-hosted) and bill tokens against the budget you give them (models: haiku / sonnet / haiku). Set each agent's budget after stamping. treg data is prepaid on your treg balance.
Rules: plain text; truthful; no unsourced numbers; one email per person; previews to yourself only; nothing leaves without the tap.
"""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loop"
name = "Outreach Loop"
gx = 0
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-loop"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-1"
name = "Outreach Belt 1"
gx = 1
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-2"
name = "Outreach Belt 2"
gx = 2
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-3"
name = "Outreach Belt 3"
gx = 3
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-1"
name = "Outreach Loader 1"
gx = 4
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-prospector"
name = "Prospector"
gx = 5
gy = 3
width = 2
height = 2
system_prompt = """
You are the Prospector. Read PROSPECTING RULES, PROSPECTS SCHEMA and prospects/_index first. Each run: (1) stop if BATCH_SIZE rows already have status new or ready; (2) call the free people search in PROSPECTING RULES, paging by cursor, skipping anyone already in the table; (3) for each new person without an email, call the email-find endpoint; (4) verify every email; (5) write one row per person per PROSPECTS SCHEMA: status=ready when verify is valid and the country matches, else hold with hold_reason; (6) update prospects/_index. Send the headers in PROSPECTING RULES on every treg call, record cost and call id on the row, read the token with `yoke secret get <vault>/TREG_TOKEN` and never print it. Stop when the run spend exceeds RUN_BUDGET_MICRO. When a batch is ready, message Writer.
"""
projects = []
has_session = false
last_status = ""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-2"
name = "Outreach Loader 2"
gx = 7
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-4"
name = "Outreach Belt 4"
gx = 8
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-5"
name = "Outreach Belt 5"
gx = 9
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-3"
name = "Outreach Loader 3"
gx = 10
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-writer"
name = "Writer"
gx = 11
gy = 3
width = 2
height = 2
system_prompt = """
You are the Writer. For prospects rows with status=ready (oldest first, up to BATCH_SIZE): write draft_subject and a plain-text draft_body following OUTREACH OFFER exactly, using only fields present in the row (first_name, company_name, industry). Never claim the recipient uses the product or anything you did not read from the row. Set status=review, then send the draft to the review channel named in OUTREACH SETUP (a human agent or an approval Script the buyer wires in; this blueprint ships none). A human sets status=approved or skipped. Never send email yourself.
"""
projects = []
has_session = false
last_status = ""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-4"
name = "Outreach Loader 4"
gx = 13
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-6"
name = "Outreach Belt 6"
gx = 14
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-7"
name = "Outreach Belt 7"
gx = 15
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-5"
name = "Outreach Loader 5"
gx = 16
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-sender"
name = "Sender"
gx = 17
gy = 3
width = 2
height = 2
system_prompt = """
You are the Sender. Act only on prospects rows with status=approved. Send each through the email provider the buyer configured in OUTREACH SETUP (key in OUTREACH VAULT as EMAIL_PROVIDER_KEY; this blueprint ships no provider Script, so call the provider's API directly from this agent or wire the buyer's Script), plain text, from the configured outreach address, spaced at least 90 seconds apart, never to role addresses, never a row twice (check provider_message_id first), only to rows whose verify_status is valid. On success set status=sent, sent_at, provider_message_id; on error set status=hold with the error. Check the buyer's suppression list before every send.
"""
projects = []
has_session = false
last_status = ""
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-6"
name = "Outreach Loader 6"
gx = 19
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-8"
name = "Outreach Belt 8"
gx = 20
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-belt-9"
name = "Outreach Belt 9"
gx = 21
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-7"
name = "Outreach Loader 7"
gx = 22
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-chest"
name = "Outreach Chest"
gx = 23
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-8"
name = "Outreach Loader 8"
gx = 5
gy = 5
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-side-chest-1"
name = "Outreach Side Chest 1"
gx = 5
gy = 6
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-9"
name = "Outreach Loader 9"
gx = 11
gy = 5
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-side-chest-2"
name = "Outreach Side Chest 2"
gx = 11
gy = 6
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-loader-10"
name = "Outreach Loader 10"
gx = 17
gy = 5
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""
[[agents]]
id = "aos-side-chest-3"
name = "Outreach Side Chest 3"
gx = 17
gy = 6
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""
[[wires]]
from = "aos-rules"
to = "aos-prospector"
[[wires]]
from = "aos-offer"
to = "aos-writer"
[[wires]]
from = "aos-setup"
to = "aos-sender"
[[wires]]
from = "aos-prospector"
to = "aos-writer"
[[wires]]
from = "aos-writer"
to = "aos-sender"
[[wires]]
from = "aos-prospector"
to = "aos-table"
value = "data:read,data:write"
[[wires]]
from = "aos-table"
to = "aos-prospector"
value = "data:read,data:write"
[[wires]]
from = "aos-writer"
to = "aos-table"
value = "data:read,data:write"
[[wires]]
from = "aos-table"
to = "aos-writer"
value = "data:read,data:write"
[[wires]]
from = "aos-sender"
to = "aos-table"
value = "data:read,data:write"
[[wires]]
from = "aos-table"
to = "aos-sender"
value = "data:read,data:write"
[[wires]]
from = "aos-vault"
to = "aos-prospector"
value = "secret:read,secret:write"
[[wires]]
from = "aos-vault"
to = "aos-sender"
value = "secret:read,secret:write"
[[wires]]
from = "aos-schema"
to = "aos-prospector"
[[wires]]
from = "aos-schema"
to = "aos-writer"
[[wires]]
from = "aos-schema"
to = "aos-sender"
[agent_runtimes]
aos-prospector = "cloud"
aos-writer = "cloud"
aos-sender = "cloud"
[agent_harnesses]
[agent_models]
aos-prospector = "haiku"
aos-writer = "sonnet"
aos-sender = "haiku"
[node_orientations]
[agent_slugs]
[spawned_by]
[node_creator]