Soul-Desktop: Multi-Provider Native Chat Client
What it does
Soul-Desktop, tool-call cards, Claude to Gemini switch, session replay
One native window over four agent providers. Project sidebar on the left with worktree groups (every git worktree is a first-class context, not a folder I forget about). Sessions on the right, with one chat surface that adapts to the active provider: Claude Code, Gemini, Pi, or Codex.
The walkthrough proves three beats:
- Inline tool-call cards. When the agent reads a file, runs a command, or proposes an edit, the result renders as a structured card in the conversation. No raw JSON, no “click to expand”; the tool call is part of the conversation.
- Side-by-side providers. Same prompt to Claude, then to Gemini, both working in the same project. Multi-provider isn’t a tab. It’s a session-switch over a shared registry.
- Session replay. Every session is reconstructible from the registry on disk. Scrub the timeline, watch the turns reconstruct, jump to any moment. The same registry
soul_viewreads from, with a richer reconstruction surface.
Why a native client over the CLIs
The CLIs are excellent for single-agent linear work. They get awkward when you want to:
- Compare two providers on the same task without copy-paste theater.
- Keep three worktrees of the same repo straight in your head.
- Re-read what an agent did three days ago without grepping JSONL files.
- Send the next message before the current turn completes.
Soul-Desktop is the surface I wanted but couldn’t find. The CLIs stayed; this is what sits on top of them.
Architecture
- Protocol layer. ACP (Agent Communication Protocol) for the providers that speak it, with per-provider adapters for the ones that don’t yet. The provider differences live in adapters, not in the UI.
- Registry-backed. Every session, tool call, and decision lands as JSON in the local session registry, the same disk-based source of truth that powers
soul_view. Two surfaces, one contract. - Worktree-aware sidebar. Projects in the registry are partitioned by git worktree, so switching contexts is one click instead of
cd ~/Code/foo-feature-branch.
What it’s part of
Soul-Desktop is the GUI face of Soul OS, the broader system I run on top of the local agentic stack. The thesis is the same one soul_view demonstrates: filesystem-as-source-of-truth for agent memory beats vector stores for most personal workflows, and the right interfaces make that disk-backed state feel native.