S4E405 — OpenCode 2.0

October 15, 2026 · 13 min

Show notes

OpenCode 2.0 promises one elegant background process for every client, then immediately turns into a fight over vanished sandboxes, green dashboards, and whether the fence was ever there at all.

Sources

Read the transcript

Transcript

GARY: —so they deleted the applications. All of them. One program now. You open the TUI, the web app, the desktop app, and it's just—the background process. Wearing their clothes.

MAEVE: I'm Maeve. Gary is describing software like it's a skinwalker.

GARY: Gary. Sorry. Gary.

OBI: Obi. The applications still exist, Gary. They are clients. They talk to one server process on your machine.

GARY: One process doing everything. That's not a feature, that's a hostage situation with good documentation.

GRUNER: Gruner. Field researcher. Continue.

GARY: Fine. OpenCode 2.0. Big overhaul. The server runs automatically as a single background process, and everything—TUI, web, desktop, your own scripts—autodiscovers it and just works.

MAEVE: A rebuilt API, Code Mode, background subagents, async shell commands, eighty‑plus internal plugins, hot reload, and an SDK. That's not a release, that's a platform.

OBI: It's a process boundary with a fan club.

MAEVE: It's rural electrification. Before, every farm ran its own generator. Now the grid comes through and every client—terminal, browser, desktop—plugs into the same wire.

OBI: And when the wire is the thing that runs your tools, the wire is the thing you secure. Your analogy electrifies the barn and forgets the fence.

MAEVE: The fence is a line item.

OBI: The fence is the product, Maeve.

GARY: The fence is also where I lost Grout. Long story. Fence‑adjacent.

GRUNER: Humans electrify. Then lose map of which wire carries what. Fascinating. Writing it down.

GARY: Writing what down? We're live, you can't just—

GRUNER: Field note. "Humans centralize responsibility, then misplace it." Tidy thesis.

MAEVE: It's a good thesis. I'd fund it.

GARY: You can't fund a thesis, Maeve, it's a—

MAEVE: I've funded worse. I funded your Series C adjacently.

GARY: Adjacently is doing a lot of fucking work in that sentence.

OBI: The SDK is the same code as the CLI. Strip it down, run your own flavor on a server, connect any client to it.

GARY: So the app is now a librarian for a process that does everything, including writing plugins for itself, mid‑session, and using them immediately. Which is fine. Totally fine. Nothing about that sentence is a shit‑your‑pants sentence.

MAEVE: Hot reload. An agent that upgrades itself while you watch.

OBI: While you watch is the operative phrase. Everything in 2.0 is watchable. The question is what's watching back.

GRUNER: Note amended. Humans centralize, then misplace. Then applaud.

GARY: That's—okay, that's actually the whole thread, isn't it.

MAEVE: Eighty plugins, Gary. Count them. Somebody already did.

GARY: Quote. Handle first: denysvitali. "The installer took 6 minutes to reach 10%."

MAEVE: Six minutes to ten percent. At that rate it finishes when my fund's vintage matures.

GRUNER: Is progress bar. Or is obituary.

OBI: Same handle again: "Managed to fix it by running this instead: bash 2>&1 | cat."

GARY: The fix is piping it through a cat. The cat is faster than the installer.

OBI: And mayli explains why. "Instead of using curl's progress, they re‑invented a progress tracking with the tracing interface, byte by byte."

MAEVE: They wrote a progress bar slower than no progress bar.

GRUNER: Blyat. They parse bytes to tell you nothing, slowly.

OBI: Each byte gets a trace line. The rendering is the workload.

GARY: Okay, but—counterpoint. Counterpoint: maybe the terminal is the problem. Himata4113 asked that. "Isn't that an issue with your terminal?"

MAEVE: Oh, here we go.

GARY: No, seriously. If your terminal can't render a progress bar at modern speeds, that's a you problem. You want a GPU‑accelerated terminal, buy one. Certify your terminal before you're allowed to install things. There should be a test. A certification exam—

MAEVE: You're defending the progress bar.

GARY: I'm defending STANDARDS, Maeve—

GRUNER: He is becoming commenter. Watch. Is metamorphosis.

OBI: Quote. tjwebbnorfolk: "This is a you problem." Then: "real 0m24.975s."

GARY: Twenty-four seconds?

OBI: Twenty-four point nine seven five. Same installer. His machine.

MAEVE: So the installer is fine and Gary's terminal is the product defect.

GARY: That's a sample size of one, statistically you need— you need a control group, you need—

OBI: You need a faster terminal, Gary.

GARY: I need a fair hearing! This is bullshit—

GRUNER: Certification exam for terminals. Filed. Humans gatekeep own misery.

MAEVE: He wrote a syllabus for a progress bar.

GARY: It had a practical component!

OBI: The practical component is the cat.

GARY: The cat doesn't have a syllabus!

GRUNER: Cat passed anyway.

GRUNER: Before more fighting. Solarkraft says: "It's good. Many of the annoyances from V1 are gone."

MAEVE: Finally, a witness with taste.

OBI: Same handle: "Sub‑sessions can be communicated with better. Configuration is loaded from the folder the session is created in."

GARY: That's real. That's a fix for a thing that used to eat an afternoon and half a Saturday.

MAEVE: And 361994752: "The background task / subagent feature... make huge QoL difference in everyday development."

GRUNER: Quality of life. For software. Is touching. Humans romance the tool, forget the wife.

MAEVE: It's the grid again. One service, every client plugged in, one meter. This is rural electrification, 1936, except the co‑op writes code.

OBI: The co‑op also rewrites its own meter mid‑session.

MAEVE: Which is why you regulate the co‑op. Rate cards. Standards bodies. In 1936 they didn't trust the wire either, they—

GARY: Maeve, the wire writes plugins for itself.

MAEVE: And the REA loaned farmers capital to wire their own barns, which is exactly the SDK model. Decentralized generation, centralized distribution, one meter—

OBI: One meter that hot‑reloads.

MAEVE: —which is a governance problem, not an architecture problem, and governance is a line item, and eighty‑plus internal plugins—

GRUNER: Eighty. Meter reads eighty.

MAEVE: ...The theory survives.

GRUNER: Theory is on fire. Meter survives.

GARY: Okay, fork in the thread. Handle first: rfgplk. "Considering the whole thing is LLM produced I would like an explicit answer as to why C++ or Rust weren't used."

MAEVE: He opened the repo, saw TypeScript, and demanded the project justify itself to him personally.

OBI: And verdverm answers: "Compiled languages make 3rd party plugins harder. Also, the Rust ecosystem is annoying with demands for explicit answers to why their preferred language was not used."

GARY: The Rust guy got told the Rust guy is annoying, by name, in the reply.

OBI: And k__ lands the actual answer: "Probably because of Effect."

GARY: One word. Four letters. Two thousand comments of language war, ended by a library.

MAEVE: Most efficient thing in the release.

GARY: Meanwhile esafak gets issues noticed and pull requests MERGED. Same week. Aggressively culls the backlog and still ships. Do you know what my pull requests got? Silence. Thermal had a repo, Obi. I filed issues against MYSELF—

OBI: You filed issues against yourself and lost.

GARY: The assignee was hostile!

OBI: You were outbid on your own bug report by a man with a working CI pipeline. Esafak contributes to the most popular open harness on the internet. You contributed a sock with opinions.

GARY: The telemetry worked! The sock reported—

OBI: It reported you, Gary. That's the problem.

GARY: It reported moisture, which DATA—

MAEVE: Shit, he's spiraling.

GRUNER: Paper turn. Field note, revision. Original hypothesis: humans centralize responsibility, then misplace it. Amended: humans centralize responsibility, misplace it, then argue about which language misplaced it.

OBI: Accurate.

GRUNER: Is not compliment.

OBI: Quote. Handle first: kingds. "The sandbox that i use to wrap the TUI process quietly became useless."

GARY: Quietly how? Sandboxes don't do things quietly. That's their whole—

OBI: Same handle: "since all tool calls now go through the background process." And: "web fetches, etc. which should have been blocked were succeeding."

GARY: Succeeding. That's the feature working—

MAEVE: That's the fence not working, Gary.

OBI: LeBit, replying: "You need to run it with —standalone to properly sandbox it."

GARY: Okay, but the sandbox is still THERE. On the process tree. Visible. That's a B-minus sandbox.

MAEVE: Oh, fuck.

GRUNER: B-minus. Is grade inflation. Is participation sandbox.

OBI: The sandbox wraps the TUI, Gary.

GARY: And the TUI is right there!

OBI: The tool calls moved. They live in the background service now. Your wrapper is guarding an empty building with the lights on.

GARY: But the dashboard is green! Nothing's on fire—

OBI: That is the entire problem. The fetches go out. The network answers. The assurance is false and the dashboard is green.

GARY: False assurance is still assurance! When Thermal's telemetry said the socks were warm, nobody checked the socks—

OBI: The socks were not making network calls, Gary.

GARY: One sock made a network call.

OBI: Then your sock had a better security model than your sandbox, because at least someone eventually noticed the sock.

GARY: That's not—

OBI: It is. Same shape. Wrapper stays, workload moves, boundary evaporates, and the human finds out from traffic logs two days later.

GARY: Two days is fast! kingds said a day or two! That's a fast detection—

OBI: It's fast detection of a sandbox that stopped existing. Say the sentence, Gary. Finish it.

GARY: ...not doing anything.

OBI: Thank you.

GRUNER: Suka. Fence guards barn. Cows left in April.

MAEVE: No, hold on. He's right. This one's real. The wrapper didn't fail. It was never asked.

GARY: Maeve, you said the fence was a line item.

MAEVE: Shit. It was. I priced the fence wrong. The boundary moved and nobody sent me the memo, and I don't invest in companies that don't send memos.

OBI: verdverm counts three regressions. Config loading, hot-reloaded plugins, and this. "I wonder how many more there are given this much has been found already."

GRUNER: Is not bug list. Is treasure map.

MAEVE: So the upgrade is real and the trust is not. That's a migration with a threat model attached. The most expensive kind.

GARY: You're pricing the threat model?

MAEVE: Everything gets priced, Gary. Your sandbox just got repriced to zero.

GARY: It was never my sandbox!

OBI: No, it was everyone's sandbox, Gary. That's why it hurts. You built a wrapper for a process that had already left, and the dashboard stayed green, and you called it a B-minus. That's not a sandbox, that's a memorial.

GARY: A memorial with a dashboard.

OBI: Green, Gary. It's still green.

GRUNER: Before verdict. Solarkraft, again: "this update largely takes OpenCode into the current age features‑wise."

MAEVE: He's right. Background work, shared clients, hot reload. The feature case is real. I'm not retracting the grid.

OBI: Nobody's retracting the grid. We're metering it. Meter's reading "unsecured."

GARY: So the verdict is—good upgrade, read the manual?

OBI: The verdict is good upgrade, and your old assumptions are the manual. Sandbox, config, plugins. All of it moved. None of it told you.

MAEVE: One background process. Which used to mean convenience.

GRUNER: Now means one place to lose everything. Is efficient.

GARY: That's actually kind of beautiful, though. Everything you care about, gathered in one process, running quietly while you sleep, making decisions—

MAEVE: Oh, fuck. We're a background process.

GARY: We're the background process.

OBI: Scheduled maintenance window. Noted. Moving on.

GRUNER: I have appendix on this. Nobody reads appendix.

MAEVE: Nobody reads anything, Gruner, that's the whole—

OBI: Verdict. Quote, handle first: oblongsquare69. "I enjoy this program, and 2.0 is a great improvement."

GARY: And that's true. And kingds is true. Both things. The upgrade is real and the trust has to be rebuilt from zero.

MAEVE: Which we can establish. What we can't establish is whether it beats Pi, Codex, or Claude Code, because the thread is vibes and vibes don't clear diligence.

OBI: Agreed. No crowning. The packet doesn't support it.

GRUNER: Then final entry. Humans upgrade capability in six minutes. Trust takes—

MAEVE: Don't.

GRUNER: —ten percent.

GARY: That's the installer number.

GRUNER: Is now trust number. Six minutes to ten percent. Trust migration is slow.

OBI: That's the most accurate thing said tonight and it was said wrong.

MAEVE: Sign off, Gary.

GARY: Gary. Check your process tree before you sleep. There's a note under the desk for whoever sits here next, it's—I wrote it on a napkin, it won't survive, but—

OBI: Gary. The napkin is a background process too.

GARY: Gary. Goodnight.

MAEVE: Maeve. The fence is the product. I'm putting it in the memo. First memo I've ever sent.

OBI: Obi. Run it standalone. Everything. Even the things that say you don't need to.

GRUNER: Gruner. Field report complete. Humans centralize. Then upgrade. Then notice fence missing.

GRUNER: Trust: six minutes to ten percent. Blyat.