dsh
OpenPetsHQ/openpets将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。
你不在电脑前时由 agent 邮件提醒你:goal 完成、阻塞、向你提问决策前、长任务节点时触发,自带零依赖 Node SMTP 发送器。
English | 中文
Email reminders from your DSH agent when you're away from the computer.
You start a long-running goal in DSH (or any AI coding agent), then walk away. When the agent finishes, gets blocked, or needs your decision, it sends an email to your phone mailbox — you see it and come back. One-way ping, no remote control.
The skill ships one zero-dependency implementation — sender.mjs (~70 lines, only Node built-ins tls/net), so the agent sends mail deterministically in every normal DSH session (DSH runs on Node). The SKILL.md still carries the full contract:
config.json: sender, SMTP authorization code, recipient; auto-inferred hosts for QQ/163 mail),If Node is genuinely unavailable (rare), the skill's instructions tell the agent to implement the ~15-line SMTP call itself with whatever the environment provides — Python smtplib, curl, mail, … — so the skill stays cross-platform (Windows/Linux/macOS) and future-proof.
| Moment | Suggested marker |
|---|---|
| Goal completed | done |
| Goal blocked / stuck | block |
| About to ask the user a decision | question |
| Long task milestone | info |
The agent sends via the bundled sender:
node sender.mjs "subject" "body" # reads config.json next to it
Knowledge note (Windows): .NET
SmtpClienthas a known hang on implicit-TLS port 465 — the bundled sender usesnode:tlsinstead, which has no such issue.
Plugin install (recommended) — the skill ships as a DSH plugin and registers on ctx.skills:
dsh plugin --profile web add dsh-notify-skill
Or from GitHub: dsh plugin --profile web add github:PAKIKNOWLEDGE/dsh-notify-skill. Restart dsh web once after installing, then the skill appears in the session skill catalog.
Manual install (no plugin) — DSH also discovers skills from <dshHome>/skills/<name>/SKILL.md (default ~/.dsh/skills), hot-reloaded by a filesystem watcher:
git clone https://github.com/PAKIKNOWLEDGE/dsh-notify-skill.git "$HOME/.dsh/skills/notify"
Or copy the folder manually to ~/.dsh/skills/notify/. New sessions pick it up immediately.
The agent will also walk you through this if you just ask it to use the skill.
config.example.json to config.json and fill it in:
{
"email": {
"smtpHost": "",
"smtpPort": 465,
"useSsl": true,
"from": "your-address@qq.com",
"authCode": "16-char authorization code",
"to": "recipient@example.com"
}
}
smtpHost may be left empty — it is inferred (@qq.com → smtp.qq.com, @163.com → smtp.163.com, port 465 SSL).No compatibility work needed — modern agents are smart. Point them at SKILL.md and the config contract; they implement the sender themselves.
config.json (contains your SMTP authorization code) and notify.log are gitignored — never force-commit them. A leaked authorization code lets anyone send mail as your mailbox.