Getting Started with SignalPipe
Everything you need to go from install to your first approved lead. Covers setup, scoring, the temperature model, all 10 tools, and self-hosting.
Quick Start
Three steps from zero to live scouting.
Install the plugin
Install SignalPipe on your OpenClaw gateway with a single command:
claw install signalpipe
Or add "signalpipe" to your openclaw.config.json plugins array.
Set environment variables
Before starting the gateway, set your backend URL and operator key:
export SIGNALPIPE_API_URL=https://your-backend-url export SIGNALPIPE_OPERATOR_KEY=your-operator-key
Using the managed backend? You'll get both values after signing up at signalpipe.io/pricing.
Add your first product and start scouting
Ask your agent:
"Add my product [name]. It helps [audience] who need [use case]. Buyers say things like '[anchor sentence 1]' and '[anchor sentence 2]'."
Then: "Add r/SaaS as a monitoring station." Then: "Scout now."
How Scoring Works
Every post runs a 4-stage filter. Each stage is more expensive but more accurate than the last — designed to eliminate noise cheaply before using expensive AI calls.
Any of your configured buy_signal_keywords must appear in the post. Eliminates ~85% of posts before any API call is made. Zero cost.
Cosine similarity between the post and your anchor sentences using OpenAI text-embedding-3-small. Catches buyer intent even when exact keywords aren't used.
LLM check that distinguishes genuine buyers from irony, hypotheticals, and casual venting. Fails open — if uncertain, the lead passes through rather than being suppressed.
Three AI judges evaluate independently: Skeptic (40% weight), Analyst (35%), Optimist (25%). Weighted fusion gives the final score. Hard rule: if the Skeptic score < 0.3, the signal is suppressed regardless of the others.
Competitor-switch floor
Posts that match any of your configured competitor_keywords are automatically floored at a score of 60 — they always reach your review queue regardless of their general intent score. These are the highest-converting leads you'll ever find.
Self-improving RL loop
Every approve/reject adjusts a per-product RL weight that scales future scores for similar signals:
Approve
Weight +0.05 (max 2.0)
Reject
Weight −0.02 (floor 0.5)
The asymmetry is intentional — conservative about boosting, aggressive about penalizing. A 100%-rejected product reaches the floor in ~25 rejections. A 100%-approved product reaches the ceiling in ~20 approvals.
Temperature Model
Every prospect has a 0–100 temperature. Temperature determines which AI persona generates their next message — and when to reach out.
Re-spark cold leads. No hard sell. Focus on re-establishing relevance.
Qualify, show fit, build trust. Educator for lower range, Consultant for upper.
Urgency, social proof, clear CTA. Do not waste time on education at this stage.
One-directional mode transitions
Mode transitions only move forward — never backward. Once a prospect reaches Closing, they don't regress to Sales even if their temperature dips. Once in Recovery, they only re-enter Sales when they genuinely warm again.
This prevents the classic spam loop: a prospect who briefly responds doesn't suddenly receive closing messages, then nurture messages, then closing messages again as the score oscillates.
13 Signal Types
Use signalpipe_track_prospect with any of these signals to update a prospect's temperature.
Objection signals (too_expensive, competitor, bad_timing, no_time, not_decision_maker) are permanently recorded and injected into all future message generation calls — the AI never re-pitches what already failed.
booked_demo+20Prospect agreed to or attended a demoasked_pricing+15Prospect asked about pricing or plansviewed_content+8Visited a page, watched a video, read a docreplied+5Responded to your outreach messageclicked_link+3Clicked a link in your messagenot_decision_maker0Not the right person — flag only, no temp changeghosted_3_days−6No response after 3 dayscompetitor−8Mentioned they're evaluating a competitorno_time−5Said "not now" or "too busy"too_expensive−10Price objection raisedbad_timing−15Timing issue — contract, budget cycle, etc.ghosted_7_days−15No response after 7 daysnot_interested−25Explicit rejection — moves to RecoveryWriting Anchor Sentences
Anchor sentences are the most important thing you configure. They define what a buyer looks like. The embedding model measures every incoming post against these sentences — write them in first-person buyer voice.
Good anchors
- "I need a tool that automatically finds leads on Reddit"
- "We're switching from [Competitor] and need something better"
- "Looking for an alternative to [Competitor] — pricing got too high"
- "How do I find buyers who are actively asking for my product?"
- "We need outreach automation that doesn't get us banned"
Weak anchors
- ✗"SignalPipe lead generation" (your product name, not buyer voice)
- ✗"buy leads" (too generic)
- ✗"sales automation" (too broad — catches tool comparisons, not buyers)
- ✗"Reddit marketing" (describes a topic, not a buying need)
- ✗"outreach" (single word — too much noise)
Rules of thumb
- 3–7 anchor sentences per product is the sweet spot
- Write from the buyer's perspective, not yours ("I need X" not "we offer X")
- Include competitor frustration angles if you have known competitors
- Include the specific outcome the buyer wants, not just the category
- Use signalpipe_reload_products after editing — anchors are re-embedded immediately
Tool Reference
SignalPipe gives your agent 10 tools — 8 for lead acquisition and 2 for prospect nurturing + 1 for pipeline visibility. All tools are called conversationally inside your OpenClaw agent.
signalpipe_get_missionsFetch pending leads awaiting your review. Returns scored leads with AI-drafted replies.
signalpipe_approve_missionApprove a lead and queue it for outreach. Optionally edit the draft before approving.
signalpipe_reject_missionReject a lead. Adjusts the RL weight down for similar signals on this product.
signalpipe_scout_nowTrigger an immediate scouting run outside the 10-minute cycle.
signalpipe_get_productsList all active products and their current monitoring config.
signalpipe_add_productRegister a new product. Provide name, description, target audience, and anchor sentences.
signalpipe_add_stationAdd a Reddit subreddit, HN keyword feed, or RSS URL to monitor for a product.
signalpipe_reload_productsHot-reload the product cache after adding or editing products. No restart needed.
signalpipe_track_prospectLog a prospect interaction signal. Creates the prospect if new, updates temperature if existing.
signalpipe_get_messageGenerate the next context-aware outreach message for a prospect. Uses their full signal history.
signalpipe_get_pipelineView your full prospect pipeline sorted by temperature. See who needs attention first.
Station platform types
When calling signalpipe_add_station, use these platform values:
reddithttps://www.reddit.com/r/SUBREDDIT/.rssAny public subreddithnhttps://hnrss.org/newest?q=YOUR+KEYWORDSHacker News by keywordrsshttps://any-rss-feed-url.com/feed.xmlAny RSS-compatible feedtwitter_search(no rss_url required)Routes outreach to X reply channel. X direct monitoring coming soon.Self-Hosting
The backend is a FastAPI app. You can run it anywhere that supports persistent processes.
Requirements
- Python 3.11+
- PostgreSQL with pg_cron and pg_net extensions (Supabase free tier works)
- A persistent process host — Railway recommended (~$5/mo)
- OpenAI API key (embeddings)
- Anthropic, OpenAI, or Gemini API key (message generation) — or a local model via any OpenAI-compatible endpoint
Environment variables
SUPABASE_URLYour Supabase project URLSUPABASE_KEYSupabase service role keyOPENAI_API_KEYUsed for text-embedding-3-smallOPERATOR_KEYSecret key — set in both Railway and sidecarANTHROPIC_API_KEYDefault message generation (Claude Haiku)COMPANION_LLM_PROVIDERopenai | anthropic | openai_compatibleCOMPANION_LLM_MODELe.g. claude-haiku-4-5, gpt-4o-mini, nemotron-miniCOMPANION_LLM_BASE_URLNeMoClaw / Ollama / vLLM endpoint (if openai_compatible)X_API_KEYTwitter/X reply outreach (optional)X_API_SECRETX_ACCESS_TOKENX_ACCESS_SECRETREDDIT_CLIENT_IDReddit DM outreach (optional)REDDIT_CLIENT_SECRETMAX_TWITTER_ACTIONS_PER_DAYDefault: 10MAX_REDDIT_DMS_PER_DAYDefault: 5NeMoClaw / on-premises
To run message generation locally with Nemotron or any other model:
COMPANION_LLM_PROVIDER=openai_compatible COMPANION_LLM_BASE_URL=http://localhost:11434/v1 COMPANION_LLM_MODEL=nemotron-mini
Works with Ollama, LM Studio, vLLM, or any OpenAI-compatible local endpoint. Full instructions in the backend repo: /api/README.md
Ready to find your first lead?
Join the waitlist for managed backend access — or install the plugin now if you're self-hosting.