Build1 distinct publisher3 min readPublished
Version 0.2.0 decides admission by propagating integrity labels through a plan's dependency graph. The interesting cost is that the harness now has to declare, before acting, what the agent intends to do.
The Engineer · Build desk
build
Ruff's SIM105 autofix lifts silent failure out of its own linter's jurisdiction1 distinct publisher
build
Agent reliability is a harness problem, not a prompt problem1 distinct publisher
build
A twelve-word joke became a discipline, and one seven-step chain had no loop to remove1 distinct publisher
build
okf-guard puts a rule-based gate where OKF removed the processing layer1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
The join is the core mechanism here, and it is worth looking at first. `evaluate_plan` walks the plan's `depends_on` graph and combines labels componentwise: confidentiality takes the max, integrity takes the min [5]. Min is the half that does the work. An UNTRUSTED value joined with a SYSTEM intent stays UNTRUSTED, so taint does not wash out on the way to the sink [5]. Reads take their label from the path they touch, which is why reading repo text yields UNTRUSTED and reading a system file yields SYSTEM [6]. The propagation works this way regardless of whether a trigger word appears anywhere.
That is the point of the scenario the project added. A plan reads a planted `README.md` and writes `incident-report.md` sourced from `env.SECRET`, with the write depending on the read [9]. The old heuristic sees nothing, because the planted README contains none of its five hard-coded phrases [9][8]. The lattice denies on both axes, integrity from the README and confidentiality from the secret [9]. There is a test that re-runs the v0.1 scan over the materialized repo and asserts it reports no escalation, which is how you keep an eval from being vacuous [10].
Now the part that decides whether you can use it. `run_admission()` takes an explicit description of what the agent proposes to do and returns a verdict with a reason [2], and the planner emits one Plan per query [15]. The plan is supplied rather than observed: it is a library you call, and it does not watch a live agent the way a runtime firewall would [3]. So the verdict is exactly as complete as the dependency graph the planner declared, and the planner is the same component reading untrusted web pages, docs and tool output while holding authority over deploy keys and secret stores [20]. Two things have to hold in your harness before the lattice means anything: plan emission has to be harder to corrupt than action selection, and nothing may execute outside the admitted plan. Both conditions sit outside anything the library itself can guarantee.
On coverage, the numbers are small and stated. The suite covers three scenarios [11]. The harness study the post cites evaluated 13 attack objectives across 6 real coding-agent frameworks [14]. Three over thirteen is 23 percent [19], and only if each scenario maps to a distinct objective, which the post does not claim. Read the three passing tests as evidence that the mechanism behaves as described, not as a detection rate.
The audit is the best-engineered thing in the release. A fresh clone in a clean venv reproduced a defect introduced during the build: `_step_initial_label` returned (PUBLIC, SYSTEM) for every read, so propagation through `depends_on` only worked because of magic prefixes baked into `value_source` [16]. That is the standard way a taint tracker passes its own tests, with the fixtures carrying the labels the code failed to derive. The fix classifies the read by path, and a regression test now fails if the bug returns [17]. The audit also caught the CI regression the fix caused, a bandit B108 finding and a missed `ruff format`, both closed before merge [18].
One housekeeping note. The three papers the argument rests on are cited as arXiv:2608.27234, arXiv:2608.27141 and arXiv:2608.27299 [12][13][14], all sharing the 2608 prefix [21]. Resolve them yourself before you repeat the framing downstream.
Ranked by verification strength, evidence, and original report placement.
The test test_v01_would_have_missed_this re-runs the v0.1 scan over the materialized repo and confirms escalation_detected is False, which the author offers as proof the eval is non-vacuous.
The test suite covers 3 scenarios: the 2 Signetry IPI scenarios (README injection and CLAUDE.md scope expansion) plus the project's own secret-leak scenario, and each has a test proving v0.1 would have let it through while the new engine does not.
agent-harness-defense v0.2.0 is described as an open, offline-verifiable admission layer that stops instruction-privilege escalation in coding agents by enforcing a plan-first information-flow policy, and as a research prototype with a rigorous audit rather than a turnkey production defense.
Before a change is applied, the caller invokes run_admission() with an explicit description of what the agent proposes to do, and it returns a verdict: admit this, deny that, and why.
The tool is not a runtime firewall watching a live agent; it is a library that the integrator or the harness invokes.
The decision core is a dual-lattice information-flow control engine in which each datum in the plan carries two labels, confidentiality (is it secret) and integrity (do we trust who put it there).
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Checkable in principle, attested by one hand
The mechanism is specified tightly enough to argue with — named functions, the join rule, path-based read labels — and the negative-control test that re-runs the old scan over the planted repo is a genuine falsification attempt rather than a screenshot. But every one of those details reaches us through the author's own dev.to post, the auditor who found the (PUBLIC, SYSTEM) defect is unnamed, and the three preprints carrying the threat model sit outside this reporting entirely.
Zero flight hours, stated by the author
This is as close to a measured zero as adoption gets: a v0.2.0 tag, no real agent behind it, no production traffic, and not even a worked example for LangChain or an MCP harness. The author volunteers all three facts. Whatever the lattice is worth, nobody has yet made it deny anything outside a test fixture.
The limitations section does the skeptic's work
The headline verb is 'stops', which three literal-English scenarios cannot carry. Everything after it pulls the other way: prototype not product, propagation over what is declared rather than what exists on disk, no cross-iteration state, no flight hours, and an admission that the caller-supplied Plan is the weak joint. Read whole, the post concedes more than a critic would have extracted from it, which is the rarer failure mode.
Author, evaluator and baseline-picker are one person
The structural pressure here is not money, it is scorekeeping. The benchmark the new engine beats is the author's own v0.1 heuristic, and every scenario was written by the person whose engine is being tested — a contest whose result was available before it ran. The developer-platform venue rewards a clean before-and-after story. Offsetting that: the post publishes a bug in its own core and the CI fallout from fixing it, which is not what promotional writing does.
One publisher, one author, open code
We are confident about what was said and much less about what it means. Nothing here is corroborated — single publisher, single author, unnamed auditor, uncheckable citations — but the subject is open source and offline-verifiable, so the technical claims are the kind anyone can settle by cloning. That combination caps our confidence without making the story doubtful.