Introduction¶
Most people working with Agents encounter two things: one side is the conversation and tasks within Harness, the other side is another calendar / todo system, and the reminders and records don’t match. You either manually copy or write a script to sync. dsh-ai-calendar handles the latter case: it embeds a calendar interface directly into the DeepSeek Harness sidebar, simultaneously exposes a set of calendar tools to the Agent, and replaces the calendar’s built-in AI assistant with the DeepSeek route already configured in Harness, removing the need to apply for a separate key.
Below is an introduction to what this plugin is, how to install it, how to use it, and what pitfalls to watch out for.
What is it¶
dsh-ai-calendar is a DeepSeek Harness plugin maintained by dengyinxi100-crypto, npm package name dsh-ai-calendar, repository dengyinxi100-crypto/ai-calendar-deepseek-harness. Current version 1.2.1, license is UNLICENSED (non-open source license, please confirm the scope of authorization yourself before use).
It solves three things:
- Adds a “Calendar” entry in the Harness sidebar, embedding a full calendar interface in the main area;
- Displays a draggable, resizable floating window for scheduled tasks, allowing reminders to be received without opening the calendar panel;
- Registers a set of calendar tools for the Agent, allowing the AI to directly execute create / modify / delete records.
The calendar’s own multi-model AI assistant is replaced by the model already configured in Harness, billed by token, with no need to fill in a key separately.
Installation and Activation¶
Prerequisites: Node.js ≥ 20, DeepSeek Harness (including Web GUI), and a platform that can compile or download better-sqlite3.
Method 1: Install directly in Harness’ plugin management, fill in the npm package name:
dsh-ai-calendar
You can also fill in a local directory:
file:F:/path/to/dsh-ai-calendar
Method 2: Manually install into profile:
cd ~/.dsh/profiles/desktop
pnpm add dsh-ai-calendar
Then confirm that dsh.profile.bundles in package.json contains dsh-ai-calendar.
After installation, you must restart DeepSeek Harness once for the “Calendar” to appear in the sidebar. The reason is that the host plugin modules are only loaded once at startup; plugin updates also require a restart to take effect; the client / shim parts can be refreshed by reloading the page.
Sidebar Panel and Scheduled Task Floating Window¶
The sidebar shows a “Calendar” entry, with the number of incomplete tasks displayed as a small badge. Clicking it embeds a full calendar in the main area, including Month View, Timeline, Task Board, and Log views. The top of the panel shows today’s consumption, like DeepSeek API · Paid · Today ¥0.0000 / 0 tok, hovering shows the total, call count, and input/output tokens.
A scheduled task floating window is attached to the bottom left, draggable, resizable from the bottom right, and remembers position and size. The floating window shows upcoming reminders (red emphasis bar with a “Time’s Up” capsule), the next 4 reminders, and incomplete task count. Clicking an item jumps directly to the calendar panel. When a reminder is due, it automatically pops up and highlights for 2.6 seconds; it can be dismissed by × or the “Theme Settings → Floating Window” toggle in the calendar panel. The floating window does not depend on the calendar panel being open: as long as Harness is open, it polls the backend every 15 seconds.
Agent Calendar Tools¶
The plugin registers 6 tools:
| Tool | Function |
|---|---|
calendar_status |
Backend status, port, data path, total records |
calendar_list_logs |
Query by date range, periodic, task |
calendar_create_log |
Create log or task |
calendar_update_log |
Modify existing records |
calendar_delete_log |
Delete records |
calendar_summarize |
Let DeepSeek generate a Chinese summary after reading real logs |
Agents can directly call these tools within tasks to manage calendar data, without needing to go through HTTP interfaces and assemble them themselves.
AI Takeover¶
AI takeover goes via /api/ai/chat: The plugin feeds the user message along with a database summary (total amount, amount today and after, recent records including id) to the model. The model returns {"reply": "...", "ops": [...]}, the plugin actually executes create / update / delete, and then replies in plain language based on the execution result.
Below the reply, there is a light gray annotation, like Model deepseek-official/deepseek-flash · In N / Out M tokens · ¥0.0000. The interface does not display SQL, provider id, or technical details.
Configuration¶
All optional, passed via environment variables.
| Variable | Default | Description |
|---|---|---|
DSH_CALENDAR_ROOT / DSH_CALENDAR_APP_ROOT |
rsc/ inside package |
Override calendar frontend and backend directories; point to source code project during development |
DSH_CALENDAR_DB |
calendar.db next to backend script |
Database file path, recommended to point to a fixed directory before upgrading |
DSH_CALENDAR_PORT |
3001 |
Backend port |
DSH_CALENDAR_AI_MODEL |
Follow Harness route | Force specify model name |
DSH_CALENDAR_PRICE_INPUT_PER_M |
2 |
Input unit price (Yuan / million tokens), only for display estimation |
DSH_CALENDAR_PRICE_OUTPUT_PER_M |
8 |
Output unit price (Yuan / million tokens) |
Data and Backup¶
Calendar data is stored in the backend SQLite, default location is calendar.db in the same directory as the backend script, inside the release package it is rsc/server/calendar.db. The plugin explicitly passes DB_PATH to the backend because the backend bundle uses the syntax DB_PATH || <backend script directory>/calendar.db; once the backend script is moved (e.g., packaged into the plugin package), if no parameter is explicitly passed, an empty library is generated out of thin air, making it look like data was cleared.
The usage ledger on the Harness side is stored in browser localStorage at dsh_ai_calendar_usage_v1, accumulated by day, retaining 30 days. Diagnostic logs are at %TEMP%/dsh-ai-calendar/diag.log, where the backend:db-path event records the actual database path used.
Before upgrading or reinstalling the plugin, it is recommended to backup calendar.db (copy together with -wal / -shm), or point DSH_CALENDAR_DB to a fixed directory.
FAQ¶
No “Calendar” in sidebar: Check if dsh.profile.bundles in the profile contains dsh-ai-calendar, then restart Harness.
Panel is blank: Mostly a static resource path issue. The plugin injects <base href="/dsh-calendar/app/"> during the response, do not include <base href="/"> in the build output.
Prompt “Calendar service failed to start”: Port 3001 is occupied, or the better-sqlite3 native module is not installed correctly. After installing, click “Refresh”, or manually run first:
node rsc/server/index.cjs
Changed calendar source code but the interface hasn’t changed: The rsc/ inside the release package is a build snapshot. After rebuilding the application, you need to sync (scripts/package-plugin.mjs is only available to developers in the repository); during development, you can directly use DSH_CALENDAR_ROOT=F:/AI calendar to point to the source project.
Usage is reset to zero on every restart: The new version has switched to a localStorage ledger and no longer resets. If you still see 0, please confirm the page has been refreshed to the latest client version.
Applicable Scenarios and Notes¶
Suitable for developers who need to manage tasks, logs, and reminders uniformly within Harness and want the Agent to read and write calendar data.
Three notes:
- The plugin runs with the current dsh process permissions. Before installing, check its source code and license, especially the scope of the UNLICENSED authorization;
- Calendar data is stored in the SQLite included with the plugin. Backup before upgrading or reinstalling;
- The auxiliary scripts included with the plugin (like
scripts/smoke.mjs,scripts/package-plugin.mjs, etc.) do not go into the release package; you need to prepare them yourself for local development.
Summary¶
The value of dsh-ai-calendar lies in converging the calendar interface, scheduled reminders, and Agent tools into one place in Harness, while the AI part reuses the existing DeepSeek route.
- Directory: https://www.skillhub.cn/plugins/dengyinxi100-crypto/ai-calendar-deepseek-harness
- GitHub: https://github.com/dengyinxi100-crypto/ai-calendar-deepseek-harness