The proxy, and installing it.
Gubernaut ships as three packages and adopts in one configuration line. These answers cover the install itself, what it is compatible with, and what it costs you in latency and operational surface.
On this page
- 01How do I install Gubernaut for Python?
- 02How do I install it for Node or ElizaOS?
- 03How do I use the Rust or WebAssembly core?
- 04What is the one-line change?
- 05Which attribute do I set, base_url or api_base?
- 06Which port does the proxy listen on?
- 07Which frameworks are supported?
- 08Does it work with upstreams other than OpenAI?
- 09Can I run the controller at the edge?
- 10Do the Rust and Python cores agree?
- 11How much latency does the proxy add?
- 12Does Gubernaut phone home?
- 13What licence is the SDK under?
- 14Which version is current, and where is the changelog?
Installing
How do I install Gubernaut for Python?
Run pip install gubernaut-sdk==1.0.0, launch the local proxy in front of the upstream you already call, then set openai.base_url = "http://localhost:8000/v1". Nothing else in the application changes, and every turn from that point passes the controller.
Python quickstartHow do I install it for Node or ElizaOS?
Run npm install @gubernaut/plugin-gcc@1.0.0 and add gccPlugin to the plugins array of your ElizaOS character. Agents that are not ElizaOS can skip the plugin entirely and point OPENAI_BASE_URL at the local proxy instead.
Web3 and Node quickstartHow do I use the Rust or WebAssembly core?
Run cargo add gcc-core@1.0.0 to get the deciding core with no proxy and no network, a state machine you call directly. The same crate compiles to WebAssembly and runs at roughly ~125 ns per tick inside Cloudflare workerd.
Rust and WASM quickstartWhat is the one-line change?
One configuration line is the whole integration: openai.base_url = "http://localhost:8000/v1". 5/5 frameworks were verified adopting exactly that way from the published packages, so no wrapper class, decorator or callback handler is required.
Source: HARDTEST v1.0 release gates, 2026-07-24.
Which attribute do I set, base_url or api_base?
Set base_url. The pre-v1 openai.api_base attribute is ignored silently by current OpenAI SDKs, so a client configured that way sends its traffic straight to the upstream ungoverned and nothing errors to warn you.
Which port does the proxy listen on?
The proxy listens on port 8000 by default, which makes the client base URL http://localhost:8000/v1. Changing the port is a configuration value, and the client base URL has to move with it or requests bypass the governor entirely.
Compatibility
Which frameworks are supported?
5/5 frameworks were verified end to end from the published wheel and tarball: OpenAI SDK, LangChain, LlamaIndex, Microsoft AutoGen, ElizaOS. All five adopt in one line, hard-stop a loop, and fail closed on a dead proxy.
Source: HARDTEST v1.0 release gates, 2026-07-24.
Does it work with upstreams other than OpenAI?
Gubernaut speaks the OpenAI chat-completions protocol, so any upstream that speaks it can sit behind the proxy. The receipts battery ran across OpenAI, OpenRouter and Gemini endpoints, covering 7 model families.
Source: Pre-registered receipts benchmark, 2026-07-19. Scored output of harness/report.py.
Can I run the controller at the edge?
The Rust core compiles to WebAssembly and runs at roughly ~125 ns per tick inside Cloudflare workerd, with 200 ns p99 measured on the identical binary in a Node worker. A 10,000-tick soak was bit-exact against the reference with flat memory and no latency degradation.
Source: HARDTEST v1.0, 2026-07-24. Cloudflare workerd and Node worker, identical wasm.
Do the Rust and Python cores agree?
The compiled Rust core reproduces the Python controller bit-exactly. The repository ships the golden traces, so parity is reproducible locally rather than taken on trust, and the WebAssembly build was checked against those same traces across three JavaScript runtimes.
Source: HARDTEST v1.0 release gates, 2026-07-24.
Operating it
How much latency does the proxy add?
End-to-end overhead of the governed proxy measured p50 1.2 ms and p99 2.4 ms. Against a local mock upstream the added time was p50 0.43 ms and p95 0.92 ms, and one controller tick on its own is p99 2.8 µs as an in-process microbenchmark over 100,000 iterations.
Source: Bench run 2026-07-18, latency_bench.py, Windows 11 AMD64, Python 3.14.5.
Does Gubernaut phone home?
Gubernaut reports nothing to Gubernaut Research. The proxy runs on your machine under Apache-2.0, needs no account and no key of ours, and the only outbound request it makes is the upstream call your agent was already making.
What licence is the SDK under?
The SDK is Apache-2.0 across all three packages, which permits commercial use, modification and redistribution with attribution, and carries a patent grant. Research artefacts are licensed separately under CC-BY-4.0, so the paper and the data have their own terms.
Apache-2.0 textWhich version is current, and where is the changelog?
Version 1.0.0 is current on PyPI, npm and crates.io. Release notes and the gates each release passed are listed on the releases page of this site, and the full source history is public on GitHub.
Version historyLast reviewed 2026-08-02 · paper arXiv 2607.24339, DOI 10.5281/zenodo.21303518
Keep going
Other topics
Agent guardrails
What the governor does when an agent starts looping, what it leaves alone, and where its resistance stops. Every answer states its scope, because a guardrail claimed wider than it was measured is worse than no guardrail.
17 questionsThe measurements
Each figure Gubernaut publishes, with the qualifier it is only true under. Where a measurement came back null or inconclusive, the answer says so in the same paragraph as the headline.
14 questionsReproducing the record
The record is published so it can be attacked. These answers cover where the paper and the data live, how to check nothing was edited, how to re-judge the transcripts with your own panel, and what result would falsify the claim.
15 questions