Developers

Ship an automation once. Get paid every time it runs.

Modules are small, auditable specs — not arbitrary code. The keeper only ever calls what your manifest declares, and users only ever grant what it requests.
  1. Step 1

    Describe

    Write a manifest: one trigger, one allowlisted action, the exact selectors you call, and the permissions you need. Nothing implicit.

  2. Step 2

    Simulate

    Every module must pass eth_call simulation against Robinhood Chain before it can be published. Simulation output is stored with the version.

  3. Step 3

    Publish

    Versions are immutable. Installs pin to a version; users opt in to upgrades and see the permission diff before they accept.

  4. Step 4

    Earn

    Rewards follow independent installations and successful paid executions, weighted by reliability. Simulations and self-installs score zero.

The module manifest

Template variables resolve from the installer's configuration at execution time. Selectors that are not in the manifest are rejected by the keeper before simulation — a module cannot widen its own scope.

{
  "slug": "fee-sweeper",
  "name": "Fee Sweeper",
  "category": "revenue",
  "trigger": { "type": "balance", "token": "0x…", "threshold": "1000000000000000000" },
  "action": {
    "type": "contract_call",
    "target": "0x…",
    "signature": "sweep(address)",
    "args": ["{{config.treasury}}"]
  },
  "permissions": [
    { "kind": "call:sweep(address)", "description": "Call sweep on the configured vault only." }
  ],
  "execution": { "gasLimit": 180000, "maxRetries": 2 }
}