← How We Built It
No model call

How we built Standing Watch

Standing Watch isn't a new system — it's a name for six governance disciplines we already run in production, on our own multi-vendor AI estate, as router-watch and security-watch. This page is the case study: the incident that made us build the cross-machine check in the first place, why nothing here is allowed to apply its own fixes, and the two mechanisms (POOL_WEIGHT and the policy self-check we call NEVER_COMPARE) that generalize cleanly to an enterprise estate.

The incident: a fix that was real on one machine and silently absent on the other for 12+ days

Our AI estate runs across two machines — a MacBook and a Mac Mini — talking to five different backends. Security-watch exists because of a specific, real failure mode we hit before it existed: an authentication fix was applied and verified on one machine, and quietly never made it to the second. Nobody was lying about the state of the system; nobody was even looking at the second machine specifically. It just drifted, unauthenticated, for more than 12 days before anything caught it — because nothing was checking both machines identically on a schedule.

That's the exact class of gap security-watch is built to catch: the same behavioral probe — make the real unauthenticated call, read the real HTTP status, don't trust a config file or a dashboard — run identically against every machine in scope, on a schedule, not just against whichever one someone happens to be looking at. The Aug 10, 2026 run in the demo below is a live instance of that same pattern: the JARVIS gateway's authentication was found open again, on schedule, and fixed and re-verified the same day — because the check runs everywhere, every time, not because anyone remembered to look.

Every automation here only proposes. None of them apply their own fixes.

Router-watch and security-watch both produce a dated report and stop. Nothing in either pipeline has write access to the router registry, the SSH config, or the firewall rules it reports on. Every finding is a proposal a human reads and applies by hand — the router-watch report's own footer says it plainly:

This report is a PROPOSAL. No file was modified by this job.
To adopt a swap, hand-edit the router config, run the test suite,
and restart the gateway.

Security-watch works the same way: on the Aug 10 run, 8 of 10 flagged findings were fixed — but each fix was a person reading the finding, applying the change by hand, and then running the same probe again to confirm it actually closed. The automation's only two states are "here's what I found" and "here's what I re-verified after you fixed it" — never "here's what I changed for you."

POOL_WEIGHT: pricing budgets that aren't the same currency

Our router spans a free local model, a Google-billed tier, an OpenRouter credit pool, and a flat-fee Claude subscription — four backends, three genuinely different kinds of money. Comparing them on raw dollars is meaningless: a $0 local call and a $0.03 OpenRouter call aren't equally "free," and a Claude Max call that's already paid for by a flat subscription isn't the same kind of spend as metered OpenRouter credit. The registry prices every model in true dollars, then multiplies by a separate weight for selection only — real cost is never faked:

POOL_WEIGHT = {
    "free": 0.0,          # local hardware; electricity only
    "google": 0.05,       # linked Google billing / free tier
    "openrouter": 1.0,    # real money out of the $30 / 30-day pool
    "claude_max": 1.0,    # flat subscription, but scarce + rate-limited
}

Selection compares cost * POOL_WEIGHT; budgets and logs always record true dollars, never the weighted number. An earlier version of this router faked the comparison a different way — repricing one backend to 5% of its list price to express "this one's cheap to us" — and that corrupted the registry's real prices, fought the price-refresh job, and silently flipped the tier ordering so a premium model auto-won by default. POOL_WEIGHT exists to keep that preference explicit and separate from the number everyone actually gets billed. The enterprise version of this is the same problem at a different scale: bundled SAP AI credits, a Databricks compute commitment, a Workday per-seat add-on, and direct API spend are not the same currency either, and "which platform should run this workload" stays an ungoverned default until something prices them on one basis.

NEVER_COMPARE: the policy checks its own scope, every run

The router's premium, subscription-billed models (Claude Haiku, Sonnet, Opus, Fable) are markedforced_onlyin the registry — a stronger exclusion than "expensive, so deprioritize it." The candidate filter that builds the auto-routing shortlist drops every forced_only model before cost is ever compared, at any complexity or value setting: they simply never enter the contest, and are reachable only by a deliberate, explicit call. Internally we call this discipline NEVER_COMPARE — the policy doesn't just rank those models last, it asserts they were never candidates at all, and the assertion is checked against the registry's live flags rather than assumed to still hold from when the code was written. The client-facing version of the same idea is discipline 3 in Standing Watch (Gate): the highest-blast- radius action category — payment release, master-data change, access grant — isn't "requires approval," it's structurally invisible to the automation layer until a human invokes it on purpose. A guardrail that only ever deprioritizes a dangerous option is one bad default away from picking it; a guardrail that structurally excludes it can't drift there by accident.

What we deliberately didn't automate — and why that's the point

The human-apply step isn't a gap we haven't gotten to yet. It's the design. Router-watch could technically hand-edit the registry itself and restart the gateway; security-watch could technically flip the config flags it reports on. Neither does, on purpose, because the value of a propose-and-approve system is the durable record of a human decision attached to every change — a router swap or a hardening fix that an automation silently applied to itself would still be a change, but it would stop being evidence. The Aug 10 run makes the boundary concrete rather than theoretical: FileVault was left flagged, not fixed, because enabling disk encryption needs Recovery Mode / physical console access — nothing the automation runs with can reach that, so it says so instead of reaching for access it shouldn't have or silently skipping the finding. A separate item that same day — tightening the home router's own firewall rules — was flagged and correctly left alone for the identical reason: it needs the router's own admin UI, not anything scriptable from either machine. Knowing the edge of its own authority, and saying so, is part of the discipline, not a limitation of it.

The scale caveat, stated plainly: this is real, running code — not slideware — but it's personal-scale infrastructure: one operator, two machines, five backends. It is not a Fortune 500 deployment, and we aren't claiming it is. What transfers to a client estate is the discipline (qualify, arbitrate, gate, probe, track, review) and the architecture (report + human-applies, modeled directly on router-watch and security-watch) — not a claim that we've already run this at enterprise scale. We'd rather volunteer that here than have a prospect find it out later.

Labeled benchmark

Run 2026-08-10

Model

No model call — real router-watch and security-watch excerpts

Sample size

Router-watch: 399 models screened, 0 cleared Stage 1. Security-watch: 65 findings across severities, 10 flagged for same-day action (9 in the report, plus one router-firewall item flagged the same day, outside either machine's reach).

Data source

Real, dated excerpts from Tioga AI's own router-watch and security-watch automations, redacted for hostnames/IPs — not synthetic, not a demo dataset. See the full excerpts on the Standing Watch demo.

Security findings fixed & verified

8 of 10 flagged (80%), same session

Findings correctly left for a human

2 of 10 (FileVault; home-router firewall — both outside automation's reach)

Router-watch model catalog scanned

399 models, 0 auto-applied swaps

Automations with write access to live config

0 — every change is human-applied

Limitations

  • This is Tioga's own internal infrastructure, personal-scale (one operator, two machines, five backends) — not a claim about enterprise-scale deployment.
  • The catalog-scan and findings-fixed numbers are from one dated run (Aug 10, 2026), not an ongoing live counter — refreshed periodically, not real-time.
  • Demonstrates the propose-and-approve pattern and its own honesty about scope, not a benchmark of model output quality — there's no task being graded here.