Obsidian has quietly become the front end for AI agents. Two plugins make that work: Agent Client and its fork Agent Console. Both run Claude Code, Codex, Gemini CLI, OpenCode, and any other ACP-compatible agent inside your vault, let you @mention notes for context, and surface permission prompts before anything runs.
Same foundation (the Agent Client Protocol, the same JSON-RPC stdio transport Hermes uses over ACP). But they’ve diverged hard.
Agent Client by RAIT-09 is the ancestor. It’s the biggest and most battle-tested — 2,358 stars, 227k+ community downloads, 504k+ release downloads, Apache-2.0, TypeScript.
Most AI coding tools take the same approach: give one agent a prompt, let it run, hope it doesn’t forget the process halfway through. TAKT flips that — the workflow owns the process, not the agent.
takt (nrslib/takt) — 1,277★, TypeScript, MIT. Defines AI coding workflows as YAML pipelines: plan → implement → review → fix → re-review. Each step gets its own persona, context, permissions, and output contract. Agents execute the steps; the workflow decides what happens next.
The context window is the most expensive resource in AI coding. Every token you save is money, speed, and accuracy. The question is how you save them.
Three approaches have emerged in the last year, and they represent genuinely different philosophies about where the savings should come from.
The viral HN #1 darling. An MCP server that sandboxes tool output (98% reduction), persists session state to SQLite, and enforces a “think in code” paradigm — instead of reading 50 files into context, the agent writes a script that computes the result and logs only the output.
Here’s the scenario: You have OpenCode running as your ACP agent. IntelliJ IDEA connects via one plugin. AgentBridge connects via another. Both work fine individually. Run them at the same time? One breaks.
This isn’t a bug in your IDE plugin. It’s not a bug in AgentBridge. It’s an architectural property of how OpenCode’s ACP transport works.
OpenCode’s opencode acp command uses stdio transport — JSON-RPC 2.0 messages flow over a single stdin/stdout pipe. The relevant code in packages/opencode/src/cli/cmd/acp.ts creates one WritableStream for stdout and one ReadableStream for stdin. These are wrapped by ndJsonStream from the @agentclientprotocol/sdk for newline-delimited JSON framing.
PocketBase is a single Go binary that gives you a full backend out of the box — SQLite-backed REST API, real-time WebSocket subscriptions, auth (OAuth2, email/password), admin UI, and file storage. 60,374★ on GitHub, MIT licensed.
Links & Stats 👉 https://github.com/pocketbase/pocketbase
![]()
![]()
![]()
No Docker, no database server, no config files. Just ./pocketbase serve and you’re running. This lines up perfectly with the no-daemon philosophy — one static binary, nothing else to manage.