Repository navigation
Release v0.16.0-rc2
Pre-releasev0.16.0-rc2 - Lighter agents, watched nodes
The third release candidate for v0.16. rc2 fixes Grafana not starting on fresh installs and tidies obol model and obol network status output; see New since rc1 below. rc1 added safer paid offers, Grafana and LLM performance metrics on top of rc0. OpenClaw is gone, Hermes carries fewer built-in skills, and a new obol doctor checks the whole stack and prints the fix for anything wrong. Local Ethereum nodes are easier to keep an eye on: obol network status reports execution and consensus sync, and Hermes can now read workloads, logs and events across the cluster, so it can watch your nodes for you.
This is a pre-release for testing. Please report anything that breaks.
Warning
This software is early alpha, you could lose what you put in. Please use caution when it comes to non-testnet assets. Back up before upgrading: obol stack export --file backup.tar.gz. If you still run an OpenClaw agent, back up its wallet with v0.15 first (see Breaking changes).
Note
Testnets have reached Gloas. Sepolia forked on 2026-10-06 and Hoodi forks on 2026-10-26 at 17:42 UTC. The stable releases of Lighthouse (the default) and Grandine don't support Gloas yet, so on Sepolia and Hoodi install with --consensus-client teku, lodestar, nimbus or prysm. Every execution client in this release is Gloas-ready.
Install / Upgrade
# Fresh install
curl -fsSL https://stack.obol.org/v0.16.0-rc2 | bash
obol stack init && obol stack up
# Upgrade an existing stack
curl -fsSL https://stack.obol.org/v0.16.0-rc2 | bash
obol upgrade
obol network sync --all # apply the new client versions, metrics and RBAC to existing nodes
# Check everything
obol doctorNew since rc1
- Grafana starts again. On rc1,
monitoring-grafanastayed inInit:0/1forever. The Grafana chart bundled with kube-prometheus-stack 91.9.0 switched its datasource init container from load-once to watch mode by default, so it never exited. It's set back to load once, and a test checks it. Upgrading from rc1 fixes the stuck pod. - Quieter model commands.
obol model setup,remove,syncandpreferno longer print the full "Hermes installed successfully!" banner after every change. They print one line, so "Primary model is now …" is easy to see. First installs andobol agent syncstill show the banner. - Plainer
obol network status:- A node API that isn't answering (for example while its pod restarts) now reads
not answering (pod starting or restarting?)instead of a raw error with a temporary port-forward address. - An OOM-killed pod is reported once, and the warning says "out of memory".
- The eRPC row reads
pod Running · readyinstead of raw kubectl columns. - The consensus line says "synced" or "syncing, N slots behind" instead of
syncing=/optimistic=/el_offline=flags. - Client versions are shortened.
--verboseshows the full detail, and-o jsonoutput is unchanged.
- A node API that isn't answering (for example while its pod restarts) now reads
New since rc0
Safer paid offers
- Selling LiteLLM no longer exposes admin access. The seller gateway attaches the LiteLLM master key to paid requests, and every path was forwarded, so one payment could reach admin endpoints such as
/model/newor/key/generate. Offers on thelitellmupstream now reach only chat, completions and embeddings. Anything else, including encoded or..paths, gets a 404 before payment. - The seller picks the model.
obol sell http --upstream litellmnow requires--model, andobol sell update <name> --model <model>changes it. The gateway overwrites the buyer'smodel, and strips the other ways a buyer could switch models:fallbacks,extra_body.model, the?model=query parameter andx-litellm-*headers. - Agent offers reach only
POST /v1/chat/completions. The Hermes API key the gateway attaches would otherwise let a paying buyer read or delete other buyers' sessions and stored responses, create jobs, or steer runs. Each paid request now also gets its own Hermes session, so buyers with the same opening message no longer share one. - No charge for an empty reply (#821). On inference, agent and LiteLLM offers, a request is settled only if the reply delivered content, reasoning or tool calls. Non-streaming replies are held until they finish, and streaming replies are watched as they go out without being slowed. Unsettled replies carry
X-Payment-Settled: false. - One completion per payment:
nandbest_ofare removed from paid requests.
Grafana and better metrics
- Grafana at
http://obol.stack:8080/grafana, with no login and read-only access. It is only reachable onobol.stack, never through the tunnel. It comes with three dashboards:- Stack overview;
- Ethereum node, for all supported clients (
/grafana/d/obol-eth-node?var-namespace=ethereum-<id>); - Charon.
- Prometheus keeps 8 days of data on disk (5 Gi, capped at 4 GB). Before, it kept 2 days in memory.
- eRPC, Traefik and cloudflared metrics are now collected.
- LLM performance: LiteLLM's Prometheus metrics are on, and the new
obol-llmdashboard shows time to first token (p50/p95/p99), generation tokens per second, latency and error rates by model and upstream. New rules give one-number answers:obol:llm_ttft_seconds:p95_5mandobol:llm_output_tokens_per_second:mean_5m.flows/llm-bench.shsends the same requests to each model, so comparisons are fair. Time to first token is only recorded for streaming requests.
LiteLLM v1.105.0
The Obol LiteLLM fork moves from v1.87 to v1.105.0. That fixes two upstream security advisories: buyer-supplied api_base sending provider keys elsewhere, and a credentials file read. Obol's no-database model management is kept.
Upgrade notes for rc1
- Existing
sell http --upstream litellmoffers stay not-ready until you set a model:obol sell update <name> -n <ns> --model <model>.obol sell statusshows the exact command. - Agent clients calling any Hermes path other than chat completions now get a 404.
- Prometheus moves onto a volume, which recreates it once, so up to 2 days of earlier metrics are lost.
- Per-request prices don't limit
max_tokens; price your offers with that in mind.
Release Highlights
obol doctor
One command checks the things that usually go wrong:
- Host: Docker memory, disk space, the
obol.stackname and the ingress ports. - Versions: obol and its pinned tools.
- Cluster: the cluster and its kubeconfig, node pressure, unhealthy pods and Helm releases.
- Services: models, LiteLLM drift, Ollama, the x402 CA bundle, the tunnel (including a rejected token or an HTTP 525) and wallet addresses.
Every problem comes with the command that fixes it. --fix runs only the safe repairs (missing tools, a stale kubeconfig, an empty CA bundle). --offline skips network checks, --strict fails on warnings too, and -o json gives machine-readable output.
obol doctor
obol doctor --fixIs my node synced?
obol network list now shows your installed nodes, with each one's network, execution and consensus clients, and mode. It reads them from disk, so it works with the cluster down.
obol network status keeps the eRPC summary and adds a section for each local Ethereum node:
- pod state;
- execution sync, head block, peers and client version;
- consensus sync, peers and version;
- a one-line verdict:
synced,syncing,waiting,degraded,el_offline,unreachableornot_deployed.
It reaches the node APIs through short-lived port-forwards, so nothing new is exposed on obol.stack.
obol network install ethereum --network hoodi --consensus-client teku
obol network list
obol network status ethereum/hoodi
obol -o json network status ethereum/hoodiExecution and consensus client metrics are now scraped by the stack's Prometheus as well.
Hermes can watch the stack
The default Hermes agent can now read pods, logs, events, statefulsets, PVCs and jobs in every namespace, so it can answer "is my node synced?" or "why is this pod restarting?" on its own. Secrets and ConfigMaps stay out of reach, because several stack ConfigMaps hold credentials. The kube.py helper in its obol-stack skill gained -n/-A/-l, statefulset, PVC and job listings, and logs --since/--previous.
Network namespaces now grant ConfigMap read to Hermes. Before, they were bound to an agent service account that no longer existed. Run obol network sync --all to apply this to existing nodes.
Leaner Hermes skills
Hermes used to load 22 built-in skills on every turn. It now has 11 that operate the stack:
- agent-factory, buy-x402, discovery, ethereum-local-wallet, ethereum-networks, inspect, obol-stack, sell, sub-agent-business and swap;
ethereum-reference, which merges the ten former reference skills (addresses, gas, L2s, standards, wallets and so on) into one, with a guide per topic.
Everything else is opt-in from ObolNetwork/skills. The release (v1.8.0) is pinned and checked by content digest.
obol agent skills list --available
obol agent skills add distributed-validators
obol agent skills add dv-steward # Hermes watches a DV node running on the stackSub-agents take them through obol agent new … --skills or obol agent update <name> --skills +<skill>.
Node client updates
obol network sync now renders each node from the templates built into this binary, not from the copy made at install. That means version bumps and template fixes reach existing nodes. Your values.yaml is kept, and a failed sync leaves the deployment as it was.
New versions:
- geth v1.17.8;
- Nethermind 2.1.0;
- Teku 26.10.0;
- Nimbus v26.10.0;
- Lodestar v1.50.0, the first stable release that schedules Gloas on Hoodi.
The stack's node doesn't run MEV-boost: validators using it build blocks locally until Gloas, and receive builder bids over p2p after.
Smaller wins
- Grandine installs - the Grandine image is now pinned. Before, installing it failed with a nil-pointer error.
- Old nodes sync - Ethereum nodes installed before v0.10 get a default
modeon sync. - Faster turns - fewer built-in skills means a smaller system prompt for every agent turn.
- Safe skill syncs - a sync removes only skills that obol installed. Skills you added by hand stay, and offline syncs keep your opt-in copies.
Breaking changes / Migration notes
- OpenClaw is removed:
obol openclaw …and--runtime openclawnow fail with a migration hint.- Before upgrading, back up an OpenClaw wallet with v0.15:
obol agent wallet backup --runtime openclaw <id> --file w.json. - That backup restores into Hermes on v0.16:
obol agent wallet restore --runtime hermes --input w.json --force. Back up the Hermes wallet first. obol stack uplists any leftoveropenclaw-*namespaces, with their keystore paths.
- Before upgrading, back up an OpenClaw wallet with v0.15:
obol domainandobol tunnel loginare removed, along withtunnel setup --management local. An existing locally managed tunnel keeps running, but you can't add hostnames to it. Move to a dashboard-managed tunnel withobol tunnel setup <connector-token>.- ethereumjs is removed as an execution client: it only publishes nightly images and isn't Gloas-ready. Syncing an existing ethereumjs node now stops with a message. Delete it and reinstall with
--execution-client reth,geth,nethermind,besuorerigon. - Skills: the ten reference skills are now the single
ethereum-referenceskill.distributed-validatorsis now opt-in, so agents that used it needobol agent skills add distributed-validators. - Nethermind 1.39 → 2.1: the next
obol network syncmoves Nethermind nodes to a new major version.
Known issues
- Gloas on testnets: see the note at the top. Lighthouse and Grandine move to Gloas-ready versions once their stable releases ship.
- dv-pod 0.22 isn't published yet: the opt-in
dv-stewardskill, and the DV pod flow it watches, depend on the dv-pod 0.22 chart.
What's Changed
- fix(network): sync renders the built-in network files by @OisinKyne in #885
Full Changelog: v0.16.0-rc1...v0.16.0-rc2
