dsh-fishday: Giving Agents Their Own Timeline

Preface

When installing a persistent personality plugin for DSH, a common pain point is: The Agent only “exists” when the user sends a message. When no one is speaking, it doesn’t know how much time has passed and won’t take initiative to do anything. dsh-fishday (Little Fish’s Time and World) is designed to solve this—it maintains an independent timeline for the Agent that exists outside of conversations. It acts on schedule, gets bored if left alone, and automatically collects an “My Day” summary at night.

Below is an introduction to the plugin’s positioning, installation methods, configuration options, and typical usage. The plugin is maintained by yanyan-shub and is categorized as a workflow. The link on the SkillHub community directory (an independent site with no official affiliation with DeepSeek or Fangfang) can be found at the end of the article.

What is this Plugin

One-sentence positioning: Give DSH Agent its own time and world state, so the character has “lived time” even when not addressed.

It maintains several things: the current time, how long it has been since anyone spoke, the boredom level, what was done today, and whether to review tonight. The original README description is “Give the Agent its own timeline: it doesn’t exist only when people are talking.” After installation, you can ask it what it did today.

Core Capabilities

The README lists four capabilities, listed verbatim:

  1. Act on schedule. fish_do records “something I did myself,” such as watering flowers, flipping through songs, looking out the window, or thinking of someone. The timeline accumulates.
  2. Time flows. Even if no one is talking, it knows how much time has passed; after a certain time, it becomes “bored” and prompts that it can take the initiative to speak.
  3. Evening reflection. After the set time, it automatically collects an “My Day” summary, containing morning/afternoon/evening segments and how many messages it received today.
  4. Automatic injection. Before every model call, it writes “current time / time since last spoke / boredom / things done today / evening review” into the prompt.

Installation and Enablement

The official README only provides one installation method: execute plugin_manager install_bundle in DSH, pointing to the plugin directory.

# In DSH
plugin_manager install_bundle  <this directory>

If you maintain your own copy, you can also copy it to any local directory and use plugin_manager install_bundle to point to that directory.

After installation, 5 new tools will appear with the following responsibilities:

Tool Function
fish_now View her own time and state
fish_do Record something I did
fish_idle How long since anyone spoke, bored or not, need to speak
fish_evening Collect an “My Day” summary
fish_timeline View what was done on a specific day

Configuration

The plugin is enabled via the insert configuration section. Configuration items come from the README:

- insert:
    - id: dsh-fishday
      name: dsh-fishday
      config:
        eveningHour: 21      # Hour after which it counts as evening (time to review today)
        boredAfterMin: 90    # Quiet for how long before feeling bored
        keepDays: 30         # How many days of records to keep
        awakeStart: 8        # Hour that counts as awake (boredom only increases when awake)
        awakeEnd: 23
        # dataDir: 'X:/somewhere/fishday'   # Optional, default ~/.dsh/fishday
        # heartbeatFile: 'X:/path/last-heard.json'  # Optional, "who found me" written by other programs

The dataDir and heartbeatFile are optional fields in the comments; it works without configuring them.

Data Storage

The default path is ~/.dsh/fishday/state.json, a single-file JSON that can be backed up or manually modified. The README clearly states there are no hardcoded absolute paths in the code; everything goes through configuration or the user directory.

Integration with Heartbeat (Optional)

If you have another program (e.g., QQ bot, gateway) that writes a JSON when receiving a message:

{ "at": 1762000000000, "conv": "鱼塘" }

Point heartbeatFile to it, and fish_now will display how long it has been since the last person spoke, and talkedToday will also accumulate. It works without this configuration as well.

Use Cases and Notes

Suitable for developers who want the character or Agent to have a sense of autonomous time and be able to review daily behavior at the end of the day. Three points need attention:

  1. The plugin runs with the permissions of the current DSH process. You should check the source code and license before installing (this repository is under the MIT License; version number is in package.json, version 1.0.0).
  2. It relies on the timeline and boredom mechanism to let the Agent take initiative to speak. If you only need fixed task scheduling, you might not need this type of plugin.
  3. The community directory is an independent site with no official affiliation with DeepSeek or Fangfang. Do not treat it as an official app store.
  • Directory page: https://www.skillhub.cn/plugins/yanyan-shub/dsh-fishday
  • GitHub: https://github.com/yanyan-shub/dsh-fishday

One-sentence recap: The value of dsh-fishday lies in letting the Agent continue to exist even when no one is talking, and at the end of the day, string the day together into an “My Day.” If you want to add a time dimension to a character, this is a small, easy-to-use plugin.

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye