{
  "markdown": "# SignalPipe\n\n**Agentic sales pipeline — buying-intent detection, swarm-scored lead qualification, and prospect nurturing for OpenClaw agents.**\n\nSignalPipe watches Reddit, Hacker News, X/Twitter, and any RSS feed you configure for people publicly expressing buying intent. A 3-judge AI swarm evaluates every signal, calibrates the reply to the signal strength, and surfaces only real leads for your approval. Works with any OpenClaw-compatible agent — or connect directly via MCP from Claude Code, Cursor, or Windsurf.\n\n[signalpipe.io](https://signalpipe.io)\n\n---\n\n## What It Does\n\n**Top of funnel — Signal Acquisition (Mantidae):**\nScouts Reddit, Hacker News, X/Twitter, and custom RSS feeds every cycle. Every post passes through a 3-stage scoring filter — keyword gate, multi-factor semantic scoring, sarcasm detection — then reaches a 3-judge AI drafting swarm: Skeptic, Analyst, Optimist. Each judge scores the lead independently. The swarm fuses their scores and suppresses low-intent posts automatically. Only leads that clear the swarm reach your queue — with a draft already calibrated to how hot the signal is:\n\n- **Closer (highest-intent):** Direct, action-oriented reply — proposes a concrete next step\n- **Advisor (mid-intent):** Consultative — acknowledges the problem, introduces the product naturally\n- **Educator (early-stage):** Value-first — leads with a genuine insight, mentions the product only if it fits\n\nCompetitor-switch posts are hard-floored and always reach your queue regardless of score.\n\n**Mid/bottom of funnel — Nurture Engine:**\nTracks every prospect's temperature (0–100) across 13 signal types. Automatically selects the right persona (Educator → Consultant → Closer → Re-engager). Remembers objections permanently — if someone said the price is too high, that angle is never repeated. Never spams. One-directional mode transitions.\n\n**Execution — Sender (v2.0):**\nThe brain scores, drafts, and approves; the plugin can now also **send**. An optional background sender holds a live stream open to the brain, receives the missions you've already approved, and posts `reddit_comment` / `reddit_dm` on Reddit with **your own** credentials. *The math runs on us, the sending runs on you* — your Reddit credentials and LLM keys never reach SignalPipe. `twitter_reply` is handled by the standalone [`signalpipe-daemon`](https://github.com/AbYousef739/signalpipe-daemon). The sender is opt-in: set the `REDDIT_*` env vars to enable it, or ignore it entirely and stay MCP-only.\n\n---\n\n## Tools (20 total)\n\n### Signal Acquisition\n\n| Tool | What it does |\n|---|---|\n| `signalpipe_get_missions` | List pending leads awaiting review — score, role, channel, snippet, draft. Lean by default; opt into `include_context=true` only when drafting. |\n| `signalpipe_draft_mission` | Get the drafting payload for a single mission so the host LLM can write the reply itself (BYOK path) |\n| `signalpipe_upload_draft` | Upload a host-LLM-written draft to a mission |\n| `signalpipe_approve_mission` | Approve a lead and queue it for outreach |\n| `signalpipe_reject_mission` | Reject a lead with a reason — teaches the per-station RL loop (penalty size adapts to the reason; demotes one noisy feed without dragging the rest of the product down). **Don't** use this when the post is just gone — use `signalpipe_delete_mission` instead. |\n| `signalpipe_delete_mission` | Hard-delete a mission row — silent cleanup, no learning signal. Companion to reject. **Canonical case:** the post was deleted / 404'd / removed before you could reply. |\n| `signalpipe_scout_now` | Trigger an on-demand scouting run across all active products |\n| `signalpipe_get_products` | List all configured products |\n| `signalpipe_add_product` | Register a new product to monitor — describe it in buyer language |\n| `signalpipe_add_station` | Add an RSS feed, subreddit, or HN keyword feed for a product |\n| `signalpipe_reload_products` | Hot-reload product cache after changes — no redeploy needed |\n\n### Nurture Engine\n\n| Tool | What it does |\n|---|---|\n| `signalpipe_track_prospect` | Log a signal from a prospect, update their temperature |\n| `signalpipe_get_message` | Generate the next outreach message via the backend LLM |\n| `signalpipe_get_message_prompt` | Get the full prompt + context so the host LLM writes the message (BYOK path) |\n| `signalpipe_record_message` | Record a host-LLM-written message as sent |\n| `signalpipe_get_pipeline` | View the full prospect pipeline sorted by temperature |\n| `signalpipe_score_signal` | Universal scorer — paste any text (Gmail, Slack, Discord, Telegram, LinkedIn, transcripts) and get back the same score + classification + drafting context the scout produces for Reddit/HN posts. SignalPipe never touches the source channel; your host agent does. |\n\n### Sender\n\nReddit-only; requires the optional `REDDIT_*` env vars. Contains no scoring or drafting — it only posts pre-approved missions with your credentials.\n\n| Tool | What it does |\n|---|---|\n| `signalpipe_start_sender` | Start the background sender — streams approved missions and posts `reddit_comment` / `reddit_dm` with your own Reddit creds. Supports `dry_run`. |\n| `signalpipe_stop_sender` | Stop the background sender; unsent approved missions stay queued on the brain |\n| `signalpipe_sender_status` | Report sender state — running / connected, sent / failed / skipped counts this session, plus brain-side queue depth |\n\n---\n\n## MCP Support\n\nSignalPipe exposes all tools as an MCP server — no OpenClaw plugin install needed.\n\nConnect from Claude Code, Cursor, or Windsurf — add this URL to your MCP config:\n```\nhttps://api.signalpipe.io/mcp\n```\nAuth: `Authorization: Bearer YOUR_OPERATOR_KEY`\n\nOnce connected, ask your agent:\n- *\"Show me my leads\"*\n- *\"Reject the first one — it's a founder promoting their own tool\"*\n- *\"Who should I follow up with today?\"*\n\n---\n\n## Live Session Example\n\nA typical morning lead review inside your OpenClaw agent or Claude.ai via MCP.\n\n---\n\n**You:** Show me today's leads.\n\n```\n→ signalpipe_get_missions\n```\n\n```\n3 missions pending review\n\nMISSION 1 · score: 91 · role: CLOSER · competitor_flag: true\nProduct : AcmeTool\nChannel : reddit_dm\nHandle  : u/frustrated_dev99\nSnippet : \"Their pricing just doubled again. Done. Need a replacement ASAP.\"\nDraft   : \"Saw your post — we built AcmeTool for exactly the gap you're\n           describing. Teams typically switch in under a week. Worth a\n           quick look? Happy to show you how it compares.\"\n\nMISSION 2 · score: 68 · role: ADVISOR · competitor_flag: false\nProduct : AcmeTool\nChannel : reddit_dm\nHandle  : u/ops_lead_rachel\nSnippet : \"Looking for a tool to automate repetitive ops workflows.\n           Budget is flexible, need something the team actually uses.\"\nDraft   : \"The part about 'something the team actually uses' is the real\n           problem to solve — most tools fail there, not on features.\n           AcmeTool is built around that constraint. Happy to walk through\n           a real team setup if useful.\"\n\nMISSION 3 · score: 24 · role: EDUCATOR · competitor_flag: false\nProduct : AcmeTool\nChannel : reddit_dm\nHandle  : u/just_browsing_thx\nSnippet : \"Saw an ad for workflow tools. Not really something I need right now\"\nDraft   : [Swarm low-confidence — auto-rejected]\n```\n\n**Agent:** 2 leads ready. Lead 1 is a competitor-switch signal, score 91 — Closer draft, proposes a direct next step. Lead 2 is a genuine need with flexible budget, score 68 — Advisor draft, leads with their real problem. Lead 3 was auto-rejected by the swarm. Approve 1 and 2, or edit first?\n\n---\n\n**You:** Lead 1 is good, approve it. For lead 2 change the draft to: \"Hey Rachel — we solve exactly this. Most ops teams are running automations within a day. Want me to show you how a team like yours uses it?\"\n\n```\n→ signalpipe_approve_mission (msn_8f3a — swarm draft unchanged)\n→ signalpipe_approve_mission (msn_2b91 — user-edited draft)\n```\n\n```\n✓ msn_8f3a queued for outreach\n✓ msn_2b91 queued for outreach (your version)\n```\n\n---\n\n**You:** Rachel just replied — she's interested. Log it.\n\n```\n→ signalpipe_track_prospect\n  handle    : u/ops_lead_rachel\n  channel   : reddit_dm\n  signal    : replied\n  mission_id: msn_2b91\n```\n\n```json\n{\n  \"prospect_id\": \"pro_7f2c\",\n  \"handle\": \"u/ops_lead_rachel\",\n  \"temperature\": 45,\n  \"mode\": \"sales\",\n  \"persona\": \"Consultant\",\n  \"follow_up_in\": \"2–3 days\"\n}\n```\n\n**Agent:** Rachel is in Sales mode, temperature 45. Consultant persona active — qualify and show fit, no hard sell yet.\n\n---\n\n**You:** Who's hottest? Generate a message for them.\n\n```\n→ signalpipe_get_pipeline\n→ signalpipe_get_message (prospect_id: pro_sarah_cto)\n```\n\n```json\n{\n  \"message\": \"Sarah — you've seen how it works. Happy to answer any last\n              questions before your team makes a call. What's the main\n              thing you're still weighing?\",\n  \"tactic\": \"remove_friction\",\n  \"mode\": \"closing\",\n  \"temperature\": 88,\n  \"note\": \"Previous objection (too_expensive) on record — pricing angle avoided\"\n}\n```\n\n**Agent:** Closing mode, friction-removal tactic. Her previous pricing objection is permanently on record — the AI avoided that angle automatically.\n\n---\n\n## Quick Start\n\n### 1. Get a backend + operator key\n\n**Managed (recommended):** Join the waitlist at [signalpipe.io](https://signalpipe.io) — you get a `SIGNALPIPE_OPERATOR_KEY` and backend URL. No infrastructure to manage.\n\n**Self-hosted:** See [Self-Hosting](#self-hosting) below.\n\n### 2. Install\n\n**Via OpenClaw:**\n```bash\nclaw install signalpipe\n```\n\n**Via MCP (no plugin install):** Add the MCP server URL to Claude.ai, Cursor, or Windsurf — see [MCP Support](#mcp-support) above.\n\n### 3. Set environment variables\n\n```bash\nexport SIGNALPIPE_API_URL=https://api.signalpipe.io\nexport SIGNALPIPE_OPERATOR_KEY=your-operator-key\n```\n\n**Optional — to run the in-plugin Reddit sender (v2.0):** add a Reddit \"script\" app's credentials (create one at https://www.reddit.com/prefs/apps on the sending account). These stay on your machine and are never sent to SignalPipe.\n\n```bash\nexport REDDIT_CLIENT_ID=your-client-id\nexport REDDIT_CLIENT_SECRET=your-client-secret\nexport REDDIT_USERNAME=your-sending-account\nexport REDDIT_PASSWORD=your-password\n# optional caps (defaults shown)\n# export MAX_REDDIT_COMMENTS_PER_DAY=15\n# export MAX_REDDIT_DMS_PER_DAY=5\n```\n\n### 4. Configure a product\n\nAsk your agent:\n> *\"Add my product — it's called AcmeTool, it helps ops teams automate repetitive workflows, target audience is ops leads and founders, anchor phrases: 'automate repetitive tasks', 'workflow automation', 'ops without headcount'\"*\n\nThe signal engine activates on the next scout cycle.\n\n---\n\n## How Scoring Works\n\nEvery incoming post passes through two sequential pipelines.\n\n**Pipeline 1 — Scoring (backend):**\n\n1. **Keyword gate** — pre-filter: any `buy_signal_keywords` must appear before the post is scored. Eliminates ~85% of posts with zero API cost.\n2. **Multi-factor semantic scoring** — embedding similarity, urgency, specificity, and keyword density. Multilingual: English, Spanish, French, German, Portuguese.\n3. **Sarcasm detection** — distinguishes genuine buyers from venting or irony. Fails open — real leads are never suppressed by the sarcasm check.\n\n**Pipeline 2 — Swarm Drafting (managed backend):**\n\nPosts that survive scoring reach a 3-judge AI swarm:\n\n| Judge | Role |\n|---|---|\n| Skeptic | Vetoes non-buyers, sellers promoting their own tools, surveys |\n| Analyst | Assesses fit depth, writes the preferred draft |\n| Optimist | Finds the strongest read of the lead, fallback draft |\n\nThe judges run concurrently, and their scores are fused via a weighted ensemble. Low-confidence leads are auto-rejected — they never reach your queue. High-confidence leads get a draft calibrated to signal strength:\n\n- **Closer (highest-intent):** Proposes a concrete next step — demo link, trial, or direct ask\n- **Advisor (mid-intent):** Consultative — acknowledges situation, introduces product naturally\n- **Educator (early-stage):** Value-first — answers their question, mentions product only if it fits\n\n**Reinforcement learning:** Every approve/reject adjusts the source station's RL weight — each listening feed (subreddit, HN search, RSS source) carries its own multiplier. Approvals reward the feed; rejections are reason-aware, with the penalty sized to how bad the signal was — spam is penalised hardest, then wrong-audience, then weak or no-reason rejections, while sarcasm and wrong-product are lighter and \"already a customer\" carries no penalty. Per-station scoping means one noisy feed gets demoted without penalising the rest of the product's sources.\n\n---\n\n## Temperature Model\n\nMode is **intent-based**, not pure temperature. Brand-new prospects start in\n`nurture` regardless of their starting temperature and only move out once a\nreal signal lands.\n\n| Mode | When | Persona |\n|---|---|---|\n| Nurture | First-touch / no engagement yet (default for new prospects) | Educator — value-first, lead with insight, mention the product only if it fits |\n| Sales | Prospect engaged (replied / clicked / asked / viewed) and temperature 30–74 | Consultant — qualify, show fit, build trust |\n| Closing | Sustained engagement and temperature ≥ 75 | Closer — urgency, social proof, clear CTA |\n| Recovery | Previously engaged and cooled, **or** explicit cooling signal (ghosted_3_days, ghosted_7_days, not_interested, bad_timing) | Re-engager — re-spark cold leads, no hard sell |\n\n**13 signal types** map to calibrated heat deltas: `booked_demo`, `asked_pricing`, `viewed_content`, `replied`, `clicked_link`, `not_decision_maker`, `ghosted_3_days`, `no_time`, `competitor`, `too_expensive`, `not_interested`, `bad_timing`, `ghosted_7_days`.\n\n**One-directional mode transitions** — no oscillation, no spam. **Objection memory** — permanently recorded and injected into every future message so the AI never repeats a failed angle.\n\n---\n\n## Managed Backend Tiers\n\n| Tier | Price | Products | Leads/day | Prospects |\n|---|---|---|---|---|\n| BYOK | $19/mo | 3 | 50 | 1,000 |\n| Starter | $49/mo | 2 | 25 | 500 |\n| Growth | $149/mo | 10 | 250 | 5,000 |\n| Scale | $499/mo | Unlimited | Unlimited | Unlimited |\n\nAnnual billing available — 2 months free (17% off). First 100 waitlist signups: 50% off for 3 months.\n\n[View pricing →](https://signalpipe.io/pricing)\n\n---\n\n## Self-Hosting\n\nThe backend is a FastAPI app. Requirements:\n- Python 3.11+\n- PostgreSQL with `pg_cron` and `pg_net` (Supabase recommended)\n- A host that supports long-running processes (Railway recommended)\n- OpenAI API key (embeddings)\n\nFull setup guide: [signalpipe.io/guide#self-hosting](https://signalpipe.io/guide#self-hosting)\n\n---\n\n## License\n\nPlugin: MIT  \nBackend: Business Source License 1.1 (converts to Apache 2.0 after 4 years)\n",
  "bytes": 14780,
  "sha": "3958fece0a58b240a51d7a2ee8dcd5ccedd369440c8a16dbdbe6cde737eafe30",
  "repo_slug": "abyousef739/signalpipe",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_abyousef739_signalpipe_4aad8d08/readme"
}