[{"data":1,"prerenderedAt":268},["ShallowReactive",2],{"\u002Fblog\u002Fagent-harness-selection\u002F:en":3,"\u002Fblog\u002Fagent-harness-selection\u002F-surround:en":164,"blog-all-posts:en":165},{"id":4,"title":5,"author":6,"body":10,"date":147,"description":148,"extension":149,"image":150,"locale":151,"meta":152,"minRead":153,"navigation":154,"original":155,"path":156,"pinned":155,"seo":157,"source":158,"sourceUrl":23,"stem":159,"tags":160,"updated":150,"__hash__":163},"blog\u002Fblog\u002Fagent-harness-selection.en.md","After tinkering with Pi Agent, OMP, Codex, and ZCode, why I finally chose OpenCode + OpenChamber",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":135},"minimark",[13,28,31,36,41,44,47,59,63,66,69,72,76,79,83,89,95,108,115,119,122,125,128],[14,15,16],"blockquote",{},[17,18,19,20,27],"p",{},"Originally posted on ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fx.com\u002Frealchendahuang\u002Fstatus\u002F2085410520459604026",[25],"nofollow","X",".",[17,29,30],{},"I've been tinkering with Agent Harnesses like Pi Agent, OMP, ZCode, Codex, and OpenCode lately, and I've finally understood what I actually need.",[32,33,35],"h2",{"id":34},"my-three-criteria","My three criteria",[37,38,40],"h3",{"id":39},"first-a-mature-stable-gui","First: a mature, stable GUI",[17,42,43],{},"I'm used to GUIs and really can't stand TUIs. Chatting in a black terminal box is too painful — you have to memorize a ton of shortcuts and commands just to make it usable. A GUI, on the other hand, just needs you to intuitively click icons and buttons.",[17,45,46],{},"So I need a mature, stable, and good-looking GUI.",[17,48,49,50,54,55,58],{},"This criterion alone ruled out ",[51,52,53],"strong",{},"Pi Agent"," and ",[51,56,57],{},"OMP",". It's not that their cores are bad — it's that the community GUIs built around them are just terrible. Building my own from scratch would take a lot of effort, and these tools are so customizable that a hand-rolled GUI has no portability — switch machines or switch people, and everything starts over from scratch.",[37,60,62],{"id":61},"second-no-vendor-lock-in-no-vendor-favoritism","Second: no vendor lock-in, no vendor favoritism",[17,64,65],{},"Codex does open up configuration interfaces for third-party models, but configuring them is genuinely painful, and third-party models are always \"second-class citizens\" — suppressed by the official models and dragged down by the update cadence, which really annoys me.",[17,67,68],{},"ZCode is even more absurd: there's no way to log into each vendor's Coding Plan via OAuth (for example, Kimi For Code and Grok Build can't be used in ZCode at all, unless you resort to hacky workarounds).",[17,70,71],{},"So I ruled out ZCode and Codex — software with model-vendor favoritism.",[37,73,75],{"id":74},"third-open-source-and-open-to-secondary-development","Third: open source and open to secondary development",[17,77,78],{},"I need to do secondary development and customization based on my own needs, to make it easier to give clients an out-of-the-box experience. So it has to be an open-source, license-friendly product — convenient for me to enjoy, and convenient for my clients to use simply, without all that black-magic hacking.",[32,80,82],{"id":81},"the-final-answer-opencode-openchamber","The final answer: OpenCode + OpenChamber",[17,84,85,86,27],{},"After eliminating everything, the only real choice left is ",[51,87,88],{},"OpenCode",[17,90,91,92,27],{},"But OpenCode is just an Agent core. To pair it with a mature, stable, easy-to-use GUI, I finally found the real answer: ",[51,93,94],{},"OpenChamber",[96,97,98,102,105],"ul",{},[99,100,101],"li",{},"Core: OpenCode, open source, no vendor lock-in, supports models from all vendors",[99,103,104],{},"Interface: OpenChamber, a mature GUI workbench",[99,106,107],{},"Combination: a stable core + a comfortable interface, plus the ability to do secondary development as needed",[17,109,110,111],{},"Open source: ",[21,112,113],{"href":113,"rel":114},"https:\u002F\u002Fgithub.com\u002Fopenchamber\u002Fopenchamber",[25],[32,116,118],{"id":117},"some-reflections","Some reflections",[17,120,121],{},"Choosing a tool is essentially choosing \"who holds the say over you.\"",[17,123,124],{},"No matter how good a closed-source tool is, its update direction, model support, and pricing strategy are all decided by others — you can only passively accept them. With an open-source + non-locked-in combination, you always have an exit, and you always have the freedom to modify.",[17,126,127],{},"As for the TUI vs. GUI debate, don't force it. Tools are for getting work done, not for proving you know the command line. A comfortable interface you can stick with long-term matters more than anything.",[17,129,130,131],{},"Related reading: ",[21,132,134],{"href":133},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash official release deep dive",{"title":136,"searchDepth":137,"depth":137,"links":138},"",2,[139,145,146],{"id":34,"depth":137,"text":35,"children":140},[141,143,144],{"id":39,"depth":142,"text":40},3,{"id":61,"depth":142,"text":62},{"id":74,"depth":142,"text":75},{"id":81,"depth":137,"text":82},{"id":117,"depth":137,"text":118},"2026-08-06","A retrospective on choosing an Agent Harness: three criteria — GUI experience, vendor lock-in, and freedom for secondary development — ruled out Pi Agent, OMP, Codex, and ZCode, and finally settled on the OpenCode core + OpenChamber interface.","md",null,"en",{},6,true,false,"\u002Fblog\u002Fagent-harness-selection",{"title":5,"description":148},"x","blog\u002Fagent-harness-selection.en",[161,162],"AI Agent","Tool selection","EgYmwnSIATz_mQvcny96heYPc2BOWGDHAs3jLwA-kuI",[150,150],[166,168,177,186,192,200,207,214,222,228,235,244,251,259],{"path":156,"title":5,"description":148,"date":147,"minRead":153,"tags":167},[161,162],{"path":169,"title":170,"description":171,"date":172,"minRead":153,"tags":173},"\u002Fblog\u002Fcloudflare-broke-stack","2026 indie dev best practices: the Cloudflare \"broke-ass all-in-one\" stack","The zero-cost tech stack for indie developers: Codex for writing code, GitHub for version control, Stripe for payments, TanStack Start for frontend, Hono + Workers for backend, D1 for database, R2 for storage, KV for caching — all running on Cloudflare.","2026-06-15",[174,175,176],"Cloudflare","Indie development","Tech stack",{"path":178,"title":179,"description":180,"date":181,"minRead":153,"tags":182},"\u002Fblog\u002Fdeepseek-api-web-search","DeepSeek's API has built-in web search — freeload the official search via the Responses API","DeepSeek built web search straight into the API: call deepseek-v4-flash through the Responses interface and declare the web_search tool. No third-party search engine integration, no search API key required.","2026-08-05",[183,184,185],"DeepSeek","API","AI tools",{"path":133,"title":187,"description":188,"date":181,"minRead":189,"tags":190},"DeepSeek V4 Flash stable release, hands-on: cheap, fast, 1M context, built-in search","A few days deep-diving the stable DeepSeek V4 Flash release: aggressively cheap, lightning fast, 1M context, official built-in web search, fully open source. The one weakness is multimodality — but you can patch it by combining other models.",7,[183,191,185],"Model review",{"path":193,"title":194,"description":195,"date":172,"minRead":196,"tags":197},"\u002Fblog\u002Ffree-cloudflare","How free users can squeeze Cloudflare dry — how far does the free tier actually get you?","Cloudflare's free tier can carry an entire personal internet infrastructure: DNS, CDN, Pages, Workers, KV, D1, R2, email, Tunnel, AI Gateway and more.",8,[174,198,199],"Free tier","Deployment",{"path":201,"title":202,"description":203,"date":204,"minRead":196,"tags":205},"\u002Fblog\u002Fmodel-harness-decoupling","The First-Party Harness Isn't Always the Best Answer: In the Open-Model Era, Pick Your Model and Harness Separately","Using Claude? Go Claude Code. In the open-model era that instinct deserves an upgrade. The first-party advantage is real, but training a good model and building a good harness are two different kinds of engineering — here's why models and harnesses are now separable choices, plus a positioning map of five harnesses.","2026-09-09",[161,206,162],"Harness",{"path":208,"title":209,"description":210,"date":204,"minRead":196,"tags":211},"\u002Fblog\u002Fopencode-productive-stack","Stable, Fast, Productive, Cheap: My AI Coding Stack, Documented","OpenCode + OpenChamber + two DeepSeek V4 Flash subscriptions: 15 projects running code simultaneously and the quota barely moved. The full configuration laid out — context pruning, layered memory, desktop automation, and the \"stick with the original pairing\" lesson.",[88,212,213],"AI Coding","Configuration",{"path":215,"title":216,"description":217,"date":218,"minRead":219,"tags":220},"\u002Fblog\u002Fproduct-faxin-principle","The founding-intention principle: why indie developers must learn to let go","Why do you set out? Who do you set out for? Which problem are you actually trying to solve? A product's sharpness comes from what you dare to cut.","2026-06-20",10,[221,175],"Product thinking",{"path":223,"title":224,"description":225,"date":218,"minRead":196,"tags":226},"\u002Fblog\u002Fproduct-pain-vs-itch","Don't get carried away when users say \"that's awesome\": pain points vs. itch points","Verbal approval is worth nothing. There's only one hard standard for judging demand: what the user is willing to pay.",[221,227],"Demand judgment",{"path":229,"title":230,"description":231,"date":147,"minRead":232,"tags":233},"\u002Fblog\u002Fqwen-vision-for-deepseek","Giving DeepSeek multimodality: the Qwen-3.7-Flash vision approach","DeepSeek V4 Flash has no multimodality — what do you do for image understanding? After surveying the market, the most cost-effective option right now is Qwen-3.7-Flash: recognizing an image costs almost nothing, and pairing it with V4 Flash patches the gap.",5,[183,234,191],"Multimodality",{"path":236,"title":237,"description":238,"date":239,"minRead":240,"tags":241},"\u002Fblog\u002Fsub-store-cloudflare","I moved my proxy subscription aggregation to Cloudflare","Merge multiple proxy services plus your own nodes into one single subscription, with routing rules configured server-side — clients just subscribe.","2026-06-28",4,[174,242,243],"Circumvention","Open-source project",{"path":245,"title":246,"description":247,"date":204,"minRead":189,"tags":248},"\u002Fblog\u002Ftui-cognitive-bandwidth","TUI Is Killing Your Cognitive Bandwidth: Time to Shatter the \"Geek Filter\" in AI Coding","A pile of AI coding agents are rushing to ship TUIs, stuffing interaction back into the 1980s terminal paradigm and calling it \"immersive\" and \"respectful of programmers.\" This piece breaks down the three mechanisms by which TUI systematically lowers your cognitive bandwidth — and why Web UI is the right answer.",[212,249,250],"Interaction design","Essay",{"path":252,"title":253,"description":254,"date":255,"minRead":153,"tags":256},"\u002Fblog\u002Fvalue-not-external","Debating whether something has value is itself worthless","Our value is not defined by anyone. In the age of AI, how should we understand ourselves?","2026-06-18",[257,258],"AI thinking","Humanistic essay",{"path":260,"title":261,"description":262,"date":263,"minRead":264,"tags":265},"\u002Fblog\u002Fx-growth-1000-followers","Gained 1000+ followers in a little over a day — here's what I did","In June I ran my X account seriously and gained 1000+ followers in a little over a day. This post records what I did and the feedback I got.","2026-06-16",12,[266,267],"X operations","Content growth",1789752312870]