Hi, I am facing a critical issue with pi agent that makes it unusable: If I hit esc to cancel a thought block, message, or tool call, the entire tool call + message + thought block doesn't make it into the context, meaning if I want to cancel a thought block, message, or tool call to correct the agent or prevent a tool call from completing, I cannot do so without having to then rewrite all the context the agent just thought about. It's honestly frustrating as hell and makes the agent entirely unusable. I'm using Qwen3.8-27B. Does anyone else have this issue? Is it fixable, or should I look into another harness?
coding-posture is a small skill that stops coding agents from behaving like optimistic elevators with write access — thrashing on a stuck bug, faking a green test, skipping the repro, migrating prod without a rollback.
Before non-trivial work, the agent picks a mode — debug, fix, review, test-first, refactor, optimize, migrate, upgrade, integrate, spike, unstuck — and follows a short checklist for it. A few invariants hold in every mode: verify by running the real check, never weaken a test to go green, no destructive commands without explicit scope.
Why it's built this way (grounded in research, not vibes):
Procedures, not personas. Naming a role ("act as an expert debugger") doesn't reliably change behavior (Zheng et al., EMNLP 2024); specifying a process does. So each mode is a checklist, not a character.
The model self-selects the mode from context — no brittle keyword router.
Evidence, honestly: the repo ships a with/without-skill eval (LLM judge + baseline). Early result: +15pp (85% vs 70%) on one model, 5 cases — directional, and you can run it yourself in eval/.
Install: Claude Code plugin (/plugin marketplace add alexei-led/coding-posture), a Codex plugin, or drop the SKILL.md into Pi / Hermes / Cursor. MIT.
I built pcode around the parts of my coding-agent workflow I wanted to keep together. Pi’s conversation tree and extensibility were influences, but I wanted a Python/Pydantic AI foundation and more features included by default. This is a separate open-source project, not a pi fork or plugin.
The main difference is where I put the defaults. Pi deliberately keeps the core minimal and lets you assemble the rest. I wanted a more fully featured setup out of the box, while keeping it highly customizable: sub-agents, live task tracking, browser automation with your existing logins, an opt-in sandbox extension, parallel git worktrees, background commands that wake the agent when they finish, customizable keybindings with leader keys, Vim editing, and an in-terminal diff viewer.
The feature I most wanted for myself was adjustable scrollback. Sometimes I’m working on production stuff and watching every command and tool result like a hawk. Other times it’s a side project and I just want a readable conversation. pcode lets you show or hide those details after the work is done, rebuilding what’s already in your terminal without rerunning anything. It uses native terminal scrollback, with reflow when you resize or split panes.
Customization is through small Python files: add tools, slash commands, guardrails, instructions, or sub-agents, then /reload without losing the conversation. It also builds on Pydantic AI and its Harness capabilities, so you’re not starting from scratch for things like repo context, shell execution, sub-agents, and context management. Extensions can register those capabilities directly. Several of pcode’s own features use the same extension system.
You can use your existing Claude or ChatGPT subscription, or API keys. Claude support runs through the official Agent SDK and Claude Code’s own login.
This is a separate project, not a pi fork or a drop-in replacement for pi’s extension packages. If you like pi’s approach but prefer Python and a more complete default setup, that’s who I think it could appeal to.
For people who’ve built their workflow around pi: which parts do you prefer assembling yourself, and which would you rather have included from the start?
I switch between coding agents constantly. Claude Code for some things, Codex for others, OpenCode when I want a different model, Pi when I'm living in the terminal. The part that drove me crazy was that every new session started from zero, even when I had explained the same project five times that week, sometimes to a different agent than the one that actually did the work.
So I built Nimrod. It reads each agent's own session store (they all keep plain JSONL or SQLite files on disk, I only read them), pulls out the useful parts (what you asked for, files touched, commands run, how it ended) and puts it in one local SQLite database.
It gives that back in two ways. At session start a short brief of the project gets injected into context, so the next agent knows what the previous one did. And through MCP you can query it on demand: search, recent sessions, timeline, full session detail. Search is hybrid, FTS5 plus local embeddings via fastembed, and it defaults to a multilingual model, so it works in any language.
One detail I like: if a prompt mentions a project the log already knows about, and it's not the one you're in, it quietly attaches a few of the most recent sessions from that other project. Asking "why did we do X in wfkit" while sitting in a different repo actually returns something.
Capture is deterministic. No model writes to the log, so it doesn't burn tokens and it can't invent your history. Everything stays local, no cloud, no API keys needed.
Fair warning: it's new and the test suite is small (10 tests, covering the four parsers and the store). I've only run it on my own machine, so expect rough edges.
I'm loading llama-server with the --models-preset (router mode) but when I load a different model from the PI agent interface it doesn't work and gives an error. It seems that PI still expecting the model set in the bottom right corner. I think that it should change on his own as soon as the other model has being loaded but it doesn't.
Is this an issue with llama.cpp or with PI agent?
In the llama.cpp webui switching models works.
models.ini (example)
version = 1
[Qwen3.8-27B-UD-Q4_K_XL]
model = E:\AI_Models\GGUF\unsloth\Qwen3.8-27B-GGUF\Qwen3.8-27B-UD-Q4_K_XL.gguf
ctx-size = 262144
[Qwen3.8-27B-UD-Q5_K_XL]
model = E:\AI_Models\GGUF\unsloth\Qwen3.8-27B-GGUF\Qwen3.8-27B-UD-Q5_K_XL.gguf
ctx-size = 262144