Introduction¶
The native DSH conversation interface is Chat plus Trajectory: you type a message, the Agent runs a batch of tools, and finally gets a reply. Tool calls are scattered throughout the trajectory, and the deliverables of a round are scattered across sessions. When you hit a node requiring approval, you have to switch to the native UI to see why. To see an “overall progress,” you often have to count manually against the timeline.
Agent Theater does not aim to solve “lack of information,” but rather the presentation of information. It adds an extra conversation.view view alongside Chat and Trajectory, turning a whole round of conversation into a theatrical performance: characters move based on real tool events, your input becomes fleeting comic bubbles, Agent’s output becomes subtitles, and at the end of the round, the stage directly presents the real results and deliverables. The code repository is on GitHub lim1202/dsh-agent-theater, maintained by lim1202. The community directory SkillHub classifies it under the “Fun Cosplay” category, and it currently has 0 stars. It is not an official plugin.
What is it¶
One-sentence positioning: A pure frontend extension plugin for DSH that registers a conversation view named “Theater”. It does not change the DSH core, nor does it modify Chat or Trajectory, and it does not call the model additionally—every text on the stage comes from the Chat data already assembled at the Conversation layer.
The problem it solves is: making “what the Agent is doing and what it produced” instantly visible, while not losing the original conversation. All storytelling is read-only; uninstalling the plugin restores the default interface.
The current version of the repository is 0.1.1, license is MIT, and it requires DSH Desktop 0.2.1-rc.x (the README states it has been tested on 0.2.1-rc.5, and engines.dsh inside the package is >=0.2.1-rc.5 <0.3.0).
Core Features¶
A stage, not a chat list. The view itself is the stage: top scene tags, in the middle are enlarged characters (with props, glow, badges), and at the bottom is the performance layer, holding comic bubbles, subtitles, and a unified status bar. There is no history list; to see the full original text, go back to Chat.
Four scenes driven by real conversation states. Idle (character standing by, occasionally a line of dialogue), Working (real-time tool name + operation count + timer), Completion (report card), Attention (needs you, request card). Switching conditions come from the real conversation state, not guesses from the plugin itself.
Completion Report. At the end of a round, a card is drawn containing three parts: the last real reply of that round (Markdown rendered, folded by default, expandable and copyable), real statistics (category counts and wall-clock time for tools like Read / Search / Run / Modify, not parsing or paraphrasing the Agent’s self-description), and deliverable details—Delivered (files sent via present), Edited files (successful write / edit / variable str_replace_editor, deduplicated and failures excluded), Attachments (real image references of this round). The description attached to present is displayed on a line below the filename; clicking the file line opens it in the right sidebar, and clicking the thumbnail opens a lightbox inside the stage.
Needs You to Handle. The request card displays the real type (Waiting for approval / Waiting for your answer), Tool · Reason, and for questions, lists the real question and options. The plugin only renders this information; operations still go through the native approval UI and input area; the plugin will not approve for the user.
Codex Pet Frame-by-Frame Character. Import a pet.json + spritesheet.webp, and the character on stage becomes a frame-by-frame sprite animation; if not imported, it uses built-in placeholder characters (SVG + CSS animation in src/art.js), with consistent behavior for scenes and bubbles.
Restrained Boundaries. Tool calls do not enter the narrative, only appearing in the status bar and props; character dialogue is original copy provided by the plugin and is not written into the session log; throughout the process, it reads session data without writing to the session, injecting messages, or making extra requests to the Host. Animations follow prefers-reduced-motion.
Installation & Enablement¶
Prerequisites: DSH Desktop must be at 0.2.1-rc.x, and the application must be initialized. After installation, you need to refresh the page once, because the Client module only reads on page load.
Method A, install from GitHub (recommended by README). When installing on the plugins page, paste:
github:lim1202/dsh-agent-theater
Command line equivalent:
dsh plugin --profile desktop add github:lim1202/dsh-agent-theater
Method B, install from release package or local directory:
dsh plugin --profile desktop add https://github.com/lim1202/dsh-agent-theater/releases/download/v0.1.1/dsh-agent-theater-0.1.1.tgz
dsh plugin --profile desktop add /path/to/dsh-agent-theater
Method C, add a Discover index source. DSH 0.2.1+ Plugins → Discover → Index sources can read the plugin market index (JSON, format 1), and the repository comes with one:
https://cdn.jsdelivr.net/gh/lim1202/dsh-agent-theater@v0.1.1/index.json
Backup address (non-CDN, some networks may exceed the 15-second timeout DSH gives to index sources): https://raw.githubusercontent.com/lim1202/dsh-agent-theater/v0.1.1/index.json.
After installation, three steps:
- Refresh the page, and select Theater in the view switch above the conversation.
- If you want to use Codex Pet, import one; you can also use it without importing.
- When not needed, turn off the bundle on the Plugins page to immediately return to normal Chat; uninstall using
dsh plugin --profile desktop remove dsh-agent-theater, and thenrm -rf ~/.dsh/agent-theaterto completely clear character resources.
Typical Usage¶
Import Pet. Click “Select Pet Asset” in the theater toolbar → Native folder selection → Select a folder containing pet.json. Resources will be copied to an independent directory, and the source folder remains read-only and unmoved:
$DSH_HOME/agent-theater/ # Default ~/.dsh/agent-theater
├── config.json # {"active": "laffey-ii"}
└── pets/<id>/
├── pet.json # Normalized list upon import
└── spritesheet.webp # Copied from source folder
pet.json fields: id, displayName, description, spriteVersionNumber (only accepts 2), spritesheetPath (relative path within the directory, rejecting .. and absolute paths). Sprite sheet ≤ 24MB, supports webp/png/jpeg/avif, pixel dimensions must be integer multiples of the frame grid.
Frame Grid. Parsed at 192x208 per frame, 8 columns × 11 rows = 1536x2288. The number of frames per row is determined by transparent pixels, arranged continuously from column 0. Row mapping is calibrated with laffey-ii v2: Row 0 has 7 frames idle (breathing, blinking); Row 4 has 5 frames success (jump up, air, land); Row 5 has 8 frames error; Row 6 has 6 frames waiting; Row 7 has 6 frames working; Row 8 has 6 frames thinking / research; Rows 1/2/3/9/10 are reserved and unused.
Stage While Working. Send a sentence, it displays in a comic bubble next to the character and fades out after 9 seconds; the content the Agent is currently outputting serves as subtitles laid out above the bottom status bar. The status bar updates in real-time, for example ● Executing… · Running node --test · 3 ops · 00:42. At the end of a round, a report card is displayed, and the status bar becomes ● Completed · 2 files · 1 attachment. It will retract after a few seconds if not clicked; clicking × retracts it immediately. After that, the stage returns to idle, but the production count of this round is still retained at the bottom.
Moments Needing Approval. When the conversation pauses waiting for approval or an answer, the stage switches to Attention: the character stands next to the request card, and the status bar prompts ● Waiting for you to handle · Process in the input area below. Just go to the native input area to complete the operation.
Use Cases & Notes¶
Suitable for people who want a more intuitive view of the Agent’s work process: scenarios like long-running builds, writing multi-file changes, and repeatedly delivering artifacts. Using Theater, you can instantly see what was read, changed, and delivered in this round. It also reduces the number of times you switch views when you need to watch for approval and waiting states. It has zero intrusion into the session log and is suitable for those who do not want the conversation rewritten or injected.
A few points to note:
- The plugin runs with the current DSH process permissions. Before installing, read the source code (
index.js,client.js,cordis.patch.yml) and the LICENSE to confirm there is no unexpected behavior; it is a third-party plugin and is unrelated to DeepSeek. - DSH is still in the rc stage, and slot / service signatures may change. If the view is blank after upgrading, paste the
slot entry crashed in 'conversation.view'from the console into an issue. - Without importing a Pet, it uses SVG placeholder characters; after importing, it is a frame-by-frame sprite animation, not Live2D. Attachments only list image references; non-image attachments like PDFs and code files do not enter the report card. Markdown is a practical subset, does not support tables, images, task lists, or inline HTML, and does not perform syntax highlighting.
- Actions are mapped by tool name (
theaterPoseForTool); for new tools, the default “laboring” action is used; the sprite sheet is downloaded in full on the first screen, reusing cache via ETag 304, and is not loaded by row or chunked. - Character art is not distributed with the repository; the ones included are placeholders. Before using third-party character assets, confirm the license yourself.
Conclusion¶
The value of Agent Theater lies in turning “conversation” into “a watchable round”: characters move with real tool events, and deliverables are directly placed on stage via report cards, while the original Chat and Trajectory remain untouched. It does not call additional models or rewrite sessions; if you can’t install it or don’t get used to it, uninstall it cleanly. Search for lim1202/dsh-agent-theater on SkillHub for the directory page, and see the GitHub repository https://github.com/lim1202/dsh-agent-theater for source code and installation instructions.