DSH Crew
Một plugin của DeepSeek Harness: điều phối công việc tới các DSH agent từ Claude Code / Codex / Antigravity / Grok mà không phải từ bỏ UI subagent gốc của host.
UI Tiến trình Gốc • Chính sách Tier & Nâng cấp • Guardrail Điều phối • Bảng Công việc • Phiên DSH Trong Host • Vision & Tạo ảnh (Native-First) • Cài đặt Một Cú Nhấp
npm: @zseven-w/dsh-crew · Phiên bản plugin hiện tại: 0.1.0-rc.4 · Đã kiểm thử với DSH 0.1.1-rc.1
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
Trang cài đặt DSH Crew — tích hợp host, chính sách điều phối, thực thi và cầu nối đa phương thức
## Vì sao dùng DSH Crew
DSH Crew là một plugin cho [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) — một agent harness mã nguồn mở. Nó giúp các DSH agent có thể được điều phối từ Claude Code, Codex, Antigravity và Grok: orchestrator giữ model của riêng mình, công việc chạy trên một DSH agent thật với công cụ, sandbox, presets và lịch sử phiên của harness đó, và host vẫn hiển thị nó như một subagent gốc với tiến trình trực tiếp.
Thứ chạy công việc là một DSH agent, không phải một lời gọi model thuần túy. Tier (`flash` / `pro`) chọn mức năng lực mà agent đó nhận được từ roster model đã cấu hình của harness — hiện là DeepSeek V4 Flash và V4 Pro — nên việc đổi model trong DSH không cần thay đổi gì ở đây.
|
### 🧵 UI Tiến trình Gốc
Workers xuất hiện như các subagent thông thường trong Claude Code / Codex / Antigravity / Grok — số lần điều phối, bước đang chạy, lời gọi tool và lượng token sử dụng đều hiển thị trong panel tác vụ của chính host, cộng thêm một segment statusline của claude-hud: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3`.
|
### 🎚️ Chính sách Tier và Nâng cấp
`flash` cho công việc máy móc, `pro` cho suy luận, `effort` từ `off` đến `max`. `tier_policy` có thể kẹp mọi lần điều phối vào một tier duy nhất ở tầng công cụ, và `escalate_on_failure` thử lại một lần chạy flash thất bại trên pro — dựa trên bằng chứng, không phải đoán trước độ khó.
|
|
### 🏛️ Phiên DSH Trong Host
Với bundle được cài trong một DSH profile, mỗi worker là một phiên DSH first-class: hiển thị trong Web UI, được nhóm theo thư mục làm việc, gắn preset Agent mà bạn chọn theo từng tier. Khi DSH không chạy, việc điều phối rơi về một DSH runtime standalone, nên CI và môi trường headless vẫn hoạt động.
|
### 👁️ Vision và Tạo ảnh
Các model của DSH chỉ xử lý văn bản. `describe_image` giờ ưu tiên model VL của chính DeepSeek (`deepseek-v4-flash-vision-exp`) bất cứ khi nào có key, rồi mới rơi về các CLI bạn đã có — Claude, Codex, Grok, Antigravity — hoặc bất kỳ API tương thích OpenAI nào bạn cấu hình. `generate_image` mượn cọ vẽ của chính các CLI đó. Ảnh được dán vẫn hiển thị trong hội thoại và đến được model dưới dạng văn bản.
|
|
### 🛡️ Guardrail Điều phối
Mọi lần điều phối đều được kiểm tra trước khi bất cứ thứ gì được khởi tạo. Việc lồng worker→worker bị giới hạn ở độ sâu origin-chain 3 và các vòng lặp bị từ chối; worker thứ hai trên một workspace mà job khác đang giữ sẽ bị từ chối kèm thông tin người giữ — không bao giờ âm thầm xếp hàng. Các lời từ chối là lỗi có thể đọc được: hãy chờ hoặc thu hẹp phạm vi, đừng lách qua.
|
### 📋 Bảng Công việc
Panel DSH Crew kiêm luôn vai trò bảng công việc: mọi job worker — đang chạy hay đã xong — đều được liệt kê với tier, effort, tiến độ trực tiếp và token, các workspace bị giữ hiển thị người giữ, và một job biến mất giữa chừng (ví dụ hub restart) hiện ra như một orphan ghost thay vì âm thầm biến mất.
|
|
### 🔌 Provider Tùy chỉnh
Mang endpoint của riêng bạn (Base URL + API key + models) hoặc một template lệnh cục bộ. Mỗi provider có một bài kiểm tra kết nối kiểm tra khả năng truy cập và xác thực, sau đó thực hiện một lời gọi vision thật để bạn phát hiện ngay bây giờ, không phải giữa chừng tác vụ.
|
### 📦 Cài đặt Một Cú Nhấp
Trang cài đặt cài và cập nhật plugin Claude Code, các role file Codex cùng agents, skills và commands của Antigravity / Grok cho bạn — đăng ký marketplace, allowlist quyền MCP tool, nối dây HUD, đường dẫn tuyệt đối được render cho máy này — và khôi phục chúng dễ dàng như vậy. Mọi tệp cài đặt đều được sao lưu trước.
|
## Cách hoạt động
```
Claude Code / Codex / Antigravity / Grok (orchestrator, keeps its own model)
└─ ds-flash / ds-pro ← native subagent shell (progress shows in the host's task UI)
└─ MCP: dsh_run_worker(tier, effort, cwd, worker=)
├─ worker="agy"/"grok" → that external CLI runs the task (explicit opt-in)
├─ hub reachable → session inside DSH (visible in the Web UI, grouped by cwd)
└─ otherwise → dsh-jsonrpc-agent runtime (worker.cordis.yml)
└─ DeepSeek V4 Flash / Pro (DSH SDK, event stream → progress and token stats)
```
## Một lần chạy, hai góc nhìn
Việc dispatch có thể trải rộng. Bên dưới, mười tám worker dịch song song tài liệu README này: host đếm chúng như subagent của chính nó, còn harness chạy chúng như những phiên thực sự.
Trong Claude Code, worker của dsh-crew hiện ra như subagent gốc; đoạn statusline theo dõi tier đang chạy, thời gian trôi qua và token.
Bảng DSH Crew nhìn cùng lần chạy đó từ phía harness: host nào đã gửi mỗi job, tier và effort của nó, tiến độ trực tiếp và lượng token.
Panel này đồng thời là bảng công việc: các job đang chạy và đã xong vẫn nằm trong danh sách với tier, tiến độ và token, các workspace bị giữ nêu tên người giữ, và một job biến mất giữa chừng (hub restart) hiện ra như một orphan ghost thay vì âm thầm biến mất.
## Cài đặt
Cài từ npm vào một profile DSH:
```bash
dsh plugin --profile web add @zseven-w/dsh-crew@latest
dsh web
```
Hoặc, để phát triển cục bộ ngay từ mã nguồn:
```bash
dsh plugin --profile web add link:/path/to/dsh-crew
dsh web
```
Giao thức `link:` tạo symlink phụ thuộc của profile tới kho này, nên mỗi lần build lại đều thấy ngay.
### Cấu hình thông tin xác thực DeepSeek (chỉ standalone)
Trong hub mode — cài đặt ở trên — worker chạy bên trong instance DSH và sử dụng thông tin xác thực DeepSeek đã được cấu hình. Không cần setup thêm gì.
Chỉ fallback standalone cần key riêng: khi dispatch từ một host mà không có instance DSH đang chạy, nó sẽ khởi động worker runtime như một process riêng. Lấy API key tại [platform.deepseek.com](https://platform.deepseek.com) và ghi vào `~/.config/dsh-crew/.env`:
```
DEEPSEEK_API_KEY=sk-...
```
### Kiểm tra
```bash
node scripts/smoke.mjs
```
Smoke test dispatch một job rẻ qua path nào khả dụng — hub khi instance DSH đang chạy, standalone nếu không — và in ra path nào được sử dụng. Trong khoảng mười giây bạn sẽ thấy `smoke test passed — configuration OK`. Nếu lỗi, lý do sẽ được in ra và giới hạn trong path được kiểm tra.
Sau đó mở Cài đặt → DSH Crew và cài tích hợp host — Claude Code, Codex, Antigravity, Grok — chỉ với một cú nhấp, hoặc điều khiển trình cài đặt đó từ dòng lệnh:
```bash
node src/install/cli.mjs claude # Claude Code plugin: marketplace + permissions + HUD segment
node src/install/cli.mjs codex # Codex agents + prompts
node src/install/cli.mjs agy # Antigravity MCP config + agents + skills
node src/install/cli.mjs grok # Grok MCP config + agents + commands
node src/install/cli.mjs all # all four hosts at once
# uninstall symmetrically (uninstall-claude | uninstall-codex | uninstall-agy | uninstall-grok):
node src/install/cli.mjs uninstall-claude
```
## Bối cảnh và thuật ngữ
- **DSH** (DeepSeek Harness): agent harness mã nguồn mở của DeepSeek, một code agent dưới dạng Web UI, tương tự Claude Code nhưng điều khiển các model DeepSeek.
- **MCP** (Model Context Protocol): giao thức tích hợp công cụ AI của Anthropic, cho phép LLM gọi công cụ và nguồn dữ liệu bên ngoài một cách an toàn.
- **Cordis bundle**: định dạng plugin của DSH; dự án này có thể chạy standalone như một MCP service hoặc cài vào DSH Web dưới dạng hub mode.
- **tier**: bậc năng lực — slot nào trong roster model đã cấu hình của DSH mà một worker nhận được. `flash` nhanh và rẻ (tác vụ đơn giản), `pro` suy luận sâu hơn (bài toán phức tạp). Hiện chúng ánh xạ tới DeepSeek V4 Flash và V4 Pro; đổi model trong DSH thì không có gì thay đổi ở đây.
- **worker**: DSH agent thực hiện công việc — một phiên đầy đủ với công cụ, sandbox và preset riêng, không phải một lời gọi model thuần túy.
- **effort**: cường độ suy luận, `off` = không suy luận, `high` = đầu tư suy luận cao, `max` = đầu tư suy luận tối đa.
## Claude Code
### Cài đặt
Cài đặt một cú nhấp (chọn một):
- **Trang cài đặt DSH** (khi hub mode được cài): Settings → DSH Crew → "Install to Claude Code"
- **Dòng lệnh**: `node src/install/cli.mjs all`
Cả hai làm cùng một việc: đăng ký marketplace cục bộ (thư mục cha `dsh-plugins/` làm marketplace root) + `claude plugin install` + allowlist quyền MCP tool + cấu hình segment trạng thái worker cho claude-hud (tự sao lưu settings.json trước khi thay đổi, idempotent). **Khởi động lại phiên sau khi cài đặt để thay đổi có hiệu lực.**
### Sử dụng
- Trực tiếp trong hội thoại, nói "dispatch X to ds-flash" hoặc "dispatch X to ds-pro", và subagent sẽ thực hiện tác vụ
- Số lần điều phối và tiến trình thời gian thực hiển thị trong task UI của Claude Code
- **Segment statusline HUD**: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3` (tier hiện tại / thời gian trôi qua / lượng token / số hoàn thành)
- Khi phát triển cục bộ, `statusline/statusline.sh` hoặc `statusline/worker-segment.sh` có thể được tích hợp độc lập
- **Tác vụ chạy lâu**: CC có giới hạn timeout trên các lời gọi MCP (`MCP_TOOL_TIMEOUT` có thể điều chỉnh), tác vụ dài có thể để orchestrator dùng `dsh_spawn_worker` + polling `dsh_worker_result(wait_seconds)`
- **Phát triển và gỡ lỗi cục bộ**: `claude --plugin-dir /path/to/dsh-crew` để tải tạm thời
### Lệnh phiên
Chỉ ghi đè giá trị mặc định toàn cục cho phiên hiện tại, và được thực thi ở tầng công cụ chứ không dựa vào prompt:
| Lệnh | Tác dụng |
|---|---|
| `/dsh-crew:config` | Xem hoặc đặt mặc định của phiên: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
| `/dsh-crew:on` · `/dsh-crew:off` | Bật hoặc tắt dispatch cho phiên này (tắt là công tắc cứng: công cụ sẽ từ chối) |
| `/dsh-crew:status` | Trạng thái trực tiếp của job worker: tier, tiến độ, token, công cụ hiện tại |
| `/dsh-crew:playbook` | Thực hành điều phối tốt nhất: chọn flash hay pro, bản mô tả khép kín, song song hóa, xác minh kết quả, guardrail |
## Codex
### Cài đặt
Khuyến nghị dùng installer (tự render đường dẫn cho máy này, chép các prompt `/dsh-config`, `/dsh-status` và `/dsh-playbook`):
```bash
node src/install/cli.mjs codex
```
Hoặc chép tay (cần sửa đường dẫn thủ công sau khi chép):
```bash
cp codex/agents/*.toml ~/.codex/agents/ # global or project-level .codex/agents/
```
Các role file được cấu hình sẵn với:
- Cấu hình mount MCP server
- `default_tools_approval_mode = "approve"` (**bắt buộc**, nếu không các lời gọi tool sẽ bị tự động hủy trong chế độ exec)
- `tool_timeout_sec = 3600`
**Lưu ý**: Khi chép tay, các đường dẫn tuyệt đối trong trường `args` phải được cập nhật cho khớp vị trí cài đặt thực tế; installer xử lý việc này tự động.
### Sử dụng
- Trong TUI tương tác, chọn "spawn ds-pro to ..." để điều phối tác vụ; các panel Active/Done hiển thị tiến trình
- Chế độ `codex exec` cũng có thể gọi trực tiếp `dsh_run_worker`
### Lệnh phiên
Phía Codex cài ba prompt tương ứng:
| Lệnh | Tác dụng |
|---|---|
| `/dsh-config` | Xem hoặc đặt mặc định của phiên: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
| `/dsh-status` | Trạng thái trực tiếp của job worker: tier, tiến độ, token, công cụ hiện tại |
| `/dsh-playbook` | Thực hành điều phối tốt nhất: chọn flash hay pro, bản mô tả khép kín, song song hóa, xác minh kết quả, guardrail |
## Antigravity (agy)
### Cài đặt
```bash
node src/install/cli.mjs agy
```
Đăng ký dsh-crew MCP server vào `~/.gemini/config/mcp_config.json` và cài các agent `ds-flash` / `ds-pro` cùng các skill `dsh-config`, `dsh-status` và `dsh-playbook` vào `~/.gemini/config/` (mọi tệp được sao lưu trước). Khởi động lại phiên sau khi cài đặt.
### Sử dụng
- Chọn `ds-flash` hoặc `ds-pro` làm agent để điều phối tác vụ
- `dsh_worker_config` đọc hoặc ghi đè mặc định của phiên
### Skill phiên
| Skill | Tác dụng |
|---|---|
| `/dsh-config` | Xem hoặc đặt mặc định của phiên (tier / effort / mode / timeout / policy / escalation / reset) |
| `/dsh-status` | Trạng thái trực tiếp của job worker: tier, tiến độ, token, công cụ hiện tại |
| `/dsh-playbook` | Thực hành điều phối tốt nhất: chọn flash hay pro, bản mô tả khép kín, song song hóa, xác minh kết quả, guardrail |
### Lưu ý
- agy chạy worker với **full approval** (`--dangerously-skip-permissions` + accept-edits): agy 1.1.16 không có chế độ quyền phạm vi workspace, nên worker headless buộc phải tự phê duyệt yêu cầu tool.
Gỡ cài đặt: `node src/install/cli.mjs uninstall-agy`
## Grok
### Cài đặt
```bash
node src/install/cli.mjs grok
```
Ghi phần `[mcp_servers.dsh-crew]` vào `~/.grok/config.toml` và cài các agent `ds-flash` / `ds-pro` cùng các lệnh `/dsh-config`, `/dsh-status` và `/dsh-playbook` vào `~/.grok/` (mọi tệp được sao lưu trước).
### Sử dụng
- Chọn `ds-flash` hoặc `ds-pro` làm agent để điều phối tác vụ
### Lệnh phiên
| Lệnh | Tác dụng |
|---|---|
| `/dsh-config` | Xem hoặc đặt mặc định của phiên (tier / effort / mode / timeout / policy / escalation / reset) |
| `/dsh-status` | Trạng thái trực tiếp của job worker: tier, tiến độ, token, công cụ hiện tại |
| `/dsh-playbook` | Thực hành điều phối tốt nhất: chọn flash hay pro, bản mô tả khép kín, song song hóa, xác minh kết quả, guardrail |
### Lưu ý
- Theo thiết kế bảo mật, grok không khởi động MCP server cấp repo trong các thư mục dự án không đáng tin (`grok mcp doctor` báo "folder untrusted"); cài đặt toàn cục không bị ảnh hưởng — hãy đổi thư mục hoặc truyền `--trust`.
- grok workers chạy với `bypassPermissions` (always-approve, như tài liệu grok khuyến nghị cho tự động hóa headless); các deny rules và hooks vẫn được áp dụng.
Gỡ cài đặt: `node src/install/cli.mjs uninstall-grok`
## Công cụ MCP
| Công cụ | Mô tả |
|---|---|
| `dsh_run_worker` | Điều phối tác vụ kiểu blocking (`tier`: flash/pro, `effort`: off/high/max, `cwd`, `worker`), chờ kết quả |
| `dsh_spawn_worker` | Điều phối tác vụ bất đồng bộ, trả về job id (cho fan-out song song); thu kết quả bằng `dsh_worker_result` |
| `dsh_worker_status` | Tiến trình thời gian thực của mọi job (turn/bước/công cụ hiện tại/token) + cwd advisory locks |
| `dsh_worker_result` | Lấy kết quả, có thể chỉ định `wait_seconds` để chờ |
| `dsh_worker_cancel` | Hủy job được chỉ định, chấm dứt process runtime của nó |
| `dsh_worker_config` | Đọc/đặt mặc định phiên (tier, effort, mode, timeout, policy, escalation) và liệt kê `worker_profiles` |
Tiến trình đồng thời được phản chiếu vào `~/.config/dsh-crew/status.d/` (một tệp shard cho mỗi writer, có thể được đọc bởi statusline / giám sát bên ngoài).
## Guardrail điều phối
Mọi lần điều phối đều được kiểm tra trước khi bất cứ thứ gì được khởi tạo — các lời từ chối là lỗi có thể đọc được, không bao giờ là hàng đợi âm thầm:
- **Origin chain**: Mỗi lần điều phối thêm một hop vào origin chain worker→worker. Việc lồng sâu hơn giới hạn (`origin_depth_limit`, mặc định 3) bị từ chối, và mọi vòng lặp cũng vậy (cùng backend + cwd xuất hiện hai lần) — lớp bảo vệ chặn việc worker tự khuếch đại đệ quy.
- **cwd advisory lock**: một worker đang chạy cho mỗi workspace. Lần điều phối thứ hai vào workspace đang bị giữ bị từ chối kèm job id, backend và thời gian bắt đầu của người giữ — hãy chờ nó xong, hủy bằng `dsh_worker_cancel`, hoặc truyền `allow_concurrent_cwd: true` (chỉ cho tác vụ chỉ đọc).
## Playbook điều phối
Cách điều phối *tốt* — flash hay pro, bản mô tả khép kín, song song hóa an toàn, xác minh kết quả và các guardrail ở trên — được đóng gói theo từng host: `/dsh-crew:playbook` (Claude Code skill), `/dsh-playbook` (Codex prompt, Antigravity skill, Grok command).
## Backend CLI tường minh
`worker="agy"` / `worker="grok"` ghim một lần điều phối vào CLI bên ngoài đó (backend × model × effort) thay cho logic tier của DSH. Đây là opt-in tường minh — không có mặc định, nên chỉ đặt khi người dùng yêu cầu CLI đó. Lưu ý: grok từ chối khởi động MCP server cục bộ trong repo ở các thư mục không đáng tin, và agy chạy worker với full approval (không có chế độ quyền phạm vi workspace).
## Đa phương thức: vision và tạo ảnh
**DeepSeek là model chỉ xử lý văn bản** và không hỗ trợ nhập ảnh hay tạo ảnh. Plugin này lấy các khả năng đó từ bên ngoài thông qua các MCP tool:
**Native vision trước tiên**: khi vision provider là một CLI tích hợp sẵn (hoặc tường minh `native`), `describe_image` thử trước model VL của chính DeepSeek `deepseek-v4-flash-vision-exp` (gọi API trực tiếp; key từ `DEEPSEEK_API_KEY` hoặc `~/.config/dsh-crew/.env`). Mọi lỗi đều rơi xuống chuỗi CLI provider bên dưới một cách nhẹ nhàng; chuỗi đó được giữ nguyên làm fallback. Tạo ảnh không bị ảnh hưởng — model native chỉ nhìn ảnh.
| Công cụ | Mô tả |
|---|---|
| `describe_image` | Trả lời câu hỏi bằng cách xem ảnh (ảnh chụp màn hình, thiết kế, biểu đồ, v.v.), kết quả được cache theo provider + model + ảnh + câu hỏi |
| `generate_image` | Tạo ảnh từ mô tả văn bản, lưu vào đường dẫn tuyệt đối được chỉ định; đầu ra là bitmap phẳng (cần OpenPencil để chỉnh sửa layer) |
**Dán ảnh trong phiên**: Trong DSH, chuyển model sang `DeepSeek (vision) ◉` để dán ảnh trực tiếp. Ảnh ở lại trong phiên và hiển thị bình thường; plugin nối văn bản được nhận dạng vào sau ảnh và gỡ ảnh trước khi gửi — bạn thấy ảnh, model đọc văn bản. Việc nhận dạng đi theo cùng bậc thang native-first: model VL của DeepSeek khi có key, rồi đến CLI provider bạn đã cấu hình.
### Cấu hình
Trong **trang cài đặt DSH → DSH Crew → Multimodal** (hoặc sửa trực tiếp `~/.config/dsh-crew/config.json`):
**Vision provider** (xem ảnh):
- `native` / `deepseek-native` (model VL của chính DeepSeek — được thử trước tự động cho mọi provider tích hợp sẵn khi có key)
- `claude-code` (mặc định, dùng haiku, chi phí thấp)
- `codex` (dùng GPT, có thể chỉ định model cụ thể)
- `grok` (dùng Grok)
- `agy` (Antigravity)
- `custom` (API tương thích OpenAI hoặc lệnh cục bộ)
- `off` (tắt)
**Image generation provider** (tạo ảnh):
- `codex` (`$imagegen`, gpt-image-2)
- `agy` (Nano Banana)
- `grok` (Imagine)
- `custom` (API tương thích OpenAI hoặc lệnh cục bộ)
- `off` (tắt)
### Provider tùy chỉnh
Hai cách tích hợp:
**API**: Bất kỳ endpoint tương thích OpenAI nào
- Điền Base URL, API Key, danh sách model
- Vision dùng `/chat/completions` với ảnh base64 inline
- Tạo ảnh dùng `/images/generations`
- **Phải chỉ định "image generation model" để có khả năng tạo ảnh**, nếu không provider chỉ xuất hiện trong lựa chọn vision
**CLI**: Template lệnh cục bộ, placeholder được thay bằng tham chiếu an toàn
- Vision: `{image} {question} {model}` → stdout là câu trả lời
- Tạo ảnh: `{prompt} {output} {size}` → lệnh phải ghi tệp vào `{output}`
- Điền ít nhất một lệnh; lệnh nào được điền sẽ quyết định khả năng
**Kiểm tra kết nối**: Mỗi provider tùy chỉnh có một nút kiểm tra
- API: Kiểm tra khả năng truy cập endpoint, xác thực, gửi yêu cầu vision thật để xác minh
- CLI: Kiểm tra tệp thực thi, chạy lệnh thật để xác minh
- Tạo ảnh: Chỉ xác thực cấu hình, không xuất ảnh thật
**CLI thuê bao được mượn** (claude / codex / grok / agy) yêu cầu bạn đăng nhập cục bộ; plugin sẽ không bỏ qua quyền của chúng thay bạn.
## Hub mode
Gói này cũng là một DSH bundle hợp lệ (`dsh.bundle` + `cordis.patch.yml`). Sau khi cài vào DSH Web profile bằng `dsh plugin add dsh-crew`:
- **Các phiên worker trở thành công dân hạng nhất**: chạy như các phiên first-class trong DSH host (`agents.create` + waterfall model/effort theo từng phiên + preset mặc định), xuất hiện trong danh sách phiên của Web UI, có thể mở bất cứ lúc nào để xem toàn bộ quá trình thực thi
- **Sắp xếp theo thư mục làm việc**: quản lý các phiên worker theo cwd trong Web UI
- **Loopback API**:
- `POST/GET /_dsh/dsh-crew/jobs`: tạo tác vụ, liệt kê, long-poll kết quả, hủy
- `GET /_dsh/dsh-crew/ping`: kiểm tra sức khỏe (MCP shim dùng nó để phát hiện hub có đang chạy không)
- `POST /_dsh/dsh-crew/install`: cài đặt tích hợp host một cú nhấp — Claude Code / Codex / Antigravity / Grok (backend của `src/install/`)
- **Tự động phát hiện**: MCP shim của các host tự động phát hiện hub (biến env `DSH_CREW_HUB`, mặc định `http://127.0.0.1:3080`)
- DSH Web đang chạy → job vào hub mode (`mode: "hub"`)
- Không chạy → rơi về standalone runtime
## Lựa chọn giải pháp và giới hạn
### Người dùng thuê bao → phương án shell subagent (khuyến nghị)
- **Hiện trạng**: shell subagent của Claude Code dùng haiku làm trung gian; mỗi lần điều phối tốn thêm hàng trăm đến hàng nghìn token
- **Đánh đổi**: Dùng một lượng nhỏ token Anthropic để đổi lấy task UI gốc, hiển thị tiến trình thời gian thực, không cần cấu hình thêm
- **Khuyến nghị**: Nếu bạn đã đăng ký Claude Pro hoặc dùng Claude Code, hãy dùng phương án này — tiện lợi và minh bạch
### Môi trường trả theo lượt dùng / CI → phương án router trực tiếp
- **Hiện trạng**: frontmatter của Claude Code subagent không hỗ trợ kết nối trực tiếp model bên thứ ba; thử nghiệm router của repo này trong scratchpad cần credential API-key cho Claude Code, nhưng OAuth thuê bao bị Anthropic chặn ở upstream với lỗi 403
- **Khuyến nghị**:
- Nếu dùng credential API-key (không phải OAuth) và muốn tiết kiệm token Anthropic, có thể chạy router cục bộ để kết nối trực tiếp DeepSeek
- Môi trường CI thường cũng dùng API key; phương án này tiết kiệm hơn (toàn bộ token là DeepSeek)
- Cần tự kiểm thử tích hợp router (không được hỗ trợ chính thức)
### Đang chạy DSH Web → hub mode tự bật
- **Hiện trạng**: Nếu `dsh plugin add dsh-crew` được cài vào DSH Web profile, các job chạy như phiên first-class trong host, xuất hiện trong danh sách phiên của Web UI
- **Khuyến nghị**: Trong các vòng lặp phát triển cục bộ, khuyến nghị bật hub mode; tiến trình worker có thể được quan sát đầy đủ trong Web UI; với cộng tác liên máy hoặc môi trường không có Web UI, dùng phương án shell của host điều phối
### Các mục đã biết
- Codex role về lý thuyết có thể thử `model_provider` trỏ thẳng tới DeepSeek (chưa xác minh); cầu nối này không phụ thuộc vào điều đó
- Đầu ra tạo ảnh là bitmap phẳng; chỉnh sửa layer cần OpenPencil
- **Runtime dependencies**: Chỉ có `@modelcontextprotocol/sdk` và `zod`; `@deepseek-ai/*` là runtime của host (do DSH host cung cấp; cài npm thông thường không bao giờ tải chúng)
- **Codex phải cấu hình**: `default_tools_approval_mode = "approve"`, nếu không các lời gọi tool sẽ bị tự động hủy
## Phát triển
```bash
pnpm install
node_modules/.bin/tsdown src/client/index.tsx --format cjs --platform browser \
--target es2022 --tsconfig tsconfig.client.json --out-dir .client-build --clean
node scripts/build-client.mjs # wraps the bundle for the DSH module loader
node scripts/smoke.mjs # dispatches one real flash task end to end
```
Runtime dependencies chỉ có `@modelcontextprotocol/sdk` và `zod`; mọi gói `@deepseek-ai/*` là runtime của host do DSH host cung cấp (được ghi trong trường dshHostRuntime của package, không nằm trong peerDependencies, nên cài npm thông thường không bao giờ tải chúng), giúp plugin nằm trong module realm duy nhất của host.
## Hệ sinh thái
- [DSH Android](https://github.com/ZSeven-W/dsh-android) — trình giả lập Android hoặc thiết bị cắm USB trực tiếp ngay trong hội thoại, điều khiển hoàn toàn qua adb
- [DSH iOS](https://github.com/ZSeven-W/dsh-ios) — một iOS Simulator sống động — và iPhone kết nối USB — ngay trong hội thoại
- [DSH Noema](https://github.com/ZSeven-W/dsh-noema) — bộ nhớ dài hạn cho DSH
- [DSH OpenPencil](https://github.com/ZSeven-W/dsh-openpencil) — kiểm tra và chỉnh sửa tài liệu thiết kế `.op` ngay trong hội thoại
## Giấy phép
MIT