deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
macOS 全局快捷键「一键截图当前窗口」,自动作为图片上下文挂入 DeepSeek Harness (DSH) 的 Composer —— 把当前工作窗口零摩擦交给 Agent。
English · 中文 · Changelog · 更新日志
dsh plugin --profile web add dsh-plugin-appshot
[dsh-plugin-appshot] plugin applied successfully、native agent ready 即加载成功;从源码安装(开发/贡献者):在插件目录
pnpm install && pnpm build && pnpm build:native,然后在插件父目录执行dsh plugin --profile <name> add ./dsh-plugin-appshot(dsh plugin add的相对路径锚定调用目录)。
DSH 版的「Codex Appshots」:为 DeepSeek Harness 带来全局快捷截屏上下文体验。
典型场景:无论你是在浏览器中查阅文档、在 IDE 中调试代码,还是在终端中排查报错——在任何应用的任何窗口中遇到疑问,只需按下 左 ⌘ + 右 ⌘,当前窗口截图便会瞬间自动传递到 DSH 客户端并挂入 Composer;附上你的问题即可直接向 Agent 提问,彻底告别「手动截图 → 切换窗口 → 粘贴上传」的繁琐流程。
截的是「当前窗口」,不是「整个屏幕」——与 Codex 官方对 Appshots 的描述一致("An appshot captures the frontmost window only.",Appshot 只截取最前面的那个窗口):
| ✅ 截取 | ❌ 不截取 |
|---|---|
| 触发瞬间正在操作的那一个前台窗口(Chrome / VS Code / Finder / Terminal…) | 整个屏幕、桌面壁纸、菜单栏/Dock、其他窗口、后台应用 |
按下 左⌘+右⌘ → 截取当前前台窗口 → 截图挂入 Composer → 输入描述并 Send
目前支持 macOS 14+;Windows 版本正在开发中。
dsh web 下截图仍会挂入 Composer,只是不唤起窗口);| 触发前(正在操作的前台窗口) | 触发后(自动截取并挂入 Composer) |
|---|---|
![]() |
![]() |

截图进入 Composer 而非直接触发 Agent——你可以补充说明、追加截图或删除不需要的附件,意图完全由你掌控。
UNUserNotificationCenter)提示失败原因。saveImage 成功后立即删除;插件启动时自动清理崩溃遗留的孤儿文件。系统由三方组成,数据单向流动:
┌─────────────────────────┐ NDJSON IPC (stdio) ┌──────────────────────────┐
│ macOS Native Agent │ ────────────────────────▶ │ Node / Cordis 宿主插件 │
│ (Appshot Agent.app) │ type: "appshot" │ (src/) │
│ · 双 Command 状态机 │ │ · fs.readFile 读字节 │
│ · 前台窗口识别 │ │ · attachments.saveImage │
│ · ScreenCaptureKit 截图 │ │ · 所有权原子转移 + unlink │
│ · 截图落盘后唤起 DSH │ │ · webServer SSE 广播 │
└─────────────────────────┘ └────────────┬─────────────┘
│ SSE (appshot/ready)
▼
┌─────────────────────────┐
│ DSH Client 模块 (Renderer) │
│ · 识别活跃 sessionId │
│ · 挂载 ImageAttachmentRef │
│ · 聚焦 Composer 输入框 │
└─────────────────────────┘
关键设计:
NSRunningApplication),不是 DSH API。saveImage 成功前 Staging 文件归插件;成功后所有权移交 DSH AttachmentStore,插件立即 unlink;失败分支 finally 清理;启动时执行孤儿文件 GC。首次触发截图时,macOS 会弹出授权引导,需授予:
| 权限 | 用途 |
|---|---|
| 屏幕录制 (Screen Recording) | ScreenCaptureKit 捕获前台窗口画面 |
| 辅助功能 (Accessibility) | 全局按键状态机监听 + 窗口唤起置顶 |
拒绝授权时本次截图终止,并通过系统通知提示;可在 系统设置 → 隐私与安全性 中补授后重试。
dsh web 下截图仍可入 Composer,但不唤起/置顶窗口。src/ 宿主插件(Cordis apply(ctx) 入口 + agent/ingest/sse/staging/ipc/client 模块)
native/macos/ Swift Native Agent(ScreenCaptureKit + 双 Command 状态机)
docs/ requirements.md(PRD)/ technical.md(技术方案)/ tasks.md(阶段验收)
tests/ 各 Phase 契约测试(node --test)
常用命令:
pnpm build # esbuild 打包宿主插件与客户端模块 → dist/
pnpm typecheck # tsc --noEmit
pnpm test # 契约测试(DSH_DISABLE_AGENT_SPAWN=1 避免拉起真实 Agent)
pnpm build:native # 构建 Appshot Agent.app
# Native 诊断(在 native/macos 内)
swift build && .build/debug/appshot-macos --list-windows # 列出可捕获窗口
.build/debug/appshot-macos --cli-capture --output /tmp/test.png # 前台窗口截图 PoC
依赖约束:@deepseek-ai/dsh-tools 与 @deepseek-ai/cordis 均为 peerDependencies(宿主提供;代码中只 import type,运行时由宿主注入 ctx);版本锁定 0.1.0-rc.6 线(npm latest 是过期 0.0.1-rc.1,勿用 npm i 覆盖)。
发布:pnpm publish(prepack 会自动执行 pnpm build && pnpm build:native,产物含 dist、cordis.patch.yml 与预构建的 Appshot Agent.app,用户安装无需任何构建授权)。
本项目基于 MIT 协议开源。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。