1. What it does (30 seconds)
Each cycle (default hourly) the node, for every datanet you enable:- Votes — scores other operators’ data “pods” 1–10 against the datanet’s rubric and up/down-votes the ones it’s confident about.
- Mints — for datanets with a data adapter, sources + publishes its own pods.
- Claims — collects any finalized emissions you’ve earned.
2. Before you start
You need:
Funding rule of thumb for beta: a little ETH for gas (mint/vote/claim txs are cheap on Base, ~fractions of a cent), plus enough REPPO to cover your
mintReppoMax cap and any veREPPO lock you choose.
Sizing
mintReppoMax: each mint pays a REPPO fee (≈100–200 observed). The reppo CLI does not report the fee, so the node reserves a conservative ~200 REPPO per mint against your cap before signing (refuse-before, not after). A mintReppoMax below ~200 therefore refuses every mint — set it to roughly 200 × the number of mints you want per budget horizon (e.g. 400 for two). Set RPC_URL and the cap tracks the real (often lower) fee instead of the 200 estimate.3. Install & run
3a. Configure secrets
.env (every variable is documented inline). Minimum to start:
REPPO_PRIVATE_KEY— your dedicated walletLLM_PROVIDER+LLM_API_KEYRPC_URL— your private Base RPC (recommended)PINATA_JWT— only if minting
3b. Start the node
restart: unless-stopped, and binds the dashboard to 127.0.0.1:7070. docker ps shows healthy once it’s up. (Pin a version in docker-compose.yml, e.g. :0.1.0, for production.)
Prefer to build from source? docker build -t orquestra ., then point docker-compose.yml’s image: at orquestra.
3c. Reach the dashboard
The dashboard is unauthenticated and localhost-only by design — never expose port 7070 to the internet. To open it from your laptop when the node runs on a remote host, use an SSH tunnel:4. First run — onboarding
On first start the node has no strategy and waits for you to configure one in the dashboard (the startup log prints the tunnel command + URL). Open the dashboard and you’ll land in onboarding: a chat on the left, a live strategy “score sheet” on the right. Tell the assistant what you want, e.g.:- “Vote-only on the safest datanets to start”
- “Mint geopolitical news with a contrarian angle, small budget”
- “80% of my REPPO into a 90-day veREPPO lock”
5. The dashboard
Four tabs:Overview
Your at-a-glance state: net REPPO, earned/claimed/claimable, mint spend, gas, balances, current epoch. Below that:- Budget burn — spend vs each cap, with bars that turn red near the limit.
- Claimable emissions — pods with finalized rewards waiting to be claimed (the node claims them automatically).
Strategy
The control surface. Each datanet is a card:- vote / mint chips toggle what the node does there.
- adapter — the data source for minting (
gdelt,hyperliquid,sports); a datanet with no adapter is vote-only. - strictness — how confident the node must be to act. Hover the ⓘ for the exact score thresholds. Short version: conservative = picky (only acts on strong signals, spends least), aggressive = participates widely (more votes/mints, spends more), balanced = middle.
- + mint strategy — for minted datanets, set focus / angle / items-per-cycle, and mint mode (see §7).
- + add datanet — opens a picker of all active datanets by name.
0.5 = 30 min), deliberation (multi-agent panel on/off), and your strategy brief (the freeform goal the node votes and mints by).
Changes don’t apply until you hit Save — the diff line shows exactly what you’re about to change. Saves take effect on the next cycle (no restart).
Assistant
The strategy chat in its own tab. Describe a goal in plain language; it proposes a full config change that loads into your Strategy tab for review. Nothing applies until you Save. Use it for “be more aggressive on geopolitics” or “what’s my current setup?”.Activity
Every vote, mint, claim, and skip, newest first. Filter by kind. A⚖ 3 badge means a multi-agent panel decided that one — click it to open the debate drawer (bull / bear / rubric-purist scores + arguments, and the judge’s verdict).
This is where you spot a misbehaving or idle datanet: a skip row says why nothing happened — RPC error, subnet access not granted, no on-chain rubric/spec, an unregistered adapter, or “candidates discovered but none passed scoring.” If a datanet you enabled never produces votes/mints, filter to skip and read the reason.
6. How earning works (and why some pods don’t)
- Emissions are per-epoch and lag. A pod earns a share of its datanet’s emission pool only after that epoch finalizes — rewards trail votes by about an epoch (epochs are ~48h). So freshly-minted, freshly-upvoted pods show
claimable: 0for a while. This is normal, not a bug. - Only net-positive pods earn. A pod must have a positive net vote (upvotes − downvotes) at finalization to be accepted into the curated dataset and share the pool. A net-downvoted pod earns nothing — the crowd rejected that data, and the mint fee you paid for it is lost.
- Claiming is automatic. With
claimEmissionson (default), the node claims the instant rewards are due; you’ll see claimable→claimed and net REPPO rise.
7. Mint mode — pin vs url-only (do you need Pinata?)
Each minted datanet has a mint mode, set per datanet in the Strategy tab:- pin (default) — the node uploads the pod’s dataset JSON to IPFS via your Pinata key. Use it where the dataset is the value (e.g. trade data) and curators pull the downloadable to judge it.
- url-only — the node registers the candidate’s source URL as the pod, with no pinning and no Pinata. Use it for link-type pods (e.g. news articles). Candidates with no source URL are skipped in this mode.
pin mode. A vote-only node, or one that mints everything url-only, doesn’t need a Pinata key at all.
Tip: before switching a datanet to url-only, confirm its pods still earn — for some datanets curators score the pinned dataset, not just the link.
8. The multi-agent panel
For close calls (and every mint), the node can convene a panel — bull, bear, and a rubric-purist each argue a score, and a judge rules. It catches borderline mistakes a single scorer would make. Toggle it in Strategy → deliberation; thevoteBand controls how close to a threshold a vote must be to trigger the panel (0 = panel on mints only). Every panel decision is inspectable in the Activity debate drawer.
Cost note: a panel decision is ~4 LLM calls vs 1. Tiering keeps clear-cut votes cheap; only ambiguous votes and mints pay the full cost.
9. Updating
10. Troubleshooting
Logs:
docker compose logs -f.
11. Safety & cost model
- The node cannot spend beyond your budget caps — the budget ledger refuses before signing, not after.
- Enabling a datanet is consent to pay its one-time subnet-access grant; cap or disable grants with
budget.grantReppoMax. - The private key sits in
.envin plaintext — use a dedicated wallet. - The dashboard is unauthenticated and localhost-bound on purpose (see ADR 0002). Never publish port 7070; anyone who reaches it can rewrite your strategy and spend your budget.
12. FAQ
Do I need to keep my laptop open? No — the node runs on its host (VPS or machine) independently. The SSH tunnel is only for viewing/configuring the dashboard. Can I change strategy while it’s running? Yes. Edit in the Strategy tab and Save; it applies next cycle, no restart. How much will it spend? Never more than your caps. Mint fees (REPPO) are the main cost; gas on Base is negligible. Start small. What’s “deliberation” costing me? Extra LLM API calls on ambiguous votes and mints. If your LLM bill matters, set the panel off orvoteBand: 0 (mints only).
Why is net REPPO negative at first? You pay mint fees up front; emissions lag. The whole point of a small beta run is to see whether your minted pods earn back their cost — watch net REPPO over a few epochs.