A chezmoi-based fleet-dotfiles template for macOS workstations: - Two-way auto-sync via launchd watcher + 5-min puller - Mesh SSH via modify_authorized_keys driven by .chezmoidata/fleet.yaml - age-encrypted secrets file - Bundled Claude Code agentic team (11 agents) + /lite + /lite-sub commands - Verify-before-claiming Stop hook - Generic statusline + project-boundary validate-path hook - Reference launchd plist for cross-fleet task-durations aggregation (companion repo: gitea.tojo.team/cardinale/task-durations) - AGENTS.md walks an agent through the entire setup Q&A interactively - docs/ covers architecture, security model, fleet onboarding
14 KiB
description, argument-hint, allowed-tools
| description | argument-hint | allowed-tools |
|---|---|---|
| Subagent variant of /lite — same 4 advisory roles (scout, explorer, critic, tester) but dispatched as plain Opus subagents instead of an Agent Team. Two-wave flow (scout/explorer/critic in parallel → tester with their findings → orchestrator implements + verifies). No EXPERIMENTAL_AGENT_TEAMS dependency, no peer DMs, no team mailbox. Cheaper coordination, no mid-flight role drift correction. Do NOT use for trivial tasks, pure research, or multi-module architectural work. | <task description in quotes> | Agent, Bash, Read, Edit, Write, Glob, Grep, WebSearch, WebFetch, TodoWrite, Skill |
/lite-sub — Lite Agentic Team (Subagent edition, Opus)
Spawn the same four advisory roles as /lite, but as plain one-shot subagents pinned to Opus. The orchestrator dispatches them, collects their outputs, implements code, and verifies tests pass. No persistent teammates, no peer-to-peer messaging, no team lifecycle.
This is the subagent counterpart to /lite. Use when:
- You want the team's research/critique/test discipline without the Agent-Teams overhead.
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSis unavailable or you want to avoid team artifacts on disk.- You want to compare /lite (teams) vs /lite-sub (subagents) on the same task.
Tunable Limits
SUBAGENT_MODEL = "opus"# forced viamodel:on every Agent callTEST_RETRY_MAX = 2# how many times to refine impl on failing tests before escalatingWALL_CLOCK_TARGET = 3-7 min# advisory onlyWAVE_1_TIMEOUT_HINT = 4 min# if a wave-1 subagent hasn't returned by then, surface the wait — do not abort
Flow
1. Guard
If $ARGUMENTS is empty: error /lite-sub requires a task description in quotes and stop.
2. Pre-dispatch context gather
Per CLAUDE.md's pre-dispatch checklist, build a single context block reused for all subagent prompts.
pwdandgit rev-parse --show-toplevel 2>/dev/null→ project root.- Detect language + test framework (in order):
package.json→ Node — check deps forvitest|jest|mochapyproject.tomlorsetup.py→ Python —pytestif in deps, else defaultpytestPackage.swift→ Swift — XCTestgo.mod→ Go —go testCargo.toml→ Rust —cargo testGemfile→ Ruby —rspecif in deps elseminitest- None of the above → "no project detected" branch (see Error handling)
- SSH hosts:
grep -A5 "Host " ~/.ssh/configmatching task domain. - Skills:
ls ~/.claude/skills/matching task domain. - Env var NAMES:
grep -i <task-keyword> ~/.zshrc(NAMES only, never values). - CLAUDE.md keywords:
grep -B1 -A10 <keyword> ~/.claude/CLAUDE.mdfor any sections relevant to the task.
Standard context block (built once, pasted into every spawn prompt):
## Available System Access
- SSH: <relevant hosts, or "n/a">
- Skills: <relevant skill summaries, or "n/a">
- Env vars: <relevant env var NAMES only>
- Tools: WebSearch, WebFetch, Bash, Read, Glob, Grep
- Project root: <path or "no git project">
- Test framework: <auto-detected, or "none detected">
## Task (verbatim from user)
$ARGUMENTS
## Relevant CLAUDE.md sections
<paste matching grep output, or "n/a">
3. Wave 1 — dispatch scout, explorer, critic in parallel
A SINGLE assistant message with THREE Agent tool calls. Every call uses:
model: "opus"subagent_type: the existing agentic-team agent name ("Research Scout","Explorer","Critic")description: 3-5 word summaryprompt: the standard prompt template below, with role-specific addenda
Standard wave-1 prompt template:
You are a one-shot advisory subagent in the /lite-sub flow. You will run ONCE,
produce your output, and exit. There is no team mailbox, no peer messaging,
and no opportunity to react to other subagents — this is a single round.
Your full role definition is at:
~/.claude/agents/agentic-team/<phase>/<role>.md
Read that file ONCE at the start — it defines your identity, what you produce,
your rules, and your constraints. Stay in role.
<paste standard context block from step 2>
## Output discipline
- Be concise. Your output goes directly into the orchestrator's context for
synthesis. Long preambles waste tokens.
- Lead with the deliverable your role specifies. End with a short "Notes for
the tester" paragraph (≤4 bullets) flagging assumptions worth testing.
- Do NOT propose implementation code. Do NOT ask clarifying questions —
proceed with the most reasonable interpretation and note ambiguities.
- Do NOT spawn further subagents. Do NOT call Agent.
## Your task in this run
<role-specific addendum below>
Role-specific addenda:
- Research Scout: "Find ≥3 references via WebSearch — libraries, blog posts, similar implementations. Check GitHub stars/last-commit on each. Output: a
## Prior artbrief with one paragraph per reference (what it does, why it's relevant, link), followed by## Recommended approach(1-2 paragraphs) and## Notes for the tester(assumptions to test)." - Explorer: "Verify every library/framework you would recommend (
npm view <pkg>,pip show,brew info,gh repo view, or WebSearch the package registry). Output: a## Version manifesttable with<lib>@<ver> — last release <date> — statusrows, a## Test frameworkline stating what to use and which version, and## Notes for the tester(any version-pinning gotchas)." - Critic: "Read the task as if it were already a plan. Output:
## Concerns(severity-tagged: critical/important/minor, each one paragraph),## Ambiguity register(a numbered list of unresolved questions and your default interpretation for each), and## Notes for the tester— the riskiest assumptions, ranked. Identify problems; do not propose solutions. FlagFUNDAMENTALLY WRONG PLANonly if the task is contradictory or impossible — put that flag on its own line at the very top if applicable."
4. Inspect wave-1 outputs
When all three return:
- If Critic's first line contains
FUNDAMENTALLY WRONG PLAN: STOP. Print Critic's reasoning to the user, ask them to confirm or revise, do NOT proceed to wave 2 or implementation. - Otherwise: synthesize a short "wave-1 digest" string (≤30 lines total) consisting of:
- Scout's
Recommended approachparagraph - Explorer's
Test frameworkline + anycriticalversion pins - Critic's
Notes for the tester(riskiest assumptions) - The three
Notes for the testerblocks merged and de-duplicated
- Scout's
This digest is the spec for wave 2.
5. Wave 2 — dispatch tester (single Agent call)
You are the Tester subagent in the /lite-sub flow. You will run ONCE,
write failing tests, and exit. Your full role definition is at:
~/.claude/agents/agentic-team/implementation/tester.md
Read that file ONCE at the start. Stay in role.
<paste standard context block from step 2>
## Wave-1 digest (input from scout, explorer, critic)
<paste digest from step 4>
## Your task
Write FAILING tests in <detected test framework> at the project's standard
test path. Cover the riskiest assumptions from the digest. Tests should fail
because the implementation does not yet exist — not because of trivial syntax
errors. Output: a `## Test files` list (absolute paths created), `## Coverage`
(one bullet per concern from the digest, mapping concern → test name), and
`## Notes for the implementer` (≤4 bullets — invariants the impl must hold).
Use model: "opus" and subagent_type: "Tester".
6. Synthesis + implementation (orchestrator)
When tester returns AND the test files exist on disk:
- Read the test files (this is your spec).
- Implement code in the project to make the failing tests pass. Use Critic's concerns + Scout's prior art + Explorer's version manifest as guardrails.
- Do NOT refactor unrelated code.
- Do NOT commit (the user controls commits).
UX pass — required when the artifact has a user-facing surface. Before considering the implementation done, identify whether the artifact will produce output a human reads:
- Web (HTML/CSS/React/Tailwind/marketing) → invoke the
hig-thinkskill via the Skill tool. - SwiftUI / iOS / macOS native → invoke the
swift-frontskill. - Other frontend (React Native, generic JS UI, design systems) → invoke the
frontend-designskill. - CLI / terminal → no dedicated skill; apply: bold for primary identifier, dim ANSI for metadata, color for category, respect
NO_COLORandisatty(), expose--json(or equivalent) as the machine-readable escape hatch, blank lines between logical sections, errors prefixed with program name. - Backend / library / protocol → skip; no human surface.
Apply the invoked skill's recommendations alongside the test-driven structure. Default to the human-readable form; gate machine output behind a flag. Do NOT skip this step on the grounds that "tests pass" — tests measure the data contract, not what the user sees.
7. Verification
Run the project's test command (pytest, npm test, swift test, go test ./..., etc., per detected framework).
- Tests pass: continue to step 8.
- Tests fail (iteration
nofTEST_RETRY_MAX= 2):- If the failure is in your impl: refine the impl, re-run.
- If the failure looks like a bad test (test asserts something the spec doesn't require): fix the test inline (you cannot DM the tester — it has exited). Note the test edit in the final report.
- After
TEST_RETRY_MAXfailed iterations: STOP. Skip to step 8 with a failure report.
8. Final report
Concise final assistant message:
- Mode: subagent (Opus) — distinguishes from
/lite's team mode. - Research: 1-3 most relevant references scout found.
- Critiqued: 1-3 most important concerns critic raised.
- Tested: what assumptions are now under test.
- Built: what was implemented.
- Files changed: absolute paths.
- Test result: pass / fail-after-N-retries / escalated.
Error handling
| Failure | Behavior |
|---|---|
$ARGUMENTS empty |
Error: /lite-sub requires a task description in quotes |
| Not in a git project | Continue, but tester writes to ~/lite-sub-scratch/<timestamp>/; orchestrator implements there too |
| No test framework detected | Continue; tester writes plain assertion script (e.g., a runnable Python file that exits non-zero on failure); report fallback used |
| Wave-1 subagent fails to return | Surface which one. If 1 of 3 fails: continue without them, note in report. If 2+ fail: stop with error. |
Critic flags FUNDAMENTALLY WRONG PLAN |
STOP. Print Critic's reasoning. Ask user to confirm/revise before proceeding. Do NOT proceed to wave 2. |
| Tester fails to return | STOP. Surface error. Do not implement without tests. |
Tests fail after TEST_RETRY_MAX |
Continue to step 8 (final report) with failure status. Print last test output. |
Differences from /lite (Agent-Teams edition)
| Property | /lite (teams) |
/lite-sub (subagents) |
|---|---|---|
| Coordination | Persistent teammates + SendMessage + shared task list | One-shot subagents, no peer messaging |
| Model | Whatever each agent's frontmatter specifies | Forced model: "opus" on every call |
| Critic ↔ Tester | Live DM ("riskiest assumptions") | Wave-1 digest passed in tester's prompt |
| Drift correction | Orchestrator DMs role-drifters mid-flight | Not possible — subagents complete in one shot |
| Disk artifacts | ~/.claude/teams/<name>/, ~/.claude/tasks/<name>/ |
None |
| Required env | CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 |
None |
| Cost | ~4-7× plain subagents | ~1× plain subagents (still 3-4 Opus calls) |
| Wall clock | 3-7 min typical | 3-7 min typical (similar — wave-2 serial gate) |
The structural tradeoff: /lite lets Tester react to Critic's concerns mid-flight. /lite-sub collapses that interaction into a single digest hop, which loses fidelity but eliminates a class of coordination failures (orphan teams, debate spirals, role drift).
Anti-patterns — when NOT to invoke /lite-sub
- Trivial tasks (rename, fix typo, format) — overhead > value.
- Pure-research, no implementation — direct WebSearch is faster.
- Cross-file architectural decisions — use the full team flow with Architect/Builder/Reviewer/Integrator.
- Spec is unclear — clarify with the user first;
/lite-subwill commit to one interpretation. - Time-sensitive emergencies — direct intervention is faster.
- LLM-orchestrating CLI tasks where the team's testing instinct pushes toward
--json-schemaor--model <smaller>overrides. In your task description, explicitly say: "use the user's default model and inherit session context — do not add--no-session-persistence,--system-prompt,--json-schema, or--modeloverrides."
Constraints (negative — what NOT to do)
- Do NOT introduce new agents. Use only the four existing ones (
Research Scout,Explorer,Critic,Tester). - Do NOT dispatch all four in a single wave — Tester must run AFTER scout/explorer/critic so the digest is available. The structural reason /lite-sub keeps the two-wave shape is that without it Tester has no signal beyond the raw task.
- Do NOT call
TeamCreate,TeamDelete, orSendMessage— this command is the subagent variant by design. If you find yourself reaching for those tools, you are running the wrong command. - Do NOT let subagents write implementation code (except Tester writing test code). The orchestrator implements.
- Do NOT ask the user clarifying questions during the flow —
/lite-subis fire-and-forget; if the task is ambiguous, proceed with the most reasonable interpretation and note it in the report. - Do NOT skip the test-pass verification (step 7) — claiming "done" without running tests violates
superpowers:verification-before-completion. - Do NOT proceed past step 4 if Critic flags
FUNDAMENTALLY WRONG PLAN. - Do NOT skip the UX pass on user-facing artifacts on the grounds that tests pass.
- Do NOT omit
model: "opus"on any of the four Agent calls — the whole point of/lite-subis to pin Opus across the advisory wave + tester.