Agent skill

Dispatch Base

by vfarcic in vfarcic/dot-agent-deck

Bring the base that every dispatched unit is cut from up to date before the first dot-agent-deck dispatch of a batch in this repo, and check the base dispatch reports afterwards.

MITAuto-check passedProduct & Project Management

Install Dispatch Base

skills CLI
$ npx skills add vfarcic/dot-agent-deck --skill dispatch-base -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vfarcic/dot-agent-deck dispatch-base --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/dispatch-base .claude/skills/dispatch-base && rm -rf skills-src

Use ~/.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/

Facts

Skill name
dispatch-base
GitHub stars
109
Token cost
~3.1k tokens
SKILL.md length
1,785 words
Files
1
Skills in repo
23
Repo updated
First seen
Licence
MIT

At a glance

Bring the base that every dispatched unit is cut from up to date before the first dot-agent-deck dispatch of a batch in this repo, and check the base dispatch reports afterwards.

  • Works in 4 steps: Fetch, then read the state → Fast-forward when there is no local work… → Otherwise, leave the checkout alone and… → …
  • You are about to run dot-agent-deck dispatch in this repo for any reason: an ad-hoc start X as a separate line of work in a dispatcher pane
  • SKILL.md covers HEAD is the base, and nothing…, When to run it, Step 1 — Fetch, then read the… and Step 2 — Fast-forward when…, plus 3 more sections
  • Calls git

What it does

Dispatch Base is an agent skill from vfarcic/dot-agent-deck. Bring the base that every dispatched unit is cut from up to date before the first dot-agent-deck dispatch of a batch in this repo, and check the base dispatch reports afterwards. Fetches, fast-forwards main when there is no local work to move, and otherwise leaves the checkout alone and reports which precondition failed and how far HEAD is from origin/main. Use whenever you are about to run dot-agent-deck dispatch in this repo for any reason: an ad-hoc "start X as a separate line of work" in a dispatcher pane…

Its SKILL.md is about 3.1k 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 Product & Project Management, covering PRD writing and Pull requests. It works with Git. The repository describes itself as: A rich terminal dashboard for monitoring and controlling multiple AI coding agent sessions. The licence is MIT.

When your agent uses it

  • You are about to run dot-agent-deck dispatch in this repo for any reason: an ad-hoc start X as a separate line of work in a dispatcher pane
  • /pr-review-queue
  • Any other skill that dispatches

Example prompts

  • “start X as a separate line of work”
  • “/dispatch-base”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Fetch, then read the state
  2. Fast-forward when there is no local work to move
  3. Otherwise, leave the checkout alone and report
  4. After dispatch, read the base dispatch reports

What it can do on your machine

Read from SKILL.md and the folder at commit 8808915. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dispatch Base loads about 3.1k tokens when it runs. Until then it costs about 176 tokens; SKILL.md has 1,785 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~176
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from vfarcic/dot-agent-deck at commit 8808915, republished under its MIT licence (© vfarcic). 1,785 words, ~3,098 tokens.

Download SKILL.mdSave it as .claude/skills/dispatch-base/SKILL.md (or your agent's skills folder).
name
dispatch-base
description
Bring the base that every dispatched unit is cut from up to date before the first `dot-agent-deck dispatch` of a batch in this repo, and check the base `dispatch` reports afterwards. Fetches, fast-forwards `main` when there is no local work to move, and otherwise leaves the checkout alone and reports which precondition failed and how far `HEAD` is from `origin/main`. Use whenever you are about to run `dot-agent-deck dispatch` in this repo for any reason: an ad-hoc "start X as a separate line of work" in a dispatcher pane, `/issue-queue`, `/prd-queue`, `/pr-review-queue`, `/code-cleanup`, or any other skill that dispatches. Those skills point here instead of carrying their own copy.
user-invocable
true

Bring the dispatch base up to date

This is where the base step for every dispatch in this repo is defined: an ad-hoc request in a dispatcher pane, /issue-queue, /prd-queue, /pr-review-queue, /code-cleanup, or a skill written later. The queues used to carry their own copies of it; issue #1638 moved it here after an ad-hoc dispatch, which had no copy at all, cut three units from the wrong branch. A dispatching skill says when in its own flow to run this and where to carry a refusal; what the step does is here.

HEAD is the base, and nothing else is

dispatch has no base or branch option. It resolves the caller's HEAD to a commit once, then runs git worktree add <dir> -b agent/dispatch-<name> <that sha> in the caller's own working directory (resolve_dispatch_base and create_dispatch_worktree in src/dispatch.rs, feeding create_worktree_from in src/issue_dispatch_run.rs), and reports that same sha in its cut from <branch> at <sha> reply. So whatever the dispatcher checkout has checked out at dispatch time is the base every unit inherits, and no flag overrides it.

Updating the local main ref while another branch is checked out changes nothing for a unit. git fetch origin main:main and git branch -f main origin/main move a ref that dispatch never reads. Only what HEAD points at counts.

What getting that wrong cost, on 2026-10-10. A dispatcher pane was asked to dispatch PRDs #1631, #1401 and #1258 while its checkout was on prd/1487-shared-daemon-upgrade. The agent ran git fetch origin main:main, took that as the base, and dispatched. All three units were cut from the feature branch, 19 commits behind origin/main and carrying one commit that was not on main; #1631's unit lacked #1617, the PR its PRD builds on, while its task said #1617 was present. All three were stopped, their worktrees and branches deleted, and the batch re-dispatched. dispatch's own reply had said cut from prd/1487-shared-daemon-upgrade at 0935e2a7, which is why step 4 exists.

What a stale main cost, on 2026-08-30. Two units were dispatched from a local main at 820ba40, six commits behind origin/main at 83d9bf3. One of those six was daf94f0, the commit that introduces desktop/, and both units had been dispatched to work on the desktop app. They were cut from a tree with no desktop/ directory, could not have done anything, and were re-dispatched after a pull with not one original commit between them. A unit cannot discover this about itself. It sees a valid checkout, finds the code its task names missing, and reasonably concludes that the task is stale rather than its base.

When to run it

Once before the first dispatch of a batch, never between two. A batch is every unit dispatched for one request: one ad-hoc ask, or one queue run. Updating mid-batch splits it across two bases, and the units already started keep the old one. A later, separate request is a new batch and runs this again.

A dispatching skill may say otherwise for its own flow. /issue-queue re-runs it before every dispatch when its bug-fix units merge their own PRs, because there the loop itself moves main between dispatches; that exception, and why, is in its step 0.

Step 1 — Fetch, then read the state

bash
git fetch origin --quiet
git rev-parse --abbrev-ref HEAD                        # the branch every unit is cut from
git status --porcelain --untracked-files=no            # ANY output means tracked changes
git rev-list --left-right --count HEAD...origin/main   # "0  6" is 0 ahead, 6 behind

A skill that fetched in an earlier step of its own does not need to fetch again, as long as nothing has run in between that could have moved origin/main.

Step 2 — Fast-forward when there is no local work to move

When HEAD is main, that status output is empty, and the ahead count is 0, fast-forward it and say you did. No prompt and no question: an up-to-date base is the default here, and the user is told what happened rather than asked to authorise it. Print the sha before moving, so the report can say where the base was, and again after, since that is the base the units inherit.

bash
git rev-parse --short HEAD                             # the sha before moving
git merge --ff-only origin/main
git rev-parse --short HEAD                             # the sha after: the units' base

When step 3 declines to move, the base is HEAD as step 1 left it: record git rev-parse --short HEAD then, with the distance step 1 read.

Why this is safe. The hazard behind the older rule, which surfaced staleness and asked every time (until issue #760), was that the user may have local work, and a dispatching agent has no business moving their branch. That hazard is kept: it is what the three preconditions test for. Together they say there is no local work here to move: no uncommitted tracked change, no commit that is not already on the remote, and the branch is the one the remote's is. A fast-forward under them rewrites nothing, discards nothing, creates no merge commit, and is undone exactly by git reset --hard <the sha you printed before moving>.

git merge --ff-only origin/main, never git pull. The fetch already put the ref in the repository, so the merge is purely local: no second network round trip, and nothing for a pull.rebase setting to reinterpret into a rebase of the user's branch. It is also the second of two independent guards: the preconditions decide and --ff-only enforces, so if the two ever disagree the merge fails instead of writing a merge commit onto main.

Show full SKILL.md (927 more words)Show less

Step 3 — Otherwise, leave the checkout alone and report

When the base cannot be brought up to date, do not touch the checkout. Three of the four cases below are precondition failures and the fourth is the merge itself refusing. Say which one it was, with the distance from origin/main, in these terms:

  • Tracked changes present: name the files. They are invisible to the units either way: a unit's copy is made from the last commit (docs/dispatcher-mode.md), so uncommitted work never reaches one. Committing or stashing is the user's to do, not yours. Untracked files are deliberately not a blocker, which is why --untracked-files=no is in step 1: a fast-forward that would clobber one fails cleanly by itself, and counting them would refuse on nearly every real checkout.
  • HEAD is not main: every unit is cut from that branch and carries its unmerged work into every PR the batch produces. Name the branch and its distance from origin/main. This is the sharpest of the four, because nothing about it looks wrong: a feature branch dispatches exactly as smoothly as main does. It is the 2026-10-10 case above.
  • HEAD is ahead of origin/main: there is nothing to fast-forward to, and the commits that put it ahead are inherited by every unit's branch and turn up in every unit's PR. Report the count; pushing or moving is the user's call.
  • The merge command itself fails although every precondition passed: a fast-forward that would clobber a file origin/main newly tracks is the concrete case. Report the git error and do not dispatch. Decide on the exit status, never on the output: git writes Updating <old>..<new> to stdout and the refusal to stderr, so captured output of a refusal can end in that line, after Aborting, reading exactly like a successful fast-forward. --ff-only never partially applies, so the checkout is unchanged and there is nothing to undo.

git log --oneline HEAD..origin/main names the commits behind the count, which makes a refusal something the user can act on rather than a number.

The next move is the user's, and there are three legitimate ones: dispatch anyway onto the older base, clear the blocker and dispatch after it, or defer the batch. Take their answer rather than picking one, and never clear the blocker on their behalf: committing, stashing or switching branch is the local work this step refuses to touch. If they clear it, run step 1 again before dispatching. Ad hoc, put the refusal to them before the first dispatch. A queue skill says where it carries the refusal instead, usually to the moment it asks how many units to dispatch, because its selection works from origin/main and does not depend on the checkout.

Step 4 — After dispatch, read the base dispatch reports

dispatch's success line ends with the base it cut the worktree from (resolve_dispatch_base in src/dispatch.rs):

text
dispatch: spawned isolated agent for '<name>' in <dir>, cut from main at c701932

Read that clause on every dispatch, and compare its sha with origin/main:

bash
git rev-list --left-right --count <sha>...origin/main  # "0  0" is origin/main itself

Treat any of these as a finding to report, not as noise:

  • a branch other than main, or detached HEAD at <sha>;
  • a sha that is not origin/main, unless the user chose to dispatch onto an older base after a step 3 refusal, in which case report the distance they chose;
  • no clause at all: that is an older build, or a probe of HEAD that failed, in which case dispatch cut the worktree from HEAD without naming it. It is never a base that is fine. Fall back to the branch's own record below, and say the clause was missing.

When the clause is missing, read the commit the unit's branch was created at from its first reflog entry, which later commits in the unit do not change. Take the branch from the worktree the success line names rather than from the name you passed: dispatch sanitizes the name before it builds the branch, so fix auth becomes agent/dispatch-fix-auth. Read it right after the dispatch, before the unit has had time to switch branch:

bash
branch=$(git -C "<dir>" rev-parse --abbrev-ref HEAD)            # <dir> from the success line, quoted
git reflog show --format='%h %gs' "$branch" | tail -1          # "<sha> branch: Created from <...>"

Use that sha only when the subject starts branch: Created from. It reads Created from HEAD when dispatch cut the worktree with no start-point, which is what a missing clause means, and Created from <full sha> when it passed the sha it reported. An empty result or any other subject means the reflog cannot answer, because it is disabled, expired or was rewritten. Then say the base could not be verified, and do not report a sha.

On a build older than the fix for issue #1643, the clause was a probe of HEAD read just before a git worktree add that read HEAD again, so the two could differ if HEAD moved in between; the reflog sha is the base there. A current build cuts the worktree from the sha it reports, so the clause is the base.

Catching it here costs one stopped unit, before the unit has spent any time working from the wrong tree.

Report the base as a distance from origin/main

Wherever the dispatching skill or the ad-hoc reply says where the work went, give the base as the sha plus 0 behind (after step 2 fast-forwarded it, or when it was already current) or N behind (when step 3 declined to move it), measured at the moment of dispatch. Quote dispatch's own cut from … at <sha> clause rather than recomputing it. Report it when the base was current too: nothing else tells a base that was checked from one nobody looked at, and "cut from main" reads identically whether main is level with the remote or six commits behind it.

© vfarcic, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/dispatch-base of vfarcic/dot-agent-deck.

Open the folder on GitHubat commit 8808915

Compare with similar skills

Dispatch Base 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.

Dispatch Base compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dispatch Base this skillvfarcic/dot-agent-deck109—~3.1kAutomated safety check: PassMIT
Codebase Modernizerluongnv89/skills131—~5kAutomated safety check: PassMIT
CCPM Project Managementautomazeio/ccpm8.4k—~1.1kAutomated safety check: PassMIT
Astro Code Reviewwithastro/astro63k—~7.6kAutomated safety check: PassCustom licence
Reviewfossasia/eventyay-interpretation1.6k35 repos~996Automated safety check: PassApache-2.0
Pi Enshare-skills/pi108—~9.9kAutomated safety check: WarnApache-2.0

Similar skills

  • Codebase Modernizer

    luongnv89/skills

    Audit a stale, inherited, or messy codebase — deps, bugs, security, tests, CI, docs, UI/UX — then emit a phased, testable modernization plan.

    131 GitHub stars~5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.

    8.4k GitHub stars~1.1k tokensUpdated 6 mo ago
    Product & Project ManagementAuto-check passed
  • Astro Code Review

    withastro/astro

    Official

    Perform a static, read-only code review of an Astro pull request or of a local branch, commit range, diff, patch, or working tree being prepared as a pull request.

    63k GitHub stars~7.6k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Review

    fossasia/eventyay-interpretation

    Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match…

    1.6k GitHub starsUsed in 35 repos~996 tokens
    Product & Project ManagementAuto-check passed
  • Pi En

    share-skills/pi

    PI Cognitive AI. An agent skill from share-skills/pi.

    108 GitHub stars~9.9k tokensUpdated 3 mo ago
    Product & Project ManagementAuto-check: warnings
  • Req Change Workflow

    yunshu0909/yunshu_skillshub

    已有功能的需求变更闭环(门禁式七步)。触发硬条件:要改的功能已经实现并跑起来了。当用户说"改需求""需求变更""调整交互""改功能""重构流程",或改动容易散到多个文件、碰到鉴权/存储/配置/权限、需要可靠验证 + 回滚方案时使用。流程:锁 scope 写 change brief → 从代码确认当前行为(不靠记忆和假设)→ 影响面与风险评估 + 回滚计划 →…

    768 GitHub stars~1.4k tokensUpdated 4 days ago
    Product & Project ManagementAuto-check passed

More from vfarcic/dot-agent-deck

All 24 skills in this repo
  • Dispatch Shape

    vfarcic/dot-agent-deck

    Choose the shape of a unit you are about to dispatch in this repo — one agent (--single) or a team (--orchestration '<name') — from divisibility criteria instead of asking, and report the shape you…

    109 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Docs Screenshots Review

    vfarcic/dot-agent-deck

    Check that a change to the user-facing docs covers both clients (the TUI and the desktop app) unless the feature exists in only one, and decide whether it needs a new or updated screenshot, then…

    109 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Dot AI Request Dot AI Feature

    vfarcic/dot-agent-deck

    Generate a feature request prompt for another dot-ai project.

    109 GitHub stars~679 tokensUpdated today
    Auto-check passed
  • PR Create

    vfarcic/dot-agent-deck

    Take committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off.

    109 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Publish Docs

    vfarcic/dot-agent-deck

    Publish the docs site to GHCR with a main-<sha tag and bump site/helm/values.yaml so Argo CD picks it up — without cutting a SemVer release.

    109 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Run Dot Agent Deck

    vfarcic/dot-agent-deck

    Run, build, smoke-test, and screenshot the dot-agent-deck binary against an isolated sandbox.

    109 GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Works with

Questions about Dispatch Base

What does Dispatch Base do?

Bring the base that every dispatched unit is cut from up to date before the first dot-agent-deck dispatch of a batch in this repo, and check the base dispatch reports afterwards. Dispatch Base is an agent skill from vfarcic/dot-agent-deck. Bring the base that every dispatched unit is cut from up to date before the first dot-agent-deck dispatch of a batch in this repo, and check the base dispatch reports afterwards.

When should I use Dispatch Base?

Dispatch Base fits situations like: you are about to run dot-agent-deck dispatch in this repo for any reason: an ad-hoc start X as a separate line of work in a dispatcher pane; /pr-review-queue; any other skill that dispatches.

How do I install Dispatch Base in Claude Code?

Run `npx skills add vfarcic/dot-agent-deck --skill dispatch-base -a claude-code`. Or copy the skill folder (.claude/skills/dispatch-base in vfarcic/dot-agent-deck) into .claude/skills/dispatch-base in your project. Claude Code loads it when a task matches its description.

How do I install Dispatch Base in Codex?

Run `npx skills add vfarcic/dot-agent-deck --skill dispatch-base -a codex`. Or copy the skill folder (.claude/skills/dispatch-base in vfarcic/dot-agent-deck) into .agents/skills/dispatch-base in your project. Codex loads it when a task matches its description.

Can I use Dispatch Base in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vfarcic/dot-agent-deck --skill dispatch-base -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-base, .gemini/skills/dispatch-base, .github/skills/dispatch-base and .opencode/skills/dispatch-base in your project.

What does Dispatch Base need to run?

Going by SKILL.md and its folder, Dispatch Base needs the command-line tools its instructions call (git).

Does Dispatch Base access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Dispatch Base safe to install?

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.

What licence does Dispatch Base use?

Dispatch Base is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dispatch Base use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dispatch Base?

Skills that share tags, products or a category with Dispatch Base: Codebase Modernizer (luongnv89/skills, 131 stars), CCPM Project Management (automazeio/ccpm, 8.4k stars), Astro Code Review (withastro/astro, 63k stars) and Review (fossasia/eventyay-interpretation, 1.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dispatch Base?

vfarcic (a GitHub user) maintains it in vfarcic/dot-agent-deck, which has 109 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 11, 2026.

Source: vfarcic/dot-agent-deck on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.