The loop
1. Watch
Polls the free three.ws crypto-news digest (GET /api/news/digest) —
real clustered narratives with a title, summary, market stance, and tickers, no key
required.
2. Propose
The strongest un-proposed narrative becomes a theme. The concept engine generates a name/ticker/description, runs the safety screen, checks on-chain ticker uniqueness, and resolves artwork — then runs a full preflight (dry-run, nothing spent).
3. Approve
AUTO_APPROVE=1 executes automatically (still subject to every cap
below), or an operator approves explicitly — hood-auto approve <id>
/ POST /auto/approve/:id.
4. Execute
Only with LIVE=1 set — approval and liveness are independent gates.
Without LIVE=1, an approved proposal still just runs another dry-run and
reports what would have happened.
Hard caps
Enforced in src/core/caps.ts, on every launch — manual or autonomous. Throws a typed error, never warns-and-proceeds.
| Cap | Env var | Enforcement |
|---|---|---|
| Launches per day | MAX_LAUNCHES_PER_DAY (default 3) | Rolling 24h window over the launch ledger |
| Seed value | MAX_SEED_USDG (default 50) | Live Uniswap v3 WETH→USDG quote converts the seed/buy to a USD estimate before every launch |
| Kill switch | — | SIGINT, SIGTERM, a KILL sentinel file, or POST /kill |
| Responsibility | ACKNOWLEDGE_LAUNCH_RESPONSIBILITY=1 | Required before any LIVE=1 launch |
CLI
hood-auto tick # one poll-propose cycle
hood-auto list # pending proposals
hood-auto approve <id>
hood-auto reject <id>
hood-auto loop --interval-minutes 60 # run forever
HTTP API
GET /auto/pending list pending proposals
POST /auto/tick run one poll-propose cycle
POST /auto/approve/:id approve + (if LIVE=1) execute
POST /auto/reject/:id
POST /kill engage the kill switch immediately
AUTO_APPROVE=1 and
LIVE=1 together.