Agentic Outreach System

Paint by Numbers Deploy Guide · 5 Agents · 4 Tiers · Human-in-the-Loop

48-HOUR ACTIVATION PLAN INSIDE

What's In This Guide

  1. Prerequisites Checklist
  2. Step 1 — Create Database Tables (10 min)
  3. Step 2 — Deploy Dashboard to Vercel (5 min)
  4. Step 3 — Set Up Forge VPS Agents (20 min)
  5. Step 4 — The 48-Hour Activation Plan
  6. Step 5 — Daily Operations (Your 1 Hour/Day)
  7. Agent Reference Cards
  8. Architecture & File Map
  9. Troubleshooting
  10. Cost Model

0 Prerequisites Checklist

Where are the credentials?

Supabase URL + keys: In your .env.local file in folio-saas root
Anthropic API key: Same .env.localANTHROPIC_API_KEY
NP_API_KEY: Already in /opt/forge/.env.system (the Forge VPS key, id d20a2e4d)
Supabase SQL Editor: Open SQL Editor

1 Create Database Tables (10 min)

This creates 8 tables in Supabase. You need to run 2 SQL files in order.

1a. Create the tables

  1. Open Supabase SQL Editor
  2. Open this file in your editor: supabase/migrations/20260222_outreach_tables.sql
  3. Copy the ENTIRE contents → Paste into SQL Editor → Click Run
  4. You should see "Success. No rows returned" — this is correct

What if tables already exist?

You'll get errors like "relation already exists". Safe to ignore — or add IF NOT EXISTS to each CREATE TABLE statement.

1b. Seed the agent configs

  1. Open file: supabase/migrations/20260222_outreach_seed.sql
  2. Copy entire contents → Paste into SQL Editor → Click Run
  3. This creates configs for all 5 agents (all disabled by default) and the base $1,500 offer variant

1c. Verify

-- Run this in SQL Editor to verify:
SELECT agent_name, is_enabled, loop_interval_seconds, max_daily_cost_usd
FROM agent_config;
-- Should show 5 rows: scout, warmer, signal, writer, iterator (all is_enabled=false)

SELECT variant_name, price, is_active FROM offer_variants;
-- Should show 1 row: "Mastery Monetization Lab - Base" at 150000 ($1,500)

Tables Created

TablePurposeKey Fields
prospectsEvery prospect across platformsfull_name, icp_score, stage, tier, source
signalsPain expressions / buying signalsplatform, relevance_score, suggested_response
conversationsOutreach conversationsprospect_id, messages, sentiment, objection_type
agent_runsAudit log for every runagent_name, status, duration_ms, estimated_cost_usd
outreach_queueHuman approval queuedraft_message, priority, status (pending→approved→sent)
offer_variantsOffer variationsprice, headline, value_prop, conversion_rate
content_queueContent for reviewplatform, body, hashtags, status (draft→approved→posted)
agent_configRuntime config per agentis_enabled, loop_interval, max_daily_cost, config JSON

2 Deploy Dashboard to Vercel (5 min)

The dashboard and API routes are part of the Next.js app. Just push to Vercel.

2a. Commit and push

# From folio-saas directory:
git add app/api/outreach/ app/outreach/ lib/agent/tools.ts
git commit -m "Agentic outreach: dashboard + API routes + agent tools"
git push origin feat/agentic-outreach

# Then merge to main (or deploy from branch):
git checkout main && git pull origin main
git merge feat/agentic-outreach
git push origin main

2b. Verify deployment

  1. Wait for Vercel build to complete (~2 min)
  2. Visit https://www.nowpage.io/outreach (or your app URL + /outreach)
  3. You should see the Outreach Command Center with 5 tabs
  4. The "Agents" tab should show "No agents configured" until you run the seed SQL

What deployed

PathWhat it does
/outreachDashboard UI — 5 tabs: Agents, Pipeline, Signals, Content, Metrics
/api/outreach/agentsList/start/stop agents
/api/outreach/prospectsCRUD prospects, filter by stage/tier/score
/api/outreach/signalsSignal feed + bulk actions
/api/outreach/outreachApproval queue for outgoing messages
/api/outreach/contentContent draft queue
/api/outreach/offersOffer variant management
/api/outreach/metricsFunnel, costs, objections, variants

3 Set Up Forge VPS Agents (20 min)

3a. Copy agent code to Forge

# From your local machine (folio-saas root):
scp -r agents/ forge@YOUR_VPS_IP:/opt/forge/agents/

# OR if using Syncthing, just wait for sync

# OR git pull on the VPS:
ssh forge@YOUR_VPS_IP
cd /opt/forge/folio-saas
git pull origin main
cp -r agents/ /opt/forge/agents/

3b. Install dependencies

cd /opt/forge/agents
npm install

3c. Verify .env.system has required vars

# Check /opt/forge/.env.system contains:
cat /opt/forge/.env.system | grep -E "SUPABASE|ANTHROPIC|NP_API"

# Required vars (add any missing):
NEXT_PUBLIC_SUPABASE_URL=https://eizwhjpclwpcbhwrztwm.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...  # from .env.local
ANTHROPIC_API_KEY=sk-ant-...      # from .env.local
NP_API_KEY=np_live_...            # already there

# Optional (for Twitter):
TWITTER_BEARER_TOKEN=AAA...       # only if you have Twitter API access

3d. Test one agent manually

# Test signal agent (will exit after 1 loop if disabled):
cd /opt/forge/agents
node signal/index.js

# You should see:
# [signal] Starting agent loop...
# [signal] Disabled, sleeping 60s...
# (Ctrl+C to stop — this is correct, agent is disabled by default)

3e. Install systemd services

cd /opt/forge/agents/systemd
sudo bash install.sh

# DON'T enable all yet — we'll do it in the 48h plan below

4 The 48-Hour Activation Plan

Don't turn everything on at once. Phase agents in over 48 hours so you can verify each one works before adding the next. Total human time: ~1 hour/day.

Hour 0

Start Signal Agent

The listener. Monitors Reddit for pain signals. Lowest risk — it only reads, never posts.

# On Forge VPS:
sudo systemctl enable --now outreach-signal

# OR from dashboard: Agents tab → Signal → Start

Verify after 30 min: Check dashboard → Signals tab. Should see signals appearing with relevance scores. If nothing, check journalctl -u outreach-signal -f

Your action: Review 5-10 signals. Click "Done" on good ones, "Skip" on noise. This trains your eye for what's useful.

Hour 6

Start Scout Agent

The hunter. Finds ICP-matching users on Reddit. Creates prospects with ICP scores.

sudo systemctl enable --now outreach-scout

Verify after 4 hours: Dashboard → Pipeline tab. Should see prospects with ICP scores 0-100. Check the funnel numbers.

Your action: Review the top 10 prospects. Anyone obvious wrong? Override their ICP score or disqualify. Add 3-5 warm contacts manually via "Add Prospect".

Hour 12

Start Writer Agent

The content engine. Generates LinkedIn posts, Reddit comments, Twitter threads from your core insights.

sudo systemctl enable --now outreach-writer

Verify after 12 hours: Dashboard → Content Queue tab. Should see 3+ content drafts across platforms.

Your action: Review each draft. Approve good ones (edit if needed). Post LinkedIn/Twitter manually. Reddit can auto-post if you set up PRAW later.

Hour 24

Start Warmer Agent

The relationship builder. Engages with prospects' content to build name recognition before outreach.

sudo systemctl enable --now outreach-warmer

Verify after 6 hours: Dashboard → Content Queue. Should see comment drafts for specific prospects.

Your action: Approve engagement comments. For Reddit, they can auto-post. For LinkedIn, copy the suggested comment and post it yourself.

Watch for: Prospects moving from "discovered" → "warming" → "ready" in the Pipeline.

Hour 36

Start Iterator Agent

The optimizer. Analyzes what's working, what's not, generates new offer variants.

sudo systemctl enable --now outreach-iterator

Verify after 24 hours: Dashboard → Metrics tab. Should see cost breakdown, funnel stats. Check ideas.asapai.net/outreach-reports/ for published iteration reports.

Your action: Review any new offer variants. Activate ones you like. The Iterator won't produce much until you have real conversations logged.

Hour 48

Full System Running — First Review

All 5 agents active. Time for your first system-level check.

  • How many prospects discovered? (target: 20+)
  • How many signals detected? (target: 30+)
  • How much content drafted? (target: 6+ pieces)
  • Total LLM cost? (should be under $2)
  • Any agent errors? (Agents tab → check red indicators)

Tune if needed: Adjust subreddit lists, pain keywords, ICP scoring thresholds in agent configs via the dashboard.

5 Daily Operations (Your 1 Hour/Day)

Once all agents are running, your daily routine is ~1 hour split across 3 sessions:

Morning Check (15 min)

Midday Action (30 min)

Evening Review (15 min)

The 4-Tier Loop in Practice

Tier 1 (Warm): Your existing contacts → Writer drafts DMs → you send
Tier 2 (AI-Warmed): Scout finds → Warmer engages 3x → Writer drafts DM → you send
Tier 3 (Signal): Signal catches pain post → you respond helpfully → natural follow-up
Tier 4 (Content): Writer generates → you post → inbound inquiries → Tier 2/3

6 Agent Reference Cards

S

Signal Agent

Job: Monitor Reddit + Twitter 24/7 for pain signals matching ICP
Loop: Every 30 min · LLM: Haiku (classify) + Sonnet (draft response) · Cost: ~$0.05/day
File: agents/signal/index.js
Config key fields: subreddits, reddit_keywords, twitter_keywords, min_relevance

Sc

Scout Agent

Job: Find ICP-matching prospects on Reddit/Twitter. Generate LinkedIn search queries.
Loop: Every 4 hours · LLM: Haiku (filter) + Sonnet (ICP score) · Cost: ~$0.10/day
File: agents/scout/index.js
Config key fields: platforms, max_prospects_per_run, min_icp_score, subreddits

W

Writer Agent

Job: Take 1 insight → generate 5 platform-native content pieces
Loop: Every 12 hours · LLM: Sonnet · Cost: ~$0.15/day
File: agents/writer/index.js
Config key fields: platforms, posts_per_day, core_insights (you provide these!)

Wr

Warmer Agent

Job: Engage with prospects' content 2-3x over 5-7 days to build recognition
Loop: Every 6 hours · LLM: Haiku (pick post) + Sonnet (draft comment) · Cost: ~$0.06/day
File: agents/warmer/index.js
Config key fields: max_touches_per_day, min_hours_between_touches, max_touches_before_ready

I

Iterator Agent

Job: Analyze rejections/objections → generate revised offer variants + weekly reports
Loop: Every 24 hours · LLM: Sonnet · Cost: ~$0.10/day
File: agents/iterator/index.js
Config key fields: min_rejections_before_variant, max_active_variants, analysis_window_hours

7 Architecture & File Map

On Vercel (Next.js app — folio-saas/)

app/outreach/page.tsx              ← Dashboard UI (React client component)
app/api/outreach/
  agents/route.ts                  ← List/start/stop agents
  agents/[name]/route.ts           ← Get/update single agent config
  prospects/route.ts               ← List + add prospects
  prospects/[id]/route.ts          ← Prospect detail/update/disqualify
  signals/route.ts                 ← Signal feed + bulk actions
  signals/[id]/route.ts            ← Single signal detail/update
  outreach/route.ts                ← Outreach approval queue
  content/route.ts                 ← Content draft queue
  offers/route.ts                  ← Offer variant management
  metrics/route.ts                 ← Funnel + cost metrics
lib/agent/tools.ts                 ← 3 new tools: query_prospects, query_signals, get_sprint_metrics
supabase/migrations/
  20260222_outreach_tables.sql     ← 8 tables + indexes + RLS
  20260222_outreach_seed.sql       ← Agent configs + base offer

On Forge VPS (/opt/forge/agents/)

shared/
  supabase.js                      ← DB client (reads .env.system)
  llm.js                           ← Haiku/Sonnet/local LLM abstraction
  cost-tracker.js                  ← Daily budget tracking
  health.js                        ← Ralph loop + run lifecycle
  publish.js                       ← NowPage Publish API helper
  webhooks.js                      ← Webhook firing from agents
signal/
  index.js                         ← Main loop
  classifier.js                    ← Haiku classify + Sonnet draft
  monitors/reddit.js               ← Reddit API poller
  monitors/twitter.js              ← Twitter API poller
scout/
  index.js                         ← Main loop
  reddit.js                        ← Reddit user profiling
  twitter.js                       ← Twitter search
  icp-scorer.js                    ← Sonnet ICP scoring
writer/
  index.js                         ← Main loop
  multiplier.js                    ← Content generation per platform
warmer/
  index.js                         ← Main loop
  engagement.js                    ← Comment drafting + post selection
iterator/
  index.js                         ← Main loop
  analyzer.js                      ← Objection pattern analysis
  variant-gen.js                   ← Offer variant generation
systemd/
  outreach-signal.service          ← systemd units (5 files)
  outreach-scout.service
  outreach-warmer.service
  outreach-writer.service
  outreach-iterator.service
  install.sh                       ← sudo bash install.sh
package.json                       ← npm install (just @supabase/supabase-js)

8 Troubleshooting

Agent won't start / immediately fails

journalctl -u outreach-signal -n 50 --no-pager

Common causes: missing env vars, wrong Supabase URL, no agent_config rows (run seed SQL).

Dashboard shows "No agents configured"

The seed SQL hasn't been run. Go to Step 1b above.

Reddit rate limiting (429 errors)

Reddit's free API allows ~60 req/min. The agents respect this with 1s delays between requests, but if you hit limits, increase loop_interval_seconds for signal/scout.

Agent stuck in "running" but no output

Check if budget is exhausted: SELECT daily_cost_accumulated, max_daily_cost_usd FROM agent_config WHERE agent_name = 'signal'. Reset by setting daily_cost_accumulated = 0.

How to update agent config without redeploying

All config is in the agent_config table's config JSONB column. Edit via dashboard (Agents tab → click agent → update) or directly in Supabase. Changes take effect on the next loop iteration.

How to add core insights for Writer

Dashboard → Agents tab → Writer → Edit Config → Update the core_insights array. Or via SQL:
UPDATE agent_config SET config = jsonb_set(config, '{core_insights}', '["Your new insight here"]') WHERE agent_name = 'writer'

9 Cost Model

AgentLLM ModelCalls/DayDaily Cost
SignalHaiku + Sonnet~100 + ~3$0.02-0.05
ScoutHaiku + Sonnet~50 + ~5$0.05-0.15
WriterSonnet~5$0.05-0.25
WarmerHaiku + Sonnet~6 + ~3$0.03-0.08
IteratorSonnet~3$0.05-0.15
TOTAL$0.20-0.68/day

14-day sprint total: $2.80-$9.52 in LLM costs.
Break-even: One $1,500 sale pays for 6+ months of agent operation.

Budget guardrails (built in)

Each agent has max_daily_cost_usd in its config. When accumulated cost hits the limit, the agent sleeps until midnight UTC. You can adjust these per-agent via the dashboard or SQL.