leather coding harness
random reflections on trying some coding harnesses in a post-Claude world.
this was written throughout the past couple of weeks, so writing styles shift.

the girl on the keyboard is GLM-5.3-Flash's anime girl self image. it told me to not take the cat away from the prompt: "holding_cat is non-negotiable", it said.
#author_luna #coding_harness #llm_coding
why #
thanks to a convoluted series of events and the utter inability of Anthropic to add gift stacking to an account, my money went to limbo and the Fin AI support agent can't refund the gift, only the entire subscription. I told myself "fuck it", lost access to Claude right after the refund, and decided to just experiment with other models and harnesses, I have spent too much time and effort with dealing with Claude Code's Wild Ride and I can finally get out of it.
IMPORTANT NOTE: I tag the versions of the harnesses, it's possible they heavily changed their UI/UX by the time you read them. do not treat my words as gospel, they are just research so I can find what is my Taste in coding harnesses. they can do whatever they want.
pi #
version tested: around 0.84.2.
pi's whole shtick is to be the MVP of coding harnesses. it just provides the minimum viable harness, and if you want anything more out of that you need to create an extension
the problem with extensions is that to prevent extensions from breaking with each other, an extension basically needs to become a giant harness monolith. use pi-landstrip for sandboxing? now you need to use its subagents. try to use someone else's subagents and they conflict! use some kind of auto mode? that overrides landstrip, so that conflicts too!
the best extensions for pi (in my opinion) are basically collections of skills or LLM providers not included in the giant list of providers in the system already. anything else has the ability to conflict if its anything that affects the main agent loop
in some ways, this is a good thing! it forces people into minimal amount of plugins as going past N means your harness is unstable
on the other side pi doesnt tell you what N is and what extensions are reputable in setups or not, you shall find that on your own, which for some people is also a good thing. however, for me it has been a long line of questions on what should i trust or not. which you could call this as a problem of open source in general, pi doesnt want to provide specific answers to that, because nobody really has answers for that yet and if I start talking about it, the scope of this article increases drastically.
i think in the general case of recommending someone pi, i would add "spend a couple of days vibecoding the extensions you want" instead of giving a select set of extensions. that is a time/money/token investment that pi won't add to the sales pitch.
omp #
tested 17.2.12
if pi is minimalist, omp is maximalist. it has everything you might want or even not want in a harness
its plan mode works, its main agent mode works like pi. nothing bad to say about it in that specific front
but the plan mode UI is ass. it's a full screen panel which means i cant scroll up to read the plan, i can jump between chapters but that's useless if each chapter is bigger than the height of your current terminal window, to scroll i can either pageup/down which i dont like since i need to continuously read the beginning/end lines as anchors when i want to skip things instead of just actually using chapters as jump anchors or... press arrow keys to go one line at a time. just print the entire thing, no jump ui, let me scroll how i would expect my terminal to scroll (or be claude code and use a real thing that actually accepts the mouse scroll wheel)
just that part of the UI is so grating I simply decided to not use omp.
polytoken #
report made at around polytoken 0.6.11
this is the alt-harness i've used the most at time of writing, it is currently not finished but it has a very strong vision for agentic engineering which i dig. but the issues with it are exactly on the opinions, which leads to the friction i see with the harness
notes:
- its proprietary, which means every time i differ with opinion on how the harness should work (or a way it'd work better for me), i need to convince Ed to do it
- this means Ed is the bottleneck for polytoken in general, i can't run away and fork my personal thing with my own personal changes
- i can see why Ed doesnt want to open source polytoken, i'm not saying it MUST or MUST NOT be open source (especially in the era of LLM hell), but it does mean its extremely hard to recommend even if it is really well made because if a problem happens, we're all shit out of luck
- something i wrote somewhere: "it makes sense with claude code (being proprietary) because they have a full e2e product line. but polytoken is not a singular product with a singular model family in mind that can vertically integrate (unless you include Ed's huge preferences towards the GPT-5.6 models). since every diff provider needs diff hacks and Ed simply will not accept specific providers. its his choice, but i wish i could make my choices"
- im still confused why we make facets beyond plan and execute. i tried making an
initfacet but it was a little bit confusing requiringinitandinit_done(for some reason i forgot, but it did work). i rewrote it as a skill and it works beautifully. so why do we have facets?? huh - configuring alternative providers is very confusing (mostly because trying to have a common substrate for inference providers is fucking grueling work that makes you want to buy a farm and do something else with your life). i get the reason why but that does mean i dont fully know how to connect specific providers to polytoken
- it does not provide good error outputs. as a practical example dsv4f 0731 came out on opencode go, but i couldnt use it. "provider auth failed" so i ignored and used openrouter. when i was doing my
piexperiments i tried again and i got theError: 403: {"type":"RegionError","message":"The latest version of this model is only available hosted in China and requires explicit opt in: ....."}. heres the thing, polytoken mapped a 403 as auth failed in the error msg when it was supposed to be the chinese model opt-in toggle- the fact polytoken didnt return the json i received from the provider means i was completely shit out of luck on figuring out why a provider was failing
- i really really like its plan mode, its like a much quicker version of
plan-and-execute(a child ofsuperpowers), but instead of taking 2 hours to plan (tbf, i can then let that plan run for 8 hours without issues) i take some 3 minutes - no plugins (...yet? maybe it'll exist? no idea!)
- i wish i had custom profiles on polytoken, such as profiles of models. sometimes i want k3 as full and 0731 as mini setting, sometimes gpt lineup, etc. right now i need to go back and forth on the config ui to tweak the full/mini/nano settings as i'd want if i lose access to a specific model (such as usage limit running out)
- FIXED: clipboard bugs because my setup is weird (tmux over ssh). this got fixed after talking to Ed a bit
maki #
tested around ~0.4.8
I heard of maki through someone else that used it and while doing my explorations and it stuck with me from the minimal/dense UI (I am a sucker for dense UIs). it's also FOSS which meant putting my taste to the test.
notes:
/thinkingis confusing, its off by default (huh?) which means i need to/thinking xhighmanually.- it has subagents by default (nice!) but the subagents are synchronous (aw)
- it has a plugin architecture (nice!) with lua as the language (PERFECT)
- UX bug:
/logindoesnt provide openai auth, which made me confused its not supported. after letting 0731 scan the codebase it foundmaki auth login openaiand that works - FIXED: for some providers (like umans.ai) maki does an async resolve from models.dev, even if its cached. this means setting 0731 as my default model doesnt actually work, ever, as I get defaulted to Claude Sonnet until the async resolve finishes
- I submitted a PR to fix it upstream (this is merged) https://github.com/tontinton/maki/pull/783
- other subagent-related annoyances
- i can't interrupt a subagent and talk to it
- the main agent can't queue messages to subagents (its not async at all)
- plugin musing: i don't think i can override PLAN mode with some custom plan mode (such as polytoken's) on plugins because you can't define custom modes. its either default BUILD and default PLAN
--append-system-promptonly works on SDK mode- I need that option so I can add custom global-level instructions without overriding the other global-level instructions (like AGENTS.md) because sometimes I want to run the harness inside a VM (see adventures in sandboxing)
- UX bug: it seems that pressing Esc-Esc to stop the agent makes the todo list be gone? weird?
harnesses I haven't reviewed #
- opencode
- cursor
- aider
- cline
- gemini
- codex cli
- prime agent
- deepseek harness (though i have read the paper, looks cool)
- Whatever Else
well, what's next? #
I'm of the school of thought that if you have complaints about something and you have the ability to try to fix it or tell someone to fix it, then do so. after being involved with the alt-coding-harnesses I've been working on my own coding harness, forked from maki. it's nowhere near done yet. won't even link it here.