Two-way TickTick/Dida365 (滴答清单) task sync via the official OAuth Open API: pull tasks across lists, create/update/complete/delete tasks, and one-shot title-deduped sync, with a web settings panel.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-ticktick
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:zhengjy01/dsh-ticktick
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 中文
Two-way task sync with TickTick / Dida365 (滴答清单) for DeepSeek Harness, built on the official OAuth 2.0 Open API. Pull tasks across every list, create / update / complete / delete tasks, and run a one-shot dedupe sync — from the agent or the web settings panel.
Features
- Official Open API — OAuth 2.0 authorization-code flow against the TickTick / Dida365 open platform (
/open/v1), with automatic token refresh on 401. - Both regions — Dida365 (CN, default) and TickTick (international), selectable in the settings panel or via
ticktick_config. - Pull —
ticktick_tasks/ticktick_synclist incomplete (or completed) tasks across all lists (the 收集箱 Inbox included, even though the Open API's project list omits it), sorted by due date, with list names. - Push —
ticktick_addcreates one or more tasks (title, list by id or name —inbox/收集箱resolve to the Inbox, due date in ISO 8601 or bareYYYY-MM-DD, priority 0-5 or none/low/medium/high, tags, content). - One-shot sync —
ticktick_syncwithdirection=pull(grouped summary) ordirection=push(creates missing tasks, dedupes by title within a list, Inbox included — re-running never duplicates). - Maintenance —
ticktick_update,ticktick_complete,ticktick_delete(project id optional; auto-resolved, Inbox included). - Settings panel — Settings → TickTick: configure credentials, run the authorize flow (popup + manual code paste), refresh tokens, quick-add a task (list picker shows the Inbox first, archived lists are excluded), and complete today's tasks in place.
- Credentials and tokens persist to
~/.dsh/dsh-ticktick.jsonwith mode0600;ticktick_statusnever echoes secrets. - System-prompt announcement so agents know when to use the plugin.
Install
# after publishing to GitHub (repo tagged with the `dsh-plugin` topic)
dsh plugin --profile web add github:zhengjy01/dsh-ticktick
# or from npm (prebuilt install, no build approval needed)
dsh plugin --profile web add dsh-ticktick
# local development
dsh plugin --profile web add link:/path/to/dsh-ticktick
Restart dsh web. The plugin needs no build step — lib/index.js is plain ESM.
Configuration
Create an app in the open platform console: https://developer.dida365.com/docs#/openapi (CN) or https://developer.ticktick.com/manage/ (international), and register the redirect URI:
http://127.0.0.1:3080/api/dsh-ticktick/oauth/callback(use your actual
dsh webport, or set a customredirectUri— it must match exactly.)Give the plugin your
client_id/client_secret, either in the settings panel (Settings → TickTick) or by asking the agent:帮我配置滴答清单,client_id 是 xxx,client_secret 是 yyy,区域用国内版 Dida365The agent calls
ticktick_configand persists the credentials.Authorize: click 开始授权 in the panel (or
ticktick_oauth_start) and log in. The callback completes automatically; if it doesn't, paste the code back and callticktick_oauth_finish.
From then on:
把今天滴答清单里没做完的任务同步给我 → ticktick_sync (pull)
帮我把这些任务同步到滴答清单:买牛奶、写周报 → ticktick_sync (push, dedupes)
明天下午3点提醒我开会,加到「工作」清单 → ticktick_add
The
client_secretand OAuth tokens are credentials: anyone holding them can read and change your tasks. They stay in~/.dsh/dsh-ticktick.json(mode0600); useticktick_config(reset: true)to clear them if they leak.
API surface
| Tool | Purpose |
|---|---|
ticktick_status |
connection & authorization status |
ticktick_config |
set / clear clientId, clientSecret, region (cn/intl), redirectUri |
ticktick_oauth_start |
build the authorize URL |
ticktick_oauth_finish |
exchange a pasted code / redirect URL for tokens |
ticktick_lists |
list all lists (id + name) |
ticktick_tasks |
pull tasks (by list, completed flag, limit) |
ticktick_add |
create tasks |
ticktick_update |
update a task |
ticktick_complete |
complete a task |
ticktick_delete |
delete a task |
ticktick_sync |
pull summary / push with title dedupe |
Notes
- Uses Node's built-in
fetch(Node 22+) andcrypto— zero runtime dependencies. - The OAuth callback route is loopback-only and verifies the OAuth
state; the remaining/api/dsh-ticktick/*routes are loopback + same-origin only. - Not covered by the open API: smart-list filters and time-triggered reminders (
reminders/repeatFlagare passed through when present, but not modeled as tool parameters). - The web settings panel talks to the host through the loopback-only
/api/dsh-ticktickroute family.
License
MIT
Links
More in this category
xmanrui/dsh-im★ 3574
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 2955
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
OpenPetsHQ/openpets#dsh★ 1400
Bridges DeepSeek Harness lifecycle status, errors, and approval requests to a locally running OpenPets desktop companion.
c1overzz/dsh-bili-scroll★ 1393
Let your DSH agent browse Bilibili on its own, read subtitles, write a daily digest, and @ you when it finds something worth your attention.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 602
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
zaofan-make/dsh-qqbot★ 251
QQ official bot channel (enhanced fork of tencent-connect/dsh-qqbot): full agent chat in groups and DMs, rich media, an auto-tagged sticker library with AI image replies, join approval, mute and broadcast, scheduled wakeups, remote approvals over QQ, interactive cards, multi-account instances, extensions, member profiles, and token-saving value-scored wakeups.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.