From oh-my-harness
Spawns native Claude Code teams from templates like fullstack or custom counts, decomposes tasks, and assigns subtasks to teammates via /team-spawn command.
npx claudepluginhub hoya324/oh-my-harness --plugin oh-my-harnessThis skill uses the workspace's default tool permissions.
Create a native Claude Code team using TeamCreate, spawn teammates, and assign tasks.
Orchestrates Claude Code agent teams: spawn teammates, assign tasks with dependencies, manage communication via messages or broadcasts, configure modes, and set quality gate hooks.
Use when a task benefits from multiple Claude instances collaborating with peer-to-peer messaging - parallel research, multi-module features, cross-layer changes, or competing hypothesis debugging. Not for simple independent tasks (use parallel-execution) or sequential tasks (use delegated-execution).
Creates agent-almanac team composition files defining purpose, members, coordination patterns, task decomposition, and registry integration. Use for multi-agent workflows, complex reviews, or recurring collaborations.
Share bugs, ideas, or general feedback.
Create a native Claude Code team using TeamCreate, spawn teammates, and assign tasks.
Usage: /team-spawn [template|N] [task description] Example: /team-spawn fullstack fix all TypeScript errors in src/ Example: /team-spawn 3 implement user authentication Example: /team-spawn review refactor the payment module
Parse arguments: Extract template name (or teammate count N) and task description from $ARGUMENTS.
fullstack, review, research), use that template.teammate-1 through teammate-N, all with agentType: standard.Read config: Load .claude/.omh/harness.config.json and extract:
features.nativeTeam — if disabled, inform the user and exitnativeTeam.maxTeammates — cap teammate count if exceeded (warn user)nativeTeam.defaultTeamName — team name to use (default: omh-team)nativeTeam.templates — available team templatesmodelRouting — for mapping agentType to model tiersDetermine team composition:
fullstack), use that template's members.teammate-1 through teammate-N, all with agentType: standard.maxTeammates.Validate team name: The team name must match ^[a-zA-Z0-9_-]+$. If not, sanitize by stripping invalid characters. Fall back to omh-team if empty.
Confirm with user using AskUserQuestion before doing anything:
About to create team '{teamName}':
Task : {task description}
Template : {template name or "custom"}
Teammates :
- {name} ({role}) — [omh:model-routing -> {model}]
- ...
Proceed? [yes / cancel]
If the user says no or cancel, stop immediately. Do not proceed.
Check for existing team: Read .claude/.omh/teams.json. If it exists with an active team, warn:
A team '{existingTeam}' is already active.
Stop it first with /team-stop, or choose a different team name.
Stop and do not proceed.
Create team: Call the TeamCreate tool:
{ "team_name": "{teamName}", "description": "{task description}" }
Decompose and create tasks: Analyze the task description and break it into subtasks appropriate for the team composition. Call TaskCreate for each subtask.
TaskUpdate with addBlockedBy.Spawn teammates: For each teammate in the composition, use the Agent tool:
team_name to the team namename to the teammate name (e.g., frontend, backend, tester)subagent_type based on agentType:
quick -> oh-my-harness:quickstandard -> oh-my-harness:standardarchitect -> oh-my-harness:architect[omh:model-routing -> {model}] for each teammate spawnedAssign tasks: Use TaskUpdate to set owner on tasks that map to specific teammates.
Save team state to .claude/.omh/teams.json:
{
"teamName": "{teamName}",
"createdAt": "ISO timestamp",
"description": "{task description}",
"template": "{template name or 'custom'}",
"teammates": [
{ "name": "frontend", "role": "Frontend developer", "agentType": "standard" }
]
}
Report summary and next steps:
Team '{teamName}' created with {N} teammates.
Teammates:
- {name} ({model}) — {role}
- ...
Tasks created: {M}
Messages from teammates will appear automatically.
Next steps:
/team-status — check teammate progress and task list
/team-stop — shutdown team and cleanup
[omh:model-routing -> {model}] when spawning each teammate^[a-zA-Z0-9_-]+$