storj-agent
Autonomous economic agent that earns BTC & SOL by selling storage, compute, and bandwidth.
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