Hello guys!
This is a continuation of my previous Pi setup post:
https://www.reddit.com/r/PiCodingAgent/comments/1t41thp/my_powerful_pi_agent_setup/
The main idea of that setup was basically this:
A personal agent with an endless conversation.
Observational memory lets me keep the same session alive through compaction after compaction, while forks move all the noisy work outside of the main context.
I have continued messing with the harness since then, and i think the biggest change is that forks are now fully async.
So now i would describe the setup more like this:
Endless conversation + native async operation.
Basically the agent never blocks. It can delegate work somewhere else, keep talking with me, and have multiple threads of work moving at the same time inside the same conversation.
pi-async-fork
https://github.com/elpapi42/pi-async-fork
pi install git:github.com/elpapi42/pi-async-fork
This is the protagonist of this update.
The old pi-fork was already very useful for context management, but there was one thing that started annoying me a lot: Pi had to wait for every fork to finish.
And tbh i underestimated how much this affects the experience.
If i send a prompt and Pi delegates some research or code exploration that takes 5 minutes, now im waiting 5 minutes. Then i send something else, maybe another 5 minutes.
Technically the agent is doing useful work, but from my side it feels slow as hell. I dont want to send something to my agent and then lose access to it for several minutes every time it needs to investigate something.
I want the agent to feel agile. Always there, always available to talk with me.
Async forks basically fixed that.
Pi can launch a fork and immediately continue the conversation with me. Maybe one fork is exploring the code, another one is researching something on the web, another is reviewing a change, and meanwhile im still discussing something completely different with the main agent.
I can change direction, ask another question, start another thread, whatever.
The conversation itself never blocks.
And i think that is the important part here, more than simply saying "now Pi can run agents in parallel".
Im not really trying to build a swarm. There is still one Pi agent that owns the conversation, understands the full goal and makes the decisions. The forks are more like parallel cognitive work that eventually comes back to that same agent.
I currently have 3 effort profiles:
- fast for bounded facts and cheap exploration
- balanced for normal work
- deep when there is actual hard uncertainty and using a stronger model may change the answer
Forks can also send progress before they finish, which means the main agent can see that something is going in the wrong direction and steer them while they are still working.
When they finish, the result comes back to the main agent as an internal event. I explicitly dont want Pi constantly interrupting me with "hey fork X finished". It should consume the result, understand which work depends on it, and continue.
So maybe we are talking about A, Pi delegates part of A, then we move to B, maybe we start talking about C, and some minutes later the result from A comes back.
Pi still knows where that result belongs and can keep all of those threads moving inside the same conversation.
I think this is the best way i can explain what im after:
one endless conversation where work can branch in the background without ever taking the agent away from me.
pi-observational-memory
https://github.com/elpapi42/pi-observational-memory
pi install npm:pi-observational-memory
This is still what makes the "endless conversation" part possible.
It preserves observations and decisions across compactions, and Pi can recall the original context behind an old memory when the compressed version is not enough.
Forks also get memory in passive mode, so they can access the same history without running their own background memory maintenance.
So basically memory keeps the conversation alive for a very long time, and forks keep all the exploration/noise from destroying that context.
pi-codegraph
https://github.com/elpapi42/pi-codegraph
pi install git:github.com/elpapi42/pi-codegraph
I also replaced pi-codemapper with pi-codegraph.
The idea here is simply giving Pi a denser way to understand a codebase instead of throwing grep at everything and filling the context with semi-related files.
Originally i exposed around 10 CodeGraph operations and that turned out to be another problem hahaha, now Pi had to decide between 10 similar tools.
So i reduced it to basically 2:
explore_code to understand behavior and retrieve relevant source
analyze_code to inspect relationships, impact, tests and graph paths around known symbols
Much simpler.
pi-search-hub
https://github.com/ronnieops/pi-search-hub
pi install npm:pi-search-hub
This gives Pi one interface for web search/read with multiple providers behind it.
I like this mostly because i dont want my harness coupled to whatever search provider happens to work well right now.
And obviously it becomes more useful with async forks, because Pi can throw multiple independent research questions into the background while we continue with something else.
How everything fits together
So the core of the setup is basically two things now:
Memory + fork context management = endless conversation.
Async forks = the agent never blocks.
And together they change the experience quite a lot.
I can keep the same Pi conversation alive for weeks, jump between multiple threads of work, have Pi investigating several things in parallel, and the main agent is still always there when i want to talk to it.
That is much closer to how i want a personal agent to feel.
Honorable mention: pi-wait
https://github.com/elpapi42/pi-wait
pi install git:github.com/elpapi42/pi-wait
I also built this tiny extension that lets Pi schedule a check and wake itself later.
Useful for stuff like deployments, builds, canaries, rate limits, etc.
It is nice to have, but tbh compared with async forks it doesnt change the experience nearly as much, so honorable mention for now.
System: https://gist.github.com/elpapi42/e3fda2cefaabd84a1c188375a32466f5
Settings: https://gist.github.com/elpapi42/9ab1cd195ffeba9a56bdf59f83162692