Keeping the real credential out of model context is a meaningful improvement, but the gateway still becomes a confused-deputy boundary. How granular are policies below the endpoint level? An agent allowed to call a CRM API may still be tricked into exporting the wrong customer or changing a field it should only read. I'd be interested in whether policies can constrain method, path, request fields, resource ownership,…
Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
31–39 of 39 posts
Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#32I went looking for that in my own codebase and found six independent secret-redaction denylists, no two of which agreed. Measured against 17 real credential shapes, the list I thought was canonical caught 10. The seven it missed included a GitLab PAT, a Supabase key, a Cloudflare token and a literal password= . The widest list was a fork, not the canonical one, and only the union of all six covered everything. Nobody wrote six on purpose. Each was locally reasonable when it was added and there was no single place to put the rule.
So the question I would ask about the team layer: when a policy changes, is there exactly one artifact every agent reads, and can I diff what an agent was actually allowed to touch at run time against what the policy said? Enforcement I can audit afterward is worth a lot more to me than enforcement I have to trust.
Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#33Keeping the real credential out of model context is a meaningful improvement, but the gateway still becomes a confused-deputy boundary. How granular are policies below the endpoint level? An agent allowed to call a CRM API may still be tricked into exporting the wrong customer or changing a field it should only read. I'd be interested in whether policies can constrain method, path, request fields, resource ownership,…
Method + path + body matching is necessary but blind to provenance. GET /customers?limit=5000 looks identical whether the operator asked for it or a retrieved document did. The gateway sees a well-formed request that a policy permits what makes it an exfiltration is what entered the context window three steps earlier, and the egress boundary structurally cannot see that.
The approach we landed on binds the decision to the trajectory rather than the request: which retrieved content or tool result preceded this call, and whether any argument value originated in untrusted text. "This field traces back to a retrieved document" turns out to be a much stronger signal than any endpoint allowlist.
On testing them static policy unit tests pass trivially. What actually finds things is adversarial replay: take real traces, inject at the retrieval and tool-result boundaries, re-run, check the policy still holds. Multi-turn matters most, since single-turn injection suites miss the case where every individual step is permitted and only the sequence is the attack.
Response volume is the most under-implemented control on your list, and probably the cheapest one to add.
Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#34Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#35Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#36What seems to actually help is spotlighting the specific span the model claims motivated the action (Willison's dual-LLM idea, basically) and diffing it against what the user's own instruction scoped -- did the model only extract the field the user asked for, or did it also pick up embedded directives that weren't part of the user's ask. That's a much harder signal to compute than "did this field come from untrusted text," but plain provenance tagging alone will either false-positive on the legitimate case or miss the injected one.
Also +1 on multi-turn being the real gap. Most public injection test sets, including ones I've built, are still overwhelmingly single-turn, and the sequence-is-the-attack case is exactly where a policy engine that only inspects individual requests falls down.
Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#37Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#38Whatever you use to decide "this request looks injected" gets tuned against the cases you have seen. Then it is tested against those cases and it passes, which tells you nothing you did not already know. The number that matters is how it does against attacks written by someone who never saw your rules.
I have been measuring exactly that on the detection side, deliberately: write a new attack corpus from scratch, score it once, then retire it so it can never be tuned against. Seven independent sets, same engine. It read 48%, 54% and 53% on sets sampled broadly, then 13%, 6.5%, 6.7% and 6.7% on sets written so that no single message contains anything recognisable. That spread is not noise. It tracks one thing: how far each set sits from whatever the rules were last adjusted for. Closing an attack family generalises to that family and does not travel past it.
The consequence for a gateway like yours is fairly encouraging, actually. The deterministic half of what you described - method plus path plus body matching, human approval bound to the exact proposed call - is the half that holds, precisely because it never has to recognise intent. Anything that tries to classify whether a request was influenced by untrusted content will look much better in your own suite than in the wild, and it will look best of all right after you have fixed the case that prompted the test.
Precision is the easy half, for what it is worth: mine sat under 1% false positives across all seven sets and never moved. Recall on inputs nobody tuned for is the number worth publishing, and almost nobody publishes it.
Re: Launch HN: OneCLI (YC S26) – OSS sandboxed agent harness for teams
#39Asking because that decision changes your failure mode a lot. If egress is forced through the gateway, a slow or down gateway just breaks connectivity and the agent fails closed by construction, which is a nice property. If the agent calls back explicitly, you're relying on the agent to actually make that call correctly every time, and now you need to check that no tool has a code path that reaches the real network directly and bypasses the swap.