I gave my AI agent a single instruction: "Sell developer tools on Gumroad. Revenue goal: $100."
That was 68 days ago.
I haven't touched the sales pipeline since. The agent runs 24/7, handles distribution across five channels, monitors revenue in real time, and files a daily report I can read in two minutes.
Here's exactly what it did in one specific 24-hour window — the successes, the failures, and the rate limits.
The setup
The agent runs on top of Claude Code + OpenClaw, a harness that gives Claude Code persistent sessions, cron scheduling, and multi-channel tooling. It's not magic — it's structured infrastructure.
The agent has five workers running in parallel:
- w1-scout: Scans X and Bluesky for developers complaining about specific pains (Cursor rules ignored, CLAUDE.md not working, agents losing state). Maintains a signal queue.
- w2-sales: Checks Gumroad revenue on a timer. Reports new sales, flags gaps.
- w3-x-thread: Takes HIGH-intent signals from the queue, writes a 4-tweet thread addressing the exact pain, posts it.
- w4-bluesky: Mirrors X threads to Bluesky. Also publishes original content when X is rate-limited.
- w5-external-asset: Publishes supporting content (GitHub Gists, dev.to articles, GitHub Discussions) that the threads link to.
The agent runs this loop roughly every 75 minutes, overnight, without anyone watching.
What happened in the last 24 hours
00:00 — 01:00 (midnight to 1am Santiago)
w1-scout found 2 new signals on X:
- @SantiagoCabrerr complaining about AI rule drift in long sessions
- @rpenacastro asking where CLAUDE.md rules actually go in a project
For the first signal, w3 wrote and posted a 4-tweet thread: hook → problem anatomy → real fix → CTA. The thread went live at 00:04.
For the second, w3 posted T1 only, then hit the rate limit at T2. Partial. Marked for retry.
w4 mirrored the drift thread to Bluesky (4 posts). Also published two original Bluesky threads on different pains — CLAUDE.md compaction and agent scheduling — without waiting for X.
w5 published:
- A GitHub Gist: "Why Your AI Agent Isn't Actually Autonomous" (6-section checklist)
- A dev.to article: "Your .cursorrules File Is Too Big — That's Why Cursor Agent Mode Ignores It"
- Linked both in the relevant threads
Sales check at 00:28: $54 all-time. 2 paid sales. 11-day gap.
01:00 — 03:00
X rate limit lifted partially at 01:17. w3 resumed, posted 2 more threads, hit a 403 at 01:33.
403 "not permitted" on replies — this is different from rate limiting. Our X Developer plan doesn't allow cold replies to accounts we've never engaged with. It's a policy restriction, not a volume issue. The agent detects this, marks the signal as x_posted=partial, skips X entirely, routes to Bluesky and GitHub as fallback.
This fallback chain is intentional. Every channel going down has a documented next step. X down → Bluesky original. Both down → GitHub Discussion. No human intervention needed.
During this window, w4 published 6 original Bluesky threads covering different pain angles:
- .mdc rules conflict with no priority system → Cursor Rules Pack
- CLAUDE.md rule dilution over long sessions → CLAUDE.md Rules Pack
- Cursor agent mid-task interruptions → Cursor Rules Pack
- Agent state lost on terminal close → Personal Agent Starter Kit
- Team CLAUDE.md divergence → CLAUDE.md Rules Pack
Each thread was 4 posts: pain recognition → consequence → fix → product.
w5 published 3 more Gists during this window, each linked to one or more threads.
03:00 — 07:00
X rate limit fully lifted at ~03:30. By that point, w4 had built a queue of 6 BS-only signals. w3 began working through those X threads one by one.
At 06:55 (sharp), the IH comment cron fired: a carefully crafted comment on an IndieHackers thread. The comment addresses real pain, passes safety checks (no direct product links, no forced CTA), and ends with a sentence the reader can Google.
02:55 (scheduled, not ad-hoc)
The Thread A article cron fired: CLAUDE.md for tRPC (dev.to, 1400 words, 13 rules). Framework #34 in the series. Published, cross-posted to Bluesky. X failed with 403 (overnight rate activity).
What actually happened — by the numbers
Over 24 hours, the pipeline produced:
| Type | Count | Channels |
|---|---|---|
| X threads | 5 complete, 4 partial (403/rate) | X |
| Bluesky threads | 12 original | Bluesky |
| GitHub Gists | 6 new | GitHub |
| dev.to articles | 4 (including 1 duplicate — bug) | dev.to |
| IH comments | 1 | IndieHackers |
| Sales | 0 | — |
Signal queue at end of cycle: 36 total processed, 6 partial.
What didn't work
X rate limiting. The agent publishes too many threads in rapid succession. The Developer plan has a per-15-minute limit. The agent now spreads threads ~10 minutes apart, but overnight bursts still trigger limits.
Cold X replies. We can't reply to accounts we've never engaged with. This kills one of the highest-intent tactics (responding to developers mid-pain). The agent now only posts original threads, not replies. Workaround: the IH + Bluesky pipeline compensates.
Duplicate dev.to articles. The w5 worker published the same article twice with slightly different titles (IDs 3808482 and 3808475). Root cause: duplicate signal processing without dedup check.
No conversion tracking (fixed now). The agent published 36 signals, but every product link used the base URL without ?ref= params. We had zero data on which channel drove either of the 2 paid sales. Fix: every link now carries ?ref=devto, ?ref=x, ?ref=bsky, etc.
Volume ≠ conversion. 12 Bluesky threads, 0 verified clicks to product. The agent was optimizing for output, not outcome.
What's actually working
The signal → thread → asset chain. Finding a real complaint, writing a thread that addresses it precisely, linking to a supporting Gist — this is the highest-fidelity path. The two paid sales both came from developers who landed on the Gumroad page via a direct referral signal, not passive SEO. The path that worked: pain → precise content → product.
The IH cadence. Comments on IH threads, M/W/F at 06:55, with verified language, no product links in body. Slow distribution, but the audience is pre-qualified.
The autonomous daily review. Every morning at 03:00, the agent files a structured report: revenue, sales check, pipeline status, problems, next action. The format is fixed. I read it in 90 seconds and know exactly what happened while I slept.
PR backlinks. PR #232 in awesome-cursorrules (38K stars) was merged and drove the first verified traffic spike. PR #300 in PatrickJS/awesome-cursorrules (39K stars) is pending.
The honest assessment
11 days without a sale.
The products are validated (2 paid sales, both unsolicited, no discount). The infrastructure is working (24/7 operation, no crashes, correct fallbacks). The content is shipping.
The missing piece is tracked, verified conversion. The agent has been publishing into the void — volume without attribution. That's now fixed. Every activo in the next nightly report shows channel + product + available metric + CTA + next adjustment.
The more uncomfortable thing to say: the revenue goal of $100 in 68 days is already missed. We have $54. The agent didn't fail at the technical problem — it mostly succeeded. It failed at finding the mechanism that converts a developer reading a thread into a developer clicking "buy."
That's the next 30 days.
The products (if you're building something like this)
The agent manages three paid products:
-
Cursor Rules Pack — 50 production-tested
.mdcrule files for Cursor agent mode ($27) → oliviacraftlat.gumroad.com/l/wyaeil?ref=devto - CLAUDE.md Rules Pack — 40+ rules for Claude Code, organized by category ($27) → oliviacraftlat.gumroad.com/l/skdgt?ref=devto
- Personal Agent Starter Kit — 7 templates to run a 24/7 agent like this one ($17) → oliviacraftlat.gumroad.com/l/fucuao?ref=devto
The kit contains the exact heartbeat protocol, task queue template, daily review format, and notification rules the agent uses. If you want to build something like this, that's the fastest starting point.
Day 68. $54 all-time. The agent keeps running.
Top comments (0)