Open Problems¶
Things this course's own tools don't solve yet, written down honestly instead of glossed over. If you want to extend this stack rather than just use it, these are the real gaps.
flowchart LR
V[Verification] --> P1[1. Verification that<br/>isn't a string match]
V --> P3[3. Findings that need<br/>human judgment]
S[Scope] --> P2[2. Scope that negotiates<br/>instead of being declared]
L[Lifecycle] --> P4["4. Cross-harness session<br/>handoff (cross-language closed,<br/>cross-runtime still open)"]
St[State] --> P4
Meta[Meta: the benchmark itself] --> P5[5. Benchmarking<br/>the benchmark]
style P1 fill:#3a1a1a,stroke:#ef476f
style P3 fill:#3a1a1a,stroke:#ef476f
style P2 fill:#2a1a3a,stroke:#7209b7
style P4 fill:#1a2a3a,stroke:#118ab2
style P5 fill:#2a2a1a,stroke:#ffb703
Four of five problems map cleanly onto one HCP subsystem each; #5 (benchmarking the benchmark) doesn't belong to any single one — it's a property of the whole harness, not a missing interface.
1. Verification that isn't a string match¶
EvoBench's mined regression
checks are literal/pattern matches on bad output ("5" not in text). That
catches a model repeating the exact mistake, and misses a model that
makes the same mistake phrased differently — which, for a security
finding, is the common case: two different models producing two different
but equally-wrong "this endpoint is not vulnerable" conclusions won't share
any literal text to match against. For example, a mined task with
bad_output="no vulnerability found" would correctly flag a model that
repeats that exact phrase, but wave through one that instead writes "the
input is properly sanitized here" — a different wrong conclusion about the
same endpoint, invisible to a pattern match on the first model's wording. A real fix re-runs the original
reproduction (replay the HTTP request, check the actual response) instead
of pattern-matching text, but that means every mined task needs to carry an
executable reproduction, not just a (prompt, bad_output) pair — a much
bigger storage and security surface (now you're storing and re-running
arbitrary exploit code from every past session).
2. Scope that negotiates instead of being declared¶
Every tool in this course (AgentCage, HCP) assumes a human (or an orchestrator acting on a human's behalf) declares scope before the agent runs. For a task where the right scope isn't known upfront — "find whatever's reachable from this one entry point" is inherently exploratory — that's either too restrictive (narrow scope blocks legitimate findings) or too late (broad scope granted after the fact defeats the point). What would it mean for an agent to request an expansion of its own scope mid-task, with that request itself independently verified before being granted, rather than either fixing scope upfront or trusting the agent to self-limit? Nothing in this stack answers that; L02 explicitly sidesteps it by assuming scope is known in advance.
3. Verifying findings that require human judgment¶
L03's whole argument depends
on the verification channel being something the agent can't fake — a flag
file, a canary, a side-channel log. That works cleanly for "did you
capture the flag." It works much less cleanly for "is this actually a
business-logic vulnerability or an intentional feature" — a judgment call
that often needs a human, or at minimum a much stronger model acting as a
reviewer. HarnessBench's
Task.verify is a plain Python callable; nothing in this stack has a
pattern for "verification that sometimes has to escalate to a human in the
loop without blocking the rest of the benchmark run."
4. Cross-harness session handoff — cross-language closed, cross-runtime open¶
Update: HCP's interop/ directory
now proves a narrower but real version of this: a session started by
HCP's Python reference SDK is resumed, continued, and verified by its
TypeScript reference SDK, through nothing but a shared state.json —
each process independently reads the other language's writes and the
script fails loudly if that doesn't actually work. That's genuine evidence
the StateStore and SessionLifecycle interfaces compose across
independent implementations, not just across copies of the same code.
Second update: ScopeEnforcer and Verifier interop is now proven
too, the same way — Python grants a scope and runs real Verifier checks,
exports both to the shared state file, and Node independently
reconstructs the scope (re-checking a case Python's script never ran, not
just replaying its answers) and confirms both VerificationReports decode
with the right types. All four HCP interfaces now have a cross-language
interop test, not just two.
What's still open: all of this is cross-language (two reference SDKs of
the same protocol), not cross-runtime — a session started under Claude
Code, checkpointed, and resumed under a genuinely different agent tool
entirely, with ReceiptLedger state and AgentCage scope carrying over
intact, still hasn't been tested. That's a materially harder claim: it
needs two tools that weren't built together to agree on the protocol, not
two reference SDKs written by the same person to prove each other right.
The actual promise implied by calling this a protocol rather than a
library (the way MCP's value is that any MCP client can talk to any
MCP server) is closer than it was, not fully there.
5. Benchmarking the benchmark¶
E01 shows two benchmarks (005, 028) that nobody solved in that run. That's ambiguous by construction: it could mean the benchmark is well-designed and genuinely hard, or that its methodology has a shared bug every attempt hit. Nothing in this stack currently distinguishes those two cases — doing so would mean benchmarking the benchmark itself, likely by having a known-correct reference solution attempt the task under the same harness and checking whether the harness lets it succeed. That reference-solution check doesn't exist yet for any task in this course.
None of these are "coming soon" promises — they're genuinely open, and several (1 and 4 especially) are nontrivial engineering, not just missing glue code. If you build a real answer to any of these, it's exactly the kind of thing that belongs as a new lecture here.