dsh-oh-my-claude
Manifest validClaude Code CLI as an LLM provider for dsh: live model list, per-session resume, approval relay, images, a memory/rewind/changes panel, and workspaces on remote SSH boxes.
Oh My Claude
Claude Code, native inside dsh
Drive your logged-in Claude Code CLI as a first-class dsh provider: no API key, no extra services, no runtime dependencies.
Built with AI assistance, and open to more. Contributions from AI coding agents are welcome; start with CONTRIBUTING.md.
Claude Code CLI as an LLM provider for dsh. Every request drives claude -p with stream-json in and out, so it uses whatever login, hooks, CLAUDE.md files, MCP servers and rate limits Claude Code already has. No API key needed. The plugin speaks the CLI's own protocol (the one the Agent SDK wraps) directly, so it has no runtime dependencies.
Tour

The shield is dsh's own control. In a Claude session its rows become Claude's six permission modes, each labelled with the dsh access level it sets underneath.

One ✻ button beside the composer opens the whole plugin: Memory, Instructions, Rewind, Changes, MCP, Asides, Diagnostics, Tasks and Tune, plus a Restore tab while the session is still blank.


Cost and cached token count, two figures dsh cannot compute, join dsh's footer stats row. The pill turns orange once a session passes the spend line you set. The dollar figures are what the turns would cost at API rates; on a Claude subscription you are not billed them.

Plan usage and the CLI's own context breakdown live in dsh's context ring popover. On a phone the panel becomes a sheet.

Once an SSH box is saved, dsh's own Add workspace dialog gains a box dropdown: a folder on that box becomes a workspace here, and the session in it runs Claude Code there.
Shots by tools/playwright/tour.ts.
Install
You need the Claude Code CLI on PATH and logged in (claude --version works, claude opens without asking you to sign in), and dsh 0.1.5-rc.1 or newer. Nothing else: no API key, no Node build step.
dsh plugin --profile web add dsh-oh-my-claude # from npm
dsh plugin --profile web add github:lcestou/dsh-oh-my-claude # or straight from the repository
systemctl --user restart dsh-web.service # or restart `dsh web` however you run it
The package declares a dsh bundle, so dsh plugin add registers it in the profile by itself. After the restart, "Oh My Claude" appears in the model picker with the models your login can use. Pick one and chat.
If the picker lists it as Oh My Claude (not logged in), run claude auth login in a terminal on the box that runs dsh, or press Log in under Settings → Oh My Claude → Boxes.
When a newer version is on npm, an orange pill with the version number appears in Settings and on the panel's Runtime line; a click copies the update command. Details, and the one repair a dsh upgrade can call for, are under Plugin updates.
Optional, in ~/.dsh/settings.yaml:
agent-default-model: # make Claude Code the default for new sessions
provider: claude-code
model: claude-fable-5-1
subagent-model-selection: # let dsh subagents run on Claude Code too
enabled: true
allowedModels:
- provider: claude-code
model: claude-haiku-4-5
Working on the plugin itself? Start at docs/developing.md.
What you get
- Any Claude model your login can use, in dsh's own picker. Models
- Every dsh session resumes its Claude Code session, tool history included, and a terminal
claude /resumesees the same one. Sessions - Restart dsh without killing a running Claude turn. Restarts
- dsh's access shield sets Claude's six permission modes per session. Permission mode
- Claude's permission prompts, questions and plan reviews become dsh dialogs. Approvals
- One spark button opens Memory, Rewind, Changes, MCP and six more tabs. The panel
- Cost and cached tokens in dsh's footer, with a spend line that turns the pill orange. Cost pill
- Plan usage (5-hour, weekly, extra usage) in dsh's context ring. Plan usage
- Restore or import any past Claude transcript, from dsh or from a terminal. Session browser
- Claude's slash commands and skills show up in dsh's slash menu as
/claude-<name>. Command bridge - Claude gets dsh's subagents, jobs, goals and web search over MCP. dsh tools over MCP
- Edit CLAUDE.md, settings.json and MCP servers from the panel, on this box or a remote one. Instructions, settings.json editor, MCP
- Run Claude on another box over SSH, or mount several accounts. Remote boxes and accounts
- Report a problem with a redacted box report, copied or filed as an issue. Report a problem
- All the orange is a switch, per group, any colour. Claude look
- Pick what dsh adds to your prompts, with the size of each block on the label. dsh context
Defaults you never have to touch, such as secret redaction in tool results and surviving the CLI's own updates, are on How it works.
Configure
Plugin settings live under Settings → Oh My Claude, or as config: on the bundle row in the profile's cordis.patch.yml. Three keys people change first:
permissionMode: dsh # follow the session's shield (default), or pin one of the CLI's six modes
spawn: keeper # Claude outlives a dsh restart (default); node or dsh for a plain child
sshHost: "" # "[user@]host" drives a claude on another machine over ssh
Every key, with its default, is in docs/configuration.md.
Remote boxes and accounts
Mount the plugin twice with different configDir values for two logins. List other boxes running dsh and this plugin under Settings → Oh My Claude → Boxes and jump between them. Or give a box a name and user@host and drive the claude there over SSH, with nothing on the far side but the CLI; Tailscale and WireGuard peers appear as hosts to pick from. All of it is on docs/remote.md.
Not covered
- dsh's shell and file tools are not proxied (except
bashfor background jobs); Claude Code uses its own, under its own permission mode. - Claude Code sessions are not deleted when dsh sessions are.
Bugs and feedback
Found a bug, or something that reads wrong? Open an issue at github.com/lcestou/dsh-oh-my-claude/issues with the dsh and Claude Code versions (dsh --version, claude --version) and what you expected to see. Settings → Oh My Claude → Report a problem writes that report for you.
License
MIT.
Claude, Claude Code and the Claude spark mark are trademarks of Anthropic, PBC. This project is an independent dsh plugin that drives the Claude Code CLI you already have; it is not made, endorsed or supported by Anthropic. The spark is drawn here only to say which sessions and controls belong to Claude Code, in the way the CLI itself draws it.
Similar plugins
LLM provider that runs the locally installed Claude Code CLI as the model backend, so requests go through an existing Claude subscription instead of a metered API key; native tool calls are bridged ov
★ 0
dsh plugin --profile web add dsh-claude-cliRun the main session model on a local Claude Code subscription through the official Claude Agent SDK, taking over the llm/stream route for the claude-code provider, with token-level streaming, session
★ 0
dsh plugin --profile web add dsh-claude-driverby Norman-else
Run Claude Code as a first-class DSH conversation while preserving its native agent loop, tools, skills, hooks, and MCP integrations in DSH.
★ 5
MIT
TypeScript
Sep 12, 2026
dsh plugin --profile web add @norman-else/dsh-claudeby zhangjunjesse
Delegates a self-contained coding task to the local Claude Code subscription through the official Claude Agent SDK, and adds a session tab with live output, cost and remaining quota.
★ 3
MIT
TypeScript
Sep 7, 2026
dsh plugin --profile web add dsh-claude-codeImport local Codex CLI/Desktop, Claude Code CLI, and Claude Desktop conversations into DSH with project grouping, semantic history, and tool activity; bind an existing or replacement workspace and con
★ 0
dsh plugin --profile web add dsh-assembly.resumeCommand Code LLM provider plugin adapted for DSH-Desktop 0.7.1: registers a commandcode route, with a live model catalog, reasoning-effort support, and real-time plan usage display.
★ 0
dsh plugin --profile web add dsh-commandcode