<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: kdodhia</title><link>https://news.ycombinator.com/user?id=kdodhia</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 23 Oct 2026 06:07:32 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=kdodhia" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Yeah we've put most of our effort so far into security, this part especially. Keys are encrypted in a dedicated secrets vault and once saved nobody can read them back, not even the dev who set them up. In proxy mode the key never even reaches the agent, we inject it on our side and only into requests going to hosts that are allowlisted for that provider. Every use gets checked against policy and logged with who used it and on whose behalf<p>Every change we ship gets scanned for supply chain attacks and goes through static code scanners too. We've been pen tested by two separate firms and we're in the observation period for SOC 2 type 2, details are at trust.alterauth.com. We're also planning open sourcing the full platform soon so you'll be able to look at the code yourself.</p>
]]></description><pubDate>Fri, 23 Oct 2026 02:03:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=50203675</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50203675</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50203675</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Makes sense, sounds like a solid setup. If your agents ever start calling cloud/internal APIs directly instead of going through the PR flow, that's exactly what we built Alter for, and we'd love to help. Either way, good luck with it!</p>
]]></description><pubDate>Fri, 23 Oct 2026 01:57:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=50203635</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50203635</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50203635</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Yup, the constraint isn't on the network, it's on the credential. The provider token or API key lives in our vault and the agent never sees it. All the agent holds is an Alter key, and the only thing that key can do is ask us to make a call. We check policy against the actual request, inject the credential and send it ourselves<p>So say the agent goes around us and hits the API directly. It has nothing to authenticate with, and the provider returns a 401. It also can't use us to leak the credential: for API-key credentials, we only inject them into requests going to hosts you've allowlisted for that provider, so pointing the call at its own server gets blocked before the key is attached.<p>To make it airtight, mint the agent's Alter key with proxy-only permission. We also have a mode where the SDK fetches the token for each call, but that's a separate permission and a proxy-only key can't use it.<p>Where it does break down is credentials we don't hold. If someone leaves a personal API key in the agent's environment, the agent can use it directly and we'll never see that traffic. Locking down outbound network access closes that gap, but that's on your infra side.</p>
]]></description><pubDate>Fri, 23 Oct 2026 01:54:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=50203615</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50203615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50203615</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Yeah, sounds very close. The main thing we did to keep it deterministic is that nothing at request time is a model call. Rules are evaluated in the proxy against the actual request: method and path, the provider operation it maps to (we classify each provider's API into operations and families like delete or payment, from their published spec), parameter values, IP, time window, quotas. Default deny, and every rule can only narrow.<p>The other half is treating policy like code. Rules live in a file with test fixtures ("this request should be denied, this one should need approval"), `alter policy test` runs them, and `plan` / `apply` works like Terraform: you review a diff, and apply refuses if the plan was edited or the live policy changed since you reviewed it. `alter policy simulate` shows which rule fired for a given request and why.</p>
]]></description><pubDate>Thu, 22 Oct 2026 17:55:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=50198862</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50198862</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50198862</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Hey! Kevan here. Yes, it's its own thing. We classify each provider's API operations into families, and "payment" (anything that moves money or changes billing) is one of them, so a rule can target payments without you listing endpoints.<p>On your three controls:<p>- Per-action caps: rules can match request params numerically, so "deny if amount > 5000" works today.<p>- Approval above a threshold: same matching drives human approval, e.g. "require approval on payments where amount > 1000". The approver sees the exact frozen request that will execute.<p>- Rolling daily budget: not built yet. Today we have per-agent quotas that count calls per minute/hour/day, but nothing that sums amounts across calls. We have the pieces (amount parsing per call, per-window counters, approvals), so it's a natural next rule type.</p>
]]></description><pubDate>Thu, 22 Oct 2026 16:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=50198000</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50198000</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50198000</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Makes sense. On not being able to get read-only creds from the endpoint: that's actually where a proxy helps most. A big part of what we've built is giving you fine-grained permissions even when the underlying provider doesn't have them. The key can be full-power, but the agent only ever reaches the API through the proxy, so "GET only under these paths" is enforced there and a write never reaches the provider even though the key could do it.<p>On the compliance subagent, the one thing I'd watch is that it reads the same untrusted context as the agent, so it can be injected too. We treat the model as advisory only. We have an AI review rule that rates a request's risk, but it can only escalate to a human approval. It can't deny, and it can't allow anything the deterministic rules didn't already allow, so a fooled reviewer costs you an extra approval, never a bad action. Your impact-level classification maps pretty directly onto that.</p>
]]></description><pubDate>Thu, 22 Oct 2026 16:53:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=50197969</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50197969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50197969</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Approved calls run at most once. Execution is claimed atomically so two workers can't both run it, and if the agent re-sends the same call it doesn't re-run the approved one, it creates a new approval that needs its own yes. If the provider call fails before the request ever left (connection refused, DNS) we retry. If it might have reached the provider, like a timeout on a POST, we don't resend. The approval fails as "outcome unknown" so someone checks the provider instead of guessing. Agree a duplicate after approval is as bad as no approval.</p>
]]></description><pubDate>Thu, 22 Oct 2026 16:49:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=50197907</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50197907</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50197907</guid></item><item><title><![CDATA[New comment by kdodhia in "Launch HN: Alter (YC S25) – Access control for multi-user agents"]]></title><description><![CDATA[
<p>Hey @luis_valerio, kevan here! That question shaped most of the design.<p>We assume you can't reliably stop the model from being prompt injected. So nothing is enforced at the model layer. Enforcement happens at the proxy, which sits between the agent and the downstream API and is the only thing holding the credential. The agent never sees the key, so an injected agent can't bypass it or route around the deterministic policy.<p>For irreversible actions you stack three things:<p>1. Method/endpoint restrictions. "This agent may only GET under /instances/*" means a DELETE never reaches the provider. For infra agents we'd push read-only by default and allowlist the few mutations you need.<p>2. Human-in-the-loop on the dangerous ops. Approval can be required conditionally: on DELETE, on specific operations, or when a parameter matches (resource outside the allowed set, etc). The request is frozen server-side, so what the approver sees is exactly what executes. The agent can't swap the payload after the yes.<p>3. Audit logs on every call, including denials, with the agent and end-user identity attached. So you can see the agent tried a DELETE it wasn't allowed, on whose behalf, and with what body.<p>Basically we treat every call like a compromised laptop: don't assume it behaves, scope the credential, and gate the risky actions behind a second party. Would love to hear more about your setup.</p>
]]></description><pubDate>Wed, 21 Oct 2026 21:08:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=50187650</link><dc:creator>kdodhia</dc:creator><comments>https://news.ycombinator.com/item?id=50187650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50187650</guid></item></channel></rss>