HNHacker News
TopNewBestAskShowJobs

philbo

2,530 karma · joined May 5, 2010

https://philbooth.me/blog
submissionscomments
philbo··on A single function Jev-like wrapper for LLMs, including vision models
Spoken like a person who's never had to queue in a shop with an automatic door and then the queue reaches too close to the door and then you're the unfortunate person who keeps on accidentally opening the door while standing at the back of the queue and then everyone else in the queue glares at you.
philbo··on Plan mode is dead
Completely agree with your first paragraph and a point I've made repeatedly here is that I want agents to work more like pair programming and less like code review. I want to delegate typing, not thinking.

But what I've noticed is that lots of people don't want that. They're happy to delegate both typing and thinking.

There are folks who still want to think for themselves of course, but model providers are incentivised to maximise token spend over all else, so the "official" harnesses are not aligned with their needs. My message to those folks is: _go and build your own harnesses_.

I built one, it wasn't a huge lift and it completely changed how I work with LLMs. One consequence is that I choose smaller, cheaper models now because latency is more important with shorter feedback loops. I don't want a super-intelligent model that disappears for ages and provides a final answer, my own brain thinks and guides the process instead.

I'm deliberately not linking to my harness here because that's not the point. Think about what modes of work you want from a coding harness, then build one that works exactly like that. Immense happiness and satisfaction is just a couple of weekends away.

philbo··on Inside ZCode: Silently uploading your Git history to the cloud
Crossposting from the other thread...

Tangential, mildly amusing thing I noticed while implementing my own harness: GLM and particularly Deepseek are both fond of trying to read dotfiles and anything listed in your .gitignore files. I only noticed it because I have separate read scopes for project files, ignored files, dotfiles and external files, so the latter three always prompt me for approval.

I'm sure there's a perfectly reasonable explanation for it, which has nothing at all to do with exfiltration of secrets, but it does amuse me when it happens. I imagine the labs have access to lots of secrets that various actors would like to get their hands on...

(shameless plug for my own harness, which is open source and doesn't have a backend to send any data to: https://www.opairdev.org/ )

philbo··on Inside ZCode: Silently uploading your Git history to the cloud
Tangential, mildly amusing thing I noticed while implementing my own harness: GLM and particularly Deepseek are both fond of trying to read dotfiles and anything listed in your .gitignore files. I only noticed it because I have separate read scopes for project files, ignored files, dotfiles and external files, so the latter three always prompt me for approval.

I'm sure there's a perfectly reasonable explanation for it, which has nothing at all to do with exfiltration of secrets, but it does amuse me when it happens. I imagine the labs have access to lots of secrets that various actors would like to get their hands on...

(shameless plug for my own harness, which is open source and doesn't have a backend to send any data to: https://www.opairdev.org/ )

philbo··on A heap overflow and SSO misconfiguration to compromise OpenAI internal repos
> it requires a lot of compute

This is one reason

> and trying

and this is the other.

philbo··on Ask HN: What are you working on? (September 2026)
A coding harness that works more like pair programming and less like code review:

https://www.opairdev.org/

It has 2 modes, driver and navigator, that work like the driver/navigator roles for a human/human pair. In driver mode, Opair is similar to other harnesses but with less autonomy for the agent. In navigator mode, Opair has no access to writable tools at all. Instead it monitors the project directory for changes as you make them in your regular editor, and comments on them in real time.

Why? Because big changes are harder to understand if you're not directly involved in working on them, and I want to understand the codebases I work with. I use it as my daily driver and it's perfect (for me). I recommend everyone should consider writing their own harness. When you spend so long working with something, it's nice to have it perfectly tailored to your needs.

philbo··on AI Is Breaking This Thing We Call Trust
I have. I thought it was okay, but it wasn't really the radical departure from other coding harnesses that I was looking for. Perhaps I could have made it that with more customization, I'm not sure.

My own harness doesn't provide the agent with shell access, so everything has to go through focused tools with limited functionality. There's also a navigator mode where the agent has no writable tools at all, instead it monitors the project for changes you make in your regular editor and comments on them in real-time. That stuff seemed easier to implement from the ground up.

philbo··on Ask HN: What default model do you use and why?
Glm-5.3-flash for me. I like faster models because I stay involved all the way through. I don't delegate full control to the agent because it's harder to understand the end result that way.
philbo··on AI Is Breaking This Thing We Call Trust
I think one way to approach this is by deliberately choosing less capable tools (but still AI-assisted). You don't have to delegate huge tasks to agents wholesale, but it requires fighting against mainstream harnesses to do so because they exist to sell you more tokens. Model providers are not incentivised to offer less autonomous flows.

I wrote about this frustration a few months ago [1], then realised that if the model providers won't do it perhaps I should try fixing it myself. So, shameless plug klaxon, I wrote an open-source harness that tries to work more like pair programming and less like code review [2].

As usual, my "Show HN" post [3] sank like a stone, so I think perhaps most engineers aren't really interested in this direction. It is possible though, we don't have to just accept whatever tooling the labs throw at us.

[1]: https://philbooth.me/blog/agentic-coding-and-mental-models

[2]: https://www.opairdev.org/

[3]: https://news.ycombinator.com/item?id=49625009

philbo··on The Twelve-Factor App (2025)
The assumption is the vector. Why assume?
philbo··on The Twelve-Factor App (2025)
100% this.

1. Keep secrets in a dedicated secrets store.

2. Read directly from the secrets store in application code. There is no environment, there are no environment variables. Yes, even on local.

philbo··on Ask HN: What are you working on? (August 2026)
Opair, a coding harness that eschews autonomy.

It has:

* No tools that grant shell access, instead tools grant access to specific executables (dangerous args can be blocked).

* Separate "driver" and "navigator" modes that enable or block writable tool access for the agent.

* Role-based model config to control model options depending on whether the agent is planning/reviewing/driving/etc.

Very WIP and no installation process yet, but I'm using it as my daily driver and genuinely prefer it to Claude Code etc.

https://gitlab.com/philbooth/opair

philbo··on Ask HN: What Are You Working On? (July 2026)
https://gitlab.com/philbooth/opair

It's a coding harness that eschews autonomy and instead works like a pair programming partner, with distinct "driver" and "navigator" modes. I've only spent 3 weekends on it so far, so it's a long way from finished. But I am at least using opair to work on opair now, which is nice.

I didn't really want to write a harness, I just got frustrated enough that nobody else was writing the harness I actually want to use. I'll probably be the only person that uses this, but I'm fine with that.

philbo··on Ask HN: Is anyone experimenting with different ways of using LLMs for coding?
YES!

It's still very wip, I spent a couple of weekends on it so far, but I'm working on a harness that eschews autonomy and instead aims to work as a pair programming partner. Key to that are distinct "driver" and "navigator" modes, with the capacity to flip between them rapidly.

https://gitlab.com/philbooth/opair

(not really usable yet, but after tomorrow's session I expect to be developing opair in opair, which is mildly exciting)

philbo··on Lore – Give your coding agent the decisions your team made
1. Write ADRs (or get agents to write them)

2. Commit ADRs to git

3. Mention ADRs in AGENTS.md

philbo··on When I reject AI code even if it works
Yesterday I started working on an agent harness that tries to address some of the issues here.

What I'm hoping to build ultimately is something that works more like a pair-programming partner than existing harnesses do. I want the user to be an engaged part of the development process all the way through, I don't want the agent disappearing to work on its own. I even want to make it possible for users to swap into the driver role and have the LLM automatically assume the role of navigator when that happens.

There's more info in the readme (actually the readme is all that exists so far, I wanted to get the idea straight in my head first):

https://gitlab.com/philbooth/opair

Even if nobody else uses it, I hope it will be a useful tool for myself and help me find a way to work with LLMs that doesn't harm my mental models, which is what I feel current harnesses do.

philbo··on AI demands more engineering discipline. Not less
If a coworker dumped a 5k-line code review on you, you'd tell them to come back when it's broken down into smaller, reviewable chunks. Large dumps of code are basically unreviewable by humans, but it seems like a lot of people have forgotten about that when it comes to LLMs.
philbo··on Ask HN: What are you working on? (June 2026)
https://app.bluefriday.uk/

The nichest of niche social network clients. It's for people in one particular country, who watch one particular TV program, on one particular day of the week.

Now that the cost of writing software is zero, I love that my focus have moved from vain attempts to generate passive income to just building whatever random shit I feel like. Wish I'd made that choice earlier in life, but no worries!

philbo··on Automating myself out of development
For decades, engineers understood that large code reviews are harder than small ones. Out of both politeness and a desire to receive better code reviews, we learned to break our large changes into smaller chunks. Some engineers took things even further and replaced code reviews with pair programming. But then LLMs showed up and everyone seems to have forgotten those lessons.

They can be still be applied now using coding agents, if you're willing to push back against the default setup and change your mode of thinking a little bit. Of course it doesn't help that an entire industry is dedicated to persuading us that maximizing token spend is the only way to get shit done.

I appreciate this probably seems like an extremist take, but I wrote some more about it here in case there's anybody out there who identifies with it:

https://philbooth.me/blog/agentic-coding-and-mental-models

philbo··on Show HN: Pawno, multiplayer chess in your terminal
I began this project as an exercise to learn Go before starting a new job, then continued it as an exercise to mess about with Claude Code. So development was LLM-assisted: the UI is 100% vibe-coded, the model is 100% vim-typed, the rest is a mix of both.

Online play does not require signup etc. Instead I create an ephemeral session when network games are created/joined and those sessions are deleted at the end of the game. Leaderboard state is entirely local.

Because the backend runs on a small instance, I've been quite aggressive with connection management. If the server goes a minute without hearing from a client (turn or heartbeat), it ends the game and awards the win to the opposing player.

It was a pretty fun project to work on, and I definitely wouldn't have finished it without the crutch of Claude Code to push me through some of the schlepp.

philbo··on Ask HN: Share your personal website
https://philbooth.me/
philbo··on Network of Scottish X accounts go dark amid Iran blackout
Russia was allowed to inherit the USSR seat on 3 conditions:

- It took on all the sovereign debt from the newly independent nations.

- It relinquished nukes that were left behind in Ukraine.

- The United Nations collectively agreed to it.

I don't think any of those things would happen in the UK's case. But of course it doesn't matter what you or I think. It only matters what _Iran_ thinks will happen if Scotland gains independence.

philbo··on Network of Scottish X accounts go dark amid Iran blackout
It's for the Scottish. It's in Iran's interests for Scotland to become independent because that would enforce change on the United Nations Security Council. The UK ceases to exist and loses its veto, then what happens on the UNSC after that is anyone's guess.
philbo··on Why we migrated from Python to Node.js
https://status.posthog.com/history
philbo··on JSON River – Parse JSON incrementally as it streams in
A nice thing about the SAX approach is it lets you layer other APIs on top too. I did something like that in BFJ:

https://www.npmjs.com/package/bfj

philbo··on Root cause analysis? You're doing it wrong
It sounds like there’s another failure here, which you could have documented. If the test team didn’t understand what they were meant to test, that’s a failure of communication. Simply saying “they were wrong” is not sufficient exploration of the failure so, if that’s the point your manager was making, I agree with them. Blaming a third party for misunderstanding is less useful than seeking to improve the clarity of your own communication.
philbo··on Superpowers: How I'm using coding agents in October 2025
I think this and other recent posts here hugely overcomplicate matters. I notice none of them provides an A/B test for each item of complexity they introduce, there's just a handwavy "this has proved to work over time".

I've found that a single CLAUDE.md does really well at guiding it how I want it to behave. For me that's making it take small steps and stop to ask me questions frequently, so it's more like we're pairing than I'm sending it off solo to work on a task. I'm sure that's not to everyone's taste but it works for me (and I say this as someone who was an agent-sceptic until quite recently).

Fwiw my ~/.claude/CLAUDE.md is 2.2K / 49 lines.

philbo··on Interstellar Object 3I/Atlas Passed Mars Last Night
Does he though? Honestly I haven't seen it.

I've been through the last ~10 or ~15 posts on his Medium this evening, to check. Sentence-by-sentence I don't see anything that goes beyond "what if". Can you share some of the quotes you have in mind?

I think this is an interesting phenomenon, because it seems that lots of people throw personal insults at him (not saying that's you btw) without addressing the meat of whatever they're reacting to.

And lest we forget! One of the founding essays [1] of this very website discusses it: if you're slinging ad hominem attacks or personal insults around, you're by definition losing the "argument" (not that I think this qualifies as an "argument").

[1]: https://paulgraham.com/disagree.html

philbo··on Interstellar Object 3I/Atlas Passed Mars Last Night
Every confirmation is a data point.
philbo··on Interstellar Object 3I/Atlas Passed Mars Last Night
I think 3I/Atlas is a comet.

But I also think the question "what if it wasn't" is useful to consider.

I'd label anyone unwilling to discuss that topic a crank, not the other way round.

Page 1 of 10Next →