Back to home

hyperMoss

dsh-diary

Diary plugin for DeepSeek Harness: daily markdown journal entries, custom templates, and a web settings section

Stars
0
Language
TypeScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-diary

A DeepSeek Harness plugin that gives the agent a daily markdown journal: create entries, manage the resulting .md files, use custom templates, and configure it all from a web settings section.

What it adds

Ten model-facing tools, registered on ctx.tools:

ToolPurpose
diary_createCreate a new entry (YYYY-MM-DD[-slug].md) with optional title, tags, body, and a named template
diary_listList entries with metadata, filterable by year/month, tag, or title/filename substring
diary_readRead one entry's frontmatter and full body
diary_updateReplace or append the body, and/or change the title and tags
diary_deleteDelete one entry file
diary_searchFull-text search across entry bodies with line numbers and snippets
diary_template_listList the templates available to diary_create
diary_template_readRead one template's full content
diary_template_setCreate or overwrite a template
diary_template_deleteDelete a template

Custom templates

Templates are markdown files under <diary-directory>/templates/. diary_create accepts a template name and substitutes these placeholders in the template body:

{{date}} {{title}} {{tags}} {{slug}} {{year}} {{month}} {{day}} {{datetime}} {{time}}

When both template and content are given to diary_create, the rendered template body comes first and content is appended after a blank line.

Web GUI

The plugin ships a browser half (lib/client.js, served at /plugins/dsh-diary/client.js) with two surfaces:

  • a 「日记」settings section: shows the diary/templates directory and lists, creates, edits, and deletes templates;
  • a 日记看板 (diary board): a standalone panel (its own floating toggle button, 📓) that lists entries grouped by month, with a 「新建日记」 button and a per-entry delete action.

Both are backed by a diary Typert Remote namespace exposed under /api/diary/*: getDirectory, listTemplates, getTemplate, setTemplate, deleteTemplate, listEntries, getEntry, createEntry, deleteEntry.

Storage

Entries are markdown files with optional YAML frontmatter:

---
title: My day
date: 2026-08-14
tags:
  - work
  - life
---

Today I …

By default they live under $DSH_HOME/diaries (falling back to ~/.dsh/diaries). Override the directory in the profile's cordis.patch.yml:

- insert:
    - id: dsh-diary
      name: 'dsh-diary'
      config:
        directory: '/Users/me/Diary'

One entry per date is the default; pass a slug to diary_create to keep several entries on the same day (the file becomes YYYY-MM-DD-<slug>.md).

Install

Install the published dsh-diary package into the web profile:

dsh plugin --profile web add dsh-diary

Then restart the web server for the new layer (tools + settings section) to take effect.

Develop

pnpm install      # links @deepseek-ai/* host + client packages for typecheck
pnpm run build    # esbuild → lib/index.js (host) + lib/client.js (browser) + declarations
pnpm run typecheck
node smoke.mjs    # functional smoke test of the ten tools