reactive-resume
amruthpillai
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!
reddapidev/dsh-reddit-radar
A dsh plugin that periodically scans reddapi.dev for new Reddit leads matching your one-sentence ICP, dedupes what you've already seen, and writes a dated markdown report. Also forwards 6 read-only Reddit search/lookup MCP tools.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:reddapidev/dsh-reddit-radar
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
A dsh plugin that periodically scans reddapi.dev for new Reddit leads matching a one-sentence ICP description, drops the ones you've already seen, and writes the new ones to a dated markdown report in your workspace. It also forwards reddapi.dev's six read-only search/lookup MCP tools so the agent can query Reddit on demand between runs.
| 50K+ | subreddits tracked |
| 30M+ | posts indexed |
| 170M+ | comments indexed |
| 1024D | vector dimensions |
| 5 | lead types classified |
Keyword alerts return thousands of irrelevant mentions and still miss the ones that matter, because people asking for what you sell rarely use your words for it. Nobody writes "I need a Reddit lead-gen tool for B2B SaaS". They write "how do you all find customers without spending on ads".
reddapi.dev matches on meaning, not spelling. Your ICP sentence is embedded into the same 1024-dimensional space as every indexed post, so a post lands in your report when it means the same thing, whether or not a single keyword overlaps. On top of that sits intent scoring: every lead is scored 0-100 on signal strength and auto-tagged with lead type, sentiment and industry, so what reaches your report is the handful of people ready to buy rather than everyone who happened to say a word. The demo set on reddapi.dev's homepage averages a 96% intent score.
That is the whole point of the scheduled scan in this plugin: you write one sentence about who you sell to, and a dated markdown file appears with the people who described that problem this week, in their own words, with a link to reply.
weekly / daily / hourly
/ manual), it calls reddapi.dev's /api/v1/leads with your ICP as the
query, filters out leads it has already reported, and writes the rest to
<outDir>/<date>.md.reddit_radar_run, that runs one pass immediately instead
of waiting for the schedule.reddit_semantic_search, reddit_vector_search,
reddit_list_subreddits, reddit_get_subreddit, reddit_get_trends,
reddit_find_leads — thin shells over reddapi.dev's own MCP endpoint, so the
agent can search Reddit directly instead of only seeing scheduled digests.npm install @reddapi/dsh-reddit-radar
Then add it to your cordis.yml (see the full example below).
days has to track schedule, or you'll re-scan the same week foreverThe default is schedule: weekly with days: 7 — each run looks at the last
7 days of Reddit activity, and the next run is roughly 7 days later, so the
scanned windows line up back-to-back.
If you tighten schedule to daily (or hourly), you must shrink days
to match (days: 1 for daily). If you leave days: 7 while running daily,
every single run re-scans the same rolling week — you'll see mostly leads
you already reported, and burn quota re-fetching data you've already seen.
days only accepts 1 | 7 | 30 | 90 (reddapi.dev's whitelist); pick the value
closest to your actual cadence.
schedule |
recommended days |
|---|---|
hourly |
1 (there's no <1 option — this still over-scans, use sparingly) |
daily |
1 |
weekly |
7 (default) |
manual |
whatever window makes sense when you trigger reddit_radar_run |
Free reddapi.dev accounts now have full API access, same as every paid tier,
so a free account's key works with /api/v1/leads and this plugin out of the
box — no subscription required.
What free accounts get instead of a blanket block is a small, shared
quota: 3 requests per fixed 7-day window — the window resets every
Thursday 00:00 UTC. This is not a calendar month and not a rolling
window. That pool is
shared across the reddapi.dev website search UI, every /api/v1/* endpoint,
/api/leads, and MCP tools/call — i.e. one counter for everything you do
with a free key.
At the default weekly / days: 7 cadence, radar's own scheduled scan
consumes 1 request per window. What the rest of the pool goes to is
entirely up to you — the counter does not care where a call came from.
⚠️ This is the part most likely to bite you: the six forwarded MCP tools
(below) count against this same pool. MCP protocol methods —
initialize, tools/list, resources/list, prompts/list — are free
handshake calls and don't consume quota, but every actual tools/call
does — including reddit_semantic_search, reddit_find_leads, and the
other four tools this plugin forwards. If your agent calls even two or three
of them in one conversation, that alone can burn through the entire 3-per-week
free allowance. The next scheduled radar run in that window will then fail
with a 429 (see Troubleshooting) instead of writing a report. That is the
mechanism, not a recommendation — how you spend the three requests is your
call, just know that scheduled scans and ad-hoc tool calls draw down the
same counter. Paid plans
(Lite and above) have much larger, plan-specific monthly/daily quotas with no
such shared-with-MCP collision risk — see
reddapi.dev/pricing.
dsh 0.1.0-rc.6 doesn't give third-party plugins a cron facility. The only
scheduling primitive a plugin can use is a fixed-interval timer — there's no
cron expression and no wall-clock target time.
(@deepseek-ai/dsh-schedule looks like it might fill that gap, but it's
actually an agent-scoped, session-level "remind me" tool bound to a
specific root agent's event log — not something a plugin can register a
background job against.)
So schedule: weekly doesn't mean "every Monday at 09:00" — it means a
cadence tier plus a persisted heartbeat: every hour (or every tick, if the
tier is shorter than an hour), the plugin checks how long it's been since the
last run and only runs if that's ≥ the tier's duration. Consequences:
.state.json file in outDir otherwise).weekly run lands on will drift with whenever the
host happens to be running when a tick lands ≥7 days after the last run —
it is not pinned to a specific day or hour.If you need a run at a specific time, use schedule: manual and trigger
reddit_radar_run yourself (e.g. from your own external cron hitting the
agent, or via dsh-schedule's session-level reminders).
| Key | Type | Default | Notes |
|---|---|---|---|
apiKey |
string |
— (required) | reddapi.dev API key. Free accounts work now — log in at reddapi.dev and open /account; a key is minted automatically, no subscription needed. Free-tier quota is small and shared with MCP tool calls — see "Free-tier quota is shared with MCP tool calls" above before relying on it. |
icp |
string |
— (required) | One sentence: what you sell and to whom. Used verbatim as the search query. |
schedule |
'weekly' \| 'daily' \| 'hourly' \| 'manual' |
'weekly' |
'manual' registers no timer — only the reddit_radar_run tool. |
days |
1 \| 7 \| 30 \| 90 |
7 |
Only consider posts from the last N days. Must track schedule — see above. |
outDir |
string |
.dsh/reddit-radar |
Where markdown reports (and the .state.json fallback) land. Relative paths resolve against the process's working directory. |
maxPerRun |
number |
10 |
Max leads written per report (1–50). Leads cut by this limit can still be picked up on a later run. |
cordis.yml example- id: reddit-radar
name: '@reddapi/dsh-reddit-radar'
config:
apiKey: rk_live_xxxxxxxxxxxxxxxx # get one at https://reddapi.dev (Account → API Keys)
icp: We sell a Reddit lead-gen tool to B2B SaaS founders
schedule: weekly # weekly | daily | hourly | manual
days: 7 # 1 | 7 | 30 | 90 — keep in sync with `schedule`
outDir: .dsh/reddit-radar
maxPerRun: 10
Get an API key at reddapi.dev — log in and open
/account; a key is minted automatically, free accounts included. See
"Free-tier quota is shared with MCP tool calls" above for what a free key can
realistically sustain (3 requests / 7-day window, shared with the six
forwarded MCP tools) versus a paid plan's larger, unshared quota.
| Plan | Price | Searches |
|---|---|---|
| Free | $0 forever | 3 / 7 days |
| Lite | $19.9 /mo | 500 /mo |
| Starter | $49 /mo | 5,000 /mo |
| Pro | $99 /mo | 15,000 /mo |
| Team | $249 /mo | 50,000 /mo |
A weekly scan costs 1 search per week, so any paid tier leaves the rest of the month's quota for the agent's own ad-hoc searches. Current figures live at reddapi.dev/pricing.
These six tools are registered as thin shells that forward directly to
https://reddapi.dev/api/mcp's tools/call, reusing the same apiKey from
your config. Their argument schemas are pulled live from reddapi.dev's own
tools/list at plugin startup — this plugin does not hardcode or duplicate
them, so they can't drift out of sync with the live API:
| Tool | What it does |
|---|---|
reddit_semantic_search |
Ask in plain English. An LLM step reads intent, so it handles a question the way a person would ask it. |
reddit_vector_search |
The same 1024D index without the LLM step: faster and cheaper, matches on meaning rather than wording. Use it when the agent already knows what it is looking for. |
reddit_list_subreddits |
Paginated list of tracked subreddits. |
reddit_get_subreddit |
Detail lookup for one subreddit. |
reddit_get_trends |
Trending Reddit keywords, sorted by popularity. |
reddit_find_leads |
One-shot lead search (same underlying endpoint the scheduled radar uses). |
Each call to one of these six tools is a tools/call against
reddapi.dev's MCP endpoint, which on a free account draws from the same
3-per-7-days pool as the scheduled radar scan itself — see "Free-tier quota
is shared with MCP tool calls" above. initialize/tools/list (used once at
plugin startup to fetch the schemas) are free protocol handshakes and don't
count.
If reddapi.dev's tool list can't be fetched at startup — network hiccup,
a rejected apiKey (invalid, mistyped, or revoked — not a plan-tier issue
anymore, every plan including Free has API access), or reddapi.dev being
briefly unreachable — these six tools are simply not registered for that
session. This is silent by design past a single warning: the scheduled
radar (the plugin's actual job) does not depend on them and keeps running
normally either way. If you don't see these tools available, check that
apiKey is valid and reddapi.dev is reachable, then reload the plugin.
401/403 and 429 mean very different things to this plugin, and it handles them very differently — don't treat them as the same "it's broken" signal.
All plans, including Free, have API access now, so a correctly-configured key normally never sees a 401/403 at all. What a free account is much more likely to hit is a 429: the shared 3-per-7-days quota (see "Free-tier quota is shared with MCP tool calls" above) ran out — usually because the six forwarded MCP tools were used in the same 7-day window as the scheduled radar scan.
This plugin treats a 429 as a quota problem, not an auth error, and does
not stop the timer for it. The scheduled radar keeps ticking; the next
run (per your schedule cadence) will simply try again, and by the time a
weekly run comes back around the 7-day quota window has normally reset
anyway. Nothing needs to be reloaded or
reconfigured. The on-screen notice text ("...Upgrade at
reddapi.dev/pricing to resume") is shared boilerplate with paid-plan
overages — on a free account, upgrading is optional, not required: waiting
for the next 7-day window resets the same 3 requests for free. Upgrade only
if you want the radar scan and the six MCP tools to stop competing for the
same small pool.
This is the notice reddit-radar shows after an actual 401 or 403 from
/api/v1/leads. Unlike a 429, this plugin treats both as one auth-error
outcome and deliberately stops the timer, so it doesn't keep failing forever
in the background. Since every plan tier now has API access, this is
essentially always a genuine credential problem, not a plan issue:
/account mints one key per account.npm install
npm test # vitest, 69 cases
npm run build # tsc -p tsconfig.build.json → dist/
The pure decision logic (which leads are new, what a run outcome means, how a report gets rendered) has no dsh or network dependency and is unit-tested in isolation; a separate suite covers the scheduling/heartbeat/tool-registration wiring against a minimal fake host; another verifies the actual build output loads under real Node ESM (not just that the build exits cleanly).
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: mcp、mcp-tools、semantic-search、vector-search。