Network equipment, fiber connections, and status lights inside data-center racks

Know what your change breaks, before you push it.

Hammerhead rehearses your change on a model of your whole network and shows you exactly what breaks — or tells you plainly when it can’t be sure.

Or see it catch a bad change ↓ RuleHawk is our free firewall-rule auditor. It runs in your browser, no sign-up.

Your network, as Optimesh sees it.

Every path computed against your live topology, so a change is proven safe, or blocked with the reason, before it ships.

Just ask

Describe the change. It writes it and proves it.

No more hand-crafting CLI at 2 a.m. Tell Config Studio what you want in plain English. It finds the fault, writes the vendor-correct fix, and proves it safe on a model of your live network before anything ships.

Intent in, proof out. The plain-English ask becomes a concrete diff plus a deterministic verdict you can trust.
Every fact is checked. The model proposes; the engine decides. It can't talk its way past the gate.
Config Studio · chat
Ask Config Studio to make a change…
Your whole network, one surface

Generate a change on the left. Watch the fleet on the right.

Config Studio · custom dashboardruns inside your network · read-only
{ } Generated change
Auto-filled
Target device
Vendor
Intent
Routers
48 / 48 verified
Switches
71 / 72 online
Firewalls
12 / 12 verified
Cloud SGs
320 / 320 clean
Changes verified · 24h1,284 proven · 7 blocked

Change anything. Break nothing.

Every change to your network runs the gate first: simulated on your live topology, proven safe or blocked, before it ships. Here is a real run.

optimesh · verify --pr 482blocked
$ optimesh verify --pr 482
ingest3 files changed · core-sw-02, edge-fw, k8s/netpol
diagnoseACL drift on Vlan40 — guest VLAN can reach finance
simulate12,481 paths on live topology  ✓ 41ms
checksreachability 8/8 · isolation ✓ · loops ✓ · acl ✗
✗BLOCKED. app-sg → 0.0.0.0/0 opens on line 42. The merge is stopped and the exact rule is cited — nothing ships until it's proven safe.
Two products, one engine

Simulation you can build on. Remediation you can trust.

Hammerhead

Offline forwarding-plane simulator

Point it at your configs and ask what a change will do. Reachability and traceroute across 15 vendor config formats, answered in milliseconds.

  • Checked against real routers, not another simulator: 135 of 136 routes match, re-run every week. How
  • Memory-safe by construction, deterministic, audit-ready
  • CLI, Python SDK, REST API, CI integration and Jupyter. Docs
Config Studio

AI diagnosis and verified remediation

When a config breaks, it finds the fault, writes the fix, and proves it safe in simulation — before anyone approves it.

  • Fixes that come with proof: every one tested on your network’s twin, and nothing changes until a human says go.
  • Small, reviewable diffs — every fix checked before you see it
  • On-prem and air-gapped — nothing ever leaves your network
The gate that never guesses

A verdict backed by math, not a hunch

Config Studio computes exactly what a change does to every path in your network, then shows the routes and rules behind the answer. If it can't prove a change safe, it blocks it.

Deterministic, fail-closed. Any lost reachability, any new loop, any ACL change it can't prove safe fails the build.
Evidence, line by line. Every verdict cites the exact FIB entries, routes, and ACL lines that produced it.
verdict.json
"status": "BLOCKED",
"reason": "ACL flow disposition changed",
"flow": "app-sg → 0.0.0.0/0",
"rule": "permit ip any any (line 42)",
"reachability": "8/8 preserved",
"safe_to_deploy": false
reachable-from-internet · exposure scan
On-prem ACL AWS security groups Azure NSG GCP firewall Kubernetes NetworkPolicy

One graph spans them all. Ask "what can reach my database from the public internet right now," and get a real answer.

One graph, every domain

On-prem to cloud to cluster

Reachability is modeled across on-prem, AWS, Azure, GCP and Kubernetes as a single graph. A change in one domain can't quietly open a hole in another.

What-if before you touch it. Drain a device, drop a link, withdraw a prefix, preview the impact with zero risk.
Blast radius on every apply. Before-and-after reachability diff, isolated devices, newly unreachable prefixes, gated.

Blast radius, beyond the checkbox.

One change. See every service it puts at risk, and the "redundant" path that secretly isn't, before it ships.

Change detectedimpact · sw-02 · Vlan40
edge sw-01 sw-02 sw-03 web billing orders db carrier-x $900k/hr checkout flow
at risk from this changeshared carrier (fake redundancy)1 change on sw-02 → billing ($900k/hr) + orders · failover shares carrier-x
Pull-request gate

Block the bad merge, automatically

Optimesh runs on every pull request that touches network config. A red verdict fails the check and blocks the merge, with the offending rule cited right on the diff. No green check, no ship.

Fast enough to gate everything. Runs in seconds, so it fits on every PR the way a test suite does.
Cited on the diff. The failing flow and rule arrive as a comment, not a link to a dashboard.
Checks · pull request #482
✓ build
✓ lint
✓ unit tests
✗ optimesh / verify
Blocked: app-sg → 0.0.0.0/0 opens · rule: permit ip any any (line 42)
Merging is blocked until all checks pass
CHG0031847 · Firewall ACL update
Risk assessmentOptimesh, automated
Reachability8 / 8 preserved, 1 new exposure
Attached evidenceverdict.json
RecommendationDo not deploy
ServiceNow & Jira

Evidence on the ticket

Every verified change writes its proof back to the change record. The reviewer sees the verdict, the reachability diff, and the cited rules without leaving the ticket. Audit gets a reproducible artifact instead of a screenshot.

Attached, not narrated. The verdict rides on the change record as a signed, re-runnable artifact.
Approvals with a basis. The change manager approves on evidence, not on the requester's confidence.
Terraform & CI

Verify the plan, not just the syntax

terraform plan tells you what will change. Optimesh tells you what it will break. Drop it into any pipeline as a step that reads the plan and proves the resulting network still holds its invariants.

Any pipeline. GitHub Actions, GitLab CI, or Jenkins. It is a CLI with an exit code.
Fails closed. A non-zero exit stops the apply before anything reaches the fabric.
ci · verify step
$ terraform plan -out tf.plan
$ optimesh verify --plan tf.plan
✓ parse configs · 14 devices
✓ simulate on live FIB
✓ reachability probes · 8/8 preserved
✗ acl flow-safety · app-sg → 0.0.0.0/0
optimesh: change blocked (exit 1)
Supported platforms

What Hammerhead reads, and what it models.

The vendors it parses, the ways configs get in, and each protocol with how far the model goes. Docs →

Why now

Four forces are remaking how networks get changed.

Each one alone would justify a new category of tooling. Arriving together, they make verification non-optional.

01

AI agents are managing production infrastructure.

Cisco reports 165,000+ agentic workflow executions monthly. AI is no longer drafting suggestions, it's executing changes on live networks, clusters, and clouds.

02

Nobody is verifying what agents do.

Every major AI agent ships without a deterministic verifier between the model and production. We built the platform that proves an AI-proposed change is safe before it executes.

03

Regulation now requires it.

The EU AI Act, effective August 2026, mandates auditability and human oversight for high-risk AI. Infrastructure agents fall squarely in scope.

04

The trust gap is the bottleneck.

Enterprises want autonomous operations but won't let AI change things unsupervised. Deterministic verification closes the gap: the agent proposes, the verifier proves.

Named alternatives

How Hammerhead compares.

What each product says about itself in public material, next to Hammerhead, including where we are behind. “None found” means we could not find it in public material, not that the product lacks it. We filled in our own row, so treat it as a claim; the evidence is in the methodology.

ProductWorks fromVendorsChecks a change before it shipsDeploymentPublished accuracy evidence
HammerheadConfig files; optional collection over SSH, SNMP, config-manager archives, cloud APIs15 config formats parsed; SSH drivers for 6Yes: preflight, pass / fail / advisory / unknownYour hardware: CLI and self-hosted API135 of 136 routes match a 10-router FRR lab; 134 rebuilt outages flagged
Forward NetworksLive collection of config and state [1]“30+” [1]Yes: Forward Predict, May 2026, for routing, ACL, NAT and firewall [2][3]SaaS or on-prem VM [4]“Mathematically accurate”; no figure published [1]
IP FabricLive discovery and snapshots [5]42 vendor families [6]Pre- and post-change impact summaries [5]On-prem appliance; needs no internet [7]None found
NetBrainLive CLI, SNMP and API data [8]“Over 400 device types” [8]Change agent announced for October 2026; method not published [9][10]On-prem or SaaS [11]“90%” of real issues handled [12]
Batfish (open source)Config files [13]Cisco, Juniper, Arista, Palo Alto, Nokia SR OS and others [13]Yes: differential analysis of candidate configs [13]Library or container [13]None found
Cisco Nexus DashboardLive telemetry from Cisco fabrics [14]Cisco only [15]Pre-change analysis, ACI only [14]On-prem [15]None found

Where Hammerhead is ahead

It checks a change from configs alone, before anything is collected or pushed; of the products above, only Batfish also works that way. It answers “unknown” and names what it couldn’t check instead of passing. It runs entirely on your machines.

Where Hammerhead is behind

The others were built on continuous collection across 30 to 400+ platforms; Hammerhead parses 15 config formats. They model what the network is doing; Hammerhead models what the configs say. Its console is far simpler than products refined for years.

Where it is early

One release so far, 0.1.0. No public customer references and no third-party evaluation yet. Real-router checks so far run in container labs, not on production hardware.

Sources, all accessed September 26, 2026
  1. Forward Networks, “Why Forward” (forwardnetworks.com/why-forward)
  2. Forward Predict datasheet V04, May 19, 2026
  3. Help Net Security, “Forward launches Predict”, May 21, 2026
  4. Forward Networks integrations page and ServiceNow blog, August 26, 2025
  5. GlobeNewswire, IP Fabric v8.1, September 23, 2026
  6. IP Fabric support matrix 8.0.0 (matrix.ipfabric.io)
  7. IP Fabric documentation FAQ and network-verification product page
  8. NetBrain multivendor product page (netbrain.com/product/multivendor)
  9. Business Wire, NetBrain agentic NetOps agents, September 22, 2026
  10. Converge Digest, NetBrain change and assessment agents, September 2026
  11. NetBrain product FAQ
  12. Network World, NetBrain R12.3, 2026
  13. github.com/batfish/batfish, release v2026.08.27
  14. Cisco, Nexus Dashboard 4.2.1: Analyzing and Troubleshooting, updated June 24, 2026
  15. Cisco blog, Cisco Nexus One, July 2, 2026
What we're building

A platform for autonomous networking, in horizons.

Now · Software

Verify every change

Hammerhead verifies network, Kubernetes, and cloud changes; Config Studio adds AI diagnosis and remediation. Both run on your hardware today.

Next · Hardware

Air-gapped appliances

Purpose-built appliances with local AI inference and deterministic verification, the autonomous network engineer that never sleeps.

Then · Universal

Every agent, any infra

Verification for every AI agent acting on any infrastructure: Terraform, databases, CI/CD, and beyond. The trust layer becomes the standard.

Insights

Notes on the future of network intelligence.

From the Optimesh founders, on verification, the shift to AI-driven operations, and where the field goes next.

Watch

Peer review reads the diff. Hammerhead reads the network.

A three-minute demo for the engineer holding the change window: a three-line OSPF change that passed peer review, pushed once, then checked with Hammerhead before it ships.

Small synthetic labs. The push at 01:48 is a labelled dramatization, and the Rogers 2022 segment is a reconstruction from the public record, not a claim that the outage would have been prevented.

Real outages

Rogers, 2022. Facebook, 2021.

134 outages like them, rebuilt from the public record. Hammerhead flags the cause of every one. How we measured →

Watch the demos →

Reconstructions from public reports, not the operators’ own configurations. For Microsoft’s 2023 WAN outage the cause was a command, and Microsoft never named the vendor or the command, so we assumed them. Flagging the cause is not a claim that any outage would have been prevented. We fixed Hammerhead until it caught each one, so this is a regression suite, not a blind test, and we have not yet measured how often it fails a healthy change.

The Uptime Institute's outage surveys now put a majority of serious outages above 100,000 dollars, with a significant share past a million.

For the people who sign off

Approve changes on evidence, not a gut call.

Evidence, not “looks good to me”

Every change comes with a verdict and the reason: pass, fail, or unknown — with exactly what it couldn’t check. Your approval chain stays the same; the guesswork goes.

A record you can audit

Every check and approval made through the Hammerhead server is written to a tamper-evident audit trail.

One page for the board

Where your network’s risk is, and what the next change puts at stake, on a single page anyone can read.

What engineers tell us

Read our insights →

Company

Bring certainty to the networks that run the world.

Optimesh builds offline intelligence so the engineers routing the world's traffic know exactly what a change will do before they make it.

Newsroom
Read
The team

Built by people who ship where failure is not an option.

Flight systems for lunar landers. The satellite network connecting the planet. Platforms at billions-of-users scale. The people who spent a decade proving the impossible correct are now doing it for the network.

Built by engineers from

The climb

From a hard research bet to the trust layer, and what's next.

Proved the impossible fast

Your entire network, rehearsed in under a second (976 devices in 0.6s). Fast enough to check every change, not just the scary ones.

Next: in production

Next, network teams running verified change on their own fabrics, on their own hardware. Nothing leaves the building.

Gave the network a brain

Config Studio diagnoses the fault, writes the fix, and proves it safe before a human ever approves it.

Who backs us

An angel round from investors including operators who have run production networks. We are also in NVIDIA Inception, NVIDIA’s program for startups, which is support, not investment.

Building the trust layer

Deterministic verification for every AI-driven change to any infrastructure. Software today. Purpose-built hardware next.

On the horizon

An autonomous, AI-native IT engineer

Verification is the groundwork. Next: an agent that runs your network end to end — diagnosing, fixing, and proving every change safe on its own, with humans only on the calls that matter.

What we believe

Trustworthy by construction.

Proof over promises

Cross-validated against industry-standard analysis and a live routing stack. Every output deterministic. If the data doesn't support the claim, we don't make it.

Fast enough to live in CI

Whole-fabric simulation in milliseconds. Validation runs on every commit, not once a quarter.

Your network stays yours

Runs entirely on your hardware. On-prem and air-gap ready. Your configs never leave the network.

Hammerhead

Know what a change will do, before you make it.

Point it at a directory of router configs. It builds the forwarding tables for every device, runs your reachability query, and tells you the answer, in under a second. Ships as a single binary. Nothing else to install.

When it can’t be sure, it says ‘unknown’ — and names exactly what it couldn’t check. Never a false ‘pass’.

Request Hammerhead access →Read the docsRead the white paper

Hammerhead is private and access-gated: there is no public download or self-serve trial. The docs are public, so you can judge it before you ask.

hammerhead
Demos

Rehearse the change before you push it.

A demo for the engineer, an overview for the executive, and a walkthrough of the command line. The terminals show real output from the tool.

Demo · 3:38

Catching a bad change before it ships

For the engineer holding the change window.

A three-line OSPF change that passed peer review, shown twice: pushed straight to the network, then checked with Hammerhead first.

The labs are synthetic and small. The push at 01:48 is a labelled dramatization of what the model says would happen. The Rogers 2022 segment is a reconstruction from the public record; the demo does not claim Hammerhead would have prevented that outage.

Overview · 1:59

Approved.

For the executive who signs off on the risk.

A diff shows what was typed, not what the network does next. Where a pre-change gate fits, without moving the approval chain you already run.

The two incidents are cited from the providers' own reports as examples of change risk. The video does not claim Hammerhead would have prevented them, or that AI caused them. The terminal shows a small synthetic lab.

Walkthrough · 4:08

Thirteen commands.

For the engineer at the keyboard.

One command per chapter, typed and run: what it found in a folder of configs, what it could not read, and what a change does.

Every chapter runs on the small synthetic labs that ship with Hammerhead. The output is real: colour is added, and long output is clipped or excerpted, never edited.

Nothing in these videos was pushed to a production network. Narration is a synthetic voice; English captions are in each player.

Tested on real outages

134 outages, rebuilt from the public record.

We rebuilt 134 real outages, Rogers and Facebook among them, and ran the change behind each one through Hammerhead. It flagged the cause every time. For Microsoft’s 2023 WAN outage, the cause was a command, not a config line; Microsoft never said which vendor or command, so we assumed them.

Reconstructions from public reports, not the operators’ own configurations. Flagging the cause is not a claim that any outage would have been prevented. We fixed Hammerhead until it caught each one, so the 134 are a regression suite, not a blind test; some catches need facts you declare, such as your network boundary; and we have not yet measured how often it fails a healthy change. How we rebuilt them, and what “flagged” means →

76 CLI subcommands

One engine. The whole validation loop.

76 subcommands. See every one in the docs →

Parse & simulate

Read raw configs, run protocol convergence, build the routing and forwarding tables.

parsesimulateribfib

Query

Ask where a packet goes. Reachability, traceroutes, path joins, IP ownership.

reachabilitytraceroutefind-ip

Analyze

Diff snapshots, detect loops, scan for single points of failure, audit ACLs.

diffloopsfailure-analysis

Verify

Check configs against a YAML compliance DSL. CIS, PCI, and SOC 2 templates included.

policy-checkCISPCI
Supported platforms

What it reads, and what it models.

Vendors, how configs get in, and every protocol with how far it goes. “Partial” means partial.

Surfaces

Meets you where you already work.

CLI

A single binary. No Docker, no JVM, no server. Reference →

Python SDK

Notebook-native. from hammerhead import Hammerhead SDK docs →

REST API

An HTTP server with 56 routes, JWT auth and three roles, for wiring into anything. API docs →

CI pipeline

Gate merges on a before-and-after check. Fast enough to run on every commit. CI docs →

Jupyter

9 tutorial notebooks: BGP analysis, traceroute, change validation, drift, ACL walkthroughs.

vs the standard

Checked against Batfish, the open-source standard, across 351 test snapshots, and against real routers every week. How →

Config Studio

Diagnose config faults and generate verified fixes.

Finds the fault, writes the exact CLI patch, and proves it restores reachability before you approve it. In seconds. On your own hardware.

Request access →Powered by HammerheadDocs
config-studio · ~11s
Fault class
BGP session down · conf. 0.94
Suspect edge-2. Neighbor ASN mismatch on peer 10.0.4.1.
- remote-as 65099
+ remote-as 65020
✓ Hammerhead verified · reachability restored 99.7% · re-simulated offline
✓ Apply✗ Reject
Mean time to resolution

From alert to verified fix in seconds, not hours.

The slow part of an incident was never the fix. It was finding the fault and trusting the repair. Config Studio does both, and proves it, before you approve.

Manual incident response
~45 min
bisecting configs hop by hop, under pressure
→
With Config Studio
11s
diagnosed, patched, and proven safe
1
Sanitize
instant
Strips prompt-injection hidden in config comments before the model ever sees them.
2
Diagnose
~6s
Pinpoints the fault and the suspect device against a 32-class taxonomy. No human bisecting the fabric hop by hop.
3
Patch
~2s
Writes the minimal CLI diff, the exact lines you would have typed at 2 a.m.
4
Verify
~3s
Hammerhead re-simulates offline and rejects anything that drops reachability, so the fix you approve is already proven.
Two surfaces

Ask it live, or gate it on every commit.

/studio

Chat + config editor

A chat wired to 15 network tools and an in-session config editor. Ask in plain English; it reasons over your fabric and proposes verified edits inline.

/changes

Pull-request gating

A webhook receiver that runs diagnose → patch → verify on every commit, posts a verdict comment with a deep link, and can gate the merge.

RuleHawk · Free

Audit your firewall rules in seconds.

Paste your config, get a full report. Shadowed rules, overly permissive access, compliance gaps. No sign-up, no install, runs in your browser.

Launch RuleHawk →Fix with Config StudioSource on GitHub
Audit reportinstant
Rule #42 is shadowed by Rule #18
permit tcp 10.0.0.0/8 any eq 443 — already matched above
Rule #7 allows any → any on ports 1-65535
3 Critical7 Warnings52 Clean
What it detects

Six categories of firewall risk.

Shadowed rules

Rules that never fire because a broader rule matches first.

Overly permissive access

Wide source and destination ranges, any-any patterns.

Redundant rules

Duplicates that add complexity without changing policy.

Ordering issues

First-match semantics producing unintended outcomes.

Compliance gaps

Missing deny-all defaults and logging gaps.

Unused rules

Zero-hit candidates for cleanup.

From your laptop to your whole network.

Start free with RuleHawk today. Hammerhead is private and access-gated: paid plans begin once we have given you access, not with a self-serve signup.

Free

For the engineer getting started with verified change.

$0
  • Includes:
  • RuleHawk firewall & segmentation audit
  • Verify up to 25 changes / month
  • Reachability & path checks
  • 15 vendor config formats
  • CLI & single binary
  • Community support
Pro

For the engineer who ships changes daily.

$39 / engineer / mo
  • Everything in Free, plus:
  • Unlimited change verification
  • Full blast-radius & reachability diff
  • CI checks (GitHub, GitLab)
  • Compliance checks (CIS, PCI)
  • 90-day history
  • Email support
Team

For teams gating change together.

$99 / engineer / mo
  • Everything in Pro, plus:
  • Pull-request gating
  • Shared topology & snapshots
  • Cross-domain: on-prem, cloud, K8s
  • Drift detection & alerts
  • ServiceNow, Jira, Terraform
  • Role-based access & SSO
  • Priority support
Enterprise

For orgs that need AI remediation and air-gap.

Custom
  • Everything in Team, plus:
  • Config Studio: AI diagnosis & verified fixes
  • On-prem & air-gapped deployment
  • Full audit logs, zero telemetry
  • HIPAA compliance checks
  • Dedicated deployment engineer
  • SLA & 24/7 support

Hammerhead runs on your own hardware on every plan that includes it, and RuleHawk analyzes in your browser. Neither sends your configs to us. Security →

Pricing questions

What do I get on Free today?

RuleHawk, with no limit, sign-up or install. The Hammerhead features listed under Free (the CLI and up to 25 verified changes a month) come with access, which we grant on request; there is no self-serve Hammerhead download yet.

What counts as a “change” toward the 25 a month?

One check of a proposed change: a single preflight comparison of a before and an after set of configs, however many devices or lines it touches. Queries such as reachability or traceroute against one snapshot are not changes.

What happens at the 26th?

Nothing in the software stops you. Hammerhead has no usage meter, license key or phone-home, because a tool that has to call us could not run air-gapped. The 25 is a term of the plan: if you regularly go past it, we will ask you to move to Pro.

How is per-engineer pricing enforced for a CLI that runs on-prem?

By agreement, not by software. The binary does not count seats or report usage. Pro and Team are priced per engineer who runs Hammerhead, and that number is part of your agreement with us.

Is there a free trial of Pro or Team?

Not a self-serve one. Request access and tell us what you want to evaluate; the docs are public in the meantime.

Hammerhead docs

What you need to judge Hammerhead before you talk to us: how it installs, a five-minute run, all 76 commands, the Python SDK, the REST API and CI. The output on this page is real, from hammerhead 0.1.0 on the labs that ship with it.

Hammerhead 0.1.0 · page updated September 2026

Access

Hammerhead is private. There is no public download, package, container or self-serve trial. We send binaries to teams we have given access. These docs are public so you can decide whether it is worth asking.

Install

Hammerhead is one executable, hammerhead. It needs no JVM, Python runtime, database or server. Each release archive also carries hammerhead-api, the optional REST server.

PlatformTargetLive collection built in
Linux x86_64 (glibc 2.35+: Ubuntu 22.04+, Debian 12+)x86_64-unknown-linux-gnuSSH, SNMP, ICMP, gNMI state polling, REST connectors, cloud fetch
Linux arm64 (glibc 2.35+)aarch64-unknown-linux-gnuSNMP, REST connectors
macOS, Apple siliconaarch64-apple-darwinSSH, SNMP, ICMP, gNMI state polling, REST connectors, cloud fetch
macOS, Intelx86_64-apple-darwinSSH, SNMP, ICMP, gNMI state polling, REST connectors, cloud fetch
Windows x86_64x86_64-pc-windows-msvc (zip)SNMP, REST connectors

Analysis of a directory of config files works the same on every platform. The last column only matters if you want Hammerhead to fetch configs itself (see how configs get in). A linux/amd64 container image is also available to teams with access.

# after download: check, unpack, run
shasum -a 256 -c hammerhead-<version>-x86_64-unknown-linux-gnu.tar.gz.sha256
tar xzf hammerhead-<version>-x86_64-unknown-linux-gnu.tar.gz
./hammerhead --version
hammerhead 0.1.0
Signing. Each archive comes with a SHA-256 checksum file. The archives are not code-signed yet.

Quickstart

Five steps. The first four use a three-router OSPF lab that the binary can write for you; the fifth checks a change on a four-router spine-leaf.

1. Point it at a config directory

init scans a directory of configs (one file per device), says what it found and suggests next commands. --example seeds the lab first.

$ hammerhead init ./configs --example
  ✓  Seeded ./configs with R1/R2/R3 OSPF triangle (2196 bytes)
  ✓  Found 3 config files (3 cisco_ios)
  ✓  Discovered 3 devices, 9 interfaces, 3 L3 links
  ✓  Simulated 18 FIB entries across all devices
  ✓  Protocols: OSPF (area 0)
  ✓  Completed in 3ms

On your own configs, read the vendor counts init prints. A file it cannot identify is parsed as Cisco IOS, so a surprising count usually means a file it did not recognize.

2. Build the model

$ hammerhead simulate ./configs
== R1 ==
RIB: 6 entries (3 connected, 0 static, 3 ospf, 0 bgp, 0 eigrp, 0 isis)
FIB: 6 entries
OSPF: 2 adjacencies, 3 LSAs across area(s) 0
… R2 and R3 follow

3. Ask a reachability question

$ hammerhead reachability ./configs --from R1 --src 1.1.1.1 --dst 3.3.3.3
Reachable: yes

4. Trace the packet

$ hammerhead traceroute ./configs --from R1 --src 1.1.1.1 --dst 3.3.3.3
Traceroute from R1 (1.1.1.1) to 3.3.3.3 [tcp dst-port 80]
  1  R1         - -> GigabitEthernet0/1 (R3 GigabitEthernet0/0)   forwarded
Disposition: Delivered

5. Check a change before you push it

preflight compares a before and an after directory. Here the candidate moves LEAF-2 into OSPF area 2. Output trimmed.

$ hammerhead preflight ./before ./after
  routes changed:   15 (20.0% of FIB entries)
  devices impacted: 4 (100.0% of estate) — LEAF-1, LEAF-2, SPINE-1, SPINE-2
  flows lost:       6 (of 4 of 4 endpoint(s) probed, 0 gained)
    probed per pair:  tcp/80 http, tcp/22 ssh, tcp/179 bgp, udp/53 dns, icmp echo
    ✗ LEAF-1(10.255.1.1) → LEAF-2(10.255.1.2)
    …
VERDICT: FAIL
  ✗ blast radius 100.0% of devices exceeds --max-blast-radius 5%
  ✗ routing adjacencies: 2 lost between devices that are both still present — OSPF LEAF-2 <-> SPINE-1, OSPF LEAF-2 <-> SPINE-2
  ✗ reachability regression: 6 endpoint pair(s) delivered before are not delivered after
$ echo $?
2

A candidate that changes no routes and loses no flows returns VERDICT: PASS and exit 0. The exit code is the contract CI relies on:

ExitVerdictMeaning
0pass or advisoryNo gate failed. Advisory findings are printed but do not fail.
2failA gate failed. Each failure is listed with the flows, routes or rules behind it.
3unknownThe change touches something the model does not cover. The blockers are named; it never reports a pass it cannot back.
1errorAn operational error, such as a missing directory.

CLI reference

All 76 subcommands, grouped by job. Each summary is the command's own --help text, with internal references removed. hammerhead help <command> prints every flag.

Global options: --format text|json|csv|dot (JSON is stable for scripting; CSV suits tabular output such as fib, rib, reachability; DOT suits traceroute) and -v/-vv/-vvv for logging.

Start here2 commands
CommandWhat it does, and usage
initScan a config directory and show what Hammerhead found — vendors, devices, protocols, and suggested next commands. The fastest way to get started
hammerhead init [OPTIONS] <CONFIG_DIR>
connectGuided onboarding wizard: point Hammerhead at a system you already run (SolarWinds, ManageEngine, an Ansible repo — or a built-in demo), validate the connection, write a ready-to-use inventory.yaml + secrets env file, and optionally run the first collect + simulate immediately. Interactive on a TTY; fully drivable by flags (secret via HH_CONNECT_SECRET) in CI
hammerhead connect [OPTIONS]
Parse & simulate14 commands
CommandWhat it does, and usage
parseParse all configs in a directory and report parse coverage
hammerhead parse [OPTIONS] <CONFIG_DIR>
parse-coveragePer-device parse coverage histogram (lines parsed vs unparsed)
hammerhead parse-coverage [OPTIONS] <CONFIG_DIR>
topoDiscover topology from a config directory
hammerhead topo [OPTIONS] <CONFIG_DIR>
simulateRun the full simulation pipeline (parse → topo → OSPF → FIB)
hammerhead simulate [OPTIONS] <CONFIG_DIR>
ribShow the per-device RIB
hammerhead rib [OPTIONS] --device <DEVICE> <CONFIG_DIR>
fibShow the per-device FIB
hammerhead fib [OPTIONS] --device <DEVICE> <CONFIG_DIR>
init-issuesPybatfish-parity init report: severity-tagged init issues plus defined / referenced named structures
hammerhead init-issues [OPTIONS] <CONFIG_DIR>
sessionsReport BGP / OSPF session compatibility and adjacency edges
hammerhead sessions [OPTIONS] --protocol <PROTOCOL> <CONFIG_DIR>
snapshotEmit static snapshot-input reports (ip-owners, subnets, FHRP, L1/L2 edges) or multipath consistency reports
hammerhead snapshot [OPTIONS] --report <REPORT> <CONFIG_DIR>
ipsec-statusReport IPSec crypto-map session compatibility per Batfish ipsecSessionStatus
hammerhead ipsec-status [OPTIONS] <CONFIG_DIR>
vxlan-vnisEmit VXLAN VNI properties per Batfish vxlanVniProperties
hammerhead vxlan-vnis [OPTIONS] <CONFIG_DIR>
vxlan-edgesEmit overlay VTEP→VTEP edges per Batfish vxlanEdges
hammerhead vxlan-edges [OPTIONS] <CONFIG_DIR>
profilePer-phase wall-clock profile of the simulation pipeline
hammerhead profile [OPTIONS] <CONFIG_DIR>
reconvergeIncrementally reconverge a snapshot after a single-file config edit.
hammerhead reconverge [OPTIONS] <CONFIG_DIR>
Query19 commands
CommandWhat it does, and usage
tracerouteTrace a packet through the simulated network
hammerhead traceroute [OPTIONS] --from <FROM> --src <SRC> --dst <DST> <CONFIG_DIR>
reachabilityYes/no reachability check between two IPs
hammerhead reachability [OPTIONS] --from <FROM> --src <SRC> --dst <DST> [CONFIG_DIR]
loopsScan the forwarding plane for packets that would circulate indefinitely. Also available under the alias detect-loops [aliases: detect-loops]
hammerhead loops [OPTIONS] <CONFIG_DIR>
symbolic-reachBDD-based symbolic reachability between two devices, with an optional differential mode against a second snapshot. CAVEAT: the BDD engine does not yet model NAT header rewrites — on estates with NAT rules, prefer nat-aware-traceroute for flows that cross a translating device; the command warns when it detects NAT in the snapshot
hammerhead symbolic-reach [OPTIONS] --from <FROM> --to <TO> <CONFIG_DIR>
bidirectional-reachBDD-based bidirectional reachability (A→B ∩ B→A)
hammerhead bidirectional-reach [OPTIONS] --from <FROM> --to <TO> <CONFIG_DIR>
bidirectional-traceForward + reverse traceroute with an asymmetry flag
hammerhead bidirectional-trace [OPTIONS] --from <FROM> --src <SRC> --to <TO> --dst <DST> <CONFIG_DIR>
search-filtersFind every ACL line overlapping a symbolic packet constraint
hammerhead search-filters [OPTIONS] <CONFIG_DIR>
test-filtersEvaluate every ACL against one concrete packet
hammerhead test-filters [OPTIONS] --src <SRC> --dst <DST> <CONFIG_DIR>
nqe-routesAd-hoc route query with protocol / prefix / ECMP / device filters, optionally aggregated via --group-by
hammerhead nqe-routes [OPTIONS] --config-dir <CONFIG_DIR>
nqe-devicesAd-hoc device query with protocol / route-count filters, sortable by name / routes / links
hammerhead nqe-devices [OPTIONS] --config-dir <CONFIG_DIR>
nqe-pathsAd-hoc path-traversal query. Returns all (src, dst) pairs matching the filter with their hop-by-hop paths
hammerhead nqe-paths [OPTIONS] --config-dir <CONFIG_DIR>
nqlCypher-subset ad-hoc graph query over the simulated topology. Speaks a read-only subset of Cypher (MATCH / WHERE / RETURN with aggregation, ORDER BY, LIMIT, DISTINCT, variable-length paths)
hammerhead nql [OPTIONS] <CONFIG_DIR> <QUERY>
searchGlobal free-text search across the simulated snapshot. One box resolves any IP, MAC, hostname, prefix, ACL line, VLAN, BGP / OSPF neighbour, NAT rule, VRF, EVPN VNI, MPLS label, or FIB next-hop into a ranked hit list
hammerhead search [OPTIONS] --query <QUERY> <CONFIG_DIR>
mpls-traceMPLS LFIB / LDP label-stack walker. Synthesises an LDP-DU distribution from loopback /32 prefixes and walks the label stack. RSVP-TE is a follow-up
hammerhead mpls-trace [OPTIONS] --from <FROM> --to <TO> <CONFIG_DIR>
sr-traceSegment Routing path / policy walker. Without --policy, dumps every device's prefix-SID label table. With --policy <headend>:<color>:<endpoint>, prints the policy's candidate paths and which one would be active
hammerhead sr-trace [OPTIONS] <CONFIG_DIR>
all-pathsEnumerate every forwarding path from a source device to a destination IP, including every ECMP branch.
hammerhead all-paths [OPTIONS] --from <FROM> --src <SRC> --dst <DST> [CONFIG_DIR]
askAsk a question in plain English, offline. The question is matched against a fixed grammar and resolved to ONE existing command, whose exact command line is printed before it runs in-process. A question that is not understood, is ambiguous, or names a device, interface or address that is not in the snapshot is REFUSED (exit 1) with the supported forms listed; it is never guessed at
hammerhead ask [OPTIONS] <CONFIG_DIR> <QUESTION>
nat-aware-tracerouteTraceroute that follows NAT translations hop by hop.
hammerhead nat-aware-traceroute [OPTIONS] --from <FROM> --src <SRC> --dst <DST> [CONFIG_DIR]
reachability-matrixAll-pairs reachability across the estate. Probes every ordered endpoint pair with a TCP/80 packet and renders the result as a matrix. Endpoints default to one address per device (loopback first); constrain them with --endpoints / --endpoints-file
hammerhead reachability-matrix [OPTIONS] [CONFIG_DIR]
Change validation5 commands
CommandWhat it does, and usage
diffDiff FIBs between two config directories
hammerhead diff [OPTIONS] <BEFORE_DIR> <AFTER_DIR>
diff-routesPer-(device, prefix) RIB delta between two snapshots
hammerhead diff-routes [OPTIONS] <BEFORE_DIR> <AFTER_DIR>
diff-aclsACL line-level delta between two snapshots
hammerhead diff-acls [OPTIONS] <BEFORE_DIR> <AFTER_DIR>
failure-analysisSimulate a device/interface failure (or scan every device) and report pre-convergence blast radius
hammerhead failure-analysis [OPTIONS] --config-dir <CONFIG_DIR>
preflightPre-change blast-radius gate: diff a before/after config pair, score blast radius against thresholds (and optionally a policy file), and exit non-zero on gate failure so CI / Ansible pre_tasks can halt a rollout before it touches devices
hammerhead preflight [OPTIONS] <BEFORE_DIR> <AFTER_DIR>
Audit & compliance15 commands
CommandWhat it does, and usage
acl-auditFind shadowed and unused ACL entries
hammerhead acl-audit [OPTIONS] <CONFIG_DIR>
audit-configAudit named-structure references: undefined refs, unused structures, parse warnings
hammerhead audit-config [OPTIONS] <CONFIG_DIR>
policy-checkVerify a YAML policy file against the simulated network and report per-policy pass/fail with severity
hammerhead policy-check [OPTIONS] --config-dir <CONFIG_DIR> --policies <POLICIES>
nqe-libraryRun the bundled NQE library of intent checks (or list its catalog).
hammerhead nqe-library [OPTIONS]
pbr-auditWalk every interface bound to ip policy route-map ..., list the route-map clauses (match + set), and flag every clause whose set ip next-hop may bypass an inbound ACL bound on the same device.
hammerhead pbr-audit [OPTIONS] <CONFIG_DIR>
wccp-auditList WCCPv2 service groups and per-interface redirect bindings recovered from lines the parser did not model.
hammerhead wccp-audit [OPTIONS] <CONFIG_DIR>
qos-auditSurface Cisco MQC class-map / policy-map / service-policy declarations from lines the parser did not model. MVP scope: classification + marking only — scheduler, queue depth, and starvation analysis are not modeled
hammerhead qos-audit [OPTIONS] <CONFIG_DIR>
ip-sla-auditList per-device IP SLA probes (recovered from lines the parser did not model) and track <id> objects (parsed). Cross-references each track id against any static route that names it via track <id>
hammerhead ip-sla-audit [OPTIONS] <CONFIG_DIR>
driftConfig-vs-golden semantic drift detector. Runs across a paired set of golden + observed config directories and emits one row per finding
hammerhead drift [OPTIONS] --golden <GOLDEN> --observed <OBSERVED>
rpki-auditAudit a network's ROAs against what it announces: a ROA whose maxLength authorises more-specifics the AS does not announce lets a forged-origin announcement validate Valid (RFC 9319). Exit 2 on a loose ROA, 3 when a ROA for this snapshot's ASes could not be judged or none was
hammerhead rpki-audit [OPTIONS] --roas <FILE> <CONFIG_DIR>
fhrp-auditHSRP / VRRP / GLBP standby-group consistency audit. Discovers every speaker, runs the FHRP election engine, and reports per-group active/standby roles plus structural warnings
hammerhead fhrp-audit [OPTIONS] <CONFIG_DIR>
cve-auditJoin a NIST NVD JSON or Tenable .nessus XML vulnerability feed against the parsed device inventory and report every (CVE, device) pair that fires. Exits non-zero when any finding's severity meets --severity-floor (default medium)
hammerhead cve-audit [OPTIONS] --feed <FEED> <CONFIG_DIR>
mlag-auditAudit MLAG / vPC / CLAG configuration consistency across the snapshot. Surfaces five finding kinds (missing peer, keepalive subnet mismatch, member port mismatch, orphan member, peer-link missing). Exits non-zero when any finding ≥ --severity-floor (default high) fires, so the command is wirable as a CI gate ahead of a vPC / MLAG roll
hammerhead mlag-audit [OPTIONS] <CONFIG_DIR>
convergence-auditPre-event correctness checks for fast-reroute, uRPF, and CoPP.
hammerhead convergence-audit [OPTIONS] --config-dir <CONFIG_DIR>
exec-reportProduce a self-contained executive HTML exposure report — headline RAG verdict, SPOF chokepoints, segmentation exposure, compliance rollup, and a remediation appendix — from a single config directory
hammerhead exec-report [OPTIONS] <CONFIG_DIR>
Segmentation4 commands
CommandWhat it does, and usage
segmentation-auditAudit a YAML segmentation intent against the simulated network and classify each cross-zone flow as allowed, isolated, leaked, or missing connectivity
hammerhead segmentation-audit [OPTIONS] --config-dir <CONFIG_DIR> --intent <INTENT>
segmentation-inferAuto-derive a YAML segmentation intent from a set of observed 5-tuple flows plus the live topology. Output is the same YAML shape segmentation-audit consumes, so the observation → derive → audit loop closes in one hop
hammerhead segmentation-infer [OPTIONS] --flows <FLOWS> --config-dir <CONFIG_DIR>
segmentation-recommendGenerate vendor-neutral ACL rule recommendations from a segmentation audit (or zero-trust baseline from intent alone)
hammerhead segmentation-recommend [OPTIONS] --config-dir <CONFIG_DIR> --intent <INTENT>
segmentsPer-segment rollup: devices, policy violations, segmentation leaks, unparsed forwarding-relevant lines and a red / unknown / yellow / green status for each segment (intent zones, or derived zones)
hammerhead segments [OPTIONS] <CONFIG_DIR>
Cloud & Kubernetes3 commands
CommandWhat it does, and usage
k8s-reachKubernetes pod-to-pod reachability verdict against the snapshot's NetworkPolicies (v1, Calico GlobalNetworkPolicy, Cilium CiliumNetworkPolicy)
hammerhead k8s-reach [OPTIONS] --config-dir <CONFIG_DIR> --src-pod <SRC_POD> --dst-pod <DST_POD> --port <PORT>
cloud-fetchFetch a live cloud snapshot (AWS / K8s via their SDKs; Azure ARM and GCP Compute over REST, all or nothing) and write the JSON files that simulate already consumes
hammerhead cloud-fetch [OPTIONS] --provider <PROVIDER> --output <OUTPUT>
cloud-costAnnotate an AWS pseudo-topology path with per-GB egress-cost estimates at every billing boundary (internet egress, NAT GW, TGW, inter-AZ) plus a monthly projection. Rates are documented defaults, overridable via --pricing-file
hammerhead cloud-cost [OPTIONS] --config-dir <CONFIG_DIR> --src <SRC> --dst <DST>
Collection & operations8 commands
CommandWhat it does, and usage
watchWatch a config directory and emit a JSON-Lines event stream
hammerhead watch [OPTIONS] [CONFIG_DIR]
collectCollect running-configs from a YAML inventory of devices and write them into an on-disk snapshot directory that simulate can ingest. SSH (--features ssh) and SNMP (--features snmp) reach real devices; a build without them refuses those rows by name, and gNMI / NETCONF config collection is not implemented. An SSH row's vendor: picks its driver: nxos, eos, junos, fortios, panos and frr / cumulus (or their parser labels and Ansible ansible_network_os names) take their own transcript; ios, iosxr, asa, a10 or no vendor: get the generic show running-config; any other value is refused by name
hammerhead collect [OPTIONS] --inventory <INVENTORY> --out <OUT>
endpointsEndpoint attribution: merge ARP / CAM / LLDP JSON dumps and emit one (mac, ips, switch, port, vlan, is_lldp?) row per endpoint
hammerhead endpoints [OPTIONS] --arp <ARP> --cam <CAM>
snapshot-pruneApply a YAML TTL policy to a snapshot store. --dry-run computes the same plan without mutating the store
hammerhead snapshot-prune [OPTIONS] --root <ROOT> --ttl-policy <TTL_POLICY>
alertsOperator surface for the alert lifecycle engine: list / show / ack / silence / resolve / watch (SSE) / history over the API (--api-url or HAMMERHEAD_API_URL, bearer via HAMMERHEAD_API_TOKEN). list --fail-on-firing exits 2 when any alert is firing — the CI contract
hammerhead alerts [OPTIONS] <COMMAND>
monitorLong-running scheduler daemon: fires cron jobs (collect / snapshot / policy / drift / observe / runbook) from a schedule YAML with a crash-safe journal, and POSTs job outcomes to the API's /ingest/observations when --api-url is set. --once evaluates a single tick; --dry-run prints the plan without executing
hammerhead monitor [OPTIONS] --schedule <SCHEDULE>
observeOne operational-state poll cycle over the inventory (per-row observe: transports: TCP/ICMP/SNMP/gNMI/controller REST), emitting observation events locally (--format json is the ingest wire format) or pushing them via --push-url
hammerhead observe [OPTIONS] --inventory <INVENTORY>
remediateAir-gapped manual remediation loop: emit-request builds a Config Studio request from an event, gate runs the strict preflight + gate-under-failure on a candidate (exit 2 on fail), verify checks drift-clean + alert-cleared (exit 2 when not verified)
hammerhead remediate [OPTIONS] <COMMAND>
Integrations & automation6 commands
CommandWhat it does, and usage
mcp-serveServe the simulated network as a Model Context Protocol (MCP) endpoint over stdio so an AI agent (Claude, Cursor, …) can answer questions grounded in the digital twin
hammerhead mcp-serve [OPTIONS] --config-dir <CONFIG_DIR>
hooks-validateValidate a hooks YAML file: warns on missing endpoints, missing secret_ref where required, or bad regex in trigger conditions
hammerhead hooks-validate [OPTIONS] --hooks <HOOKS>
hooks-planCompute the dispatch plan for a set of canned events without firing any HTTP/SMTP traffic. Useful for previewing what would be sent to ServiceNow / PagerDuty / Slack on a real failure
hammerhead hooks-plan [OPTIONS] --hooks <HOOKS>
hooks-fireFire a dispatch plan against live endpoints. Defaults to dry-run unless the binary was built with --features hooks-live (HTTP) or --features hooks-live-smtp (SMTP) on hammerhead-cli
hammerhead hooks-fire [OPTIONS] --hooks <HOOKS>
runbook-runExecute an event-driven runbook YAML. Walks the steps in order, shells out to hammerhead for each verb, captures stdout, substitutes $VAR references, and emits a single RunbookExecution record. MVP: sequential only, no parallel fan-out / no retries / no state persistence
hammerhead runbook-run [OPTIONS] --runbook <RUNBOOK_PATH>
runbook-validateValidate a runbook YAML — checks step kinds, duplicate names, and $VAR resolution. Exits non-zero on issues so the command is wirable as a CI gate
hammerhead runbook-validate [OPTIONS] --runbook <RUNBOOK_PATH>

Python SDK

The hammerhead Python package (Python 3.9+, uses pandas) comes with access as a source distribution. It is not on PyPI.

pip install ./hammerhead-python

The SDK drives the hammerhead binary and reads its JSON output, so a notebook and the CLI always give the same answer. It finds the binary on your PATH, or you pass Hammerhead(binary="/path/to/hammerhead").

from hammerhead import Hammerhead

hh = Hammerhead().load_snapshot("configs/")
hh.reachability("R1", "1.1.1.1", "3.3.3.3")   # True
hh.traceroute("R1", "1.1.1.1", "3.3.3.3")     # TracerouteResult: Delivered, 1 hop
hh.routes(device="R1")                         # DataFrame: device, prefix, protocol, next_hop_ip, egress_interface

Methods: load_snapshot, simulate, routes, traceroute, reachability, diff, diff_routes, loops, failure_analysis, spof_scan, policy_check, nqe_routes, nqe_devices, nqe_paths, acl_audit.

Jupyter tutorials

Nine notebooks come with the SDK: Getting started · Pandas essentials for network analysis · Route analysis · BGP analysis · Traceroute and reachability · Change validation · Detecting configuration drift · ACL and firewall analysis · SDK cookbook.

REST API

hammerhead-api serves the same engine over HTTP. It binds to 127.0.0.1:8080 by default and will not start until you name the config directories it may read (HAMMERHEAD_API_ALLOWED_ROOTS). Request bodies are capped at 2 MB.

Authentication

Protected routes take a bearer JWT from your identity provider. Configure the issuer and audience (HAMMERHEAD_AUTH_JWT_ISSUER, HAMMERHEAD_AUTH_JWT_AUDIENCE) and exactly one key source: an HS256 secret, an RS256 public key file, or a JWKS URL. Tokens map to three roles, viewer < operator < admin. With no JWT settings, every protected route returns 401. There is no OIDC discovery and no native SAML or SCIM; use an identity bridge such as Keycloak or Auth0 for those.

Routes

56 routes. Analysis routes are rate-limited.

NeedsRoutes
viewer · analysisPOST /parse POST /topo POST /topo/l2 POST /device POST /endpoints POST /traceroute POST /traceroute/explain POST /reachability POST /rib POST /fib POST /loops POST /acl-audit POST /audits GET /segments
operator · analysisPOST /simulate POST /diff POST /preflight POST /search POST /snapshots/route-diff
viewerPOST /stream/ticket GET /estates GET /alerts GET /alerts/history GET /alerts/:fingerprint GET /observations GET /remediation/cases GET /remediation/cases/:id GET /snapshots GET /snapshots/:id GET /snapshots/:id/devices/:hostname GET /health
operatorPOST /alerts/:fingerprint/ack POST /alerts/:fingerprint/silence POST /alerts/:fingerprint/resolve POST /ingest/alertmanager POST /ingest/observations POST /remediation/cases/:id/approve POST /remediation/cases/:id/verify POST /status POST /snapshots POST /snapshots/diff
adminGET /audit GET /audit/verify POST /snapshots/prune
no token: UI and healthGET / GET /ui GET /ui/assets/:name GET /classic GET /health/live GET /health/ready GET /health/summary GET /status
stream ticket or tokenGET /stream GET /stream-diff GET /alerts/stream
Config Studio service tokenPOST /remediation/cases/:id/candidate

The UI routes serve the built-in operator console. The streaming routes check a single-use ticket (from POST /stream/ticket) or a bearer token themselves.

CI integration

Hammerhead gates a pipeline through exit codes, so it works in any CI that can run a binary. Keep the base branch's configs in one directory and the proposed ones in another, run preflight, and let a non-zero exit fail the job.

# any CI: fail the job unless the change passes
git worktree add ../base "$BASE_SHA"
hammerhead preflight ../base/configs ./configs --format json > preflight.json

# optional: your own rules, YAML; --strict exits 2 on a high or critical failure
hammerhead policy-check --config-dir ./configs --policies network-policy.yaml --strict

Teams with access also get:

  • GitHub Action. A composite action that runs preflight on a pull request and posts the verdict as a comment. Inputs include config-dir, base-config-dir, max-blast-radius (default 5%) and policy; outputs include gate-verdict, gate-exit-code, gate-blockers, changed-routes and lost-flow-count. It needs a token that can read the private release.
  • GitLab CI template. Fails the pipeline unless the verdict is exactly pass, and can post the result to a ServiceNow change record.
  • Ansible. A role for pre_tasks gating, and an Event-Driven Ansible source.

We have no Jenkins example yet; the plain-CLI pattern above works there.

Environment

VariableUsed byPurpose
HAMMERHEAD_API_BINDhammerhead-apiListen address; default 127.0.0.1:8080
HAMMERHEAD_API_ALLOWED_ROOTShammerhead-apiConfig directories the server may read; required
HAMMERHEAD_AUTH_JWT_*hammerhead-apiIssuer, audience and key source for bearer tokens
HAMMERHEAD_AUDIT_DIRhammerhead-apiTurns on the hash-chained audit trail (see Security)
HAMMERHEAD_API_URL, HAMMERHEAD_API_TOKENCLI alerts, observeWhere the CLI reaches your API server, and its token
HH_CONNECT_SECRETCLI connectSecret for the onboarding wizard when run non-interactively in CI

Questions these docs don't answer: ask us, and we will add the answer here.

How we rebuilt 134 outages, and what "flagged" means

We say Hammerhead flags the cause of 134 outages rebuilt from the public record. This page says how the rebuilds were made, what counts as a flag, and what the number does not show.

Methodology · September 2026

The claim, exactly

We rebuilt 134 network outages from public reports. For each, we ran the change behind it through Hammerhead. Every one ends in a failing verdict or an audit finding whose stated reason is the cause the public record gives, some only once you declare facts about your network, as described below.

Three things the claim is not:

  • It is not the operators' configurations. None of them is public. Every rebuild is our reconstruction.
  • It is not a claim that Hammerhead would have prevented any of these outages.
  • It is not a blind test. See what it doesn't show.

Which outages

Four literature searches produced 314 incidents. We sorted each by whether its cause lives where Hammerhead looks, in device configuration or a command run against it: 73 were in scope, 88 partly in scope and 153 out of scope. Of the 161 in or partly in scope, we rebuilt 134 and excluded 27, each exclusion with a written reason.

Each incident carries a search-confidence grade for how well its public record supports the facts we used. For the 134: 72 high, 56 medium, 6 low. Not every entry has been re-checked against its sources since it was first catalogued.

How we rebuild one

  1. Facts. A write-up of the public record, quoted and cited, with our own choices kept apart under a separate heading of assumptions. 125 of the 134 list their sources in the catalog; the other 9, built by hand, cite them in their own write-ups.
  2. The smallest network with the same failure. Usually a before and an after directory of configs, often with a control case beside it. Topology and syntax are ours. Where many incidents share a mechanism, such as route leaks, the networks are generated from a template for that family.
  3. The change. The difference between before and after. One exception: Microsoft's 2023 WAN outage was caused by a command, not a config line, so that rebuild feeds Hammerhead the command. Microsoft never named the vendor or the command, so we assumed both.

No outside party has checked that our rebuilds match the public reports. The full catalog, with each incident's sources and assumptions, is available to evaluators on request.

What "flagged the cause" means

A flag is a failing result where the check that fired names the reason the network actually broke. A failure for some other reason does not count. Automated tests pin both the verdict and the text of the reason for every one of the 134, and they run on every change to Hammerhead, on Linux and macOS.

Four kinds of run count:

RunWhat fires
preflight on the changeA fail verdict (exit 2) naming the lost flow, route, adjacency or rule.
Intent-check library auditA finding on the configuration itself.
rpki-auditA route origin authorization that lets a forged origin validate.
driftA semantic difference from the golden config.

Details that matter:

  • 30 of the 134 are flagged by auditing the configuration, not by a verdict on a change. These are the accepting-network (18), layer-2 (8) and redundancy (4) families.
  • The size gate never counts. Every replay runs with the blast-radius gate turned off (--max-blast-radius 100). On a four-router lab almost any change exceeds the default 5% of devices, which would "catch" everything for the wrong reason.
  • Some catches need facts you supply. Several families are caught only once you declare your network boundary, your ROAs or your link capacities. Of 28 route mis-originations, 17 pass with a caveat when checked from the originating router with nothing declared. Microsoft 2023 is caught only when the command is listed; the same command on Cisco IOS returns unknown.

What the number doesn't show

The 134 were caught after fixes. On the first run, many verdicts were pass. We changed Hammerhead until each was caught, and every fix started as a failing test. The 134 are a regression suite we built the tool against, not a sample it had never seen. They show Hammerhead can represent and flag these failure modes. They do not estimate how often it would catch the next outage.

Some causes sit partly outside any configuration, and the public record says so:

  • Facebook, 2021. The withdrawal of the DNS servers' routes came from software reacting to a health check. It is in no config.
  • CenturyLink, 2020. The Flowspec rule was injected over BGP by a DDoS-mitigation system, not written into a device config.
  • Microsoft WAN, 2023. Vendor and command assumed, as above. The timing of the resulting storm is not modeled.
  • AS 7007, 1997. We rebuilt the mechanism usually taught, which has not been confirmed.
  • OVH, 2021. The mechanism is our assumption.

False positives on healthy configs

We have not measured a false-positive rate. We have no measurement of how often Hammerhead fails a healthy change, and we won't quote one until we do.

What exists instead:

  • The replay tests pin 52 passing results, 46 of them from preflight. Among them are 11 intended changes that keep required flows, 4 healthy redundancy variants and 3 RPKI controls. Others are known misses, such as the 17 mis-originations above, not controls. We wrote all of them alongside the replays, so they are expectations, not a sample of real changes.
  • Known false failures, written down and not yet fixed: a description-only edit on a BGP neighbor still fails a gate, and the default blast-radius gate trips on almost any change to a small network.

Until we have measured it on real change histories, treat the rate at which Hammerhead fails a healthy change as unknown.

The 134, by family

FamilyCount
BGP mis-origination28
Individual rebuilds23
Route leaks20
Accepting network18
Built by hand15
Required flow13
Layer 28
Redundancy4
RPKI drift3
Other: Cloudflare 2013 (Flowspec), F-root 2011 (IPv6)2
Total134

The accepting-network, layer-2 and redundancy families are flagged by auditing the configuration. The rest are flagged by preflight, rpki-audit or drift on the change.

Our other numbers

135 of 136 routes match real routers

A lab of 10 routers running FRR 10.7.1 in containers, with the image pinned. We wait until every adjacency is up and every routing table has been unchanged for 60 seconds, then compare 136 route entries with Hammerhead's: every prefix matches, and 135 of 136 next hops. The lab is re-run every week and compared against the committed result; it does not gate merges. It is one topology on one routing stack, not production hardware, and not the other vendors we parse.

Checked against Batfish across 351 test snapshots

351 snapshots (2,040 devices) drawn from our test corpora, demos and generated topologies, not customer networks. Batfish and Hammerhead agree on 94.41% of prefixes and 99.80% of egress interfaces, for IPv4 in the default VRF. It is a comparison with another model, not with routers, and it runs weekly as a report. We quote no speed comparison with Batfish.

Questions about any of this, or want to run a replay yourself? Request access and ask for the catalog.

Checking network changes before they ship

A short white paper on what Hammerhead does, why it works from configuration rather than probes, how we measure it, and where it stops.

Optimesh Technologies · version 1 · September 2026 · about 8 minutes

1. The problem

A network change ships as a diff a colleague has read. The test is production. When the diff is wrong, the outage follows a familiar shape: Facebook in 2021, when a maintenance command withdrew the routes to its DNS servers, and Rogers in 2022, when a change that removed a routing filter took a national network down for most of a day. Different companies and equipment; the same pattern of a change that looked fine in review.

Most of the cost of such a night is not the fix, which is often one line. It is finding that line across a fabric, hop by hop, under pressure. And the rate of change is rising as automation, and now AI agents, propose changes faster than people can read them.

2. Why testing the live network misses it

A probe proves a path exists. Nothing you can send proves a path is absent. To show that a guest network can never reach a payment database, you would have to try every source, destination, port and protocol, a space far too large to sample. Monitoring checks the flows you thought of; the leak lives in the one you didn't.

The configuration already holds the answer. Configs, topology and routing protocols determine each device's forwarding table. Rebuild those tables faithfully and you can answer reachability for every packet from the model, before the change is applied, with no traffic sent. This is the line of work that runs from header space analysis through Veriflow and Batfish.

3. The approach

Hammerhead is a single binary that reads a directory of device configs, discovers the topology, runs the routing protocols to convergence and builds every device's forwarding table. Queries run against that model: reachability, traceroute, every ECMP path, ACL and NAT behavior, and a before-and-after comparison of two config sets.

  • Deterministic. The same inputs give the same answer and the same evidence every run.
  • Offline. It needs only the config files. It runs on your hardware and sends nothing out.
  • Fast enough for every change. On a 976-device synthetic enterprise network, building the full model takes about 0.6 seconds on our benchmark machine, which is what lets it sit in a pull request instead of a quarterly audit.

A language model can write the change; Hammerhead doesn't trust it. The check that decides is deterministic and never sees the model's confidence, so an AI-proposed change is held to the same test as a human one.

4. Four verdicts, and a list of what wasn't checked

The preflight check compares the network before and after a change and returns one of four verdicts: pass, advisory (findings to read, nothing failed), fail (with the lost flows, routes, adjacencies or rules named) or unknown. Unknown matters most. When a change touches something the model does not cover, Hammerhead says so and names it, rather than reporting a pass it cannot back. Each verdict carries a ledger of what was and was not measured.

5. How we measure it

  • Against real routers. In a 10-router FRR lab, Hammerhead's routes agree with the routers' on every prefix and on 135 of 136 next hops. The lab re-runs weekly.
  • Against Batfish. Across 351 test snapshots (2,040 devices), the two agree on 94.41% of prefixes and 99.80% of egress interfaces, for IPv4 in the default VRF. This compares two models, not a model with routers.
  • Against the public record. We rebuilt 134 outages from public reports, and Hammerhead flags the cause of each. These were caught after we fixed the tool to catch them, so they are a regression suite, not a blind test, and we have not yet measured how often Hammerhead fails a healthy change. The methodology has the details.

6. Where it fits

  • In CI. Run preflight on every pull request that touches config. A non-zero exit stops the merge.
  • In the change ticket. The verdict and its reasons travel with the change, so the approver decides on evidence.
  • In front of automation. Ansible and AI agents propose; the gate decides before anything reaches a device.

7. Limits

Hammerhead models what the configs say, not what the network is doing right now. It reads 15 vendor formats, at different depths; some protocols and features are partial or not modeled, and the supported platforms table lists each. It has been checked against real routers in container labs only, not on production hardware. We have no public customer references yet.

Security

Where Hammerhead runs, what it touches, who can use it, what it records, and what it does not do yet. This page covers Hammerhead, RuleHawk and this website.

Last updated September 28, 2026

Config Studio is not covered here yet. Its AI step uses a large language model. Before you evaluate it, ask us where it runs and where your data goes, and we will answer in writing.

Where it runs

  • On your machines. The hammerhead CLI and the optional hammerhead-api server run on hosts you control. Your configs stay there.
  • Nothing phones home. There is no telemetry, license check or update check. Hammerhead makes a network call only when you turn on a feature that needs one: collecting configs over SSH or SNMP, pulling from a cloud API or your config manager, fetching your identity provider's signing keys, or sending webhooks you configured.
  • Air-gap ready. Analysis needs only the config files. To install on an isolated network, copy the binary across.
  • Private by default. The API server listens on 127.0.0.1 unless you bind it elsewhere, and reads only the config directories you allow.

Changes to your devices

Hammerhead reads configs. It never pushes configuration to a device and holds no device write credentials. SSH collection runs read commands such as show running-config.

When Hammerhead proposes a fix, it hands a gated change plus a rollback file to your own automation, as an Ansible bundle for your AWX or Ansible to run. A human approves by default. Rollback is a file you apply, not an automatic action.

SSO and roles

  • The API server accepts bearer JWTs issued by your identity provider. You set the issuer, the audience and one key source: an HS256 secret, an RS256 public key, or a JWKS URL.
  • Three roles, viewer, operator and admin, are enforced route by route (see the API docs). With no token settings, every protected route refuses access.
  • Not built in: OIDC discovery, SAML and SCIM. Teams use an identity bridge such as Keycloak or Auth0 for those.
  • The CLI has no roles. It runs as the operating-system user and reads what that user can read. Control it with OS and file permissions.

Audit trail

Set HAMMERHEAD_AUDIT_DIR and the API server keeps an append-only audit log:

  • Every request that changes state, with who made it, what it asked for and the outcome, plus every denied request (401 and 403).
  • Each entry carries the SHA-256 hash of the one before it. Editing or deleting an entry breaks the chain, and GET /audit/verify (admin) reports where.
  • It never records authorization headers, query strings or request bodies. Each tenant gets its own chain.

Limits: a hash chain cannot show that the newest entries were cut off, so copy the latest hash somewhere you control. The trail covers work done through the Hammerhead server, not CLI runs on a laptop. It is off until you set the directory, except on multi-tenant servers, where it is required.

Compliance checks

Hammerhead ships rule packs that approximate these frameworks, checked offline against the model of your network with no AI model involved:

CIS (network devices, level 1) · PCI DSS (DMZ) · SOC 2 (change control) · HIPAA · ISO/IEC 27001 · NIST CSF 2.0 · DORA · NIS2

Each pack lists the controls it does not cover. They are checks labeled with control IDs, not certified mappings: passing one is evidence you can hand an auditor, not a certification. There are no DISA STIG or NERC CIP packs yet. You can write your own rules in the same YAML format with policy-check.

The software itself

  • Hammerhead is written in Rust, and the compiler forbids unsafe code in the product. The only unsafe blocks are in test and benchmark tooling.
  • Release archives come with SHA-256 checksums. They are not code-signed yet, and neither is the container image.

RuleHawk

RuleHawk analyzes your rules inside your browser, in a background worker running Python compiled to WebAssembly (Pyodide). The config you paste is not sent anywhere; the code that does this is public on GitHub under the Apache 2.0 license. The page is hosted on GitHub Pages and loads fonts from Google Fonts and Pyodide from the jsDelivr CDN, so those services see that you loaded it. To keep everything on your own machine, run the RuleHawk command line or its GitHub Action instead.

This website

No analytics, advertising or tracking scripts, and no cookies. The page loads only files from optimesh.ai, enforced by a Content-Security-Policy header. The request and message forms post to our host, Netlify. Details in the privacy notice.

Report a vulnerability

Email eng@optimesh.ai with a subject starting SECURITY:. If you hear nothing, escalate to hello@optimesh.ai. We don't publish a PGP key yet; if you need an encrypted channel, send a first email with the subject SECURITY: request encrypted channel and nothing sensitive in it, and we will set one up.

StepTarget
A person acknowledges your report2 business days
Reproduced or not, severity assigned5 business days
Status updates while openat least every 10 business days
Fix or documented mitigation, critical14 days from triage
Fix or documented mitigation, high30 days from triage
Medium and lownext scheduled release

Please redact real device configs before sending anything: hostnames, public addresses, ASNs, keys and secrets.

Privacy notice

What we collect when you use optimesh.ai or our tools, and what we do with it. The short version: only what you type into our forms, plus the request logs our host keeps.

Last updated September 28, 2026

"We" means Optimesh Technologies. Questions go to contact@optimesh.ai.

What this website collects

  • What you send us. The request-access form asks for your name, work email, company, network size, the product you're asking about and a message. The message form asks for your name, email, a subject and a message. Both are stored by our host, Netlify, and delivered to our team. If the form can't reach Netlify, your browser opens an email to us instead.
  • Request logs. Netlify serves this site and, like any web host, logs requests: IP address, browser, the page requested and when. Netlify handles these under its privacy policy.
  • Nothing else. No analytics, advertising or tracking scripts, and no cookies. The site loads no files from other domains.

How we use it

We use what you send to reply to you and to handle your request for access. We don't sell it, and we don't share it with anyone for their marketing. We keep it while we are talking with you and for as long as any relationship that follows needs it. Ask us and we will delete it.

Our products

  • Hammerhead runs on your machines and sends us nothing: no telemetry, no usage data, no configs. See Security.
  • RuleHawk analyzes your rules inside your browser; the config you paste is not sent to us or anyone else. The page is hosted on GitHub Pages and loads fonts from Google Fonts and code from the jsDelivr CDN, so GitHub, Google and jsDelivr see that you loaded it, under their own policies.
  • Config Studio is set up per engagement. We describe its data flows in writing before you evaluate it.

Your choices

You can ask us what we hold about you, correct it, or have it deleted, by emailing contact@optimesh.ai. Links to other sites, such as GitHub or NVIDIA, are governed by those sites' own policies. If this notice changes, we will update the date at the top.

Terms of use

The terms for using optimesh.ai.

Last updated September 28, 2026

What these terms cover

These terms cover your use of this website, run by Optimesh Technologies ("we"). Hammerhead, Config Studio and other Optimesh software are licensed only under a separate written agreement with us. Nothing on this site grants a license to them.

Site content

The site describes our products and research for information. We work to keep it accurate and say how our figures were measured (see the methodology), but products change and the site may lag behind. Demos run on small synthetic labs, as each one says. Nothing here is a promise of results on your network.

The site's text, design and our product names and logos belong to us. Other names and logos belong to their owners and are used only to identify them.

RuleHawk

RuleHawk is free and open source under the Apache License 2.0, which governs its use and says it comes without warranty. Its findings help you review rules; they don't replace your own review before you change a firewall.

Using the site

Please don't attempt to disrupt or break into the site, and don't send us, through our forms, other people's personal information without their permission, or anything malicious. If you find a security problem, report it as described on the Security page.

No warranty

The site is provided as is, without warranties of any kind. To the extent the law allows, we are not liable for any loss arising from your use of the site or reliance on its content.

If these terms change, we will update the date at the top. Questions: contact@optimesh.ai.

Contact

Get in touch.

Questions about Optimesh, your network, or partnering with us? Reach out and you'll get a real person on the founding team, usually within a business day.

Request access → Email the team

Prove your next change safe.

Bring one recurring network incident. We'll diagnose it, patch it, and prove the fix — on your configs, in your environment.

Blue Ethernet cables connected to numbered ports on a network switch

The trust layer for
autonomous infrastructure.

Deterministic verification for every AI-driven infrastructure change.

© 2026 Optimesh Technologies. All rights reserved.Privacy · Terms · Security