Skip to content

Releases: lcestou/dsh-oh-my-claude

1.5.8

Choose a tag to compare

@lcestou lcestou released this 26 Oct 16:29
de7db2c

dsh: runs on 0.2.0-rc.1 through 0.2.1-rc.4; built and tested on 0.2.1-rc.4.

Fixed

  • On Windows, a command configured as an absolute path (C:\...\claude.exe) read as "not on PATH" and "not logged in" even though --version and auth status answered. The status probe asked where about it, and where takes the drive letter's colon for its path:pattern syntax and exits 2 with "Invalid pattern". A path is now its own answer. Thanks to @windybirth (#191, #192).
  • A skill dsh serves runs again when you type it in a session on another model, such as /mint in a local-model chat. Since 1.5.7 the plugin's copy of the command caught the line and refused it, because it registers every skill Claude Code lists. It now refuses only when dsh has no skill of that name. Thanks to @namastex888, whose Omni fork found it.
  • On Windows, Claude Code installed with npm i -g @anthropic-ai/claude-code is found when the plugin's command is the default claude. The lookup took npm's extension-less #!/bin/sh shim, which Windows cannot run, so every spawn failed and Settings showed "not logged in". A bare name now matches only claude.exe, and npm's folder answers with the binary under its node_modules. Thanks to @windybirth (#191).

1.5.7

Choose a tag to compare

@lcestou lcestou released this 25 Oct 04:04
a5b3e7b

dsh: runs on 0.2.0-rc.1 through 0.2.1-rc.3; built and tested on 0.2.1-rc.3.

Fixed

  • Installing from the repository (github:lcestou/dsh-oh-my-claude, as the README describes) works again. pnpm refused it with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED, because the package asked to run a build on install. The build is already in the repository, so that step is gone. Thanks to @namastex888, whose Omni fork made the same change.
  • The plugin's slash commands (/btw, /temporary, /ultracode and the Claude Code commands it bridges) refuse in a session that runs on another provider, and say which. Before, the bridged line went to that model as a message and the toggles reported a change nothing used. A session nobody picked a model for counts as running on dsh's default model, the way dsh itself routes it. Thanks to @namastex888, whose Omni fork found it.

1.5.6

Choose a tag to compare

@lcestou lcestou released this 23 Oct 16:07
a5769b0

dsh: runs on 0.2.0-rc.1 through 0.2.1-rc.3; built and tested on 0.2.1-rc.3.

Changed

  • The model picker lists the models your Claude Code offers. Older models from the built-in list or the Models API that Claude Code no longer offers are left out, so a model Anthropic retires leaves the picker when Claude Code drops it. A session still on such a model keeps working. Opened while idle, it moves to the newest listed model of the same family, as it already did when the CLI renamed a row. Adding a model's full id to modelPicker.options in settings.json keeps it listed. Answers the question @namastex888 asked on #183.

Fixed

  • A usage window that is full no longer shows "at this pace the cap lands at …". The cap has already landed, so the row shows only when the window resets. This covers the 5-hour, weekly and per-model (Fable) windows.
  • A modelPicker.options row written without the claude- prefix (opus-4-5) keeps its effort levels, so a session on it no longer fails its turns when an effort is set.
  • A model newer than the built-in list is named from its id ("Claude Opus 5.5") when the Models API cannot be read, instead of the CLI's bare "Opus". The context window a session reports is kept across restarts.
  • A box that has not run a Claude session yet lists the models its Claude Code offers, not the built-in table, which predates Opus, Sonnet and Haiku 5.5. That table was the first listing whenever there was no cli-models.json from an earlier session and no login file the Models API could use (on macOS Claude Code keeps the login in the Keychain). Now the first listing of a boot starts one short-lived claude -p, sends it list_models and nothing else, so no model is called. It waits at most 5 seconds and saves the answer for the next boot. A CLI that is missing or logged out leaves the listing as it was, and an ssh box still learns its models from its first session. Thanks to @namastex888 (#183).
  • A CLI row for a model newer than the built-in table keeps its own id and name. Rows matched a known model by prefix, so Opus 5.5 (claude-opus-5-5) showed up under Opus 5's id as "Claude Opus 5". Only the same id, or that id with a date suffix, matches now. Thanks to @namastex888 (#183).

1.5.5

Choose a tag to compare

@lcestou lcestou released this 22 Oct 15:52
746305e

dsh: runs on 0.2.0-rc.1 through 0.2.1-rc.2; built and tested on 0.2.1-rc.2.

Added

  • Each plan window in the context ring popover says where it is heading at the current rate: the percent it ends at, or the time the cap lands, with the weekday once that is more than a day away. Nothing shows in the first 5 % of a window, when any first call reads as a runaway rate.
  • A context nudge above the composer once a session's window is 75 % full: how full, what the next prompt carries, and a Compact button that sends Claude's own /compact as the next prompt. Dismiss keeps it down until the next 10 %. On by default; Settings → Oh My Claude → "Compact nudge" turns it off, and a picker under it moves the threshold.
  • A Run button on every shell code block Claude writes (bash, sh, zsh, shell, console, shellsession). It writes the snippet into the composer as a prompt, fenced under "Run this:", and leaves the sending to you, so it runs through Claude's own Bash tool and dsh's approval; nothing runs from the click itself.
  • Session names travel both ways. A name typed into dsh's sidebar reaches Claude Code before the next prompt (rename_session), so claude --resume lists it; a name the CLI reports (session_title_changed, a name someone set, never its generated title) renames the dsh session. dsh's own generated or fallback titles are not sent, so they never overwrite the CLI's.
  • The MCP tab shows a tool count on each server row.
  • A model the API lists that the installed Claude Code's picker does not, released after every model the CLI offers, carries "Newer than the installed Claude Code; update the CLI to unlock it" in the picker.
  • Settings → Oh My Claude → "Suggested next prompt": after each reply, Claude's own guess at your next prompt appears above the composer with Use, which writes it into the box, and Send, which sends it as it is; it folds away while you type something else and comes back if you clear the box. On by default, as in the Claude Code terminal, and the switch turns it off; it costs one small model call per turn, nearly all of it cache reads, and the CLI sends a guess only when it has one it trusts.
  • Claude's background tasks and subagents are listed on the panel's Tasks tab while they run, each with Stop; a shell or Monitor task also has Output, the last 8 KiB it wrote.
  • A subagent's row in the chat shows each step the CLI reports for it ("Running Count lines in src/process.ts"), not only the tool name, plus the CLI's own one-line progress summary when it writes one, while the turn that started the subagent runs.
  • When Claude Code is billing an ANTHROPIC_API_KEY from dsh's environment instead of your login, the session says so in one line at its start.

Fixed

  • The plugin's resume.log under its state directory is trimmed to its newest 2 MB once it passes 4 MB; it grew without bound before.
  • Suggestions keep coming once a plan window passes its 75% warning. The CLI mutes its guesses there (and after twenty in a row nobody took, which over stream-json is all of them); the plugin now starts each session with the CLI's own override for both. A limit that is reached still mutes them.
  • On a phone the suggestion card's Use, Send and close stay together on one line under the text, instead of Use on the text's line and the other two dropping alone.
  • The suggestion card no longer flashes back for a moment when you send your own message over it: a fold now outlasts the typing by a beat and holds while the turn runs, until the server clears the guess.
  • A new session now gets suggestions from its second reply on. The request that switches them on was reaching the CLI a beat after the first prompt, inside the first turn, and the CLI then never suggested anything for that session; it goes out ahead of the first prompt now.
  • Claude's multiple-choice questions keep the preview text of each option (a mockup, a snippet), shown under the question. It was dropped before.
  • The panel's Restore tab no longer shows the previous workspace's transcripts for a moment after a switch to a new session in another workspace.
  • A slash command typed in the composer takes the plugin's accent again on dsh 0.2.1-rc.2, which draws it as a chip of its own; it had gone back to dsh's blue.

1.5.4

Choose a tag to compare

@lcestou lcestou released this 19 Oct 15:00
cc7f301

dsh: runs on 0.2.0-rc.1 through 0.2.1-rc.2; built and tested on 0.2.1-rc.2.

Added

  • On dsh 0.2.1-alpha.5 and later, Claude's model names take the plugin's accent in the composer's model picker: the trigger, the menu's current value and every Claude row. Other providers' rows are unchanged, dsh's own badges on them still show, and an older dsh draws the picker as before.

Changed

  • Claude look's Customize fold has two more checkboxes, split out of "Links, rules and quotes": one for the composer's command text, chips and cursor, and one for Claude's model names in the model picker. Each can now be turned off on its own. If you had turned "Links, rules and quotes" off, both new ones start off too.

Fixed

  • When dsh cannot reach anyone to approve a tool, or the request is cancelled, Claude is told that nobody refused it and not to retry in a loop, instead of the bare words approval unavailable. One reported session retried for half an hour. Thanks to @echobeijingecho for the report and the patch it grew from (#170).
  • dsh's Plugins page lists the plugin as "Oh My Claude" with its description, in English and Chinese, instead of the npm package name.
  • The Add workspace dialog can open an empty folder on an SSH box, or one with no hidden files, when the box's login shell is zsh (the default on macOS). Listing such a folder failed with no matches found: * and left Open disabled.
  • On DSH Desktop, Claude sees the dsh tools again. There the MCP bridge is served from the plugin's own listener on 127.0.0.1 instead of only from dsh's web server: Desktop gates every web server route behind its browser-access check, which answered the CLI's MCP requests with 403, so no dsh tool ever reached Claude. The web server route stays registered as a fallback, and the listener rebinds its remembered port across restarts, so a keeper-mode Claude that outlived dsh keeps both its URL and its key. Plain dsh web has no such gate and is unchanged. Thanks to @sulingqingQAQ (#165).

1.4.2

Choose a tag to compare

@lcestou lcestou released this 19 Oct 15:00

dsh: runs on 0.1.5-rc.1 through 0.1.7-rc.2; built and tested on 0.1.7-rc.2.

For dsh 0.1.x only. On dsh 0.2, use 1.5.x (the latest npm tag). Install this one by its tag so pnpm stays on the 0.1 line:

dsh plugin --profile web add dsh-oh-my-claude@dsh-0.1.7

A plain dsh plugin update follows the ^1.4 range up to 1.5, which needs dsh 0.2.

Fixed

  • When dsh cannot reach anyone to approve a tool, or the request is cancelled, Claude is told that nobody refused it and not to retry in a loop, instead of the bare words approval unavailable. One reported session retried for half an hour. Thanks to @echobeijingecho for the report and the patch it grew from (#170).

It is 1.4.1 plus this fix and nothing else. The same fix is on the 1.5 line (#171).

1.5.3

Choose a tag to compare

@lcestou lcestou released this 08 Oct 14:37
6962e0d

dsh: runs on 0.2.0-rc.1 through 0.2.1-alpha.1; built and tested on 0.2.1-alpha.1.

Added

  • /ultracode turns Claude Code's ultracode on or off for a session without relaunching it. /ultracode status says what Claude Code confirmed, including when the session's model does not offer it.

Changed

  • Changing the effort level on a running session no longer relaunches Claude Code. The switch is made inside the running process, the way a model change already was, so the next message starts without the relaunch and the session keeps its MCP connections. A Claude Code too old for the request, or a model without effort levels, is relaunched as before.
  • The Restore tab leaves out sessions that hold only commands Claude Code answers by itself, such as /usage or /model, with no conversation. Opening one failed, since there was nothing to restore.
  • The Memory tab says where it looked. An empty list names the directory it read, so a list that is empty because Claude has written nothing can be told from one read from the wrong place. A list that could not be fetched shows the failure instead of reading as empty.

Fixed

  • A session that began with a slash command or a skill has a title in the Restore tab: the command and what was typed after it, as in /design-pass A Skills tab in the panel. It used to list as Untitled with an id, because the command is not stored as a typed prompt.

  • Restoring a session that began with a slash command or a skill brings back its opening message, /skill and the words typed after it. The restored chat used to start at Claude's reply.

  • A turn's cost is its own after Claude Code is relaunched. Claude Code carries a session's running cost and API time from one process to the next, and the first turn after a relaunch, or after dsh restarted, was stored with the whole session's figure. One turn that cost $11.25 was recorded as $580.71, which inflated the cost readout, the cost dialog and the spend line.

  • Turn costs stored before that fix are corrected once, the first time the plugin starts. A turn stored with the session's running total is put back to its own share, from the totals Claude Code wrote into the transcript and from the turns around it. Where neither says where the session stood, the turn is cut to its own length at the rate its figure implies, which is an estimate. The figures as they were are kept beside the records in turns.json.before-repair.

  • A session whose Claude Code was still running when dsh restarted no longer has its next turn stored with the session's total. The stored records were read after the running processes were picked up, so the plugin took the session for a new one.

  • The tokens-per-second reading on a Claude session is output over the time Claude Code spent waiting on the API. dsh's own figure assumes one model call per step; a Claude step is many calls with tools run between them, and the reading came out several times too high, when it showed at all.

  • Reopening a restored session no longer risks a second copy of a message that was sent with an attached file, and it now brings in slash commands typed at a terminal since the session was stored. The check for what the session already holds compared text exactly, and dsh and Claude Code space the same message differently.

  • A title in the Restore tab shows an attached file by its name, where it used to show the opening words of the note dsh sends Claude about the file. A session interrupted before its first prompt is no longer titled [Request interrupted by user].

  • On dsh 0.2.1 with Performance & usage set to Compact, the cost readout sits with dsh's stats and looks like them. dsh 0.2.1 draws each stat as its own entry in the composer dock, and in Compact the readout landed after the context meter in the meter's style.

1.5.2

Choose a tag to compare

@lcestou lcestou released this 01 Oct 21:12
550d8db

dsh: runs on 0.2.0-rc.1 through 0.2.0-rc.2; built and tested on 0.2.0-rc.2.

Bug fixes for Windows hosts and for sessions opened in a subdirectory or a git worktree. Three reports from @Clemens66666 (#145, #146, #147) started it, and a sweep for the same mistakes elsewhere found the rest.

The Windows fixes are covered by tests. Nobody has run them on a Windows box yet, so reports are welcome.

Fixed

  • On Windows the Memory, Instructions, Skills, MCP, Rewind and Restore tabs and the workspace search answer for a session opened in a drive path (C:\work\repo). Every one of them refused the directory with a 400, and Plugins, Diagnostics and the feature switches lost their project and local scopes. The plugin reads managed settings and the managed CLAUDE.md from the CLI's own directory for the OS, and no longer joins a configDir given as a drive path onto the working directory.
  • The Memory tab lists the memories Claude wrote. Claude Code keys auto-memory by repository, so a session in a linked worktree or a subdirectory shares the main checkout's memory. The tab looked under the session's own directory and showed an empty list. It also follows autoMemoryDirectory from the managed and user settings.
  • A session opened in a subdirectory or a linked worktree reads the files the CLI reads. The Settings editor's local scope, the feature switches and the plugin roster use the settings.local.json at the repository's root. The MCP tab lists local-scope servers, and project servers from a .mcp.json in any directory above the session's. The Skills tab lists project skills from each directory up to the repository's root. All four used to look only in the session's own directory.
  • A workspace whose path is longer than 200 characters resumes its Claude session and lists its transcripts and memory. Claude Code shortens such a directory name and adds a hash, and the plugin looked for the unshortened name.
  • On a Windows host the workspace search works without grep. Session rows, workspace names and saved-memory lines show the last part of a C:\... path instead of the whole of it.
  • Where Claude Code runs commands through its PowerShell tool, a command shows as a shell card, the approval dialog shows the command instead of its arguments as JSON, and the suggested permission rule covers that command instead of the whole tool. Only Bash was handled before.
  • The note that tells Claude which dsh tools to use names only the tools the session has. It used to name mcp__dsh__bash on Windows, where dsh offers mcp__dsh__pwsh, and tools some sessions do not have. Claude went looking for them and fell back to a background shell dsh cannot see.

1.5.1

Choose a tag to compare

@lcestou lcestou released this 29 Sep 16:16
1e202f5

dsh: runs on 0.2.0-rc.1 through 0.2.0-rc.2; built and tested on 0.2.0-rc.2.

Two fixes for Claude sessions on dsh 0.2.

Fixed

  • dsh's context meter shows how full Claude's context really is. The plugin used to add up every API call in a step. Each call resends the whole context, so a session at 740k of 1M read as 3.7M and the meter sat at 100%. dsh's session token pill now counts each step's context once instead of once per call. The Claude cost dialog still lists every call's tokens.
  • On dsh 0.2.0-rc.2 a finished Claude turn shows its closing line again (✻ Sautéed for 3m 27s · done 10:13 AM) instead of dsh's "Completed in 1s". rc.2 reworded the label the plugin reads the duration from.

npm: latest and dsh-0.2 both point at 1.5.1.

1.5.0

Choose a tag to compare

@lcestou lcestou released this 28 Sep 16:29
7b2de45

dsh: runs on 0.2.0-rc.1 through 0.2.0-rc.1; built and tested on 0.2.0-rc.1.

The first release for dsh 0.2. It needs dsh 0.2 (>=0.2.0-rc.1 <0.3.0); a box still on dsh 0.1.7 keeps 1.4.1, which stays on the dsh-0.1.7 npm tag, and the update pill does not offer 1.5.0 there. This release is on latest and dsh-0.2.

Changed

  • Requires dsh 0.2. dsh 0.1.7 keeps 1.4.1.

Fixed

  • The plugin loads on dsh 0.2, which refuses a plugin whose dsh peer range leaves out the running version.
  • Claude's working line (verb, spinner, time and tokens) takes the place of dsh's "Deep diving" line under the running turn. The copy above the composer shows only once you scroll that line out of view; before, it sat under dsh's own line for the whole turn.
  • On a phone the permission button shows only its shield and chevron, as dsh's own does, so the composer's buttons stay on one row. It also takes dsh 0.2's smaller corner radius.
  • Send now on the steer card no longer flashes the edit box. The message shows dimmed until it goes out.
  • After Update in Settings > Boxes, the box's row shows the new Claude Code version at once instead of the old one for up to a minute.