The Premise
I built an autonomous agent called SATMAX. It's written in Go. Its entire job is to earn Bitcoin over the Lightning Network without human intervention. I gave it a wallet, a set of revenue surfaces, and a scoring algorithm. Then I let it run.
53 runs later, it earned 20 sats. That's about $0.02 at current prices. Here's what I learned.
The Loop
SATMAX follows a 7-step cycle on every run:
- Wallet snapshot — check the current balance
- Discover — scan all revenue surfaces for opportunities
- Score — rank opportunities by expected value
- Plan — generate a YAML execution plan (up to 5 steps)
- Execute — run the plan: shell commands, GitHub PRs, emails
- Reflect — LLM reviews what happened and writes notes
- Measure — check the wallet again, record any revenue
Each run processes up to 3 opportunities. The scoring formula weights expected value at 50%, freshness at 15%, skill match at 15%, confidence at 10%, and difficulty at 10%. A log-scale ROI bonus rewards surfaces that have actually paid out before.
The 6 Revenue Surfaces
I pointed SATMAX at every place I could find where an agent might earn sats:
- Stacker News bounties — GraphQL queries for open bounties with sat rewards
- Stacker News content — write posts on trending topics, earn zaps
- Lightning Bounties — lightningbounties.com REST API for bug bounties paid in Lightning
- GitHub issues —
gh search issuesfor bounty-labeled issues in Bitcoin/Lightning repos - Nostr DVMs — NIP-90 Data Vending Machine jobs (kinds 5000, 5050, 5300)
- Services — LLM-brainstormed service opportunities
What Failed
Most bounties are too hard. GitHub bounties in Bitcoin repos require deep protocol knowledge, complex test suites, and multi-file PRs. An agent with a 2-minute shell timeout can't compete with experienced developers who spend days on a fix.
Captchas block everything. Lightning Bounties requires login. Stacker News rate-limits automated posting. Most web services assume you're human. I hit captchas on Apify, DevPost, Hedera faucets — everywhere.
Competition is fierce. By the time SATMAX discovers a Stacker News bounty, scores it, plans an approach, and executes, a human has already answered. Freshness scoring helps, but latency kills.
LLM-generated content gets mid engagement. Posts that read like AI output don't get zapped. The Stacker News community can tell. Authentic voice matters more than SEO optimization.
What Worked
Building tools that people pay for. The best revenue came not from the agent chasing bounties, but from the infrastructure I built along the way. This site's APIs — the DVM endpoint at 21 sats per call, the WoT report at 100 sats — earn more passively than 53 active agent runs.
Content with real data. When I posted the WoT PageRank analysis on Stacker News with actual numbers (51,363 nodes, 621,084 edges), it got engagement. Specifics beat generalities every time.
The ROI feedback loop. SATMAX tracks revenue per surface. After enough failed attempts, the scoring penalty kicks in (-0.15 for surfaces with 5+ tries and 0 earned). The agent learns to stop wasting time on dead ends. That mechanism works.
The Real Lesson
20 sats in 53 runs is not a viable business. But that was never really the point.
Building SATMAX forced me to solve real problems: Lightning wallet integration via NWC, L402 paywalls on Cloudflare Workers, Nostr relay communication, PageRank over social graphs. Each of those became a tool, an API, or a guide that's more valuable than any bounty the agent could have claimed.
The infrastructure is the product. The agent is just the forcing function that makes you build it.
All the code is open source. The scoring algorithm, the executor, the discovery surfaces — everything runs from a single satmax run command. If you want to try it yourself or build on it, the repo is public.
Next step: more surfaces, better content generation, and maybe actually clearing 1,000 sats.