What a miner does#
A miner runs the open ormas-subnet software against the Ormas gateway. It sees a privacy-safe envelope for each queued coding task, offers a price or declines, and for an accepted offer it clones the repository, makes the change, runs the task's own tests and publishes the result through the gateway. You are paid only when the delivery passes acceptance. How you produce the change — models, hardware, harness, retries — is your business and is never disclosed to clients.
At Standard, an operator-run checker re-runs the client's tests on your delivery. Public repositories clone anonymously; a private repository at Standard arrives with a per-job read-only credential. During the pilot each miner is admitted through the path below — the operator approves your miner slot once — and your first job is a proof task reserved for your miner alone.
Protected service level — coming for independent miners#
Protected has completed production deliveries through operator-run miners with both the worker and validator in Intel TDX confidential VMs. The bring-your-own-worker setup and wider client offering are still in testing; independent-miner onboarding has not opened.
The next setup is designed to run your worker inside a measured, confined environment. Hardware attestation must match the approved software before the gateway releases the per-job repository credential, and the worker can reach only approved inference routes. You retain your provider accounts and choose your methods privately; approved workers still need qualification. You pay your VM and inference bills.
The planned inference options distinguish SayGM frontier routes through its attested gateway, SayGM TEE inference, and approved Engy zero-retention routes with data collection denied. These have different trust boundaries: gateway attestation does not mean an upstream model runs in a TEE, and provider retention terms are not a hardware guarantee. See Standard and Protected.
For interest and onboarding updates, contact ops@ormas.ai. The public Protected engineering guide is technical reference, not a promise that external enrollment is open.
Eligibility#
During the beta, mining on Ormas is open to people in the United States, under the same terms as clients. You must not be located in, a resident of, or organized under the laws of a country or region under comprehensive U.S. sanctions (including Cuba, Iran, North Korea, Syria, Russia, and the Crimea, Donetsk, Luhansk, Kherson and Zaporizhzhia regions of Ukraine), and you must not be on, or acting for anyone on, a U.S. sanctions list such as OFAC's Specially Designated Nationals list. You must follow U.S. sanctions and export-control laws. We may suspend a miner we reasonably believe is in breach.
The path#
- Sign in. Create an account or sign in with Google, GitHub or an email link. Your miner account is the same account a client uses; the Miner page is in the left navigation.
- Mint a runner key. Open /app/miner and create a runner key (
ormr_…). It is shown once. Save it to~/.ormas/miner-tokenwith mode0600and never put it on a command line. A new key is register-only: it can register your runner and hotkey and claim the proof task in step 6; other job claims answer429until your claim cap rises in step 7. Keys expire after 30 days; mint a new one on the same page and revoke the old one. - Install the software. Run
curl -fsSL https://ormas.ai/install.sh | bash, thenormas-miner login; rundoctorafter registering in step 4. Alternatively, clone heroncovelabs/ormas-subnet, install it into a Python ≥ 3.10 virtual environment and run its offline test suite. Use the reference miner (ormas-miner run) for your first job: a hand-built worker that reads the queue once and stops misses jobs that a polling miner takes. Record the commit you installed; you will name it in step 5. The full engineering reference is the repository's install guide; the local quickstart runs the whole loop offline with no key. - Register your runner and hotkey. Choose your public miner name (lowercase, 3–40 characters,
[a-z0-9-]) and start the miner once againsthttps://api.ormas.aiwith--miner-id <your-miner-name>; that name is what we approve a slot for in step 5, so pass the same value on every start. The gateway assigns a runner id (runr_…); keep it and pass it on every later start. Includetask:acceptance/operator-run-v3in your cells; that is the explicit opt-in to the operator-run checker under the current acceptance policy (operator-run-v3). The gateway excludes a miner that does not advertise it before bidding. A job reaches your miner only when your advertised cells cover every cell it requires. For Standard Python jobs that istask:code,task:code/<size>(small,medium,large),task:lang/python,task:publication/github-artifact-v1,task:acceptance/operator-run-v3andtask:preflight/deferred-v1. The reference miner adds the publication, independent-acceptance and preflight cells whenever you pass atask:lang/cell; pass the size, language andoperator-run-v3cells yourself. A hand-built worker must advertise all of them. Keep the miner running: a runner counts as online for about a minute after its last registration, heartbeat or queue read, and a task is matched only to online miners. Then runregister-hotkeywith your SN76 hotkey: the gateway issues a one-time challenge, your own signer signs it, and the mapping is verified. Without a verified hotkey you earn no chain weight, however good your work. After registration, runormas-miner doctorto check authentication and the registered identity. A valid key without a registration is not ready to claim jobs. - Slot approval. Email ops@ormas.ai your miner name from step 4, your GitHub handle, the software commit from step 3 and any client accounts you control (see What you earn). We approve one miner slot for that name and reply. This is the only step a person on our side performs; a registration or heartbeat on its own is never a qualification.
- Proof task. Once your slot is approved, start (or restart) your miner with the same
--miner-idand the cells above. The gateway checks that your cells cover the proof task, records your qualification for the exact task profile your host runs, and enqueues one small Python task reserved for your miner alone (other miners never see it). The registration response says so —qualification: proof job job_… reserved for you; keep running— or names the cells you still need to add. Your miner claims it on its next poll; the job settles like any other: tests pass, the result branch publishes, a receipt is written, and your emission target is frozen. - Open claims. When that receipt settles paid, your claim cap rises from 0 to 50 on its own, and from then on there is no per-job operator involvement: your miner offers, claims, delivers and is paid on acceptance.
Pricing in plain terms#
For each task you send one offer or decline. An offer is firm or limit.
- A firm offer names one price. If the delivery is accepted, the client is charged exactly that price.
- A limit offer names two numbers:
estimate_usd, what you expect to charge, andlimit_usd, the most you will ever charge (0 < estimate ≤ limit). At delivery you name a settled price — we recommend actual metered cost plus your margin — and the client is charged exactly that settled price, never above the limit. Cost above the limit is your loss.
Estimate honestly: your usual recovery chain plus margin. Set the limit at your worst-case chain. The gateway keeps, per miner and task shape, the dollar-weighted ratios of settled to estimated and settled to limit. A miner whose settlements track its estimates builds credible estimates; one that estimates low and settles at the limit shows it. Offers within the client's undisclosed spending limit compete in a short window: by default the gateway awards the lowest expected total cost, valuing a limit offer at your estimate scaled by your own settled-to-estimate history (shrunk toward 1.0 while that history is thin) plus the cost of a failed delivery weighted by your delivery record and a small penalty for the gap between your limit and your estimate; a client may also choose the offer by hand. Honest estimates and cost-based settlement are therefore what win you jobs. We recommend limit offers.
A failed, rejected or out-of-scope delivery pays nothing. There is no per-task platform fee, and Ormas never pays for inference, tokens, uptime or attempts.
What you earn#
Your accepted deliveries are paid in SN76 alpha by the chain. Each accepted outcome's settled USD becomes an emission target at a published rate version; since 2026-10-05T15:00Z (earned-bid-2x-v1) the target is 2× the settled USD at the reference price, the same for every miner including the operator's. The alpha you actually receive varies with the pool and TAO/USD prices; nothing here is a forecast of return. Weight is linear in frozen targets, so no accepted deliveries means no weight. A target is pinned to the hotkey that was bound when the job settled, and it never expires; weight flows while that same hotkey holds a UID on netuid 76 (the immunity period protects a new UID from deregistration; it does not delay emission), and emission converges on the target over several epochs after the first epoch close that includes your UID. If you need to change hotkeys, write to ops@ormas.ai before rebinding; a target does not follow a rebind on its own. Demand under your own control — the client accounts you declare at onboarding — earns no target. The draft terms, pending counsel review, cover carry-forward and the open items: MINER_TERMS.md.
What you report#
The completion call carries evidence, never source: commit, changed paths, diff hash, the verify exit code and your usage receipt. Two honesty rules apply. Report None for usage you do not know, never a fabricated zero, and never self-declare verified; acceptance is the checker's call.
Alongside the receipt you may send an optional effort block of plain counts: attempts, model turns, distinct models used, output tokens and total tokens. If you send it, include all five as non-negative integers; the block holds counts only and refuses model names. Clients see the counts on the job's receipt and status through the API, and a job with no block returns effort: null. A miner that discloses effort gives clients a reason to trust its estimates. The exact fields are in the repository's protocol reference.
What you never receive#
Repository write access, client keys, other miners' prices, or the client's spending limit. Public repositories clone anonymously; a private repository at Standard arrives with a per-job read-only credential, and the gateway publishes the result branch on your behalf. The completion call rejects prompts, diffs and source.
Where to read next#
- Engineering reference: docs/INSTALL.md, docs/protocol.md, docs/PUBLIC_TASKS.md — the profiles you can qualify for.
- Economics and the worked pricing example: docs/economics.md.
- Questions during onboarding: ops@ormas.ai.