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

The verification layer for autonomous infrastructure.

AI can draft a network change in seconds. A bad change can still disrupt service or open an unintended path. Optimesh models the resulting network state before the change ships and reports what passed, what needs review, what failed, and what could not be checked.

See why a change gets blocked ↓ RuleHawk is our free firewall-rule auditor. It runs in your browser, no sign-up.

AI proposes. Optimesh verifies.

Hammerhead builds before-and-after forwarding models from the configurations you provide. It compares routes, flows, and policy outcomes, then returns PASS, ADVISORY, FAIL, or UNKNOWN with the reason.

Just ask

Draft and verify a network change in one workflow.

Describe the intent in plain English. Config Studio drafts a reviewable change. Hammerhead independently evaluates what that change does to the network.

Reviewable changes. The request becomes a concrete configuration diff with a verdict and the evidence behind it.
Independent checks. Config Studio uses a language model to propose the change. Hammerhead checks the proposed state against its current network model.
Config Studio · chat
Ask Config Studio to make a change…
Example change review

Review the proposed change and the verification result together.

Config Studio · illustrative workflowsynthetic demo · 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
Illustrative dashboardSynthetic data · not customer activity

See the network impact before deployment.

Optimesh compares the current and proposed network states before deployment, then returns a reproducible verdict with the routes, flows, and rules behind it.

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
simulatesupported paths on configuration-derived topology  ✓ complete
checksreachability 8/8 · isolation ✓ · loops ✓ · acl ✗
✗BLOCKED. app-sg → 0.0.0.0/0 opens on line 42. The merge is stopped and the failed check is attached to the review.
Product architecture

Hammerhead is the verification engine behind each workflow.

Verification engine · Hammerhead

Deterministic network analysis

Build current and proposed forwarding models from supported configuration, then compare routes, paths, reachability, and policy behavior.

  • In a pinned 10-router FRR container lab, all 136 prefixes and 135 of 136 next hops matched. How
  • Deterministic output with a reproducible evidence record for each run
  • CLI, Python SDK, REST API, CI integration and Jupyter. Docs
Application · Config Studio

AI-assisted remediation

Config Studio uses a language model to diagnose a network issue and draft a candidate diff. Hammerhead checks the resulting state against the behavior it currently models.

  • Generation and verification run as separate steps
  • Produces small configuration diffs for human review
  • Deployment architecture and model data flows are documented during evaluation
Preflight results

PASS, ADVISORY, FAIL, or UNKNOWN.

Hammerhead evaluates supported behavior in the current and proposed models. It returns the routes, flows, rules, and coverage behind each result. If it cannot evaluate a change, it does not guess.

Explicit unknowns. Failed invariants block the workflow. Behavior outside the model is identified for review.
Supporting evidence. Results include the relevant FIB entries, routes, flows, and ACL lines available to each check.
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 model connects supported on-prem, cloud, and Kubernetes policy. Coverage varies by platform and is disclosed in the support matrix.

Expanding coverage

Network verification first. Broader infrastructure next.

Networks are where Optimesh starts. Hammerhead already includes cloud and Kubernetes analysis; the support matrix says exactly how far each model goes today.

Failure and maintenance simulation. Drain a modeled device, drop a link, or withdraw a prefix without touching a live device.
Before-and-after reachability. Compare affected paths, isolated devices, and newly unreachable prefixes.

See the modeled blast radius before deployment.

Trace the supported paths a change puts at risk. Expose a supposedly redundant path that shares the same dependency.

Change detectedimpact · sw-02 · Vlan40
edge sw-01 sw-02 sw-03 web billing orders db carrier-x critical service checkout flow
at risk from this changeshared carrier (fake redundancy)Illustrative topology · sw-02 affects billing + orders · failover shares carrier-x
Pull-request gate

Block failed changes before merge.

Add Optimesh to pull requests that touch supported network configuration. A failed verdict returns a non-zero check, cites the reason, and can block the merge.

Designed for CI. The generated-fabric benchmark shows that verification can fit into a pull-request workflow. Performance in your environment is measured during evaluation.
Evidence in the pull request. The failing flow and rule appear in a comment alongside the diff.
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

ServiceNow and Jira workflows can write a verdict and its evidence back to the change record. The reviewer sees the reachability diff and cited rules without leaving the ticket.

Evidence attached to the record. The verdict, reachability diff, and cited rules remain with the change request.
Informed approvals. The change manager can review modeled impact rather than relying only on the requester’s assessment.
Terraform & CI

Verify the plan, not just the syntax

terraform plan tells you what will change. Optimesh evaluates the supported network consequences and checks the resulting model against declared 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 configuration-derived 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.

Review supported configuration formats, collection methods, and the modeling depth for each protocol. Docs →

Why now

Infrastructure can now change faster than humans can review it.

The bottleneck is no longer writing the change. It is knowing what the change will do.

01

Infrastructure became code.

Cloud APIs, infrastructure-as-code, Kubernetes, CI/CD, and software-defined networks made operational changes addressable through code and APIs.

02

Agents are entering the change path.

They can diagnose incidents, draft configurations, and propose operational changes faster than a human can inspect every command.

03

Review was not built for machine speed.

Peer review evaluates intent. Tickets record authorization. Monitoring observes production. None independently models the consequences before deployment.

04

Networks make the problem concrete.

A local configuration edit can change forwarding behavior several hops away. Independent verification has to work here first.

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 APIAll 136 prefixes and 135 of 136 next hops matched in a 10-router FRR container lab; 134 incidents reconstructed into a regression suite
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 supplied configurations without requiring live-device telemetry or deploying the change; of the products above, only Batfish also works this way. It returns “unknown” and names the unsupported behavior instead of passing. It can run entirely on your hardware.

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

Start with networks. Expand where agents act.

Today · Networks

Verify supported network changes

Hammerhead models network configuration and evaluates proposed changes against declared reachability and policy checks.

Next · Infrastructure

Deepen cloud, Kubernetes, and IaC coverage

Expand capability by capability, only where the model can produce useful evidence and disclose its limits.

Long term · Agents

Verify autonomous infrastructure actions

Give infrastructure agents an independent verifier across domains. This is the direction, not the current product claim.

Insights

Notes from building an infrastructure verifier.

Network modeling, change evidence, and the control boundary between agent-proposed changes and production.

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.

We reconstructed 134 public incidents. In each reconstruction, Hammerhead produces a failing check tied to the reported cause. This is a regression suite, not a blind test. 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.

A verdict with supporting evidence

Each result is pass, advisory, fail, or unknown, with the reason and any behavior Hammerhead could not evaluate. Your existing approval process remains in place.

A record you can audit

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

A concise change summary

Show affected routes, flows, and services to reviewers who do not need the full configuration diff.

External feedback

Read our insights →

Company

We started with networks because small changes can have system-wide effects.

A configuration edit on one device can alter reachability several hops away. Optimesh began by modeling that behavior accurately enough to evaluate a change, and fast enough to run before deployment.

Newsroom
Read
The team

Experience in networked systems and performance engineering.

The team’s background spans networked systems, performance engineering, and software for environments where failures have real consequences.

Built by engineers from

What exists, and what comes next

The core engine works in our test corpus. Production validation is next.

Built the network model

Hammerhead parses supported configuration, reconstructs routing and forwarding behavior, and compares proposed states.

Next: production evaluations

The next step is to test Hammerhead on customer configurations, healthy historical changes, and real deployment workflows, including how often it blocks a valid change.

Applied it to remediation

Config Studio uses a language model to draft a candidate change. Hammerhead checks the resulting modeled state.

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 verification layer

Each new infrastructure domain needs explicit coverage, useful evidence, and clear unknowns before Optimesh treats it as supported.

Long-term direction

Verification for autonomous infrastructure

Over time, the same architecture can sit between infrastructure agents and the systems they operate. That broader capability is not part of the product today.

What we believe

UNKNOWN is a valid result.

Evidence over confidence

The verifier returns the modeled result, its reasons, and what it could not evaluate. AI confidence does not affect the verdict.

Fast enough for CI

The generated-fabric benchmark shows that the engine can run in a pull-request workflow. Production performance remains an evaluation question.

Your network stays yours

Hammerhead can run entirely on your hardware, including air-gapped environments. Config Studio data flows depend on the deployment.

Hammerhead

The deterministic engine behind Optimesh.

Hammerhead reads supported configuration, runs modeled routing protocols to convergence, and builds each device’s forwarding state. It compares the current and proposed network states without testing changes on live devices.

If a change reaches beyond that model, Hammerhead returns UNKNOWN and names the gap. Missing coverage never becomes a green check.

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.

Regression coverage from public incidents

134 incidents, reconstructed and used to improve the engine.

We rebuilt 134 public network incidents and encoded their failure modes as regression cases. Hammerhead now produces a failing check tied to the stated cause in each reconstruction.

These are our reconstructions, not the operators’ configurations. We changed Hammerhead until the suite passed, so this is not a blind test and does not estimate how often the next incident will be caught. Some cases depend on assumptions or declared facts, and the healthy-change false-positive rate has not been measured. Read the complete methodology →

76 CLI subcommands

Network validation in one CLI.

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.

Review supported configuration formats, collection methods, and the modeling depth for each protocol. “Partial” means the listed behavior is not fully modeled.

Interfaces

CLI, Python SDK, REST API, and CI.

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 authentication, and three roles for programmatic integration. API docs →

CI pipeline

Run a before-and-after check and return the verdict as a merge gate. CI docs →

Jupyter

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

Model and lab comparisons

Compared with Batfish across 351 internal test snapshots and with a pinned 10-router FRR container lab. These are internal measurements, not third-party validation. How →

Config Studio

Config Studio drafts a candidate change. Hammerhead checks the resulting network state.

Config Studio diagnoses a network issue and produces a reviewable diff. The candidate and Hammerhead’s independent result appear together for human review.

Request access →Powered by HammerheadDocs
config-studio · example workflow
Candidate diagnosis
BGP session down · review required
Suspect edge-2. Neighbor ASN mismatch on peer 10.0.4.1.
- remote-as 65099
+ remote-as 65020
✓ Declared Hammerhead checks passed · modeled offline
Review candidateReject
Product architecture

Generation and verification are separate.

The language model drafts the candidate. Hammerhead evaluates it against supported checks before review.

Manual workflow
Review
diagnose, draft, inspect, and test the candidate
→
With Config Studio
Gated
candidate drafted and independently checked
1
Sanitize
input
Remove untrusted instructions hidden in configuration comments before the configuration is sent to the language model.
2
Diagnose
model
Identify a candidate fault and the device or policy involved. The diagnosis remains a proposal.
3
Patch
candidate
Draft a minimal, reviewable configuration diff for the stated intent.
4
Verify
engine
Hammerhead evaluates the resulting modeled state and rejects failed checks before a human reviews the candidate.
Interfaces

Use Config Studio interactively or from a pull request.

/studio

Chat + config editor

A chat connected to 15 network tools and an in-session configuration editor. Ask in plain English, review the proposed diff, and inspect Hammerhead’s result separately.

/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.

Config Studio uses a language model. Its deployment and data flows are specified in writing for each evaluation; the published Hammerhead security model does not yet cover every Config Studio deployment.

RuleHawk · Free

Find risky firewall rules in your browser.

Paste a supported ACL or firewall configuration. RuleHawk flags shadowed, redundant, and overly permissive rules without sending the configuration to Optimesh.

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.

RuleHawk audits the rules you provide. It does not reconstruct end-to-end network behavior or replace Hammerhead change verification.

Start with RuleHawk. Evaluate Hammerhead on your network.

RuleHawk is free and runs in the browser. Hammerhead access begins with a technical evaluation, not 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 configuration-derived 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

All 136 prefixes and 135 of 136 next hops match in the FRR lab

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.

Independent verification for infrastructure change

Why machine-speed infrastructure needs a verifier, how Hammerhead models network consequences from configuration, how we measure it, and where the model 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

Talk to the people building Optimesh.

Bring a network change, a recurring incident, or a hard question about the model. A member of the founding team will respond.

Request access → Email the team

Verify a real network change.

Bring one recurring network incident. We’ll run it against Hammerhead and show you the verdict, evidence, and coverage.

Blue Ethernet cables connected to numbered ports on a network switch

The verification layer for
autonomous infrastructure.

Independent verification between proposed changes and production.

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