用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/publieople/hermes-config-kit --skill deepseek-harness命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Manage AstrBot knowledge bases — create, upload, retrieve, delete via WebUI or REST API. Use when adding documents to an AstrBot bot's RAG knowledge base, troubleshooting embedding issues, or automating KB updates.
Integrate Hermes Agent with external desktop applications, IDEs, and AI tools — mapping their integration interfaces (custom API endpoints, MCP support, terminal hooks) to Hermes' built-in capabilities (API Server, MCP Server Mode, CLI spawning). Use when asked to "connect Hermes to X" or "make Hermes work with Y" for any third-party app.
国内量化交易系统搭建 — 行情终端 vs 量化系统辨析、券商通道瓶颈、开源框架选型、老式行情软件逆向分析
正在显示 SKILL.md
| name | deepseek-harness |
| description | DeepSeek Harness (dsh) CLI 安装、启动、launcher flag 坑、WSL 后台保活。 |
| category | mlops |
DeepSeek 官方的 agent harness。架构:everything is a plugin,基于 Cordis。当前还在 developer preview,breaking changes 常见。
全局 npm 包 @deepseek-ai/dsh:
npm un -g @deepseek-ai/dsh
npm i -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs @deepseek-ai/dsh@latest
--allow-scripts 必加。不加会导致 node-pty/koffi 等 5 个包的 install scripts 被拦,终端/子进程相关功能残缺。
dsh web # 起在默认 127.0.0.1:3080
dsh web --port 3080 会报 error: unknown option '--port'。launcher 的 commander 在解析 --profile / web alias 时把后续 flag 吞了,没透传给 web app。
临时方案:不带 flag 直接 dsh web,用默认 3080。要改端口需要进 profile 配置文件(~/.dsh/profiles/web/)改,或等官方修。
Hermes terminal(background=true) 包装层在 WSL bash 下对 dsh 这种交互式 CLI 会触发:
bash: 无法设定终端进程组 (-1): 对设备不适当的 ioctl 操作
bash: 此 shell 中无任务控制
然后进程立刻退出。
rc.7 起 web profile 也加载 dsh-tui 插件,报 dsh-tui requires an interactive terminal (stdout must be a TTY)。因此普通 Popen(stdout=file) 直接 boot 失败。
方案:pty.openpty() 给 stdout/stderr/stdin 伪终端 + double-fork daemonize(防止父进程退出带走 pty master)。工作脚本模式:
import os, pty, subprocess, threading, fcntl, select
pid = os.fork()
if pid == 0:
os.setsid()
if os.fork() > 0: os._exit(0)
master, slave = pty.openpty()
p = subprocess.Popen(['dsh','web'], cwd='/home/po',
stdout=slave, stderr=slave, stdin=slave,
start_new_session=True, close_fds=True)
os.close(slave)
fcntl.fcntl(master, fcntl.F_SETFL, os.O_NONBLOCK)
log = open('/tmp/dsh-svc.log','wb')
def pump():
while True:
r,_,_ = select.select([master],[],[],1)
if r:
try: d = os.read(master, 65536)
except OSError: break
if not d: break
log.write(d); log.flush()
threading.Thread(target=pump, daemon=True).start()
p.wait(); os._exit(0)
验证:ss -tln | grep 3080 + curl -s http://127.0.0.1:3080/ 返回 200。
~/.dsh/settings.yaml — 全局配置~/.dsh/profiles/ — profile 定义(web / headless / tui)~/.dsh/sessions/ — 会话历史~/.dsh/dsh-process.json — 上次启动的 pid/argv(stale 数据常见,勿信,直接 ss -tln | grep 3080 验证)ss -tln | grep 3080
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3080/
~/dsh~/.dsh/AGENTS.md(包含 clash 代理、gh CLI 偏好)