Bundle
dsh-digital-life
dsh-digital-life
- Source
- elonnzhang
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 5 days ago
Readme
# dsh-digital-life English | [中文](README.zh.md) `dsh-digital-life` adds configurable conversational digital-life agents to DeepSeek Harness as an installable Host and Client Cordis plugin. ## Features - Persists records in the `digital-life` settings namespace and each identity in `$DSH_HOME/digital-life/<id>/agents/<id>.md`. - Imports persona identities from agent Markdown files such as `~/.agent/agents/xxx.md` and `~/.claude/agents/xxx.md` (YAML frontmatter is ignored). - Adds a Harness-styled settings section for creating, editing, enabling, and deleting records. - Adds `consult_digital_life` for one independent consultation. - Adds `consult_digital_life_category` for parallel category consultation. - Registers an `@<id>` input source for selecting configured records. - Injects a Chat Panel through the additive `sidebar.footer.action` Slot without replacing the Harness sidebar or workspace browser. - Creates conversations without a Workspace and starts standalone conversations initialized with a selected digital-life persona. - Provides a composite homepage selector for the `数字生命模式` Agent preset and a required digital-life choice. ## Demo <!-- prettier-ignore --> | Homepage selector | Chat Panel | Settings | Create digital life | | ---- | ---- | ---- | ------ | | <img src="pics/home.png" alt="Digital-life selector on the Harness homepage" width="960"> | <img src="pics/chat.png" alt="Digital-life Chat Panel" width="960"> | <img src="pics/setting.png" alt="Digital-life settings" width="960"> | <img src="pics/setting2.png" alt="Create digital-life form" width="960"> | ## Record fields Each record has an `id`, `name`, `description`, primary-domain `category`, composable `tags[]`, `agent`, `persona`, and `enabled` flag. `agent` is the only runtime identity source. When no Agent file is supplied, saving a record writes `persona` to the managed `<id>/agents/<id>.md` file and stores that relative path in `agent`; when an Agent file is supplied, its Markdown body is authoritative and `persona` is ignored. New records using the `custom` category should set `customCategory`; older records without it fall back to the display name. `toolFilter` and `model` are optional. The Host validates the settings document and creates one-shot consultations with the configured subagent provider. See [`docs/think-tank-agent-team.md`](docs/think-tank-agent-team.md) for the proposed Think Tank agent-team design. ## Install from GitHub `dsh-digital-life` is installed into a DeepSeek Harness **Web Profile**. The commands below are run from the Harness checkout, not from the plugin repository. ### Prerequisites - A working DeepSeek Harness checkout - Node.js and pnpm versions supported by that Harness checkout - A GitHub URL for this repository ### Install ```sh cd /path/to/deepseek-harness pnpm dsh plugin --profile web add https://github.com/elonnzhang/dsh-digital-life.git ``` The command installs the plugin into `$DSH_HOME/profiles/web`, adds its bundle to the Web Profile, and applies its Host and Client halves on the next boot. Start the Web Profile: ```sh pnpm dsh web --port 3080 ``` Open `http://127.0.0.1:3080`, then go to **Settings → 数字生命**. > The repository must contain the built `lib/` directory because `package.json` points `main` and the Client entry at built files. When publishing a new GitHub revision, build before pushing: > > ```sh > cd /path/to/dsh-digital-life > pnpm install > pnpm build > git add src lib cordis.patch.yml package.json README.md README.zh.md > git commit -m "build: update plugin" > git push > ``` ### Update or uninstall From the Harness checkout: ```sh # Update the installed GitHub dependency pnpm dsh plugin --profile web update dsh-digital-life # Remove it from the Web Profile pnpm dsh plugin --profile web remove dsh-digital-life ``` Restart `pnpm dsh web` after installing, updating, or removing the plugin. ### Local development installation For local development, build the plugin and link the checkout into the profile: ```sh cd /path/to/dsh-digital-life pnpm install pnpm build cd /path/to/deepseek-harness pnpm dsh plugin --profile web add /path/to/dsh-digital-life ``` For Client HMR, keep `pnpm run dev:web` running in the Harness checkout and run `tsdown --watch` in this package. ## Usage ### 1. Configure digital lives Open **Settings → 数字生命** after the Web Profile starts. Add or edit a record with: The plugin UI follows the Harness locale and provides complete English and Simplified Chinese dictionaries. Switching the application language updates Settings, Chat Panel, and conversation selectors without translating user-authored names, descriptions, or Persona content. - **ID**: lowercase letters, numbers, and hyphens, for example `startup-mentor` - **Name**: the display name, for example `创业导师` - **Description**: a short responsibility summary - **Category**: `business`, `science`, `culture`, or `custom` - **Custom category**: recommended when `Category` is `custom` - **Tags**: searchable capabilities such as `创业`, `现金流` - **Persona**: the initial identity and response rules; converted to a managed Agent file when **Agent** is empty - **Enabled**: only enabled records appear in selection and category consultation You can enter a Host-readable path to bind an existing Agent Markdown file. Its YAML frontmatter is ignored and its Markdown body is the runtime identity. A file selected through the browser is instead imported into the managed file because the browser does not expose a path that the Host can reopen. When no external path is entered, the Persona is written to: ```text $DSH_HOME/digital-life/<id>/agents/<id>.md ``` An external Agent file remains the sole source of identity and is not copied or overwritten by the plugin. The settings document is normally: ```text $DSH_HOME/settings.yaml ``` ### 2. Choose the consultation provider Set **子代理 Provider** to a mounted subagent provider. Keep the default `spawn` unless your Harness profile installs another provider. Set **分类最大咨询数** to the maximum number of enabled records that `consult_digital_life_category` may consult in parallel. This limit does not affect standalone sessions. ### 3. Use a digital life from the composer Type `@` in the composer and select a record, for example `@startup-mentor`. The `@<id>` text helps the main Agent choose the `consult_digital_life` tool; it is not an automatic command. The model may still decide whether a consultation is useful. The available tools are: - `consult_digital_life(id, question)`: ask one configured digital life - `consult_digital_life_category(category, question)`: ask enabled records in one category in parallel and compare their answers ### 4. Start an independent conversation You can start one in either way: - Open **Chat Panel** in the sidebar and choose a digital life. - On the homepage, choose the `数字生命模式` Agent preset and then choose a record. The standalone session has no Workspace (`workspaceId`/`cwd`), receives a record-specific system prompt through Host binding, and is forced to the **read-only file sandbox**. The opening message is brief and does not repeat the full persona. File-reading and consultation are available, but file modifications are blocked. Inside a standalone digital-life session, mentioning another record as `@<id>` requires `consult_digital_life`; the current digital life must not imitate or answer for that record. Mentioning the current record's own ID is answered directly without a self-consultation. ### 5. Update the plugin After publishing a new GitHub revision, build the plugin before pushing. Then update it from the Harness checkout: ```sh pnpm dsh plugin --profile web update dsh-digital-life pnpm dsh web --port 3080 ``` If the profile still uses an old linked installation, remove and add it again: ```sh pnpm dsh plugin --profile web remove dsh-digital-life pnpm dsh plugin --profile web add https://github.com/elonnzhang/dsh-digital-life.git ``` ## Model Experience Consultation tools add their schemas to the main agent's model request. A single consultation starts one child agent and returns its text. Category consultation starts up to `maxBatchSize` enabled records in parallel. A standalone digital-life conversation receives a record-specific system prompt, is set to the read-only file sandbox, and starts with a brief first user message; the role instruction is carried by the system prompt and remains durable and model-visible in that Session. ## Known Limitations and Deferred Work In a regular Chat, `@<id>` is model-visible text that helps the agent choose `consult_digital_life`; it is not an automatic command. In a standalone digital-life session, the durable system prompt requires other-record mentions to use the consultation tool while self-mentions are answered directly. The current public sidebar has no additive Slot above the workspace browser, so Chat Panel uses the supported footer action Slot. Standalone digital-life sessions use the `digital-life-mode` Agent preset when a record is selected; per-record model selection is not yet applied during Session creation.
Install
dsh plugin --profile web add github:elonnzhang/dsh-digital-life#58de90f520ddd0e66777e20317a243f8e5ddb55e
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-digital-life from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.