GLM Is Cheap. Steering It Isn't.
My company pooled its AI budgets a few days back, which is why I've been pushing more work onto GLM. It costs a fraction of what Opus does per token, at least on the frontend and scaffolding work I mostly do. None of that shows up in how much time I spend on a task, because the price tag isn't where GLM's cost actually lives.
GLM reaches me through OpenCode, which talks to Fireworks over an OpenAI-compatible endpoint, which serves GLM off its own infrastructure — three layers, three companies, and any one of them could be why a response drags. The catch isn't the bill, it's latency. Opus responds fast enough that I can correct it mid-task and keep going. GLM at the same price still costs me time, because a cheap answer that arrives slowly costs more attention than a pricier one I can act on right away.
Claude Code has /goal: give it a finish line, and a separate, faster model rereads the transcript after every turn to check whether you've hit it. OpenCode has no native version of that, only plugins bolted on after the fact. Escape doesn't make up the difference either — its issue tracker has a run of reports of the interrupt doing nothing mid-generation, or hanging until restart. A long GLM session ends up with no built-in sense of "are we done," so I read the output myself and steer by hand.
Here's the part that's actually confusing, though. OpenCode already lets Plan and Build run on different models — a fast one for thinking, a strong one for doing. On paper that's exactly the split I wanted. In practice, I don't plan and then build. I build until something makes me stop and think, then keep going, and the toggle wants me to declare which one I'm doing before I've decided. It's a fast/slow split bolted onto a workflow that never actually had two phases.
It isn't free, either. Switching models mid-session throws out the cache — the new model reprocesses the whole conversation from scratch, at full price, with nothing carried over. There's an open OpenCode issue about exactly this: Plan and Build quietly landing on different models kills the cheap caching that's the entire reason to run GLM through Fireworks in the first place.
Claude Code sidesteps this by never switching its main model. The primary session stays on one model the whole way through, cache intact, and when it wants something fast and cheap it spins up a subagent instead — its own throwaway context, running its own model, invisible to the conversation I'm steering. There's no toggle to get wrong, because the split happens underneath the session instead of inside it.
I don't know why OpenCode built a manual toggle instead of something closer to that. Maybe there's a reason I'm not seeing. But the fix looks less like a new feature and more like removing a decision — stop asking me which mode I'm in, and let a fast model handle the judgment calls quietly while GLM keeps doing the work I actually pointed it at.