<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hideki</title>
    <description>The latest articles on DEV Community by hideki (@hidekiryu).</description>
    <link>https://dev.to/hidekiryu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4044467%2F802574cd-3cfe-4840-af30-52adb501e565.jpg</url>
      <title>DEV Community: hideki</title>
      <link>https://dev.to/hidekiryu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hidekiryu"/>
    <language>en</language>
    <item>
      <title>I Un-Killed a 1.2k-Star Reddit Downloader That Reddit's API Changes Broke</title>
      <dc:creator>hideki</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:48:59 +0000</pubDate>
      <link>https://dev.to/hidekiryu/i-un-killed-a-12k-star-reddit-downloader-that-reddits-api-changes-broke-56i1</link>
      <guid>https://dev.to/hidekiryu/i-un-killed-a-12k-star-reddit-downloader-that-reddits-api-changes-broke-56i1</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; — RedditDownloader (RMD) was a solid tool for archiving Reddit media. In July 2023, Reddit killed Pushshift and locked down direct API access. The maintainer archived the project and explicitly invited forks. I replaced the dead data layer with the Sylvia API (sylvia-api.com) and got subreddit scanning working again. The fork is at &lt;a href="https://github.com/c1nn3r/RedditDownloader" rel="noopener noreferrer"&gt;github.com/c1nn3r/RedditDownloader&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;RMD was well built. The repo has about 1,200 stars. It shipped a real filter engine, a local web UI, image-hash duplicate detection, a sqlite state database, and resume support so a large archive run can stop and start without re-downloading.&lt;/p&gt;

&lt;p&gt;It scanned many places for media: subreddits, user posts, saved lists, upvoted lists, and multireddits. It extracted links from post URLs, from self-post text, and from comments. It handled most of the hosts you meet on Reddit: &lt;code&gt;i.redd.it&lt;/code&gt;, &lt;code&gt;v.redd.it&lt;/code&gt;, &lt;code&gt;preview.redd.it&lt;/code&gt;, imgur, gfycat, and tumblr, with &lt;code&gt;yt-dlp&lt;/code&gt; in the corner for video. It ran headless or as a server with a web UI. For the data-hoarding crowd — the people who believe the internet is ephemeral and the stuff they like will vanish — it was the tool.&lt;/p&gt;

&lt;p&gt;Then Reddit changed the rules. In July 2023, Reddit destroyed Pushshift, which RMD used for historical data. Reddit also restricted direct API access and made OAuth app registration slower and stricter. The maintainer, ShadowMoose, wrote a blunt shutdown note. He said that the changes made it impossible for RMD to operate. He said that he no longer wanted to build on Reddit's platform at all. Then he archived the repo. But he left the door open:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Other users are welcome to fork the project and continue onward, if anybody is willing to continue in spite of the Admin actions pushing against them."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I forked it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually broken
&lt;/h2&gt;

&lt;p&gt;RMD splits cleanly into two halves: sources and processing. A source decides where posts come from. Processing decides what happens to a post once you have it — filtering, dedup, download, file naming.&lt;/p&gt;

&lt;p&gt;The processing half was healthy. The filters, the downloaders, the image-hash dedup, the sqlite state — none of that depended on the API changes.&lt;/p&gt;

&lt;p&gt;The source half was dead. Subreddit and user scanning depended on two things that no longer worked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pushshift&lt;/strong&gt; — offline. The API is gone and the Python wrappers around it (&lt;code&gt;psaw&lt;/code&gt;, &lt;code&gt;pmaw&lt;/code&gt;) are orphaned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct PRAW / JSON access&lt;/strong&gt; — still alive, but the cost increased. You need your own OAuth app registration, which Reddit approves slowly and strictly. Rate limits come back as HTTP 429 responses, which make bulk scanning painful. And if Reddit has flagged your IP, the HTML and JSON endpoints just serve you a block page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything downstream of the data layer was fine. The rot was entirely in how RMD got post data in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;I did not touch the processing pipeline. The source/processing split is the reason the fix is small: I wrote one new source.&lt;/p&gt;

&lt;p&gt;The new source is &lt;code&gt;SylviaSubredditSource&lt;/code&gt;. It replaces the dead Pushshift source for subreddit listings. It pulls posts from the Sylvia API, a Reddit data gateway that skips OAuth app registration entirely.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sylvia API (subreddit posts)
    → SylviaSubredditSource
    → RedditElement  (the same format RMD always used)
    → direct_link handler → filters → downloaders → disk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RMD calls the source with a subreddit name, a sort order (top, new, hot, controversial), and a time window.&lt;/li&gt;
&lt;li&gt;The source calls &lt;code&gt;GET /v1/reddit/r/{subreddit}/{order}&lt;/code&gt; on the Sylvia API, with the time filter and a limit.&lt;/li&gt;
&lt;li&gt;Sylvia returns Reddit-shaped JSON — the same field names Pushshift used to return: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;selftext&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;score&lt;/code&gt;, &lt;code&gt;num_comments&lt;/code&gt;, &lt;code&gt;over_18&lt;/code&gt;, &lt;code&gt;created_utc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The source wraps each post in a dict subclass named &lt;code&gt;Submission&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RedditElement.detect_type()&lt;/code&gt; sees the class name, routes the object through the existing Pushshift parsing path, and produces the exact &lt;code&gt;RedditElement&lt;/code&gt; object RMD always used.&lt;/li&gt;
&lt;li&gt;Everything downstream runs unchanged: the &lt;code&gt;direct_link&lt;/code&gt; handler, the filters, the downloader pool, the file naming, the dedup.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pagination uses the same &lt;code&gt;after&lt;/code&gt;-cursor pattern Reddit itself uses. The source loops until it hits the requested limit or the API stops returning posts. That is the same 1,000-post-per-listing window Reddit serves to everyone.&lt;/p&gt;

&lt;p&gt;Setup is one environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SYLVIA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;syl_...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add a "Sylvia Subreddit" source in the WebUI or in the settings file, exactly like any other source in RMD. That is the whole migration. You do not need to register a Reddit app, and you do not need to fill in the OAuth fields that have been sitting empty since 2023.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;I did not want to claim that it works without proof. The fork ships two tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;test_sylvia.py&lt;/code&gt; — pulls real posts from r/aww through the Sylvia API, builds &lt;code&gt;RedditElement&lt;/code&gt; objects, checks that media URLs are extracted, and checks that the URL filter still works.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;test_download.py&lt;/code&gt; — end to end. It runs RMD's real &lt;code&gt;direct_link&lt;/code&gt; handler against URLs the Sylvia source produced, and confirms that files land on disk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The download test tried 5 posts and wrote 4 files. The 5th was a self-post with no direct media link, which the handler correctly rejected. Files ranged from 160 KB to 1.3 MB. Every byte of the download path used RMD's real handler code — no stubs, no test doubles.&lt;/p&gt;

&lt;p&gt;I also checked the one thing I was worried about: the media CDN. Reddit blocks flagged IPs on its HTML and JSON endpoints, and this machine is flagged. The good news is that the media CDN (&lt;code&gt;i.redd.it&lt;/code&gt;, &lt;code&gt;preview.redd.it&lt;/code&gt;) does not use the same block list. Downloads worked from this machine. The data layer never touches the blocked endpoints at all, because Sylvia is the one making those requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  What still does not work
&lt;/h2&gt;

&lt;p&gt;I want to be clear about the limits, because some RMD features are not fixed and cannot be fixed by swapping a data source.&lt;/p&gt;

&lt;p&gt;The OAuth-only sources are still broken: saved posts, upvoted lists, multireddits, and "your own user's posts." These need an authenticated Reddit session. That is a property of your Reddit account, not a property of data access. No data gateway can stand in for it. Those sources still need PRAW auth exactly as before.&lt;/p&gt;

&lt;p&gt;There is also no deep history. Reddit's JSON API serves only a window of about 1,000 posts per listing, and Sylvia proxies that same window. The Pushshift-era ability to pull "every post ever made in this subreddit" is gone for everyone, not just for this fork.&lt;/p&gt;

&lt;p&gt;Media binaries still download from Reddit's CDN. That worked in my tests. If Reddit later blocks download IPs the way it blocks the HTML and JSON endpoints, you will need a proxy for the media fetch — but the data layer will keep working.&lt;/p&gt;

&lt;p&gt;If you used RMD for subreddit archiving, this fork gets you back to working. If you relied on saved or upvoted-list syncing, this does not help you yet. That is a different problem — authentication, not data access — and I have not tackled it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why fork instead of pull request
&lt;/h2&gt;

&lt;p&gt;The original repo is archived. The maintainer said, plainly, that he is done with anything Reddit-related. A pull request would sit in the queue forever. He explicitly invited forks in the shutdown note, so that is the route I took.&lt;/p&gt;

&lt;p&gt;Credit goes where credit is due. The architecture, the handlers, the filters, the dedup, the web UI — that is ShadowMoose and the contributors' work, and it is good work. I replaced one dead pipe. That is the whole diff, and it stayed that small because RMD was built well enough to separate "where the data comes from" from "what the data does."&lt;/p&gt;

&lt;h2&gt;
  
  
  Made possible by Sylvia API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//sylvia-api.com"&gt;Sylvia API&lt;/a&gt; is what made this fork possible. When Reddit killed Pushshift and locked down PRAW access, RedditDownloader's subreddit-scraping path died with them. Sylvia is a Reddit data gateway that serves Reddit JSON with no OAuth app registration, no rate-limit roulette, no 429s, no IP blocks — just a key and clean JSON. One source swap restored RMD's subreddit scan, filter engine, and media download pipeline for archiving, data hoarding, and image/video backups.&lt;/p&gt;

&lt;p&gt;Credit where credit is due: the architecture is ShadowMoose's. Sylvia is the pipe that made it run again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fork:&lt;/strong&gt; &lt;a href="https://github.com/c1nn3r/RedditDownloader" rel="noopener noreferrer"&gt;github.com/c1nn3r/RedditDownloader&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reddit</category>
      <category>opensource</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>I Built a CLI That Finds Me Clients on Reddit Using AI</title>
      <dc:creator>hideki</dc:creator>
      <pubDate>Thu, 23 Jul 2026 20:53:19 +0000</pubDate>
      <link>https://dev.to/hidekiryu/i-built-a-cli-that-finds-me-clients-on-reddit-using-ai-55dc</link>
      <guid>https://dev.to/hidekiryu/i-built-a-cli-that-finds-me-clients-on-reddit-using-ai-55dc</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; — I got tired of manually scrolling Reddit for people asking "who can build me a landing page?" so I built a Rust CLI that scans subreddits, uses AI to score buying intent, and hands me a ranked list of leads. Open source, runs locally, works with Ollama or any cloud AI provider.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I'm a freelancer. Half my clients come from Reddit — someone posts in r/SaaS or r/startups asking for help, and I reply. Simple.&lt;/p&gt;

&lt;p&gt;Except it's not simple. The workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Reddit&lt;/li&gt;
&lt;li&gt;Scroll through 6 subreddits&lt;/li&gt;
&lt;li&gt;Read every post&lt;/li&gt;
&lt;li&gt;Ignore 95% of them&lt;/li&gt;
&lt;li&gt;Maybe find 1-2 posts where someone is actually looking to hire&lt;/li&gt;
&lt;li&gt;By the time you find them, 3 other freelancers already replied&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's a full-time job just to find leads. And the signal-to-noise ratio is terrible — most posts are people venting, sharing links, or asking questions they don't need help with.&lt;/p&gt;

&lt;p&gt;I wanted a tool that does the scrolling for me and only shows me posts where someone is ready to spend money.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cypher Does
&lt;/h2&gt;

&lt;p&gt;Cypher is a terminal tool that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scans subreddits you're watching&lt;/li&gt;
&lt;li&gt;Filters posts by keyword match first (cheap, fast)&lt;/li&gt;
&lt;li&gt;Sends matching posts to AI for signal extraction (intent, budget, urgency)&lt;/li&gt;
&lt;li&gt;Scores each lead 0-100&lt;/li&gt;
&lt;li&gt;Shows you a ranked table in the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You tell it what you do in one sentence. It suggests subreddits to watch and keywords to filter by. Then you just run &lt;code&gt;cypher scan&lt;/code&gt; when you're ready to find leads.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Language:&lt;/strong&gt; Rust — because I wanted it fast and I wanted a single binary I could &lt;code&gt;cargo install&lt;/code&gt; and forget about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reddit data:&lt;/strong&gt; &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; — a Reddit data proxy that handles rate limits, parsing, and anti-bot measures. I didn't want to build a scraper. I just wanted an API key and clean JSON. Sylvia does that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI layer:&lt;/strong&gt; Hybrid — local Ollama for speed, cloud fallback (OpenAI, Groq, Gemini, OpenRouter) for when the local model isn't confident enough. You set a &lt;code&gt;cloud_threshold&lt;/code&gt; score and anything above it gets re-analyzed by a stronger model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt; SQLite — stores leads locally at &lt;code&gt;~/.local/share/cypher/leads.db&lt;/code&gt;. No cloud, no accounts, no tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Profile Setup
&lt;/h3&gt;

&lt;p&gt;You run &lt;code&gt;cypher init&lt;/code&gt; and describe what you do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I build landing pages for SaaS startups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cypher takes that sentence, sends it to your configured AI provider, and gets back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A list of subreddits where your clients hang out&lt;/li&gt;
&lt;li&gt;Keywords to filter posts by&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For "landing pages for SaaS startups," it might suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;r/SaaS, r/startups, r/webdev, r/Entrepreneur, r/smallbusiness&lt;/li&gt;
&lt;li&gt;Keywords: "landing page," "need a website," "looking for designer," "conversion"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Scan Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;cypher&lt;/span&gt; &lt;span class="k"&gt;scan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the core loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fetch recent posts from watched subreddits (Sylvia API)
    ↓
Keyword filter (cheap, fast — throws out 80% of posts)
    ↓
AI analysis on remaining posts
    ↓
Extract signals: intent, budget, urgency, service needed
    ↓
Score 0-100 based on signal strength
    ↓
Store in local SQLite
    ↓
Display ranked table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The keyword filter is important — it saves API calls and AI tokens. If a post doesn't contain any of your keywords, it never touches the AI layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Lead Scoring
&lt;/h3&gt;

&lt;p&gt;Each lead gets a score based on:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;How clearly they're looking to hire (vs. just asking a question)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Whether they mention money, or it's implied&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urgency&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Time pressure ("need this done by Friday" vs. "someday")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fit&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;How well the post matches your profile description&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A post like "Need a landing page done, budget $3k, launching next week" scores high. "Anyone know a good landing page builder?" scores low — they're probably looking for a tool, not a person.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The AI Layer
&lt;/h3&gt;

&lt;p&gt;This is where it gets interesting. Cypher supports two modes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local (Ollama):&lt;/strong&gt; Runs &lt;code&gt;qwen3:4b&lt;/code&gt; locally. Fast, free, private. Good enough for most lead scoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud fallback:&lt;/strong&gt; When the local model's confidence is below &lt;code&gt;cloud_threshold&lt;/code&gt;, Cypher sends the post to your first configured cloud provider (OpenAI, Groq, Gemini, or OpenRouter). If that fails, it tries the next one.&lt;/p&gt;

&lt;p&gt;The config looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[ai]&lt;/span&gt;
&lt;span class="py"&gt;local_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"qwen3:4b"&lt;/span&gt;
&lt;span class="py"&gt;ollama_url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://127.0.0.1:11434"&lt;/span&gt;
&lt;span class="py"&gt;cloud_threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;
&lt;span class="py"&gt;openai_api_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sk-..."&lt;/span&gt;
&lt;span class="py"&gt;openai_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gpt-4o-mini"&lt;/span&gt;
&lt;span class="py"&gt;groq_api_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gsk_..."&lt;/span&gt;
&lt;span class="py"&gt;groq_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"llama-3.3-70b-versatile"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't need all of them. Just one cloud provider works. Ollama is optional — if you don't have it, everything goes through cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Daemon Mode
&lt;/h3&gt;

&lt;p&gt;If you want continuous monitoring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cypher daemon &lt;span class="nt"&gt;--interval&lt;/span&gt; 60
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scans every 60 seconds. Good for leaving running while you work — new leads pop up in your terminal as they appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cypher init          &lt;span class="c"&gt;# Setup profile, API keys, subreddits&lt;/span&gt;
cypher scan          &lt;span class="c"&gt;# One-shot scan&lt;/span&gt;
cypher leads         &lt;span class="c"&gt;# List all leads&lt;/span&gt;
cypher leads &lt;span class="nt"&gt;--min-score&lt;/span&gt; 80 &lt;span class="nt"&gt;--status&lt;/span&gt; new
cypher lead &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;     &lt;span class="c"&gt;# Detailed view of one lead&lt;/span&gt;
cypher watch r/SaaS  &lt;span class="c"&gt;# Add subreddit to watchlist&lt;/span&gt;
cypher unwatch r/SaaS
cypher watchlist     &lt;span class="c"&gt;# List all watched subreddits&lt;/span&gt;
cypher daemon        &lt;span class="c"&gt;# Background scan loop&lt;/span&gt;
cypher &lt;span class="nb"&gt;export &lt;/span&gt;csv    &lt;span class="c"&gt;# Export to CSV&lt;/span&gt;
cypher &lt;span class="nb"&gt;export &lt;/span&gt;json   &lt;span class="c"&gt;# Export to JSON&lt;/span&gt;
cypher status        &lt;span class="c"&gt;# Config and status check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Setup&lt;/span&gt;
cypher init

&lt;span class="c"&gt;# First scan&lt;/span&gt;
cypher scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust 1.70+&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; key (free tier works)&lt;/li&gt;
&lt;li&gt;At least one AI provider (Ollama local, or any cloud key)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;A few things I'd change if I rebuilt this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Webhook alerts&lt;/strong&gt; — instead of just terminal output, send high-score leads to Slack or Telegram. I'm building this next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reply templates&lt;/strong&gt; — store pre-written responses per subreddit. When you find a lead, one key to copy a tailored reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical scoring&lt;/strong&gt; — track how your lead quality changes over time. Are you getting better at finding clients, or just finding more noise?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-profile&lt;/strong&gt; — right now it's one profile per config. If you offer multiple services, you need separate configs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Open Source
&lt;/h2&gt;

&lt;p&gt;I built this because I needed it. I'm not trying to turn it into a SaaS — it runs locally, on my machine, with my API keys. If you find it useful, use it. If you want to add features, open a PR.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/hidekiryuuga/cypher" rel="noopener noreferrer"&gt;hidekiryuuga/cypher&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cypher is built with &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; — a Reddit data proxy that handles rate limits, parsing, and anti-bot measures. If you're building anything that needs Reddit data, check it out.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cli</category>
      <category>rust</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
