Getting Started with SignalPipe
Everything you need to go from install to your first approved lead. Covers setup, scoring, the temperature model, the full toolset, 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 your connection keys
Before starting the gateway, set your two SignalPipe keys — you get both when you sign up at signalpipe.io/pricing:
# Required — both provided at signup export SIGNALPIPE_API_URL=https://api.signalpipe.io export SIGNALPIPE_OPERATOR_KEY=your-operator-key
That's it. Your OpenClaw LLM key stays inside OpenClaw — it never needs to be shared with SignalPipe. Scoring, drafting, and outreach all run on the managed backend.
Start OpenClaw — plugin loads automatically
When OpenClaw starts with the plugin installed, SignalPipe registers its 15 tools and connects to the backend. You'll see this in your logs:
🦐 SignalPipe ONLINE Backend : https://api.signalpipe.io Tools : 15 registered Status : connected
No sidecar. No extra processes. The backend handles all scoring, drafting, and lead management automatically.
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. Urgency and specificity sub-scores are detected in English, Spanish ("urgente", "migrando de"), French ("dès que possible", "on change de"), German ("dringend", "wir wechseln"), and Portuguese ("agora mesmo", "trocando de") — no configuration needed.
LLM check that distinguishes genuine buyers from irony, hypotheticals, and casual venting. Fails open — if uncertain, the lead passes through rather than being suppressed.
Once a post passes scoring, three AI judges (Skeptic, Analyst, Optimist) draft a reply independently via ensemble weighting. Low-intent leads are suppressed by ensemble veto before a reply is written. The Analyst draft is used by default, with the Optimist as fallback.
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 nudged upward
Reject
Adaptive penalty by reason
Rejection penalties are adaptive — spam hits hardest, sarcasm and wrong-product are gentle, and "already a customer" carries zero penalty. The system learns which failure modes matter.
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
- Multilingual posts are scored automatically — no need to write anchors in every language
- Use signalpipe_reload_products after editing — anchors are re-embedded immediately
Tool Reference
SignalPipe gives your agent 15 tools — 12 for lead acquisition (including client-side drafting), 2 for prospect nurturing, and 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 with an optional reason (not_relevant, sarcasm, spam, wrong_product, too_vague, already_customer). Penalty adapts to the reason.
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 URL (self-hosting only)SUPABASE_KEYSupabase service role key (self-hosting only)OPENAI_API_KEYUsed for text-embedding-3-small (backend — self-hosting only)OPERATOR_KEYSecret key generated at signup — set on your backendANTHROPIC_API_KEYDefault message generation on backend (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 — set on backend (optional)X_API_SECRETX_ACCESS_TOKENX_ACCESS_SECRETREDDIT_CLIENT_IDReddit DM outreach — set on backend (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.