Skip to content
Back to skills

Dispatch As Project Agent

ASecurity

Spawn a generic Agent wearing a project-specific agent's discipline. Use when you need to dispatch a project-level agent that the v0.1 runtime can't natively resolve as a subagent_type.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentsgoshellbashgitapidatabasefrontendbackend

Works with

  • claude code
  • cli
  • api

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add bakw00ds/yakos --skill dispatch-as-project-agent --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dispatch As Project Agent?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dispatch As Project Agent
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bakw00ds-dispatch-as-project-agent/badge)](https://www.skillsdirectory.com/skills/bakw00ds-dispatch-as-project-agent)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dispatch-as-project-agent
description: Spawn a generic Agent wearing a project-specific agent's discipline. Use when you need to dispatch a project-level agent that the v0.1 runtime can't natively resolve as a subagent_type.
allowed-tools: Read Agent SendMessage
argument-hint: "<project-agent-name> <task-description>"
mode: [orchestrate]
---

# Dispatch As Project Agent

## Purpose

In Claude Code, project-level agents at
`<project>/.claude/agents/<role>.md` are NOT natively discoverable
as `subagent_type` values by the Agent tool. The Agent tool only
resolves the runtime built-ins (`general-purpose`, `Explore`,
`Plan`, `claude-code-guide`, `statusline-setup`). This is a Claude
Code limitation, not a YakOS one (incident:v0.2.0).

**v0.3.0+: yakos start solves this for whole sessions.** Launching
via `yakos start <project>` composes a `--agents` JSON object from
both framework + project agent files and passes it on the claude
command line — project agents become addressable as
`subagent_type` for the session's lifetime. If you started the
session with `yakos start`, you do NOT need this skill for the
common case.

**v0.4.2+: yakos dispatch covers cross-runtime + non-yakos-start
sessions.** When the lead needs to dispatch a project agent in a
session that wasn't launched via `yakos start` (e.g. a bare
`claude` session), or wants to route the specialist to a different
runtime (codex / gemini) than the lead, run from a Bash tool:

    yakos dispatch <agent-name> "<task description>"

This shells out to the right runtime CLI per the agent's
frontmatter `runtime:` field, runs the agent non-interactively,
and returns the captured output. Audit trail at
`~/.yakos-state/dispatch-log.ndjson`.

**This skill (the inline-injection technique) is still useful** for
two cases:
1. Read-only diagnosis tasks that should run inside the lead's
   context (cheaper than spawning a new process).
2. Quick one-offs where the agent body is small enough to copy
   into the prompt and the dispatch latency of `yakos dispatch`
   isn't worth the round-trip.

For multi-file write tasks, prefer `yakos dispatch` — it gives
each specialist a fresh context window and a clean exit.

## Scope

Dispatch with project-agent discipline applied. Three orthogonal
choices the lead makes per call:

- **Spawn type**: `general-purpose` for write work; `Explore` for
  read-only diagnosis (cheaper, no Edit/Write/Bash).
- **Discipline source**: project agent body alone, or project agent
  body + `extends:` framework template (preferred when `extends:` is
  declared).
- **Task scope**: a single domain (backend / frontend / mobile / db /
  etc.). Cross-domain work stays with the lead, who dispatches each
  domain separately and synthesizes.

## When to use

- The lead needs to dispatch a multi-file write task to a domain
  specialist (backend / frontend / mobile / database / etc.) AND
  wants the specialist's discipline (boundaries, anti-patterns,
  deferred-phase awareness) applied to the work.
- The lead is operating in a session that has the project's
  `.claude/agents/` available as files (either rooted in the project
  or via `--add-dir`).

## When NOT to use

- For read-only research tasks — `Explore` is cheaper and good
  enough; the inject-pattern's overhead isn't justified.
- For work that fits inside the lead's own context — the lead has
  read all the agent bodies during familiarization; wearing the hat
  directly is fine for one-off work.
- For tasks requiring `TeamCreate`-tied hooks
  (`team-lifecycle.sh`, `task-complete-dispatch.sh`). Those hooks
  fire on TeamCreate / TaskCompleted events; spawning via
  `general-purpose` skips the team primitives.

## Automated pass

1. **Read the project agent body.** Path is
   `<project>/.claude/agents/<role>.md`.
2. **Resolve `extends:` if present.** If frontmatter declares
   `extends: <framework-template>`, also read the framework template
   at `<yakos>/lib/agents/<framework-template>.md`. The combined
   content is the discipline the spawned agent should apply.
3. **Compose the prompt.** Concatenate, in order:
   - A one-line preamble: "You are operating as the project's `<role>`
     specialist. Apply the discipline in the agent body below."
   - The framework template body (if `extends:` was set).
   - The project agent body.
   - The actual task description (file:line, target outcome,
     boundaries).
4. **Spawn via `Agent`.** Use `subagent_type: "general-purpose"` so
   the spawned agent has full tool access (Edit, Write, Bash, etc.)
   needed for write work. For read-only diagnosis, `Explore` is the
   cheaper alternative.

## Manual pass

The lead does what the runtime would otherwise do for a native dispatch:

1. **Verify the diff.** The spawned agent's summary describes intent;
   verify the actual diff before reporting work as done. The
   path-allowlist hook doesn't fire on `general-purpose` spawns —
   the lead is the path safety net.
2. **Run per-domain validators manually.** `task-complete-dispatch.sh`
   validators (`backend-validate.sh`, `frontend-validate.sh`,
   `db-migration-validate.sh`, etc.) don't fire on injected dispatch.
   Run them yourself against the touched files before approving.
3. **Surface peer messages to `decisions.md`.** Without team-routed
   mailboxes, any decision the spawned agent reaches must be mirrored
   into the project's running decisions doc by the lead.

## What the spawned agent loses (vs native dispatch)

- **Hook coverage.** `team-lifecycle.sh`, `task-complete-dispatch.sh`,
  per-domain validators don't fire because the spawn isn't a TeamCreate
  member. The lead must run validators manually after the spawn returns.
- **TaskList integration.** The spawned agent doesn't share the
  `~/.claude/tasks/<team>/` task list. The lead tracks tasks
  externally (TodoWrite is the in-session substitute).
- **Mailbox / SendMessage routing.** Spawned agents can SendMessage
  to the lead, but peer-to-peer mailbox routing only works inside a
  team. Cross-spawn coordination goes through the lead.
- **`agent_type` discriminator in stdin.** Phase 1.7's
  lead-vs-teammate discriminator (`agent_type` absent for lead-driven)
  doesn't apply — every spawned `general-purpose` agent looks the
  same to hooks.

## Example dispatch (PandaOS)

The lead has a task: implement `POST /api/v1/clients/:id/meal-plans`.
The owning specialist per CLAUDE.md is the backend (Go/Echo).

1. Read `/Users/tw/github/panda-os3.0/.claude/agents/backend.md`.
2. `extends: backend` → also read
   `/Users/tw/github/yakos/lib/agents/backend.md`.
3. Compose prompt: preamble + framework backend body + project
   backend body + task spec (the OpenAPI annotation, the audit-log
   requirement, the contract handoff to frontend).
4. `Agent({subagent_type: "general-purpose", description: "Backend:
   implement /meal-plans POST", prompt: <composed>})`.
5. On return, the lead runs `go build ./... && go vet ./... && go test
   ./...` and `grep -c writeAuditLog api/internal/service/meal_plan_service.go`
   before approving.

## Known gotchas

- **Project agent not found.** The path was wrong (project not
  `--add-dir`'d, or filename mismatch). Surface the error; don't
  dispatch with partial discipline.
- **`extends:` parent not found.** The framework template was renamed
  or removed. Read what's available and proceed with a comment that
  inheritance broke; update the project agent's `extends:` field
  separately.
- **Composed prompt > context budget.** A particularly thick agent
  body + task description can exceed budget. Trim the task
  description; keep the agent body intact (the discipline is the
  point).

## Related

- [`docs/team-shapes.md`](../../docs/team-shapes.md) — when to use
  which team composition; references this skill for the runtime
  dispatch path in v0.1.
- [`lib/agents/lead-template.md`](../../lib/agents/lead-template.md) —
  the lead's role; this skill is one of the lead's tools.
- Phase 8 finding (in panda-os3.0 `memory/session_checkpoint.md`) —
  the discovery that motivated this skill.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…