English | 中文
@oh-my-dsh/auto-team is a host-only DeepSeek Harness plugin (Cordis id auto-team). It gives long tasks a scored start and a team-shaped run, and it keeps the numeric score out of the model's context.
The plugin adds the first-round decision, the goal bridge, and the Lead and worker policy gates. The teammate, task-board, and worktree tools come from the host profile. It targets DSH 0.2.1-rc.2.
The Lead calls auto_team_score once in the first round. The call takes five factors from 1 to 5, covering scope, parallelism, ambiguity, risk, and expected_steps, plus the task goal in its ordinary meaning.
The plugin turns the factors into a weighted score from 0 to 1. The model gets only team or solo; the score and the effective threshold stay host-side. The default threshold is 0.55. If a user-created goal already exists at the first score, the threshold is multiplied by 0.6.
The first round must be scored. If the turn tries to close before the tool ran, an agent/turn-stopping listener steers the Lead back with a reminder.
The score is frozen for the task. It is written to the session log as a plugin:auto-team/score record and folded into the host-only autoTeam projection, so resuming a session keeps the decision and does not score again.
On a team decision the plugin:
- reuses the current goal, or starts one when none exists;
- ensures a user-facing reporting teammate named
reporter, which is configurable; the Lead relays its updates to the user; - tells the Lead to keep the main Git repository and the team, and not to write code;
- denies the Lead's
writeandeditcalls by default; - requires each execution teammate to complete
create_worktreebefore its ownwriteoreditis allowed, and checks that an edit path stays inside the registered worktree when the host returns one. The reporter is exempt.
Multi-round execution belongs to the goal runtime. The plugin starts or reuses the goal and does not run its own continuation loop.
On a solo decision the task runs as a normal single-agent task.
The profile must compose these host services:
agents,tools,systemPrompt,sessionProjectionsagentTeamsfrom@deepseek-ai/dsh-experimental-agent-teamgoalsfrom@deepseek-ai/dsh-goal
The plugin loads without them but logs a warning and installs nothing. When a service arrives later, an internal/service listener retries the install.
Build and pack the package:
pnpm install
pnpm run lint
pnpm test
pnpm run build
pnpm packInstall from npm once the package is published:
dsh plugin --profile <profile> add @oh-my-dsh/auto-teamOr install a locally packed tarball:
dsh plugin --profile <profile> add ./oh-my-dsh-auto-team-0.1.0.tgzThe package name is @oh-my-dsh/auto-team, published under the @oh-my-dsh scope.
Every field is optional. Schemastery checks the values at load; invalid values fail activation.
| Field | Default | Meaning |
|---|---|---|
message |
auto-team loaded |
Activation log line. |
threshold |
0.55 |
Base score needed for Team mode. |
manualGoalFactor |
0.6 |
Multiplier applied to the threshold when a user-created goal exists. |
weights |
scope 0.3, parallelism 0.25, ambiguity 0.15, risk 0.15, expectedSteps 0.15 | Relative weight of each difficulty factor. |
reportingAgentName |
reporter |
Name of the reporting teammate. |
reportingProvider |
spawn |
Subagent provider used for the reporter. |
goalMaxRounds |
256 |
Round cap used when the plugin starts a goal. |
enforceLeadNoCode |
true |
Install the Lead write/edit gate. |
leadDeniedTools |
['write', 'edit'] |
Tool names denied to a Team-mode Lead. |
The package adds one model-facing tool.
auto_team_score takes:
| Parameter | Type | Meaning |
|---|---|---|
scope |
integer 1 to 5 | Expected change scope. |
parallelism |
integer 1 to 5 | How much independent work can run at once. |
ambiguity |
integer 1 to 5 | How much requirement or design uncertainty remains. |
risk |
integer 1 to 5 | How costly a wrong change would be. |
expected_steps |
integer 1 to 5 | Expected task length. |
objective |
string | The task goal in its ordinary meaning. Used only when the plugin starts a goal. |
It returns { decision, goal, reporter? }. The numeric score and threshold are not in the result. The host's Agent Teams tools handle spawning, messaging, and the shared task board. The host goal lifecycle handles completion and continuation.
- The Lead gate is a tool-name policy, not a sandbox.
pwsh,run_code, and direct filesystem effects can bypass it. The policy tells the Lead not to use them as a workaround. - The worker gate checks that a
create_worktreecall succeeded and, when the host returns the worktree path, that eachwriteoredituses an absolutefile_pathinside it. If the host result has no path, the gate falls back to checking only that the call succeeded. - The reporter is spawned with the configured provider. If the spawn fails, the score stays frozen and a later call retries the reporter.
- A real DSH profile composition test has not been run in this repository.
tests/runtime.test.tsmounts a real Cordis context and a real detached Session with fake host services, and covers the install path, the scoring tool, the stop guard, the Lead gate, and the worker gate.
pnpm install
pnpm run lint
pnpm test
pnpm run build
pnpm pack --dry-run --jsonThe tests cover the scoring policy, configuration, goal and reporter orchestration, the durable score projection, the runtime install path, and the Loader export shape.
Read the design note for the behavior and the flow chart, and the plugin contracts for the package rules.
The core flow works and is covered by the repository tests. The release checks pass. Install the package in a profile that composes the required services, then run a long task to verify the behavior in your environment.