前言¶
在 DeepSeek Harness(DSH)裏和 agent 對話時,常會留下一批明確的小任務:補錯誤提示、改一處交互、跑通測試。白天忙着主線,這些事容易一直壓在腦子裏或散落在聊天記錄裏。用外部 cron 調腳本可以定時跑,但要自己管 worktree、證據和合並,成本高;純手動又很難在夜間批量推進。
dsh-offhours 是社區插件 shuke52tt/dsh-offhours,把看板上的 todo 卡在低谷/夜間按規則自動執行:每卡獨佔一個 git worktree,headless worker 幹活並自證,證據寫回卡面,再合併回收。數據在本地(KANBAN.json 與 stateDir),不依賴單獨的 systemd/cron 調度。下面介紹定位、能力與從零接上的步驟。
這是什麼¶
- 名稱:dsh-offhours(npm 包名同)
- 維護者:shuke52tt
- 分類:工作流
- 一句話:配置一個(或多個)git 倉庫後,用看板管理待辦,插件進程內按 interval 掃描,或在 CLI/面板手動觸發跑批。
- 許可:MIT(見 GitHub 倉庫)
源碼與說明:GitHub - shuke52tt/dsh-offhours
社區目錄頁:SkillHub 插件頁
核心功能¶
資料中的設計可以概括爲一條閉環,只做「待辦卡 → 自動做 → 可覈對完成」這一件事。
- 看板與卡:看板文件爲倉庫內的
KANBAN.json;用 CLI 或 DSH 會話建卡,卡上寫目標、判據與邊界。 - 一卡一 worktree:每張待辦在獨立 git worktree 裏執行,避免互相污染工作區。
- headless worker:通過配置中的
dshBin、dshProfile(默認headless)拉起 worker;完成須滿足卡里可機械覈對的判據(例如測試命令),否則不得報 done。 - 證據與合併:證據寫回卡;引擎在跑批前後偵測主檢出,並做合併回收。
- 調度方式:
scheduler可爲plugin(插件內按schedule.intervalMin掃描),也可npx dsh-offhours run --once或面板「立即跑」。 - 閘門:
gates限制單次/每日卡數及每日成本上限(如maxCnyPerDay)。 - Web 面板:安裝到
webprofile 後,左側出現「夜間跑批」面板,可查看狀態並觸發運行。
安裝與啓用¶
在已安裝 DSH 的環境中,按官方 README 使用 profile web 安裝插件:
dsh plugin --profile web add dsh-offhours
裝完後重啓一次 dsh web(或等待 HMR 生效),左側應出現「夜間跑批」面板。升級插件後同樣需要重啓 dsh web,面板纔會加載新代碼。
說明:安裝插件不會把 CLI 放進全局 PATH;下文示例用 npx dsh-offhours。若已全局安裝同名入口,可簡寫爲 offhours。也可使用 profile 下 node_modules/.bin/offhours 的絕對路徑(例如 ~/.dsh/profiles/web/node_modules/.bin/offhours)。
運行環境(README 寫明):Linux(含 WSL)需要 bash、python3、git、jq、flock、dsh;zstd 可選。macOS 暫不支持;原生 Windows 需走 WSL。Node 版本要求 >=20;DSH 引擎要求 >=0.2.0(見 package.json)。
典型用法:三步開始¶
以下命令來自 README,在你要跑批的 git 倉庫中執行。
1)初始化配置與看板
在項目倉庫根目錄寫入 offhours 配置、關聯特性並生成看板:
cd ~/code/myapp
npx dsh-offhours init --repo . --name myapp
會在用戶目錄生成 ~/.dsh/offhours/config.json(並建立 stateDir、featuresRoot 等路徑)。
2)體檢
檢查依賴、路徑與 worker 權限;失敗時進程退出碼非 0:
npx dsh-offhours doctor
3)建卡(須帶會話)
卡必須帶有 sourceSessionId(通過 --session 或在 DSH 會話裏用 offhours 技能建卡),否則跑批不會撿這張卡:
npx dsh-offhours card add "給登錄頁補錯誤提示" \
--summary "目標:登錄失敗有提示。判據:npm test 通過。不做什麼:不改後端。" \
--session <當前 dsh 會話 id>
README 建議:在 dsh 裏對 agent 說「用 offhours 技能建一張卡:給登錄頁補錯誤提示」往往更省事。
之後若 schedule.enabled 爲 true,插件會按 intervalMin 自動掃描;也可在面板點「立即跑」,或執行:
npx dsh-offhours run --once
僅預覽本輪會挑哪張卡:
npx dsh-offhours run --dry-run
若面板提示「先完成一次性初始化」,在項目倉庫執行 init 後刷新即可,無需重裝插件。
配置要點¶
npx dsh-offhours init 生成的 ~/.dsh/offhours/config.json 示例結構如下(字段含義以 README 爲準):
{
"stateDir": "~/.dsh/offhours/state",
"featuresRoot": "~/.dsh/offhours/features",
"dshBin": "dsh",
"dshProfile": "headless",
"scheduler": "plugin",
"repos": {
"myapp": { "path": "~/code/myapp", "baseBranch": "main" }
},
"boards": [
{ "id": "myapp", "file": "~/code/myapp/KANBAN.json", "workdir": "~/code/myapp", "repos": ["myapp"] }
],
"gates": { "maxCardsPerRun": 3, "maxCardsPerDay": 8, "maxCnyPerDay": 20 },
"schedule": { "enabled": true, "intervalMin": 5 },
"worker": { "permissionMode": "danger-full-access" }
}
baseBranch可寫main、master或任意分支;省略時按origin/HEAD、main、master依次探測。worker.permissionMode默認爲danger-full-access:worker 需要向<repo>/.git/worktrees寫入才能提交,屬於無人值守的結構性要求;不信任倉庫內容時不應安裝此插件。
常用 CLI¶
| 命令 | 作用 |
|---|---|
npx dsh-offhours init --repo . |
初始化配置/看板/特性 |
npx dsh-offhours doctor |
依賴與權限體檢 |
npx dsh-offhours card add "<標題>" --summary "<目標/判據/邊界>" [--session <id>] |
建卡並關聯會話 |
npx dsh-offhours card list |
列卡 |
npx dsh-offhours run --once / --dry-run |
手動跑一輪 / 預演挑卡 |
npx dsh-offhours status |
看板計數、心跳、最近狀態(JSON) |
npx dsh-offhours boards |
看板列表 |
適用場景與注意¶
更適合誰
- 已有 DSH
webprofile,希望在本地用看板沉澱「可驗收」小任務,並在非高峯自動推進的實現者。 - 倉庫習慣用 git worktree 隔離特性分支,且能接受 headless agent 在獨立 worktree 內改代碼、跑判據命令。
安全與邊界(README 強調)
- worker 在獨立 worktree 工作;建議同時啓用
feature-guard鉤子,與引擎對主檢出的偵測一起兜底。 - 插件以當前
dsh進程權限運行;danger-full-access意味着對配置中倉庫具備較強寫權限。安裝前請閱讀源碼與 MIT 許可證,確認倉庫與機器環境可信。 - 送審(需人介入)僅保留五類:選型不確定、影響演進、實施成本、條件做不成、政策風險。
- 卡里必須寫明可機械覈對的判據(命令),否則 worker 不能標記完成。
生態說明
DSH 社區奉行「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。本插件當前在 GitHub 星標爲 0,適合自行評估後試用。
結尾¶
dsh-offhours 把「看板待辦 → worktree → headless worker → 證據 → 合併」收到一個插件與一份 config.json 裏,減少自建夜間批處理的膠水代碼。若你要在低谷時段批量消化帶測試判據的小卡,可按上文安裝、在項目內 init/doctor、在 DSH 會話中建卡後交給調度或手動 run --once。
- 目錄頁:https://www.skillhub.cn/plugins/shuke52tt/dsh-offhours
- 源碼與 README:https://github.com/shuke52tt/dsh-offhours
- npm:https://www.npmjs.com/package/dsh-offhours
反饋可發到倉庫 issue 或 README 所列社區討論帖。