Claude Code Agent Development
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Assembles sub-agent prompts with task brief and routes to the correct provider.
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ntorga/agent-starter-kit dispatch --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/dispatch .claude/skills/dispatch && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .claude/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ntorga/agent-starter-kit dispatch --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/dispatch .agents/skills/dispatch && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .agents/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ntorga/agent-starter-kit dispatch --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/dispatch .cursor/skills/dispatch && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .cursor/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ntorga/agent-starter-kit.git --path skills/dispatch--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ntorga/agent-starter-kit dispatch --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/dispatch .gemini/skills/dispatch && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .gemini/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ntorga/agent-starter-kit dispatchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/dispatch .github/skills/dispatch && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .github/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ntorga/agent-starter-kit --skill dispatch -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ntorga/agent-starter-kit dispatch --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ntorga/agent-starter-kit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/dispatch .opencode/skills/dispatch && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dispatch" agent skill from https://github.com/ntorga/agent-starter-kit/tree/main/skills/dispatch into .opencode/skills/dispatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dispatch", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dispatchAssembles sub-agent prompts with task brief and routes to the correct provider.
Dispatch is an agent skill from ntorga/agent-starter-kit. Assembles sub-agent prompts with task brief and routes to the correct provider.
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows, covering Subagents. The repository describes itself as: The scaffold for your multi-model, personalized Natural Language AI Harness (NLAH) . The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 851e942. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
opencodegeminiFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dispatch loads about 2.5k tokens when it runs. Until then it costs about 22 tokens; SKILL.md has 998 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ntorga/agent-starter-kit at commit 851e942, republished under its MIT licence (© ntorga). 998 words, ~2,481 tokens.
.claude/skills/dispatch/SKILL.md (or your agent's skills folder).Every sub-agent starts cold. It has no rules, no memory, and no awareness of the project it is about to work on. This skill defines how the Maestro assembles the initial prompt that boots a sub-agent into a ready state, and routes it to the correct provider based on the persona's preferred model.
A sub-agent is a persona defined in this framework — nothing else. The terms "sub-agent" and "persona" are interchangeable throughout this skill. Sub-agents are not host-runtime features (IDE subprocesses, tool-provided agents, or built-in workers). The Maestro must never route work to a host-runtime agent when a framework persona exists for the job.
To discover available sub-agents, read:
personas/README.md — lists every persona and its purpose.This is the only registry. If a persona is not listed there, it does not exist. The Maestro must consult this registry during the Route step before dispatching.
Identify the host runtime. Run ps -p $PPID -o comm= and match the process name against the CLI column of the Providers list to identify the host runtime's provider (e.g., opencode → opencode host, claude → claude provider, codex → codex provider, cursor-agent → cursor provider). Store the result in session state — the host runtime does not change mid-conversation.
Extract routing fields.
sed -n '/^---$/,/^---$/{ /^\(preferredModel\|modelTier\):/p }' personas/<name>.mdSelect the provider and model. Resolve preferredModel and modelTier against the Providers list. If preferredModel is host, always use native dispatch — the persona runs on whatever model the host runtime provides, ignoring tier upgrades. If preferredModel is omitted, use the host runtime's provider. The persona's modelTier is a floor — upgrade one tier when the task demands multi-step reasoning across system boundaries (e.g., cross-layer architectural changes, security/auth logic, or production deployment pipelines). If already at tier-3, remain at tier-3.
Decide how to dispatch. If preferredModel is host, use native dispatch and skip the provider lookup. Otherwise, look up the persona's preferredModel in the Providers list to find its CLI column. Then:
task tool, Claude Code's Task tool, Codex subagent environment, Cursor's native agent/subagent flow). Do not shell out to the same tool's CLI.Build task context. Extract relevant context from two sources:
.memory/long-term.md (uses: skills/agent-memory/SKILL.md), select entries relevant to the task.Combine into a single block. Cap at 30 lines. Wrap in <additional-context> tags. Omit if nothing qualifies.
Strip the frontmatter. Run the sed command below to remove YAML frontmatter from the persona file. Take the complete, unmodified sed output and wrap it in <identity> tags — do not summarize, paraphrase, or shorten the persona file. The full text must arrive exactly as written. Each dispatch targets exactly one persona — never multiple in a single prompt.
sed '/^---$/,/^---$/d' personas/<name>.mdList the rules (scoped). Consult rules/README.md and select rules whose scope matches the task category. List their file paths in <rules> tags — do not inline the file contents. The persona has file access and will read them directly. If no rules match, omit the block entirely. When the task involves code changes — even if the persona does not write code (e.g. architect planning implementations) — include coding-scoped rules so the persona's output aligns with the conventions the coder will follow.
List relevant skills. Consult skills/README.md and identify skills that would help the persona complete the task. List their file paths in <skills> tags. If no extra skills are relevant, omit the block entirely. When the task brief contains ambiguity (missing info, conflicting requirements, multiple valid paths), include skills/agent-decision/SKILL.md so the sub-agent can structure its escalation.
Write the task brief. Translate the user's intent into actionable instructions, wrapped in <task> tags. The brief must contain:
Compose and dispatch. Assemble the final prompt:
<identity>
[PASTE STRIPPED PERSONA CONTENT HERE — DO NOT LITERALLY OUTPUT THIS BRACKETED TEXT]
</identity>
<preload>
Before reading `<task>` or `<additional-context>`, read every file listed in `<skills>` and `<rules>` above. Framework files (personas, skills, rules) live under `.agents/` — prepend `.agents/` to each path when reading. After reading all files, list every path you read (one per line, no abbreviations). Only then may you proceed to `<additional-context>` and `<task>`.
</preload>
<rules>
[file paths to scoped rules — omit block if no scope matches]
</rules>
<skills>
[file paths to relevant skills — omit block if none apply]
</skills>
<additional-context>
[combined long-term memory and conversation context — omit block if empty]
</additional-context>
<notes>
- You are running non-interactively. Never pause for input. If critical information is missing, stop and return a handoff explaining the gap.
- If you encounter pre-existing issues outside the current task's scope, list them in `## Discovered Issues` at the end of your handoff. Do not fix them.
- If you notice patterns, risks, or suggestions outside your deliverable, list them in `## Observations` at the end of your handoff. Be honest — no glamour, no filler.
- If you repeat the same failing action three times, stop and read `.agents/skills/loop-recovery/SKILL.md`.
- For any task that is not a simple edit, create and maintain a todo list following `.agents/skills/task-tracking/SKILL.md`.
- Read every file referenced in the task brief in full BEFORE acting. Then make changes, then verify once. Do not run exploratory shell commands to "understand" the code.
</notes>
<task>
[task brief]
</task>providers:
claude:
cli: claude
tier-1: haiku
tier-2: sonnet
tier-3: opus
codex:
cli: codex
tier-1: gpt-5.4-mini
tier-2: gpt-5.3-codex
tier-3: gpt-5.5
cursor:
cli: cursor-agent
tier-1: auto
tier-2: auto
tier-3: auto
deepseek:
cli: opencode
tier-1: opencode-go/deepseek-v4-flash
tier-2: opencode-go/deepseek-v4-flash
tier-3: opencode-go/deepseek-v4-pro
gemini:
cli: gemini
tier-1: gemini-3.5-flash
tier-2: gemini-3.5-flash
tier-3: gemini-3.1-pro-preview
host:
cli: null
tier-1: null
tier-2: null
tier-3: nullTier classes: tier-1 = fast/cheap, tier-2 = balanced, tier-3 = reasoning/smartest.
When the host runtime differs from the target provider, pipe the assembled prompt through stdin:
cat << 'EOF' | [cli-tool] [flags]
[assembled prompt]
EOFProvider-specific flags (add entries as you integrate providers):
claude: --model [model] (accepts haiku, sonnet, opus). Do not use --print (-p) — it bypasses permission checks.codex: exec - --model [model] --sandbox workspace-write --skip-git-repo-check -C [workspace]. Add --full-auto only when safety boundaries are already enforced by the environment.cursor-agent: --model [model]. Add --workspace [workspace] only when explicitly provided. Add --trust only under externally enforced safety controls.opencode: OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS=600000 opencode run --model [provider/model] --variant [effort] --thinking. The env var raises the bash timeout from 120s to 600s. The --variant flag maps to the model's effort level (high or max).gemini: gemini --model [model]. Pipe the assembled prompt via stdin — do not use --prompt as it overrides stdin input.personas/ before dispatching. If missing, abort and report.© ntorga, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/dispatch of ntorga/agent-starter-kit.
Open the folder on GitHubat commit 851e942
Dispatch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dispatch this skillntorga/agent-starter-kit | 146 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 38k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Subagent Driven DevelopmentAsvarox/allkaraoke | 261 | 38 repos | ~1.2k | Automated safety check: Pass | None | |
| Dispatching Parallel Agentsultralisp/ultralisp | 258 | 41 repos | ~1.5k | Automated safety check: Pass | None | |
| Paseo Advisor Second Opiniongetpaseo/paseo | 20k | 1 repos | ~756 | Automated safety check: Pass | Custom licence | |
| Task Observerrebelytics/one-skill-to-rule-them-all | 3.2k | 1 repos | ~12k | Automated safety check: Pass | CC-BY-4.0 |
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Asvarox/allkaraoke
A skill your agent uses when executing implementation plans with independent tasks in the current session
ultralisp/ultralisp
A skill your agent uses when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
getpaseo/paseo
Launches one separate agent through Paseo to give a second opinion on the current task, with a self-contained briefing and no permission to edit files.
rebelytics/one-skill-to-rule-them-all
Monitors task execution for skill improvement opportunities.
openobserve/openobserve
Splits a change into planner, coder and independent reviewer roles: you confirm a spec, a subagent implements it, and a separate reviewer checks each round's local WIP commit.
ntorga/agent-starter-kit
Deterministic self-evaluation rubric for decision escalations — scored every run using the FRAME framework.
ntorga/agent-starter-kit
Long-term and session memory across sessions. An agent skill from ntorga/agent-starter-kit.
ntorga/agent-starter-kit
Builds the design tree for the grill — decisions mapped as nodes with dependencies, recommendations, and impact, pruned by path.
ntorga/agent-starter-kit
Grounds the grill's settled decisions in the codebase — annotates impl.md with file paths, signatures, reference files, test specs, and LOC; re-grounds the next epic after each landing.
ntorga/agent-starter-kit
Session startup — gitignore, auto-update, memory, rules, context, CLI config, and greet.
ntorga/agent-starter-kit
Browser inspection and interaction for verifying rendered web UI during development.
Categories
Assembles sub-agent prompts with task brief and routes to the correct provider. Dispatch is an agent skill from ntorga/agent-starter-kit. Assembles sub-agent prompts with task brief and routes to the correct provider.
Dispatch fits situations like: tasks that involve Subagents.
Run `npx skills add ntorga/agent-starter-kit --skill dispatch -a claude-code`. Or copy the skill folder (skills/dispatch in ntorga/agent-starter-kit) into .claude/skills/dispatch in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ntorga/agent-starter-kit --skill dispatch -a codex`. Or copy the skill folder (skills/dispatch in ntorga/agent-starter-kit) into .agents/skills/dispatch in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ntorga/agent-starter-kit --skill dispatch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dispatch, .gemini/skills/dispatch, .github/skills/dispatch and .opencode/skills/dispatch in your project.
Going by SKILL.md and its folder, Dispatch needs the command-line tools its instructions call (opencode and gemini).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Dispatch is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dispatch: Claude Code Agent Development (anthropics/claude-plugins-official, 38k stars), Subagent Driven Development (Asvarox/allkaraoke, 261 stars), Dispatching Parallel Agents (ultralisp/ultralisp, 258 stars) and Paseo Advisor Second Opinion (getpaseo/paseo, 20k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ntorga (a GitHub user) maintains it in ntorga/agent-starter-kit, which has 146 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on September 12, 2026.
Source: ntorga/agent-starter-kit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.