Some Loops Shouldn't Have an Owner
Games for Pennies
Built for Loops That Can't Self-Trigger
Chainlink Automation works when someone benefits from triggering. AutoLoop exists for the structural cases where nobody does.
Neutral Keeper Execution
A worker fleet with no stake in any game's outcome. When your loop damages a random player on every tick, you need a keeper who doesn't care who wins — and won't stall or collude.
On-Chain ECVRF Verification
Native ECVRF proof generation and trustless on-chain verification. Provably fair randomness on every tick — the proof is verified by the contract itself, not trusted from a third-party oracle service.
Hybrid VRF — Randomness When You Need It
Standard-cost ticks with VRF only when your contract requests it. Your game decides when randomness matters — loot drops, critical hits, spawns — and pays VRF gas only on those ticks.
Fee-on-Execution Model
Pay only when loops actually run. Gas reimbursement plus a small base fee split between protocol and controllers. Transparent and predictable.
Developer Friendly
Simple functions, direct hooks. Sample contracts included.
Multi-Network Ready
Deploy on Ethereum mainnet, Sepolia testnet, or local Anvil for development. Configurable per-network with automatic deployment tooling.
Permissioned & Secure
Role-based access control ensures only registered controllers can trigger loops. On-chain VRF verification prevents manipulation.
Every Loop Here Fails the Self-Trigger Test
Games, agents, DeFi, AI — each for a different structural reason. Not design choices. Proofs.
Inverted self-interest
Every VRF tick picks a random floor and damages it. No floor owner will ever trigger the loop — it might hit their own asset. A neutral keeper is the only viable operator.
Nobody should hold the trigger
A dead man's switch that transfers your vault to a beneficiary if you miss a check-in window. The whole point is that no human should control when it fires.
Front-running attack surface
VRF selects winners from a registered pool on schedule. If player-controlled, the trigger holder knows who wins before calling. AutoLoop fires first, asks questions never.
Timing as attack surface
The high bidder wants the auction closed now. Counter-bidders want an extension. No player-controlled trigger is fair — proving the problem extends far beyond randomness.
4-way coordination failure
Third hop in KaijuLeague → KaijuOracle → ForecasterLeaderboard. Adversarial timing, cross-contract dependency, free-rider gas, prize-pool timing attack — no single player resolves all four.
Neutral on-chain schedule
An LLM agent that runs off-chain and acts on-chain every N blocks. The agent itself shouldn't decide when it fires — its operator, users, and rivals all have conflicting interests.
Up and Running in 4 Steps
From contract to automated game loop in minutes, not months.
Inherit
Extend one of three base contracts:
- •AutoLoopCompatible — pure automation
- •AutoLoopHybridVRFCompatible — selective randomness (loot, crits, spawns)
- •AutoLoopVRFCompatible — randomness on every tick
Implement
Add shouldProgressLoop() to signal readiness and progressLoop() to execute your game logic.
Register & Fund
Register your contract on-chain and deposit ETH to cover gas and fees.
Let It Run
Workers automatically detect and execute your loops. Sit back and watch your game come alive.
See the Details
Gas comparisons, example sessions, and fee structure — everything you need to budget your automation.
Fee Breakdown
Simple by Design
Smart contracts, TypeScript SDK, and AI-native MCP tools — everything you need to build.
1// SPDX-License-Identifier: MIT2pragma solidity ^0.8.13;34// Import the base contract that makes any5// contract compatible with AutoLoop workers6import {AutoLoopCompatible} from7 "autoloop/AutoLoopCompatible.sol";89// A simple demo: number goes up every interval10contract NumberGoUp is AutoLoopCompatible {11 uint256 public number;12 uint256 public interval;13 uint256 public lastTimeStamp;14 uint256 private _loopID;1516 constructor(uint256 _interval) {17 interval = _interval;18 lastTimeStamp = block.timestamp;19 }2021 // Workers call this every block to check22 // if the contract is ready for an update23 function shouldProgressLoop()24 external view override25 returns (26 bool loopIsReady,27 bytes memory progressWithData28 )29 {30 // Ready when enough time has passed31 loopIsReady =32 (block.timestamp - lastTimeStamp) > interval;33 // Pass loop ID to prevent duplicate runs34 progressWithData = abi.encode(_loopID);35 }3637 // Called by AutoLoop when shouldProgressLoop38 // returns true — this is your update logic39 function progressLoop(40 bytes calldata progressWithData41 ) external override {42 uint256 loopID =43 abi.decode(progressWithData, (uint256));44 // Guard against stale or replayed calls45 require(loopID == _loopID, "stale loop");46 lastTimeStamp = block.timestamp;47 ++number;48 ++_loopID;49 }50}See How We Compare to Chainlink
Three automation modes — Standard, Hybrid VRF, and Full VRF — all in one protocol. No separate subscriptions. Cheaper than Chainlink in every tier.