packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
统计你在 Web 界面中发送的消息并换算成俯卧撑欠账,在输入框下方以计数器显示,支持一键结清、部分还款和连续天数记录。

Typing is not cardio. It just has better marketing.
dsh-pushups is a small DeepSeek Harness (DSH) plugin for the
Web GUI: every message you send to the assistant becomes one push-up of debt. Stand up,
do the set, pay it off — in one go or in parts.
You are a mammal running a chat interface. Around hour six of "just one more prompt" your spine has quietly become a Jenga tower with a deadline, your legs have filed for remote work, and "I'll stretch in a minute" has been in the backlog since Tuesday.
Here's the trap: talking to a machine feels like doing something. The tokens stream, the diff appears, the dopamine lands — and none of it requires your body. So the body gets the leftovers: the stiff neck, the 4 PM fog, the vague memory of having shoulders.
The usual remedies all lost to a notification that says "later". Later is not a time. Later is where good intentions go to be archived.
So the deal is stupid on purpose: one prompt = one push-up. Not a workout plan, not a wellness journey — a number under the composer that grows every time you write to an AI instead of moving your own body. When it gets annoying enough, you get up. That's the whole mechanism.
It will not fix your posture. It will make it slightly less fictional.
Physics doesn't read intentions. Gravity is the only reviewer that never leaves "looks good to me".
┌──────────────────────────────────────────────┐
│ ... chat ... │
│ ┌────────────────────────────────────────┐ │
│ │ message the assistant │ │
│ └────────────────────────────────────────┘ │
│ 🏋 Push-ups: 7 │
└──────────────────────────────────────────────┘
Click the chip, and a dialog shows the lifetime message count, the unpaid debt, the streak of
days closed without debt, recent payments, partial-payment buttons (+5, +10, +25, all),
a custom amount, and a language switch (English / Русский / 中文 — English by default).
Next to the chip sits a one-click ✓ button: when you have already done the push-ups, it pays the whole debt without opening anything. The dialog stays for the details.
One admitted human prompt: a session event user/message whose source is
{ kind: 'user', rpcId: <string> }. This is exactly the signal DSH itself uses for
"a human typed this in the Web GUI".
Not counted:
user/message is appended once per admitted message, never per attempt;source.kind === 'goal');rpcId;rpcId discriminator is Web-only.0.2.0-rc.1 or newer with the web profile;From an absolute path:
plugin_manager
action: install_bundle
target: /absolute/path/to/dsh-pushups
From a git checkout:
git clone https://github.com/ivanlebedvideo/dsh-pushups.git
then install that directory the same way. install_bundle adds the package to the profile,
selects the bundle and applies its patch; a new bundle activates without a server restart,
but reload the page (Ctrl+R) so the browser loads the new Client module.
Disable it at any time:
plugin_manager
action: set_plugin
target: pushups
enabled: false
The ledger is a single JSON file owned by the Host half:
$DSH_HOME/storages/pushups/state.json # default: ~/.dsh/storages/pushups/state.json
It holds the install timestamp, the lifetime count, the current debt, the streak, bounded
per-day counters (400 days) and the last 500 payments. The Host also serves three loopback
routes for the Client: GET /pushups/state, POST /pushups/pay, POST /pushups/reset.
They are unauthenticated by design — DSH's web server binds 127.0.0.1 and this data is a
push-up counter, not a secret.
The Host registers one read-only tool, pushups_status, so the assistant can answer
"сколько я должен?" with the live number. It never adds nudges to replies on its own.
MIT.