Best for
- User says "execute sprint", "start sprint", "begin implementation"
- User has an approved sprint plan ready to implement
- User wants guided execution with built-in quality checks
sunholo-data/ailang/.agents/skills/sprint-executor/SKILL.md
Execute approved sprint plans with test-driven development, continuous linting, progress tracking, and pause points. Supports parallel milestone execution via Task sub-agents. Use when user says "execute sprint", "start sprint", or wants to implement an approved sprint plan.
Decision brief
Execute an approved sprint plan with continuous progress tracking, testing, and documentation updates. Supports parallel execution of independent milestones using Task sub-agents for faster sprints.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/sunholo-data/ailang --skill ".agents/skills/sprint-executor"Inspect the Agent Skill "sprint-executor" from https://github.com/sunholo-data/ailang/blob/fb85250a127dcc6e8308c6653f153d9c59f08d62/.agents/skills/sprint-executor/SKILL.md at commit fb85250a127dcc6e8308c6653f153d9c59f08d62. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Sequential execution (default): bash
Review the “6. Pause after each milestone for user review” section in the pinned source before continuing.
All milestones have been completed and tests pass.
If this is NOT the first session for this sprint:
1. Validate Sprint JSON - Run validatesprintjson.sh REQUIRED FIRST - If validation fails, STOP and notify user that sprint-planner must fix the JSON - Do NOT proceed with placeholder milestones 2. Read Sprint Plan - Parse markdown + load JSON progress file (.ailang/state/sprints…
Permission review
The documentation asks the agent to read local files, directories, or repositories.
**Read Sprint Plan** - Parse markdown + load JSON progress file (`.ailang/state/sprints/sprint_<id>.json`)The documentation asks the agent to run terminal commands or scripts.
git checkout devThe documentation asks the agent to run terminal commands or scripts.
git checkout -b sprint/integrationEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 96/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 33 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Execute an approved sprint plan with continuous progress tracking, testing, and documentation updates. Supports parallel execution of independent milestones using Task sub-agents for faster sprints.
Use the data above first. Only re-run these commands manually if the injected context is empty or you need to refresh after making changes.
Sequential execution (default):
# User says: "Execute the sprint plan in design_docs/20251019/M-S1.md"
# This skill will:
# 1. Validate prerequisites (tests pass, linting clean)
# 2. Create TodoWrite tasks for all milestones
# 3. Execute each milestone with test-driven development
# 4. Run checkpoint after each milestone (tests + lint)
# 5. Update CHANGELOG and sprint plan progressively
# 6. Pause after each milestone for user review
Parallel execution (for independent milestones):
# User says: "Execute sprint plan at docs/sprint-plans/M-FOO.md in parallel"
# This skill will:
# 1. Read sprint plan and identify all milestones
# 2. Analyze dependencies — group independent milestones for parallel execution
# 3. Spawn Task sub-agents per milestone (branch, TDD, implement, commit)
# 4. Act as integration agent — merge branches, run full test suite
# 5. Write sprint retrospective with timing and friction analysis
Invoke this skill when:
Choose parallel mode when:
Choose sequential mode when:
When invoked by the AILANG Coordinator (detected by GitHub issue reference in the prompt), you MUST output these markers at the end of your response:
IMPLEMENTATION_COMPLETE: true
BRANCH_NAME: coordinator/task-XXXX
FILES_CREATED: file1.go, file2.go
FILES_MODIFIED: file3.go, file4.go
Why? The coordinator uses these markers to:
Example completion:
## Implementation Complete
All milestones have been completed and tests pass.
**IMPLEMENTATION_COMPLETE**: true
**BRANCH_NAME**: `coordinator/task-abc123`
**FILES_CREATED**: `internal/new_file.go`, `internal/new_test.go`
**FILES_MODIFIED**: `internal/existing.go`
IsPure: true) MUST be tested with -count=20 — single-pass tests hide Go map iteration nondeterminism. Use realistic inputs, not toy examples. See milestone_checklist.md for details.exampleRunPath backslash paths failed both Windows CI jobs → round-1 FAIL 81/100; iter-30 TestDocsSearch_StillDesignDocSimHash asserted design_docs/ against native-separator output → both Windows jobs red; M-SMT-CALLEE-SORT-GATE e2e tests invoked z3 which the Windows runner lacks → dev itself red). The local rig is macOS; CI runs test-windows + Build windows-latest you never exercise. Before declaring ANY milestone done, scan its new/changed tests for: (a) path assertions — output containing paths must be normalized (filepath.ToSlash / replace \ with /) before strings.Contains-style checks; (b) external binaries — anything invoking z3 or other non-Go tools must guard with the repo's availability convention (smt.Z3Available() → t.Skip; ubuntu CI installs z3 at ci.yml, Windows does NOT); (c) golden files vs native rendering — goldens comparing rendered paths/line endings need normalization. Two seconds of scan beats a 20-minute CI round-trip.Sprint execution can now span multiple Codex sessions!
Based on Anthropic's long-running agent patterns, sprint-executor implements the "Coding Agent" pattern:
Session Startup Routine: Every session starts with session_start.sh
.ailang/state/sprints/sprint_<id>.json)Structured Progress Tracking: JSON file tracks state
passes: true/false/null (follows "constrained modification" pattern)Pause and Resume: Work can be interrupted at any time
not_started, in_progress, paused, completedFor JSON schema details, see resources/json_progress_schema.md
scripts/session_start.sh <sprint_id> NEWResume sprint execution across multiple sessions.
When to use: ALWAYS at the start of EVERY session continuing a sprint.
What it does:
ailang messages import-githubscripts/validate_prerequisites.shValidate prerequisites before starting sprint execution.
What it checks:
ailang messages import-githubscripts/validate_sprint_json.sh <sprint_id> NEWREQUIRED before starting any sprint. Validates that sprint JSON has real milestones (not placeholders).
What it checks:
MILESTONE_ID)Criterion 1/2)Exit codes:
0 - Valid JSON, ready for execution1 - Invalid JSON or placeholders detected (sprint-planner must fix)scripts/milestone_checkpoint.sh <milestone_name> [sprint_id]Run checkpoint after completing a milestone.
CRITICAL: Tests passing ≠ Feature working! This script verifies with REAL DATA.
What it does:
make test and make lintSprint-specific verification (e.g., M-TASK-HIERARCHY):
Example:
# Verify M1 (should pass if entity sync works)
.Codex/skills/sprint-executor/scripts/milestone_checkpoint.sh M1 M-TASK-HIERARCHY
# Verify M2 (will fail if OTEL attributes not propagated)
.Codex/skills/sprint-executor/scripts/milestone_checkpoint.sh M2 M-TASK-HIERARCHY
Exit codes:
0 - Checkpoint passed (all verifications succeeded)1 - Checkpoint FAILED (DO NOT mark milestone complete)scripts/acceptance_test.sh <milestone_id> <test_type> NEWRun end-to-end acceptance tests (parser, builtin, examples, REPL, e2e).
scripts/finalize_sprint.sh <sprint_id> [version] NEWFinalize a completed sprint by moving design docs and updating status.
What it does:
planned/ to implemented/<version>/implemented/<version>/When to use: After all milestones pass and sprint is complete.
Example:
.Codex/skills/sprint-executor/scripts/finalize_sprint.sh M-BUG-RECORD-UPDATE-INFERENCE v0_4_9
If this is NOT the first session for this sprint:
# ALWAYS run session_start.sh first!
.Codex/skills/sprint-executor/scripts/session_start.sh <sprint-id>
This prints "Here's where we left off" summary. Then skip to Phase 2 to continue with the next milestone.
validate_sprint_json.sh <sprint-id> REQUIRED FIRST
.ailang/state/sprints/sprint_<id>.json)validate_prerequisites.sh (tests, linting, git status)After Phase 1 initialization, choose between sequential or parallel execution based on milestone dependencies.
Decision criteria:
For each milestone:
in_progress in TodoWritemilestone_checkpoint.sh <milestone-name> (tests + lint must pass)changelogs/ — find active file with ls changelogs/ | grep currentexamples/runnable/<feature>.ailexamples/manifest.json if adding examplespasses: true/false in .ailang/state/sprints/sprint_<id>.jsoncompleted: "<ISO timestamp>"notes: "<summary of what was done>"After all milestones complete, proceed to Phase 4: Finalize Sprint.
Completion gate — sprint artifacts (MANDATORY, added 2026-07-11 after 2 recorded frictions: mission iterations 8 + 9 both shipped code with plan checkboxes unticked and the sprint JSON stale/absent, forcing the evaluator to reconstruct bookkeeping from commit history). The final milestone commit is not "done" until, IN THE SAME TREE the code was written in (i.e., the worktree, so it rides the same branch/PR):
.ailang/state/sprints/sprint_<id>.json has status: "completed" and per-milestone
passes/completed/notes filled. If the file is absent from the worktree
(the planner created it in the main tree but didn't commit it — the iteration-9
root cause), CREATE it there from the sprint plan rather than skipping the step.Quick tips:
internal/parser/test_helpers.goDEBUG_PARSER=1 for token flow tracingmake doc PKG=<package> for API discoveryUse this mode when independent milestones can be developed concurrently using Task sub-agents.
Read the sprint plan and build a dependency graph from the milestones:
For each milestone M:
- Parse M.dependencies[] from sprint JSON
- Identify files M will touch (use Grep to scope relevant files)
- Check for file-level conflicts between milestones
Group milestones into parallelizable waves:
Wave 1: [M1, M3, M5] ← no dependencies, no shared files
Wave 2: [M2, M4] ← depend on Wave 1 results
Wave 3: [M6] ← depends on Wave 2 results
Report the dependency graph to the user before proceeding:
Dependency Analysis:
Wave 1 (parallel): M1 (parser), M3 (stdlib), M5 (docs)
Wave 2 (parallel): M2 (depends on M1), M4 (depends on M3)
Wave 3 (sequential): M6 (depends on M2 + M4)
Estimated speedup: ~2.5x over sequential execution
Proceed with parallel execution? [y/n]
For each parallelizable wave, spawn one Task sub-agent per milestone in a single message (so they execute concurrently). Each sub-agent receives a detailed prompt:
# Example: spawning Wave 1 in parallel (all in ONE message with multiple Task calls)
Task(
description=f"Sprint milestone {milestone.id}",
subagent_type="general-purpose",
# Per-role model pin (m-mission-agentic-provider-routing M1): never inherit the controller
# session model. Mission runs export MISSION_EXECUTOR_MODEL; standalone runs default to Opus.
model=os.environ.get("MISSION_EXECUTOR_MODEL", "opus"), # Agent-tool alias (opus|sonnet|fable), NOT a full model ID
prompt=f"""
You are executing milestone {milestone.id}: {milestone.description}
Sprint plan: {plan_path}
## Your Scope
Branch: sprint/{milestone_slug}
Relevant files (from dependency analysis): {milestone.relevant_files}
## MANDATORY: Test-Driven Development
**Step 1: Create branch**
```bash
git checkout -b sprint/{milestone_slug}
```
**Step 2: Write FAILING tests FIRST**
For each acceptance criterion in the milestone:
- Write a test that captures the expected behavior
- Run `make test` — confirm the new tests FAIL
- Do NOT proceed to implementation until you have failing tests
Acceptance criteria:
{milestone.acceptance_criteria}
**Step 3: Implement until all tests pass**
- Write the minimum code to make each failing test pass
- Run `make test` after each change
- Run `make lint` — fix any issues immediately
- Keep functions small and focused (<50 lines)
**Step 4: Commit with milestone reference**
```bash
git add <specific-files>
git commit -m "Complete {milestone.id}: {milestone.description}
Acceptance criteria met:
{acceptance_criteria_checklist}
Co-Authored-By: Codex Opus 4.6 <[email protected]>"
```
**Step 5: Report back**
At the END of your response, output this EXACT format:
```
MILESTONE_REPORT:
milestone_id: {milestone.id}
status: success|failure
tests_passed: <count>
tests_failed: <count>
files_changed: <comma-separated list>
branch: sprint/{milestone_slug}
notes: <brief summary of what was done>
```
## RULES
- Do NOT skip the failing-test-first step
- Do NOT commit with failing tests
- Do NOT modify files outside your scope: {milestone.relevant_files}
- If blocked, report status: failure with clear explanation
"""
)
Critical rules for sub-agent spawning:
Task callssprint/<milestone-slug>)Grep to verify they're only reading relevant files before editingAfter all sub-agents in a wave complete, parse their MILESTONE_REPORT blocks:
{
"wave": 1,
"results": [
{"milestone_id": "M1", "status": "success", "tests_passed": 12, "tests_failed": 0, "branch": "sprint/m1-parser-fix"},
{"milestone_id": "M3", "status": "success", "tests_passed": 8, "tests_failed": 0, "branch": "sprint/m3-stdlib-list"},
{"milestone_id": "M5", "status": "failure", "tests_passed": 3, "tests_failed": 2, "branch": "sprint/m5-docs"}
]
}
If any milestone in a wave failed:
If all milestones in a wave succeeded:
Execute waves sequentially (Wave 1 → integrate → Wave 2 → integrate → ...). Within each wave, milestones run in parallel.
After parallel milestones complete, act as the integration agent.
This phase merges all milestone branches and verifies the combined result. The executor (you) performs this directly — do NOT delegate integration to sub-agents.
# Start from the base branch (dev or main)
git checkout dev
git checkout -b sprint/integration
Merge each successful milestone branch into sprint/integration, one at a time:
# Merge in dependency order (Wave 1 first, then Wave 2, etc.)
git merge sprint/m1-parser-fix --no-ff -m "Integrate M1: parser fix"
git merge sprint/m3-stdlib-list --no-ff -m "Integrate M3: stdlib list"
git merge sprint/m5-docs --no-ff -m "Integrate M5: docs"
If a merge conflict occurs:
make test after resolution to verify nothing brokemake test # ALL tests must pass
make lint # ALL linting must pass
make fmt-check # Go formatting must be clean
make check-file-sizes # NO file >800 lines (CI-only gate; make test/lint DON'T cover it)
Match CI locally before declaring done — make test/lint are NARROWER than CI
(added 2026-07-21 after iter-72 shipped TWO CI-only reds from the same gap — the local
done-gate missing remote checks): (a) make check-file-sizes — a file already near 800
lines (iter-72: Codex.go was at 799; a 30-line addition tipped it to 829, red) trips
this gate invisibly to make test/lint; fix by extracting a cohesive block to a sibling
file, not by shaving one line. (b) Windows — test-windows/Build windows-latest run
the Go suite on Windows you never exercise locally; re-scan new tests for the rule-#10
path/binary/golden traps (iter-72: a strings.Contains of settings JSON vs an unescaped
hook path passed on Unix, failed on Windows where JSON escapes \ to \\). Two seconds of
local scan beats a 15-minute CI round-trip per red.
If integration tests fail:
git bisect or selective reverts:
# Revert last merge to isolate
git revert -m 1 HEAD
make test
# If tests pass now, the reverted milestone caused the failure
After successful integration, update .ailang/state/sprints/sprint_<id>.json:
passes: true for each integrated milestoneactual_loc from git diff statscompleted timestampsstatus: "in_progress" (or "completed" if all waves done)After ALL waves are integrated and tests pass, write a retrospective.
Create docs/sprint-retros/<sprint-id>-retro.md with:
# Sprint Retrospective: <sprint-id>
## Summary
- **Sprint**: <sprint-id>
- **Duration**: <actual days> (estimated: <planned days>)
- **Execution mode**: Parallel (Wave count: N)
- **Total milestones**: N (passed: X, failed: Y)
## Milestone Timing
| Milestone | Estimated LOC | Actual LOC | Time Taken | Status |
|-----------|--------------|------------|------------|--------|
| M1 | 200 | 185 | 45 min | ✅ |
| M2 | 150 | 210 | 1h 10min | ✅ |
| ... | | | | |
## Parallelization Results
- **Waves executed**: 3
- **Max parallelism**: 3 agents (Wave 1)
- **Speedup vs sequential**: ~2.1x
- **Integration conflicts**: 1 (M1 + M3 shared `types.go`)
## Friction Encountered
- <Description of any blockers, unexpected complexity, or tooling gaps>
- <Merge conflicts and how they were resolved>
- <Sub-agent failures and root causes>
## Recommendations for Next Sprint
- <Suggestions for improving parallelization>
- <Files that should NOT be parallelized (high conflict risk)>
- <DX improvements identified during execution>
Note: Documentation verification, design doc moves, and quality checks are handled by the sprint-evaluator in Phase 5. The executor focuses on implementation — the evaluator judges it.
CRITICAL: After finalizing a sprint, ALWAYS hand off to sprint-evaluator for independent quality assessment.
Based on Anthropic's generator-evaluator architecture — separating the agent doing the work from the agent judging it is "a strong lever" for quality.
This is the standard workflow:
Send handoff message:
ailang messages send sprint-evaluator '{
"type": "implementation_complete",
"correlation_id": "eval_<sprint-id>_<date>",
"sprint_id": "<sprint-id>",
"branch_name": "<branch>",
"sprint_json_path": ".ailang/state/sprints/sprint_<id>.json",
"design_doc_path": "<path to design doc>",
"files_created": [...],
"files_modified": [...],
"evaluation_round": 1
}' --title "Sprint <sprint-id> ready for evaluation" --from "sprint-executor"
Why separate evaluation?
If session starts with an evaluation_feedback message:
ailang messages read MSG_IDmilestone_checkpoint.sh for affected milestonesfinalize_sprint.shmake test after every file changemake lint after implementationmake fmt for formattingUses ailang messages for GitHub sync and issue tracking!
Automatic sync:
session_start.sh and validate_prerequisites.sh run ailang messages import-github firstIf github_issues is set in sprint JSON:
validate_sprint_json.sh shows linked issuessession_start.sh displays issue titles from messagesmilestone_checkpoint.sh reminds you to include Refs #... in commitsfinalize_sprint.sh suggests commit message with issue referencesCommit message format:
# During development - use "refs" to LINK without closing
git commit -m "Complete M1: Parser foundation, refs #17"
# Final sprint commit - use "Fixes" to AUTO-CLOSE issues on merge
git commit -m "Finalize sprint M-BUG-FIX
Fixes #17
Fixes #42"
Important: "refs" vs "Fixes"
refs #17 - Links commit to issue (NO auto-close)Fixes #17, Closes #17, Resolves #17 - AUTO-CLOSES issue when mergedWorkflow:
github_issues: [17, 42] (set by sprint-planner, deduplicated)refs #17 to link commits without closingFixes #17 to auto-close issues on mergeailang messages import-github checks existing issues before importingresources/json_progress_schema.md - Sprint progress formatsession_start.sh ALWAYS for continuing sprintsresources/parser_patterns.md - Parser development + pattern matching pipelineresources/codegen_patterns.md - Go code generation for new features/builtinsresources/api_patterns.md - Common constructor signatures and API gotchasresources/developer_tools.md - Make targets, ailang commands, workflowsresources/dx_improvement_patterns.md - Identifying and implementing DX winsresources/dx_quick_reference.md - ROI calculator, decision matrixresources/milestone_checklist.md - Step-by-step per milestoneThis skill loads information progressively:
scripts/ directory (validation, checkpoints, testing)resources/ directory (detailed guides, patterns, references)dev (or specified in sprint plan)scripts/validate_sprint_json.sh <sprint-id>make fmtMILESTONE_REPORT from the failed sub-agentsprint/integrationmake test after each conflict resolutionThe sprint-executor skill integrates with the AILANG Coordinator for automated workflows.
When configured in ~/.ailang/config.yaml, the sprint-executor agent:
coordinator:
agents:
- id: sprint-executor
inbox: sprint-executor
workspace: /path/to/ailang
capabilities: [code, test, docs]
trigger_on_complete: [sprint-evaluator] # Evaluator judges implementation
auto_approve_handoffs: false
auto_merge: false
session_continuity: true
max_concurrent_tasks: 1
The sprint-executor receives:
{
"type": "plan_ready",
"correlation_id": "sprint_M-CACHE_20251231",
"sprint_id": "M-CACHE",
"plan_path": "design_docs/planned/v0_6_3/m-cache-sprint-plan.md",
"progress_path": ".ailang/state/sprints/sprint_M-CACHE.json",
"session_id": "Codex-session-xyz",
"estimated_duration": "3 days",
"total_loc_estimate": 650
}
With session_continuity: true:
session_id from sprint-planner handoff--resume SESSION_ID for Codex CLIWith auto_merge: false:
As the last agent in the chain:
trigger_on_complete: [] means no automatic handoffstatus: completedimplemented/ directory.ailang/state/sprints/sprint_<id>.jsonsprint/integrationdocs/sprint-retros/ after parallel sprints completeFrequently asked questions
Execute an approved sprint plan with continuous progress tracking, testing, and documentation updates. Supports parallel execution of independent milestones using Task sub-agents for faster sprints.
The source record exposes this install command: npx skills add https://github.com/sunholo-data/ailang --skill ".agents/skills/sprint-executor". Inspect the command and pinned source before running it.
Static rules flagged read-files, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
sunholo-data/ailang
Execute approved sprint plans with test-driven development, continuous linting, progress tracking, and pause points. Supports parallel milestone execution via Task sub-agents. Use when user says "execute sprint", "start sprint", or wants to implement an approved sprint plan.
enuno/unifi-mcp-server
Specialized guide for adding new MCP tools to the UniFi MCP Server following project standards, UniFi API patterns, and test-driven development practices. Use when implementing new UniFi Network Controller features as MCP tools.
samber/cc-skills-golang
Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs see `samber/cc-skills-golang@golang-stretchr-testify`; for measurement methodology see `samber/cc-skills-golang@golang-benchm
testdouble/han
Builds a feature specification from scratch through a relentless, evidence-based interview that walks the design tree decision-by-decision, resolving dependencies as it goes. Use when the user wants to plan, design, scope, specify, or flesh out a new feature, capability, or system behavior before implementation. Produces a feature specification focused on system behaviors, not implementation detail. Does not refine or stress-test an existing plan — use iterative-plan-review. Does not document al