Skip to content

Topic path · 01 of 04Updated

Agent reliability

Agent failures can appear as rejected requests, lost instructions, invalid schemas, or misleading evaluation errors. Each has a verified upstream fix.

4 merged upstream fixes · 4 case studies · 4 tools · 2 papers

Claim 01

Hermes Labs contributed 4 documented fixes that are merged in upstream AI frameworks; the case studies preserve earlier reports and maintainer attribution.

In LangChain, binding tools with a forced tool choice while extended thinking was enabled produced a request the Anthropic API rejected. The agent did not degrade; it failed with a 400 that pointed at the model rather than at the binding layer. The fix is merged.

In Microsoft Semantic Kernel, the chat-history truncation reducer removed the system prompt along with old turns once a conversation grew past its window. The agent kept answering, without the instructions it was built around. Nothing in the transcript recorded that the constraint had gone. The fix is merged.

In Semantic Kernel’s .NET schema handling, an existing null type could be duplicated because the check used reference equality. In DSPy, an empty evaluation dataset reached a division by zero instead of explaining the invalid input. Both fixes include regression tests in the merged upstream patches.

What this does not show

The 4 case studies document specific runtime defects and their fixes. The full record links all 48 merged code and documentation contributions, including compatibility, maintenance, and typing improvements.

Claim 02

Some agent failures are visible before the agent runs, in the configuration, tool descriptions, and system prompts.

lintlang reads agent configuration statically. There is no model call in its analysis path, so its findings are reproducible and cost nothing to run on every commit.

H1.6 adds pairwise differentia analysis: it compares tool descriptions within one parsed input and reports when one or both lack distinguishing wording.

LintLang 0.6.0 includes deterministic SARIF 2.1.0 output and a GitHub Action path for GitHub Code Scanning, so findings can be uploaded for code review.

It reports deterministic findings separately from heuristic ones, which matters because the two carry different weight in a review. A deterministic finding is a fact about the file. A heuristic finding is a suggestion that a human still has to judge.

What this does not show

Deterministic and heuristic findings are reported separately, and neither proves runtime safety. A configuration that lints clean can still fail under load, under adversarial input, or against a model whose behavior has changed.

Claim 03

What an agent actually did during a run can be recorded as evidence rather than reconstructed afterward from memory.

agent-gorgon observes file, network, and subprocess activity while an agent session runs, scores it against policy, and writes forensic records of what happened. The decisions it makes are deterministic, so the same observed behavior produces the same verdict.

The point is not prevention. It is that after an incident there is a record to read, instead of an argument about what the agent probably did.

What this does not show

This is reactive user-space monitoring. It is not a sandbox and not a prevention guarantee: it can tell you a policy was violated, not stop the violation from occurring.

Claim 04

Untrusted input can be probed with a sacrificial model before the primary model is allowed to act on it.

little-canary uses a powerless sacrificial-model probe to make prompt injection observable before the primary model is allowed to act. Behavioral Canarying represents routing disposition separately from inspection coverage, so a route decision cannot be mistaken for evidence that inspection actually ran.

hermes-jailbench covers the adjacent question: whether a known attack pattern that used to fail against your endpoint still fails. It scores without an LLM in the scoring path, so a regression run is repeatable.

What this does not show

Behavioral Canarying is a bounded sensing architecture. Current public evidence does not establish universal detection, formal security, or aggregate accuracy. little-canary remains experimental, and hermes-jailbench is a specialist regression tool rather than certification.

Claim 05

The failure class these tools address has a published name and a definition that does not depend on the tools.

Silent Instruction Relaxation — an instruction quietly deprioritized when two cannot both be satisfied — is one of seven modes named in the taxonomy paper, derived from 1,461 controlled experiments conducted primarily on GPT-4o.

The Semantic Kernel defect produced the same operational failure shape — an instruction ceased to bind behavior without an adequate runtime signal — but by a different mechanism: the framework removed the instruction before generation.

What this does not show

The taxonomy is descriptive, not a detector, and its corpus was run primarily on one model family. It does not establish how often any of the seven modes occurs in other systems, and it has not completed external peer review.

ArtifactKindWhat it establishesStatus
LangChain PR 35544FixA forced-tool-choice crash under extended thinking, fixed upstreammerged
Semantic Kernel PR 13610FixSystem-prompt deletion in the truncation reducer, fixed upstreammerged
lintlangToolStatic, zero-LLM checks on agent configuration, including H1.6 pairwise differentiaPyPI 0.6.0
agent-gorgonToolDeterministic runtime scoring and forensic records of a sessionPyPI 0.2.0
little-canaryToolSacrificial-model probing of untrusted inputPyPI 0.3.6
hermes-jailbenchToolRepeatable zero-LLM regression scoring of known attack patternssource
Behavioral Canarying for Prompt InjectionPaperRouting disposition and inspection coverage are separate evidence statestechnical note
A Taxonomy of Epistemic Failure ModesPaperSeven named failure modes from 1,461 controlled experimentspreprint

If this is the failure you are seeing, tell us the system and the symptom. Book a 20-minute call, or send a note and get a written read instead.