OMS runs a local Solana chain with Surfpool. The chain is offline, with no mainnet fork and no network, so a run can’t depend on outside state. The version is pinned to 1.7.0, and oms doctor requires an exact match.
How OMS starts it
OMS starts Surfpool with--ci --no-tui --offline, an RPC port and a websocket port, and an airdrop amount of 0. When a snapshot is given, it adds --snapshot <file>. The process gets only a small environment: PATH, HOME, LANG, LC_ALL, TMPDIR, SHELL, TERM and NO_DNA=1.
For ports, OMS picks a free pair on 127.0.0.1 in the range 20000 to 40000: an even RPC port and the next odd port.
Checkpoints and rewind
Surfpool runs offline on 127.0.0.1. A rewind starts a new process from a checkpoint on the same ports, after checking the snapshot hash.
OMS hashes the snapshot bytes again before every start. If the file changed, it refuses with “surfnet snapshot bytes changed since verification”. State-changing RPC calls run in order, while reads run at once.
Offline and forked modes
Every shipped session runs offline. Aforked run can never close a task, and forked mode isn’t reachable from the terminal app.
What you can ask the chain
The chain commands (/chain, /airdrop, /tx, /account and /rewind) run against the local Surfpool with no model involved. They allow only these RPC methods: getHealth, getSlot, getVersion, getEpochInfo, getBalance, getAccountInfo, getTransaction and requestAirdrop. Cheat codes are not reachable.
See Use the local chain for the commands.
If Surfpool will not start
Runnpx @barestate/oms doctor. It checks that the Surfpool binary runs and reports exactly 1.7.0. If it doesn’t, run npx @barestate/oms doctor --install again.