deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
macOS 菜单栏小应用:把 dsh web 服务交给 launchd 托管,不再需要开着终端。
App 在 → 服务就在:启动 App 自动拉起服务,退出 App 自动停止服务。
点击菜单栏鲸鱼图标(🐋 绿=运行中 / 橙=端口被外部占用 / 红=启动失败 / 灰=未运行,图标为官方 dsh 鲸鱼 logo 按状态着色)弹出控制菜单,可打开 Web UI、重启服务、设置登录自启、打开数据目录或退出。
绿色 = launchd 托管进程在运行 且 HTTP 3080 实际可访问,双条件缺一不亮绿。 服务进程继承你终端的 zsh 环境(PATH 等),agent 的 shell 工具直接可用 node/npm/pnpm/bun 等工具链。

npx @deepseek-ai/dsh web 吗?不需要。 前提只是"机器上装有 Node.js":
dsh web --port 3080(App 启动自动拉起,也可点"重启服务"手动拉起);已有 dsh(全局安装或 npx 缓存)直接复用。dsh web,那个进程占着 3080 端口,App 会显示橙色"外部实例"——先在终端按 Ctrl+C 停掉,再让 App 接管(步骤见下文)。从 Releases 下载 DSH-Launcher-*.dmg:
DSH Launcher.app 拖进 ApplicationsDSH Launcher.app → 打开;或执行xattr -dr com.apple.quarantine /Applications/DSH\ Launcher.app
要求:Apple Silicon Mac(M1/M2/M3/M4)· macOS 13 或更高 · 装有 Node.js(fnm / nvm / Homebrew 均可)。
./build.sh # 产出 dist/DSH Launcher.app(ad-hoc 签名,无需开发者账号)
产物为可直接运行的 dist/DSH Launcher.app,拷贝到任意位置(如 ~/Applications/)即可使用。
| 菜单项 | 作用 |
|---|---|
| 状态行 | 服务是否运行(launchd 托管 / 外部实例占用 3080) |
| 打开 Web UI (⌘O) | 浏览器打开 http://127.0.0.1:3080 |
| 安装 dsh(仅未安装时显示) | 首次使用点击安装,弹窗实时显示下载进度,装完自动启动服务 |
| 重启服务 | 永远可用:运行中=重启;启动失败/未运行=直接启动;端口被外部实例占用=弹窗说明占用者 |
| 登录时自动启动本 App | 登录后自动出现菜单栏图标并拉起服务 |
| 打开数据目录 | ~/.dsh |
| 退出 | 退出 App 并停止服务(launchctl bootout,数据已落盘,下次打开 App 即恢复) |
现在端口 3080 可能还被终端里的 dsh web 占着(App 会显示橙色"外部实例")。
切换步骤:
Ctrl+C 停掉旧的 dsh web(本次会话会离线,但历史记录都在 ~/.dsh/sessions/)zsh -lic 抓取你的完整环境写入 plist 的 EnvironmentVariables(PATH 剔除易失的
fnm multishell 临时目录、node 目录置顶)。服务进程与 agent 的 shell 工具因此
直接可用终端同款工具链(node/npm/pnpm/bun 等),改 .zshrc 后重启服务即生效。~/Library/LaunchAgents/com.dsh.web.plist。~/Library/Logs/DSHLauncher/dsh-web.log。launchctl bootout gui/$(id -u)/com.dsh.web 2>/dev/null
launchctl bootout gui/$(id -u)/com.dsh.menubar 2>/dev/null
rm -f ~/Library/LaunchAgents/com.dsh.web.plist ~/Library/LaunchAgents/com.dsh.menubar.plist
rm -rf ~/Applications/DSH\ Launcher.app CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。