Preface¶
Here is an introduction to dshworks/dsh-crew. It solves the problem of not just having dsh hand off tasks to Claude Code or Codex and receive a result, but instead opening a real terminal pane next to dsh, allowing people to see what the process is doing, and to input, interrupt, or broadcast messages at any time. For the dsh agent, it also provides a set of tools to seat these “members”, send tasks, read the current screen, and close processes when necessary.
What is this¶
dsh-crew is a DSH plugin released by dshworks under the MIT license. It places Claude Code and Codex as live terminal panes within the dsh Web UI, providing a seat bar, real PTY streaming visuals, and crew_* tools for the dsh agent to use.
Core Features¶
- Place Claude Code and Codex as live terminal panes next to dsh in the Web UI.
- Seat members via the seat bar; unavailable members are disabled, with the reason provided.
- Each member runs in the session’s workspace using a real PTY and streams output to the corresponding pane.
- Humans can input into any pane, interrupt with
Ctrl-C, or broadcast a message to all live panes. - Provides tools:
crew_list,crew_seat,crew_send,crew_peek,crew_dismiss. crew_sendwaits for the pane to settle and returns new lines or deltas, rather than the entire viewport.- Supports
run_in_backgroundand integrates with harness jobs, includingjob_outputandjob_kill. - Uses a headless terminal emulator so that
crew_peekreturns the current visible screen grid. - Tools can be disabled with
tools: false, and the split view remains available.
Installation and Usage¶
dsh plugin forwards to pnpm, so please confirm that pnpm is in your PATH. The command to install the plugin is as follows:
dsh plugin --profile web add @dshworks/dsh-crew
After installation, start dsh using the Web profile:
dsh --profile web
Afterwards, you can see a split view in the Web UI: one side is dsh, and the other side is the seated Claude Code or Codex terminal pane.
Typical Usage¶
The following explains the order in which the dsh agent calls tools.
First, view the available and seated members:
crew_list
Then, seat a member. For example, seat Claude Code:
crew_seat(agent: "claude")
This call will start a pane and return the pane id and the first screen’s content.
Send a task to a seated member:
crew_send(pane: "…", message: "…")
crew_send inputs the message, presses Enter, and waits for the pane to quiet. The return result is new lines or deltas, not the full viewport.
If you only want to see the current screen, call:
crew_peek(pane: "…")
It returns the pane’s current visible screen grid, which is exactly what the human sees.
If background execution is needed, you can use:
crew_send(pane: "…", message: "…", run_in_background: true)
This returns a job id; it arrives as a notice upon completion. The relevant job can use job_output to read the output, or job_kill to stop it.
Close a member’s process:
crew_dismiss(pane: "…")
If you only want to keep the split view and don’t want the agent to call tools, you can set:
tools: false
At this point, the split view is still available, and members are operated only by humans.
If you don’t need the run_in_background parameter, you can set:
enableRunInBackground: false
Behavioral Boundaries¶
- The plugin does not automatically answer product trust prompts. If the first screen is a dialog, the tool will hand the situation over to the caller to handle.
- Dialogs can be answered using
crew_send; an empty message will press Enter. Wait for the composer to appear, then send the formal task. run_in_backgroundrequiresctx.jobsand a job controller accessible by the calling agent. If these conditions are missing, the tool will explain the situation rather than throwing an error directly.crew_sendreturns new content after waiting for the pane to settle, rather than re-sending the entire screen content to the model.
Use Cases and Notes¶
Suitable for the following scenarios:
- Need to watch the execution process of Claude Code or Codex manually.
- Need to input, interrupt, or broadcast messages at any time during the agent’s work.
- Hope that the dsh agent can delegate tasks to other CLI members and read their current screens.
- Only want to perform human-machine split-screen operations, without needing the agent to call tools.
Notes:
- The plugin runs local CLIs and allows reading and sending terminal content, so it should be used on trusted hosts and directories.
- Before installation, check the source code, dependencies, and MIT license to confirm they meet local security requirements.
- Before using
dsh pluginto install, ensure pnpm is in your PATH.
Links¶
- Plugin directory page: https://www.skillhub.cn/plugins/dshworks/dsh-crew
- GitHub: https://github.com/dshworks/dsh-crew