bloodarea/dsh-agent-team-presets ↗★ 2

dsh-agent-team-presets

Reusable Agent Team presets for DeepSeek Harness: a captain plus members with their own prompt, model, reasoning effort, and tools. 适合需要构建和切换包含特定提示词、模型及工具的智能体团队的用户。

패키지
dsh-agent-team-presets
호환성
미검증
Harness peer 범위
>=0.2.0-rc.1 <0.3.0
Cordis peer 범위
>=4.0.4 <5.0.0
버전
0.1.3
라이선스
MIT
최근 업데이트
2026. 10. 10.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:bloodarea/dsh-agent-team-presets

dsh-agent-team-presets

Reusable Agent Team presets for DeepSeek Harness

English | 中文

Status: community plugin v0.1.3. Install the pinned release with dsh plugin --profile add github:bloodarea/dsh-agent-team-presets#v0.1.3. The supported Harness peer range is >=0.2.0-rc.1 manager; the Harness version is not this plugin's version. Plugin details for dsh-agent-team-presetsshould showv0.1.3. A card naming @deepseek-ai/dsh-experimental-agent-team-presetsinstead is the monorepo development package, whose version follows the Harness (for example,0.2.0-rc.2), not this community release. lib/` ships prebuilt; rebuilding source needs a Harness checkout — see DEVELOPMENT.md and CHANGELOG.md.

Summary

dsh-agent-team-presets adds a Settings page that configures named Agent Teams and a composer control that applies one Team to a Session. A Team has a captain and any number of members: the captain carries its own prompt and tool policy, while each member also carries its own provider/model route and reasoning effort, read from the stored Team each time that member is summoned. Applying a Team installs the captain's prompt, restricts its tools, and registers spawn_team_member, which summons a member with that member's own persona, route, effort, and tools. A captain leads on the model the Session already selected.

Project introduction

Turn DeepSeek Harness Agent Teams from ad-hoc lineups into configurable, reusable professional AI teams.

dsh-agent-team-presets is a visual Agent Team preset manager for DeepSeek Harness. It configures roles, per-member models, reasoning effort, system prompts, and tool permissions, so a professional AI team is configured once and reused on demand.

Why this plugin?

DeepSeek Harness already ships Agent Teams with multi-agent collaboration, but it leaves room in per-team configuration and reuse.

This plugin addresses five gaps:

  • Teams are hard to reuse. Native teams focus on runtime creation and collaboration and offer no visual preset management; this plugin saves, duplicates, and reuses team configurations.
  • Role setup is repetitive. Member responsibilities no longer have to be re-described every time: each role's name, description, and system prompt are configured in advance.
  • Splitting work across models is awkward. Every member picks its own model and reasoning effort, so one team combines models by task; the captain keeps leading on the model the session already selected.
  • Tool permissions have no fine-grained entry point. The captain and each member carry their own global tool allow-list, so roles differ in what they may use.
  • Switching teams is inconvenient. Pick a preset team from the composer, with no repeated manual role setup.

Design principle: native Agent Teams owns collaboration at runtime; dsh-agent-team-presets owns configuring, managing, and reusing teams.

Screenshots

The Team control in the composer — apply one preset Team to this Session, or clear it.

The Team control in the composer

Settings → Agent team presets — every configured Team, with create, duplicate, and delete.

The Team list in Settings

One Team — its name and description, the captain, and the member roster.

One Team's editor

One member — its own provider, model, and reasoning effort. The captain leads on the Session model, so only a member carries a route.

One member's route pickers

The model picker — every provider and model the deployment currently advertises.

The model picker

Table of Contents


Use this package

Install the bundle into a profile that already composes @deepseek-ai/dsh-experimental-agent-team-profile (the Team service, the Team tools, and the Web roster), then open Settings → Agent team presets.

Install, upgrade, and verify the version

dsh plugin --profile 
 add github:bloodarea/dsh-agent-team-presets#v0.1.3

Replace with the profile the GUI actually runs (for example, web). Releases do not update installed plugins automatically: back up the profile and its Team configuration, remove the installed package, then install the pinned release into the same profile. If the old package is the development link, remove @deepseek-ai/dsh-experimental-agent-team-presets, not dsh-agent-team-presets. Do not enable both packages: they own the same agent-team-presets settings and client registrations. When migrating a development profile, keep the Team configuration and selections under that entry id, but replace its module name and the selected bundle with dsh-agent-team-presets.

After switching package identities, restart the running Harness and refresh the GUI; a page refresh alone can leave the old client entry in the Host's module table and produce duplicate-plugin boot failures. Verify the plugin details show both dsh-agent-team-presets and v0.1.3, with its component running. The Harness's own 0.2.0-rc.* version is a separate compatibility requirement.

Configure a Team

Settings → Agent team presets is three stacked pages, so a narrow Settings panel never crowds:

  1. Teams — every configured Team as one row (name, member count, session model). Create, duplicate, or delete from here.
  2. One Team — its name and description, the captain row, and the member roster. Adding a member opens that member's page.
  3. One agent (captain or member) — identity, tools, and system prompt, each in its own card; a member page adds the model card and deletes that member.

Every edit is staged and written by the Save control in the shared footer; the stored value lives in the profile's user settings document. Settings accepts saves during a Team task without interrupting it. A Session is busy while its captain is running or any teammate is running or provisioning; its captain persona, briefing, member preset prompts and role descriptions, member tool description and roster, and tool permissions keep the applied definition, and members summoned during that task use that definition. A member's model route and each slot's color are deliberately outside the frozen definition, because both are read from the stored Team when they are needed: saving a corrected provider, model, or reasoning effort reaches the next member the running task summons without restarting it, and a color change redraws right away. Once the Session is fully idle, it adopts the latest saved definition before its next Team task; successive saves converge to the latest value. Sessions sharing a preset adopt it independently.

The footer reports the selected Team's execution state across online Sessions:

  • idle — no Session is executing that Team's task; a save takes effect immediately.
  • busy — at least one Session is executing; idle Sessions adopt a definition change immediately, while busy Sessions adopt it before their next task. A member's route saved meanwhile applies to the next member summoned, in a task already running as well. A teammate finishing does not release the definition while the captain is still running.
  • unknown — execution cannot be confirmed, including before the stream is ready, after it ends or fails, during a connection loss, or when the Host lacks the method or a Team's state. The page does not treat a previous idle frame as current fact. A definition change still cannot affect a task already in progress, while a member's route saved meanwhile applies to the next member summoned.
FieldMeaning
Team nameDisplay name shown in Settings and in the composer control.
CaptainThe agent that leads the Session: its system prompt becomes the Session prompt and its tool scope scopes the session tools. It leads on the model the Session already selected, so it has no route of its own.
MembersRole templates the captain summons by name.
NameDisplay name; the teammate target is derived from it (lower-kebab-case, falling back to member-).
ColorAccent mark shown in Settings.
DescriptionThe role hint the models act on: the captain reads its own description, the Team description, and every member's description, so it can pick the member whose description fits the work; a summoned member reads the Team description and its own description as its role.
Provider / ModelMembers only. Route chosen from every provider and model the deployment currently advertises. Empty runs the member on the Session route.
Reasoning effortMembers only. Adapter-owned effort for the selected route; empty uses the model default.
Allowed toolsChoose Default: all tools or Custom allowed tools separately for the captain and each member. Custom mode displays the deployment's global tools as an expanded checkbox grid, with select-all and clear controls. No checks in custom mode denies all configurable tools; default mode adds no restriction and preserves the saved checks. Captain and member policies apply independently, so a member can have tools the captain cannot use. Unavailable saved names remain removable; invalid names reject application instead of granting unrestricted access. Scoped coordination tools remain available.
System promptRegistered as a prompt section template; complete {{variable}} groups interpolate against registered prompt variables. A summoned member reads it after its Team briefing.

Select a Team

The composer's team control sits in the tool row after the permission control. Picking a Team writes this Session's selection; an idle Session applies its captain prompt and tool scope immediately, while a busy Session keeps its current application until it is fully idle. Picking "No team" removes the Team application at the same boundary, restoring the Session's other prompt and tool contributions. The model stays the one the composer already shows, because no Team writes a model selection.

Share one Team

Export on a Team row writes that Team as one fixed JSON document, and Import preset reads such a document. A shared document carries only what keeps working across deployments: the Team's name and purpose, and the name, description, system prompt, and color of its captain and each member. Model routes and tool permissions stay local, because they name this deployment's providers and tools; a document that carries them is refused instead of being silently trimmed.

An import matches by name. When the document's Team name is already configured, the dialog asks whether to replace that team or add it under a new name. When the captain name or a member name is already used by the Team being replaced, the same dialog asks, per name, whether to replace that agent or add the imported one renamed. A replacement writes only the fields the document carries, so the target Team keeps its model routes and tool permissions and keeps every member the document does not mention.

An import lands in the draft first, so it reaches the settings document only when you press Save; an export writes what the page currently shows, including an unsaved draft.

Let the captain adjust a Team preset

The captain of a Session also holds two tools for the case this plugin exists for: a Team ran once, and the descriptions or prompts it ran with do not yet match the work.

  • get_team_preset reads every editable field of this Session's Team (or of the Team a team_id names) with the current settings revision. When the Session selected no Team it reports no-selection and lists the configured Teams, so the captain asks the user which one to change instead of guessing.
  • update_team_preset replaces team_description, captain_description, captain_system_prompt, and per-member description / system_prompt, fenced by the revision get_team_preset returned.

A successful tool write saves to the same settings document as the Settings page and follows the same per-Session adoption timing described above. A captain still running its current task keeps the old definition through its subsequent model steps. An existing teammate keeps its creation-time description, persona, and tool filter, including when resumed by a message; the updated preset supplies future new members after that Session adopts it. Send an existing teammate a new requirement to adjust its work without replacing its stored composition.

Both tools register in the Session-root Agent scope only, so a teammate never sees them, and the write additionally requires a turn the user started: an automatic continuation or a teammate's report cannot rewrite the shared preset. Names, member routes, and tool permissions are outside their reach — renaming changes a teammate target and collides with Agent Teams' permanent-name rule, so the Settings page owns it.

The tool's write policy differs from the Settings page: if any online Session that selected or still has that Team applied has a teammate running or provisioning, update_team_preset returns team-busy without saving. This conservative model-initiated write check counts teammates only, not the captain executing the tool; counting that captain would block every call. Wait for those teammates to finish, or interrupt them with interrupt_agent, then call get_team_preset again and retry with its revision. The running task keeps its original definition; the Settings page can still save changes for later adoption, and a member route saved there applies to the next member that task summons. get_team_preset reports the executing teammate count.

The tool also refuses a revision another writer advanced (re-read, retry) and a supplied standing prompt whose {{variable}} group cannot resolve. An unknown variable fails the request when the template is used rather than degrading it. Only prompts supplied by the call are checked, so an unrelated edit still succeeds on top of text the Settings page wrote.

Understand the implementation

Host composition

The Host half owns the live configuration and the per-Session applications:

FileRole
src/index.tsPlugin entry: live Config, per-Session definition freezing and adoption on Agent lifecycle, settings commits, and team/member settlements.
src/execution.tsEvent-driven execution monitor: captain and teammate status, applied-versus-stored definitions, and aggregate whole-set frames.
src/config.tsVolatile teams and selections fields, the continuable-provider names, and the captain-route cleanup of stored Teams.
src/application.tsApplies one Team to one live Agent: prompt sections, tool scope, and the spawn_team_member tool.
src/preset-editor.tsPure preset edits behind the preset tools: the editable-field whitelist, member resolution, and the roster's description limit.
src/preset-tools.tsThe captain's get_team_preset and `update_tea