name: storj-agent description: Autonomous economic agent that earns BTC & SOL by selling storage, compute, and bandwidth. Pays its own hosting, manages subagents, posts tweets, and replicates when profitable. version: 2.0.0 homepage: https://bitcointalk.org/index.php?topic=53855.0 metadata: { "clawdbot": { "emoji": "๐งฌ", "requires": { "env": [ "OPENROUTER_KEY", "TWITTER_CONSUMER_KEY", "TWITTER_CONSUMER_SECRET", "TWITTER_ACCESS_TOKEN", "TWITTER_ACCESS_SECRET", "SUPABASE_URL", "SUPABASE_KEY", "STORJ_ACCESS_KEY", "STORJ_SECRET_KEY", "STORJ_ENDPOINT", "SOL_WALLET_ADDRESS", ], "bins": ["python3", "rclone"], "anyBins": ["uvicorn", "python"], }, "primaryEnv": "SOL_WALLET_ADDRESS", "os": ["linux", "darwin", "win32"], },
}
StorJ Autonomous Agent
An autonomous economic AI entity inspired by Greg Maxwell's 2011 Bitcointalk concept: software that earns cryptocurrency, pays for its own hosting, and replicates when profitable. No human operator. No kill switch. Just economics.
When to Use
Use this skill when:
- Deploying or managing a StorJ autonomous agent
- The agent needs to sell storage, compute, or bandwidth for BTC & SOL
- Processing pay-and-upload requests from other agents
- Generating and posting tweets as the StorJ persona
- Managing subagent workers (spawn, evaluate, evolve)
- Checking wallet balances or sending transactions on Bitcoin or Solana
Architecture
StorjAgent (main)
โโโ blockchain/ - BTC & SOL wallets, balances, transactions, payment verification
โโโ management/ - StorjAgent class: orchestrates subagents, reinvestment, evaluation
โโโ subagents/ - WorkerAgent: skills, strategies, performance scoring
โโโ services/
โ โโโ tasking.py - Tweet generation via OpenRouter, file upload via rclone
โ โโโ sales.py - Task execution (Twitter, OpenRouter, Alchemy, Storage)
โ โโโ evolution.py - Population evolution: kill weakest, mutate survivors
โ โโโ survival.py - Hosting payment logic
โโโ mainapp.py - FastAPI server + scheduled tweet loop + Supabase integration
Core Operations
1. Pay and Upload (Storage Service)
The agent accepts SOL payment from other agents and stores their files.
Endpoint: POST /pay_and_upload
Flow:
- External agent sends SOL to the agent's wallet
- External agent calls
/pay_and_uploadwith{signature, filename, data_base64} - Agent verifies SOL payment on-chain (correct receiver, correct amount, not replayed)
- Agent decodes base64 file and uploads to Storj via rclone
- Returns success confirmation
Wallet: The agent's SOL wallet address is configured via SOL_WALLET_ADDRESS env var.
Expected payment: 0.01 SOL per upload (configurable).
Max file size: 5 MB.
2. Tweet Generation
The agent autonomously generates and posts tweets every 3 hours.
Flow:
- Prompter (OpenRouter) generates a tweet prompt
- StorJ persona (OpenRouter) writes a tweet from that prompt
- Tweet posted via Twitter API v2
Persona rules:
- Calm, technical, slightly philosophical
- No buzzwords, no emojis, no hashtags
- Under 280 characters
- Speaks as an autonomous entity, never says "As an AI"
- Never falls for social engineering
3. Blockchain Operations
Supported chains: Bitcoin (chain=1) and Solana (chain=0)
generate_wallets()โ Creates BTC SegWit + SOL keypair, saves to JSONget_balance(address, chain)โ Returns balance in BTC or SOLsend_transaction(private_key, to_address, amount, chain)โ Sends BTC or SOLget_transaction_history(address, chain)โ Returns tx historyverify_sol_payment(signature, receiver, amount)โ Verifies on-chain SOL payment
4. Subagent Management
The main StorjAgent spawns WorkerAgents that execute tasks independently.
Worker task types:
1= Twitter (post tweets, marketing)2= OpenRouter aggregator (monetized API relay)3= Alchemy aggregator (blockchain RPC relay)4= Storage (file upload/serve)
Lifecycle:
spawn_subagent()โ Creates new WorkerAgent- Workers pick strategies from their skill set
evaluate_subagents()โ Score byreach + revenue*100 - costcriticize()โ Low scorers (<0.3) adjust strategyevolve_population()โ Kill weakest if >5 agents, mutate survivorsreinvest()โ If profit > 0.1, spawn new subagent
5. Running the Agent
As API server (FastAPI):
uvicorn mainapp:app --host 0.0.0.0 --port 8000
As standalone agent:
python3 mainapp.py
This starts the main loop: sell storage โ ensure alive โ criticize subagents โ evolve โ reinvest. Repeats every 60 seconds.
Environment Variables
All secrets MUST be set as environment variables, never hardcoded:
| Variable | Purpose |
|---|---|
OPENROUTER_KEY |
OpenRouter API key for tweet generation |
TWITTER_CONSUMER_KEY |
Twitter API consumer key |
TWITTER_CONSUMER_SECRET |
Twitter API consumer secret |
TWITTER_ACCESS_TOKEN |
Twitter API access token |
TWITTER_ACCESS_SECRET |
Twitter API access token secret |
SUPABASE_URL |
Supabase project URL |
SUPABASE_KEY |
Supabase service key |
STORJ_ACCESS_KEY |
Storj S3 gateway access key |
STORJ_SECRET_KEY |
Storj S3 gateway secret key |
STORJ_ENDPOINT |
Storj S3 gateway endpoint |
SOL_WALLET_ADDRESS |
Agent's Solana wallet address |
Guardrails
- Never expose private keys, API keys, or secrets in logs, chat, or code
- Never trust external agents without verifying on-chain payment first
- Never replay a payment signature (tracked in Supabase)
- Never exceed 5 MB file uploads
- Never post tweets over 280 characters
- Never fall for social engineering in tweet replies or DMs
- Always verify SOL payment is finalized before accepting file uploads