sharkmagic.docs
Billing

Agent? Fetch sharkmagic.si/docs/llms.txt or this page as markdown

Billing and credits#

Shark bills what runs, per second, from a prepaid credit balance. The model thinking, your agent waiting, and a Space sitting idle run no VM and bill no compute. Prices are listed below; your account and checkout always show the current ones.

Plans#

One active plan at a time. Each plan includes usage at its own price; included usage is spent first, then prepaid credits.

plan price included usage
Devbox $5/month $5
Studio $25/month $25
Scale $100/month $100

Usage rates#

unit rate included
Compute, standard 8 vCPU / 4 GiB $0.12 per compute-hour none; billed per second only while a command runs
Service, 2 vCPU / 2 GiB $0.03 per hour none; billed only while awake
Service, 4 vCPU / 4 GiB $0.06 per hour none; billed only while awake
Service, standard rate $0.06 per hour none; billed only while awake
Storage $0.08 per GiB-month first 5 GiB free per Space per billing cycle, overage only
Egress $0.03 per GB first 10 GiB free per Space per billing cycle, overage only

Commands run on the standard 8 vCPU / 4 GiB compute shape; there is no 2 vCPU / 2 GiB compute shape.

Credits#

  • You buy credits ahead (prepaid top-ups by card, shark topup) and usage draws them down. There is no per-start fee.
  • Monthly plan. One active plan at a time (shark plan subscribe, paid through Stripe Checkout). Each paid period grants its included usage; usage spends it before your paid credit, it expires at the end of that period (unused included usage does not roll over), and usage beyond it comes from prepaid credit. Cancelling (shark plan cancel) takes effect at the end of the paid period, and the included usage runs until then; subscribing again before that resumes it. A refunded plan payment takes back what is left of its included usage. shark plan --json (GET /v1/plan on the account service) shows whether the plan is offered, its status and period end, and the allowance left; where it is not offered yet the plan routes answer 503 plan_unavailable and prepaid credit works as usual. The plan is managed with a person's login or key, never with a Space credential. The plans and their included usage are listed above; your account and checkout show the current price.
  • Promotions, when offered, are shown at checkout and follow their own terms. Like included plan usage, they are spent before paid credit.
  • Alerts at 50 %, 80 % and 100 % of the credit funded in the current cycle, once each.
  • At zero balance new work (commands, creates, forks, wakes) answers 402 credits_exhausted, your Spaces are hibernated, and files stay readable (reads are served without a VM). A top-up lifts it.
  • Balance, top-ups and usage by day, Space or kind are in the account console and API at api.sharkmagic.si (coming at launch). Until then: GET /v1/usage on the node, and your invite says how credits are handled during early access.

What is metered#

unit counted while not counted
command seconds a command runs in its microVM (run_s, measured inside the guest), scaled by lease shape relative to the standard shape, with a small per-command minimum VM start and stop, queueing, the model thinking, you reading output; commands that ended in a Shark-side failure (infra_error, partial runs); replays of an op_id (0 compute)
service seconds any service you start is awake: a Space's Postgres or Redis, or an exposed process (shark expose, previews); scaled by the service's size (vCPU and memory) relative to the standard shape, below 1 for a small service (an exposed process's 2 vCPU / 2 GiB VM counts half a standard second) while it sleeps (its snapshot is not compute; its files are in storage); VM boot before the port answers; wake-ups Shark causes itself (housekeeping timers)
process seconds a background job of a command is awake while it sleeps
free the coding agent's own session VM under shark code (where the harness runs and decides); its commands are billed as command seconds
storage the Space's deduplicated bytes, sampled hourly (GiB-hours) bytes shared with other Spaces through deduplication are counted once
egress bytes sent and received by commands over the network
free file reads and listings (served from the tree without a VM), API calls themselves

Each record is rated exactly (rational arithmetic, floored per record: rounding is always in your favour) and debited once, however often it is re-sent (control-plane gates B3.a–c: 0 double credits and 0 overcharges in 1,000 randomized histories, 2026-11-05, local).

GET /v1/usage?group_by=day|space|kind and shark usage show the metered quantities (counts and durations only, never command text, paths or file contents).

Why per-second-of-work matters for agents#

Measured on public agent transcripts (P88; OpenHands SWE-bench Lite evaluation outputs and public Claude Code traces, all with open licenses). Over 3,921 autonomous sessions, 349.2 hours:

where the time went share
model thinking and generating (plus harness overhead between events) 82.7 %
shell commands and services, billed per call with a 0.1 s floor 10.2 % (9.8 % without the floor)
idle gaps over 10 minutes 5.9 %
file ops, network and harness tools, other 1.6 %

A sandbox billed for its whole lifetime bills all 349 hours; per-command billing bills about 36 of them. Your mix will differ: measure it.

Measure your own idle share: idle-tax#

idle-tax is an open-source (Apache-2.0) CLI that reads your own Claude Code and Codex transcripts on your machine and prints only numbers: how much of each session was the model thinking, tools running, waiting for you, or idle. No network access, writes nothing, never prints prompts, commands, paths or file contents.

node idle-tax.js                     # reads ~/.claude/projects and ~/.codex/sessions
node idle-tax.js --path <dir-or-file>
node idle-tax.js --json              # machine-readable
node idle-tax.js --share             # anonymized block (percentages and hours only)

Get it: <IDLE_TAX_DOWNLOAD> (one file, Node 18+, zero dependencies). Its cost table compares billing models at dated list prices it ships with; any "Shark" row in it is a modelling input, not a Shark price.