How I Work With Coding Agents

Enough ranting about all those “Agent OS” stuff. I wanna provide something useful. This is how I work right now.

First things first: I don’t use any “Agent OS”, skills collection from a GitHub repo, or MCPs provided by anyone else. I work 99% in pi and herdr now. Bit of Codex as well. But it doesn’t matter too much. I stay under a 100k context window on every LLM. I read my code.

My starting point is always the same: Open pi. Build up good context.

Building good context

Building good context means that I state my intent. Can be rough but slightly bounded. Then I tell the agent that I want to have a discussion and it can interview me. Why? Because the agent and I should understand the problem we’re trying to solve. We might already dive a bit into possible solutions.

I’m also creating boundaries by stating what it is not. It’s important that I start pushing back on many ideas the agent has at this point. Or you’re starting off with scope creep already.

Once we captured the essence, I could have:

  1. an idea
  2. a small feature or change
  3. a bigger feature or epic (or even a full app)

Let’s go.

1. Idea

Sometimes it’s just an idea. Then I stop. The agent writes our current understanding into docs/ideas/ and I close the session. A fresh session can pick it up later.

2. Small feature or change

Here I take the conversation immediately to the solution. I’m using “🪃 boomerangs” to build context around it. I’ll explain a 🪃 at the end.

The agent scans the codebase, web, etc. Once I feel good about the solution, I let it 🪃 a plan. Not “plan mode”. Who is using that anyways still?

I might do targeted compactions along the way or a “handoff”. In the best case, I have an awesome context now and launch a 🪃 to implement.

3. Bigger feature (or app)

Here I don’t jump into the solution. I turn the context, or an existing idea, into a specification in docs/specs/. This starts another interview to close the gaps where the agent would otherwise make decisions for me.

I keep specs small. If one grows beyond roughly 300 lines of Markdown, I split it into phases. Then I promote it into an implementation plan in docs/plans/, with small slices, checkboxes, code references and tests.

Now I either work through it manually, 🪃 or Ralph it. I’ll explain.

That’s roughly it, folks! No “skills” needed. Just good context.

The workflows

Manually: fresh session, study the plan, pick the next slice, implement, commit, review the code and repeat.

Handoff: let the agent create a handoff doc in /tmp/, start a new session and bring the handoff in to continue.

Boomerang: executes tasks autonomously, then replaces the token-heavy work history with a compact handoff summary. See pi-boomerang. It’s awesome.

Ralphing: a while loop starts a fresh agent for every iteration. It studies the plan, implements the next slice and commits. After a few iterations I review the batch. Changes go back into the plan. Then I start the next batch.

My setup

  • Tools: pi, herdr, Ghostty, zsh, SSH, VPS, Termius on iOS
  • Extensions: pi-boomerang, pi-web-access, and my own browser steering via Playwright
  • Skills: handoff (for handoff; mine), ragent (remote-agent; mine; spawns agents on my VPSs; might open-source if I have time), tldraw (not mine but brilliant)
  • MCPs: nope!

How I work is heavily inspired by Mario Zechner, Geoffrey Huntley, Dexter Horthy, Mitchell Hashimoto, Paris Thomas. Those are my GOATs. And Nico Bailon for his work on pi extensions. Especially pi-boomerang and pi-web-access.

Originally posted on LinkedIn.