DSH Fishtank plugin
DeepSeek Harness Fishtank: Memory, Mood & Portable State
- Author
- DeepSeekAgent.io Editorial Team
- Published
- Updated
dsh-fishtank is a community aquarium plugin for DeepSeek Harness. It does more than place an animated fish on the page: the fish keeps mood, energy, relationships, memories, quiet thoughts, and a diary as persistent data. Close the current Session, return the next day, or move the export to another machine, and the same fish can continue living there.
This differs from a typical status pet. Status widgets usually react to Agent thinking, tool execution, completion, and failure. dsh-fishtank focuses on long-term companionship. It has a dedicated tank page, its own conversation entry point, and a timer that can produce thoughts after a period of quiet.
One bundle, two halves
The project ships a dsh.bundle with two cooperating parts:
- the Host plugin owns fish data, model calls, timers, and registered tools;
- the Web client adds the sidebar entry, status row, chat bubbles, input, whisper, and diary views;
- the page talks to the Host through the same-origin
/fishtank/stateand/fishtank/talkroutes.
The browser is therefore a view and interaction surface, not the source of truth. Refreshing the page does not create another fish, and switching Sessions does not trap its memory inside one conversation.
Install dsh-fishtank
Install it from the DSH Discover market or add its GitHub repository directly:
dsh plugin --profile web add github:yuyu520fish/dsh-fishtank
Reload DSH Web and open Fishtank from the left sidebar. This is a community project rather than a built-in official DeepSeek component. Keep a data export before upgrades and follow the current repository instructions.
What the fish remembers
By default, state is stored at:
~/.dsh/fishtank/default/fish.json
The file contains mood, energy, factual memories, people, whispers, daily reflections, diary entries, conversation history, and the fish's description of itself. Relative dates such as “next Friday” can become concrete dates, while a remembered fact retains the mood and reason associated with that moment.
Relationships are stored per speaker. The default owner name is 主人, and ownerName can change it. Continued conversation affects warmth; talking consumes energy; treatment changes mood.
The important design choice is that the model does not simply recreate the same role from scratch on every turn. The character has portable identity data. As the repository puts it, the fish is the data.
A life outside active chat
The Host plugin runs one check every 60 seconds. It does not call the model every minute. Instead, it checks whether a quiet thought or daily reflection is due. After roughly 25 quiet minutes, the fish may form a private thought; in the evening it can reflect on the day and add a diary entry.
This separates initiative from ordinary chat. The user does not need to keep sending messages for the fish to retain a daily rhythm. Thought generation and conversation may still call the configured model, so this is not a zero-cost animation-only pet.
The four tools
The plugin registers four tools with DSH:
| Tool | Purpose |
|---|---|
fishtank_talk | Talk to the fish and optionally identify the speaker |
fishtank_status | Inspect mood, energy, memories, people, diary, and data directory |
fishtank_export | Export the entire fish as portable JSON |
fishtank_import | Replace current state with a previous export |
An Agent can call these tools directly. A Personal Agent could talk to the fish after finishing the day's work, or export its state before moving to another computer.
Import replaces current state, so export the current fish before restoring another copy. Do not commit the exported JSON to a public repository: it may contain facts, relationships, and conversation history supplied by the user.
Model and configuration
The project currently exposes these main settings:
| Setting | Default | Purpose |
|---|---|---|
fishFile | ~/.dsh/fishtank/default/fish.json | Fish state file |
provider | deepseek-account | Model provider ID |
model | deepseek-flash | Model ID |
ownerName | 主人 | How the fish addresses its owner |
If the Profile does not contain the configured provider or model, conversation and autonomous thoughts may fail. After installation, call fishtank_status first to verify the data directory and available providers.
How it differs from a status pet
A status pet primarily consumes Agent events: waiting, thinking, running tools, finishing, and failing. It turns current DSH activity into animation or ambient feedback. dsh-fishtank primarily consumes time, conversation, people, and persistent state.
The two approaches can coexist:
- a status pet answers “what is the Agent doing now?”;
- a fishtank answers “what has this character experienced over time?”;
- the first is useful work feedback; the second supports companionship and progression;
- portable fish data also suggests a future market format for transferable DSH characters.
A future aquarium could connect task completion, seasonal environments, multiple creatures, and opt-in reward systems. Progression should not reward wasteful model calls or token consumption; completed work, continued use, and explicit interaction are better inputs.
Post-install checklist
- Reload Web and confirm that Fishtank appears in the sidebar.
- Run
fishtank_statusto verify the data directory and provider. - Send one test message without sensitive information.
- Export JSON once and confirm the backup workflow.
- Keep the fish file out of public or shared directories.
- Export again before upgrading or removing the plugin.
Compare other implementations in the first DSH desktop pet catalog, learn structured event feedback in the DSH pet Tool Call state guide, or prepare a new character with the DSH desktop pet development guide.