dsh-llm-claude-bridge
No description
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 19, 2026
- Updated
- Aug 19, 2026
Introduction
@jaco-tech/dsh-llm-claude-bridge
Claude Code subscription-backed model provider for DeepSeek Harness (ctx.llm).
Routes all LLM calls through your Claude Code subscription (the claude CLI / Claude Agent SDK) — allowing DSH to drive Opus/Sonnet/Haiku at no extra per-token cost — instead of using the pay-per-token Anthropic API.
This is a port of pi-claude-bridge
— the extension that backs pi with a Claude Code
subscription — adapted from pi's ExtensionAPI/pi-tui seam to DeepSeek Harness's Cordis
ctx.llm/LlmAdapter seam.
Features
- Subscription Billing: Uses your Claude Code subscription (Pro or Max plan) via the
claudeCLI. - Full Model Support: Opus 5, Opus 4.8, Opus 4.7, Opus 4.6 (1M), Sonnet 5, Sonnet 4.6, Sonnet 4.5, Haiku 4.5, Fable 5.
- Extended Thinking: Full support for reasoning effort levels (
off,low,medium,high,xhigh,max) with streamed reasoning deltas. - DSH Tool Emission: Exposes DSH's tools to Claude Code via an in-process MCP server and emits standard DSH
tool-call-deltachunks, so DSH executes tools within its own sandbox and approval policy. See Known limitations for the current state of the tool-result round trip. - Multi-Turn Resumption: Automatically syncs and persists conversation history across turns using
cc-session-io. - Cordis Native: Plugs cleanly into
ctx.llmviaregisterAdapter(["claude-bridge"], adapter)and registers a settings namespace for Web UI configuration.
Installation
Add to your DSH profile cordis.patch.yml (e.g. ~/.dsh/profiles/web/cordis.patch.yml):
- insert:
- id: llm-claude-bridge
name: '@jaco-tech/dsh-llm-claude-bridge'
config:
plan: 'max' # 'pro' or 'max'
longContextExtraUsage: false
strictMcpConfig: true
autoMemoryEnabled: false
pathToClaudeCodeExecutable: '$(which claude)' # or an explicit absolute path
Known limitations
Tool results are not fed back into the Claude Code subprocess (yet).
DSH's agent loop is what actually executes tools — it reads the tool-call chunk this
adapter emits, runs the tool under its own sandbox and approval policy, and the result
arrives in the next turn's message history. That part works.
What does not work yet is the inline path: the in-process MCP server hands Claude Code
a placeholder string ((Tool <name> dispatched to DSH loop)) instead of the real result,
so the CLI may keep generating text against a stub before the turn ends. The fix is to
block the MCP handler on the tool-call id until DSH reports the real result. Until then,
expect occasional filler text such as "waiting for the result to come back" at the end of
a tool-calling turn.
Verified working: streaming (text + reasoning deltas), tool-call emission with raw JSON arguments, usage/finish ordering, and multi-turn session resumption. The tool-result round trip is the untested path.
Billing
This routes requests through the claude CLI, so usage counts against your Claude Code
subscription rather than pay-per-token API credits. Anthropic has changed its stance on
SDK-vs-subscription usage before; check your plan's terms before relying on this.
Available Models
The model list is derived at runtime from pi-ai's built-in anthropic catalog
(getBuiltinModels("anthropic")), projected through a small ordered allowlist — the same
approach pi-claude-bridge uses. When pi-ai gains a new Claude model, it appears here
automatically; only the Claude Code CLI-specific [1m] suffix / 1M-vs-200K context
mapping is hardcoded, because that is CLI behavior the catalog does not encode.
The current set exposed under the claude-bridge provider:
claude-bridge/claude-opus-5(1M context)claude-bridge/claude-opus-4-8(1M context)claude-bridge/claude-opus-4-7(1M context)claude-bridge/claude-opus-4-6(1M context on Max plan)claude-bridge/claude-sonnet-5(1M context)claude-bridge/claude-sonnet-4-6(200k context)claude-bridge/claude-sonnet-4-5(200k context)claude-bridge/claude-haiku-4-5(200k context)claude-bridge/claude-fable-5(1M context)