# Keeping the harness's primitives consistent

link · 2026-06-29

> this is a huge reason why i use pi.
>
> i absolutely do not want my harness regularly changing behavior out from under me, including system prompt changes, on top of an already stochastic llm
>
> > Imagine I have /skill-1 and /skill-2, both with disable-model-invocation: true
> > I tell Claude Code: "/skill-1, /skill-2 do XYZ"
> >
> > Which of the skills will be invoked?
> >
> > I'll give you a clue - the behaviour was one thing 3 weeks ago, another thing 1 week ago, and back to the original today.
> >
> > [Matt Pocock (@mattpocockuk) on Twitter](https://x.com/mattpocockuk/status/2071318488401006919)

I've been playing around making my own harness[^1] recently, and also noticed how the behaviour of many Claude features seemingly seem to change every time I spin it up to test something. For my harness, I just decided on a simple principle: trying to keep the primitives (i.e. skills and mid-turn messages affect the agent[^2]) consistent with how I expect agent to react.


[^1]: [Pi](https://pi.dev) remains my main harness, but trying to think about how I work in this agent-looping world.
[^2]: Most of the time i want immediate steering, but I realized I do use follow-up quite a lot when leaving agents do their thing, especially when running in sandboxes and/or building prototypes where the result itself doesn't matter much for me.

[via Dillon Mulroy (@dillon_mulroy) on Twitter](https://x.com/dillon_mulroy/status/2071382128122884215)
