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
16 KiB
description, argument-hint, allowed-tools
| description | argument-hint | allowed-tools |
|---|---|---|
| Run the lite agentic team on a task — 4 named teammates (scout, explorer, critic, tester) work in parallel via direct peer messaging while the orchestrator keeps each in role, synthesizes, implements, and verifies. Uses EXPERIMENTAL_AGENT_TEAMS. Slower than a one-shot but produces tested, critiqued, research-grounded code. Do NOT use for trivial tasks, pure research, or multi-module architectural work. | <task description in quotes> | Agent, TeamCreate, TeamDelete, SendMessage, TaskCreate, TaskUpdate, TaskList, TaskGet, Bash, Read, Edit, Write, Glob, Grep, WebSearch, WebFetch, TodoWrite |
/lite — Lite Agentic Team (Agent-Teams edition)
Spawn a 4-teammate Agent Team on a single task. Teammates coordinate via direct peer DMs and a shared task list. The orchestrator keeps each one in their role, synthesizes their outputs, implements code, and verifies tests pass.
Requires CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (already set in this fleet's settings.json).
Tunable Limits
TEST_RETRY_MAX = 2# how many times to refine impl on failing tests before escalatingMAX_DEBATE_ROUNDS = 3# how many message round-trips between teammates before orchestrator forces synthesisWALL_CLOCK_TARGET = 3-7 min# advisory only; teams are slower than subagents but produce richer outputTEAM_NAME_PREFIX = "lite-"# team_name = TEAM_NAME_PREFIX + unix timestamp
Flow
1. Guard
If $ARGUMENTS is empty: error /lite 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 four spawn 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):
## 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, SendMessage
- 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. Create the team
Run TeamCreate with:
team_name:lite-+ current unix timestamp (e.g.,lite-1714450000). Rundate +%sto get the value.description: short, task-specific (e.g.,lite-team for: <first 60 chars of $ARGUMENTS>)
This creates ~/.claude/teams/<team>/config.json and ~/.claude/tasks/<team>/.
4. Seed the shared task list
Create four tasks via TaskCreate (the team's task list is auto-active). Each will be claimed by the corresponding teammate in step 5:
| Task subject | Owner (set in step 5) | Description |
|---|---|---|
| Prior-art research | scout | Find ≥3 references via WebSearch — libraries, blog posts, similar implementations. Check GitHub stars/last-commit. DM critic + explorer with findings as you go. Output final brief in your last turn. |
| Tech verification | explorer | Verify versions/maintenance status of every library you'd recommend. DM tester with the test framework + version once decided. DM critic if you find a recommended library is unmaintained. |
| Concerns + ambiguities | critic | Read the task as a plan. Produce a concerns list (severity-tagged) + ambiguity register. Consult explorer if a concern depends on a tech choice. DM tester with the riskiest assumptions to test. Flag FUNDAMENTALLY WRONG PLAN only if contradictory or impossible. |
| Failing tests | tester | Wait for critic's "riskiest assumptions" DM (or after MAX_DEBATE_ROUNDS of silence, derive them from the task yourself). Write failing tests in the project's detected test framework. DM critic to verify coverage. Output final test file paths in your last turn. |
Add a fifth task Implementation + verify owned by the orchestrator (not a teammate) — this captures that the orchestrator is responsible for steps 7-8.
5. Spawn the team — single message, four parallel Agent calls
All four Agent calls go in one assistant message so they spawn in parallel. Each call uses:
team_name: the team created in step 3name: short lowercase (scout,explorer,critic, ortester)subagent_type: the existing agentic-team agent ("Research Scout","Explorer","Critic","Tester")prompt: the standard prompt template below, with role-specific addenda
Standard spawn prompt template (each teammate gets this with <role> filled in):
You are <role> in a 4-teammate Agent Team. Your full role definition is at:
~/.claude/agents/agentic-team/<phase>/<role>.md
Read that file ONCE at the start of your first turn — it defines your identity, what you produce, your rules, and your constraints. Stay in role.
<paste standard context block from step 2>
## Team roster (DM these by name via SendMessage)
- scout (Research Scout) — prior art, libraries, similar implementations
- explorer (Explorer) — version verification, maintenance status, dependency vetting
- critic (Critic) — edge cases, ambiguities, concerns
- tester (Tester) — failing tests for the riskiest assumptions
## How to coordinate
- Use SendMessage to share findings with relevant peers AS YOU DISCOVER THEM, not at the end. Short DMs (1-3 sentences) with concrete content beat long summaries.
- Reply to peer DMs that name you. Ignore DMs not directed at you.
- Use the shared task list (TaskList / TaskUpdate) — claim your task, mark completed when done.
- Do NOT touch other teammates' tasks. Stay in your role.
- Do NOT write implementation code (except tester writing test code). The orchestrator implements.
- Do NOT ask the user clarifying questions — the orchestrator handles that. If something is ambiguous, register it as an ambiguity (critic) or test both interpretations (tester).
- After producing your final output, mark your task completed and go idle. Stay alive — the orchestrator may DM you with follow-ups.
## Your task in this team
<role-specific addendum below>
Role-specific addenda:
- scout: "Find ≥3 references via WebSearch (libraries, blog posts, similar impls). Check GitHub stars/last-commit. DM critic with the standard approach you'd recommend. DM explorer with candidate libraries to verify. Final output: prior-art brief in your last turn."
- explorer: "Verify every library/framework you'd recommend (
npm view <pkg>,pip show,brew info,gh repo view). DM tester once you've decided the test framework + version. DM critic if a recommended library is unmaintained. Final output: version manifest with<lib>@<ver> — last release <date>lines." - critic: "Read the task as if it were already a plan. Produce concerns list (severity-tagged: critical/important/minor) + ambiguity register. Consult explorer via DM if a concern hinges on a tech choice. DM tester the riskiest assumptions. Flag
FUNDAMENTALLY WRONG PLANONLY if contradictory or impossible. Identify problems — do not propose solutions." - tester: "Wait up to
MAX_DEBATE_ROUNDSfor critic's 'riskiest assumptions' DM. If it doesn't arrive, derive them yourself from the task. Write FAILING tests in<detected test framework>at the project's standard test path. DM critic to verify coverage of their concerns. Final output: list of test file paths created."
6. Monitor and steer (orchestrator)
While the team works, you (the orchestrator) receive:
- Auto-delivered messages from teammates DMing you directly
- Idle notifications when each teammate's turn ends
- Brief peer-DM summaries inside idle notifications (so you see who is talking to whom)
- Updates to the shared task list
Your job is role enforcement and conflict arbitration:
- Drift correction: if a teammate is doing work outside their role (e.g., tester writing impl code, critic proposing solutions), DM them:
Stay in role: <role>. Do not <off-role activity>. Continue with <correct activity>. - Conflict arbitration: if critic and explorer disagree (e.g., critic says "use library X", explorer says "X is unmaintained"), DM both with the resolution or ask the user if you genuinely don't know.
- FUNDAMENTALLY WRONG PLAN: if critic flags this, STOP. Send
shutdown_requestto all teammates. Print critic's reasoning. Ask the user to confirm or revise before proceeding. Do NOT proceed to step 7. - Stuck team: if all four teammates are idle and the task list shows no recent activity for 30+ seconds AND tester has not produced tests, DM tester directly:
Critic's concerns are <summarize>. Write failing tests now. Do not wait for further input. - Debate limit: if any pair of teammates exchanges more than
MAX_DEBATE_ROUNDS(= 3) DMs without convergence, DM both:Stop debating. Each of you write your final position into your task and complete it. Orchestrator will arbitrate.
Do NOT re-read teammates' produced files yourself if their final messages are already in your context — duplicate work wastes context.
7. Synthesis + implementation (orchestrator)
When tester has marked their task completed 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.
The invoked skill provides surface-specific guidance. Apply its recommendations to the implementation 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.
If scout/explorer/critic are still working when tester finishes, DM them: tester finished. Wrap up your task and complete it. Then proceed.
8. Verification
Run the project's test command (pytest, npm test, swift test, go test ./..., etc., per detected framework).
- Tests pass: continue to step 9.
- 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): DM tester with the failure output and ask them to refine. Wait for tester to update the file. Re-run.
- After
TEST_RETRY_MAXfailed iterations: STOP. Skip to step 9 with a failure report.
9. Shutdown + report
- Send
{type: "shutdown_request", reason: "/lite complete"}to each teammate via SendMessage. Wait forshutdown_response(auto-approved by teammates per protocol). - Run
TeamDeleteto clean up~/.claude/teams/<team>/and~/.claude/tasks/<team>/. - Mark the orchestrator's
Implementation + verifytask completed. - Final assistant message — concise:
- 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 requires a task description in quotes |
EXPERIMENTAL_AGENT_TEAMS not enabled |
Print: set CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 in settings.json and stop |
| Not in a git project | Continue, but tester writes to ~/lite-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 |
| TeamCreate fails | Surface the error and stop. Do NOT fall back to subagent dispatch silently. |
| Any teammate fails to spawn | Surface which one. If 1 of 4: continue without them, note in report. If 2+: shutdown remaining, TeamDelete, surface error. |
Critic flags FUNDAMENTALLY WRONG PLAN |
Send shutdown_request to all teammates. TeamDelete. Surface critic's reasoning to user. |
Tests fail after TEST_RETRY_MAX |
Continue to step 9 (shutdown + report) with failure status. Print last test output. |
| Orchestrator errors mid-flow | Send shutdown_request to all alive teammates, run TeamDelete, propagate the error to user. Do NOT leave orphan teams. |
Anti-patterns — when NOT to invoke /lite
- Trivial tasks (rename, fix typo, format) — overhead > value, even more so with teams.
- 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;
/litewill commit to one interpretation. - Time-sensitive emergencies — direct intervention is faster than 4-teammate orchestration.
- Token budget tight — teams cost ~4-7x subagents. (Today's
/liteopts into the cost on purpose.)
Constraints (negative — what NOT to do)
- Do NOT introduce new agents. Use only the four existing ones (
Research Scout,Explorer,Critic,Tester). - Do NOT spawn teammates sequentially — all four go in a single message with four parallel
Agentcalls. - Do NOT let teammates write implementation code (except tester writing test code). The orchestrator implements.
- Do NOT ask the user clarifying questions during the flow —
/liteis 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 8) — claiming "done" without running tests violates
superpowers:verification-before-completion. - Do NOT proceed past step 6 if critic flags
FUNDAMENTALLY WRONG PLAN. - Do NOT leave orphan teams — every flow path (success, error, escalation) must call
TeamDeletebefore returning to the user. - Do NOT skip role enforcement — if a teammate drifts off-role, DM them to redirect. The team's value is in role specialization.
- Do NOT exceed
MAX_DEBATE_ROUNDSof teammate-to-teammate debate without forcing synthesis. - Do NOT use background subagents alongside the team — all coordination flows through the team's mailbox + task list.