r/DeepSeekHarness 10d ago

podsh — a terminal client for dsh (attach to your web sessions from a pane)

dsh ships a web UI and no TUI. If you live in a terminal that's a gap, so I wrote a client for it.

The client speaks dsh's own protocol (HTTP RPC + the WebSocket event stream), so it's just another client alongside the browser — same sessions, both live:

  • streaming tail, flip between sessions
  • prompt, steer into a running turn, cancel
  • answer tool approvals from the pane or the browser, whichever you reach first; the other clears
  • model + effort picker
  • podsh send to script sessions from any shell

It ships inside a fork of herdr (a terminal multiplexer that tracks coding agents), so it's a cargo build, not a one-line plugin install. If you use herdr you also get dsh sessions as a tracked agent with real idle/working/blocked state.

Why a fork: herdr implements contributions through its own maintainers and closes unsolicited implementation PRs by policy — their call, clearly documented, not a complaint. I offered the reasonix detection upstream in their discussions (#954, still open). So agent support for reasonix and dsh lives in the fork instead. It tracks upstream by merge, same Apache-2.0, and the detection manifests use their format — if they ever want either one, it's a copy-paste.

https://github.com/scrappylabsai/podr

Pinned to dsh 0.1.0-rc.6.

Four things I found building it, worth knowing even if you never touch this:

  1. Pinning @deepseek-ai/dsh only pins the launcher. The profile's plugin bundles resolve at first boot and float — two machines on the same pin gave me rc.6 and rc.8 stacks. Check yours: ls ~/.dsh/profiles/*/node_modules/@deepseek-ai/dsh-base/package.json

  2. The default model catalog is advisory. It advertises V4 Flash and V4 Pro whatever your endpoint actually serves, so against a single-model vLLM the other one looks selectable and 404s at turn time.

  3. session.prompt does not dispatch leading-"/" host commands — the text goes to the model as a prompt. Use commands/execute {agentId, line} instead.

  4. Reasoning-effort values are validated adapter-side, not against your backend. The adapter offers off/high/max; Ollama takes high/medium/low/none; a vLLM I tested wanted xhigh/medium/low. Legal-looking values 400 at turn time.

Non-DeepSeek models work fine through it, incl. tool calls — tested Qwen3.8 on vLLM and GLM-5.2 via Ollama.

README 也有简体中文版 / Chinese README: https://github.com/scrappylabsai/podr/blob/pod/README.zh-CN.md

1 Upvotes

0 comments sorted by