
Apex Tier2
- 4 installs
- 2 repo stars
- Updated March 14, 2026
- othmanadi/apex
Execute a complex multi-file task with the agent working autonomously between human checkpoints for steering and review.
About
Executes a complex, multi-file task autonomously but pauses at predefined checkpoints for human steering and review. A developer uses it for medium-complexity feature work or refactoring that needs judgment calls along the way.
- Plans phases with human checkpoints between data, logic, API, and tests
- Works autonomously between checkpoints, pausing for steering
Apex Tier2 by the numbers
- 4 all-time installs (skills.sh)
- +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,780 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/othmanadi/apex --skill apex-tier2Add your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4 |
|---|---|
| repo stars | ★ 2 |
| Last updated | March 14, 2026 |
| Repository | othmanadi/apex ↗ |
What it does
Execute a complex multi-file task with the agent working autonomously between human checkpoints for steering and review.
Files
APEX Tier 2 — Guided Execution
Work autonomously on a complex task but pause at predefined checkpoints for human steering. The agent does the heavy lifting; the human makes the judgment calls.
When to Use
Use Tier 2 when:
- The task involves multiple files or modules
- Some decisions require human judgment (naming, architecture choices)
- The work takes more than one focused session
- You want to review progress before the agent goes further
Escalate to Tier 3 when:
- Every step requires discussion
- The architecture is being designed from scratch
- The task is exploratory with no clear end state
Workflow
1. Plan the work and define checkpoints 2. Execute until the next checkpoint 3. Present checkpoint summary for human review 4. Incorporate feedback and continue 5. Final validation and PR
Step 1: Plan and Define Checkpoints
Break the task into phases. Each phase ends with a checkpoint:
## Execution Plan
### Phase 1: Data layer changes
- Modify schema for new fields
- Update migrations
- **CHECKPOINT: Review schema changes before proceeding**
### Phase 2: Business logic
- Implement service methods
- Add validation rules
- **CHECKPOINT: Review logic before wiring to API**
### Phase 3: API layer
- Add/modify endpoints
- Update request/response types
- **CHECKPOINT: Review API contract before tests**
### Phase 4: Tests and cleanup
- Write unit and integration tests
- Update documentation
- Final validationPresent this plan to the user. Get approval before starting.
Step 2: Execute Until Checkpoint
Work through the current phase. Follow the same implementation rules as Tier 1: one file at a time, match specs, preserve edge cases.
Run the self-correcting loop after each phase:
Linux/Mac:
bash "${CLAUDE_SKILL_DIR}/scripts/validate.sh" <target-dir>Windows:
powershell -File "${CLAUDE_SKILL_DIR}/scripts/validate.ps1" <target-dir>Step 3: Checkpoint Summary
When reaching a checkpoint, present a structured summary:
## Checkpoint: {Phase Name}
### Completed
- [x] Item 1
- [x] Item 2
### Decisions Made
| Decision | Choice | Reasoning |
|----------|--------|-----------|
| Field naming | `created_at` | Matches existing convention |
### Questions for You
1. Should X use pattern A or pattern B?
2. Is the error message "..." appropriate for this context?
### Next Phase Preview
Phase 2 will implement [brief description]. Estimated scope: N files.Wait for human response before continuing. Do not proceed past a checkpoint without explicit approval.
Step 4: Incorporate Feedback
Apply the human's feedback. If feedback contradicts a previous decision, update the relevant code AND update AGENTS.md if the feedback reveals a recurring preference (two-strike rule).
Step 5: Final Validation and PR
After all phases complete, run full validation and open a PR with the complete execution log:
gh pr create --draft --title "apex: {task description}" --body-file /tmp/apex-pr-body.mdOutput
A draft PR with a complete audit trail of checkpoints, decisions, and human feedback incorporated at each stage.
Example PR body with checkpoint log:
## apex: Refactor payment module to Stripe v3
### Execution Log
#### Phase 1: Data Layer ✅
- Updated PaymentIntent schema
- Added new webhook event types
- **Human feedback:** "Use camelCase for new fields" → Applied
#### Phase 2: Business Logic ✅
- Migrated to PaymentIntents API
- Added idempotency keys
- **Human feedback:** "Add retry logic for network errors" → Applied
#### Phase 3: API Layer ✅
- Updated `/payments/create` endpoint
- Added `/payments/confirm` endpoint
- **Human feedback:** None needed
#### Phase 4: Tests ✅
- 23 new tests, 0 failing
- Updated 8 existing tests
### Validation: ✅ All checks pass# APEX — Self-Correcting Validation Chain (Windows)
# Runs linter, type checker, tests, and build in sequence.
# Usage: powershell -File validate.ps1 <project-dir>
param(
[Parameter(Position=0)]
[string]$ProjectDir = "."
)
$ErrorActionPreference = "Continue"
Set-Location $ProjectDir
Write-Host "=== APEX Validation Chain ==="
Write-Host "Project: $ProjectDir"
Write-Host "Date: $((Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ'))"
Write-Host ""
$Pass = 0
$Fail = 0
$Results = @()
function Run-Step {
param([string]$StepName, [string]$Command)
Write-Host "--- Step: $StepName ---"
try {
$output = Invoke-Expression $Command 2>&1
$output | ForEach-Object { Write-Host $_ }
if ($LASTEXITCODE -eq 0 -or $null -eq $LASTEXITCODE) {
Write-Host "PASS: $StepName"
$script:Pass++
$script:Results += [PSCustomObject]@{Step=$StepName; Status="PASS"; Notes="—"}
} else {
Write-Host "FAIL: $StepName"
$script:Fail++
$script:Results += [PSCustomObject]@{Step=$StepName; Status="FAIL"; Notes="See output above"}
}
} catch {
Write-Host "FAIL: $StepName — $($_.Exception.Message)"
$script:Fail++
$script:Results += [PSCustomObject]@{Step=$StepName; Status="FAIL"; Notes=$_.Exception.Message}
}
Write-Host ""
}
# Detect project type
$packageJson = Join-Path $ProjectDir "package.json"
$pyproject = Join-Path $ProjectDir "pyproject.toml"
$requirements = Join-Path $ProjectDir "requirements.txt"
$goMod = Join-Path $ProjectDir "go.mod"
$cargoToml = Join-Path $ProjectDir "Cargo.toml"
if (Test-Path $packageJson) {
# Node.js project
$pkg = Get-Content $packageJson -Raw | ConvertFrom-Json
# Lint
if ($pkg.scripts.PSObject.Properties.Name -contains "lint") {
Run-Step "Lint" "npm run lint"
} elseif (Test-Path "eslint.config.*" -ErrorAction SilentlyContinue) {
Run-Step "Lint" "npx eslint . --max-warnings 0"
} else {
Write-Host "SKIP: No linter configured"
$Results += [PSCustomObject]@{Step="Lint"; Status="SKIP"; Notes="No config found"}
}
# Type check
if (Test-Path (Join-Path $ProjectDir "tsconfig.json")) {
Run-Step "Type Check" "npx tsc --noEmit"
} else {
Write-Host "SKIP: No TypeScript config"
$Results += [PSCustomObject]@{Step="Type Check"; Status="SKIP"; Notes="No tsconfig.json"}
}
# Tests
if ($pkg.scripts.PSObject.Properties.Name -contains "test") {
Run-Step "Tests" "npm run test -- --passWithNoTests"
} else {
Write-Host "SKIP: No test script"
$Results += [PSCustomObject]@{Step="Tests"; Status="SKIP"; Notes="No test script"}
}
# Build
if ($pkg.scripts.PSObject.Properties.Name -contains "build") {
Run-Step "Build" "npm run build"
} else {
Write-Host "SKIP: No build script"
$Results += [PSCustomObject]@{Step="Build"; Status="SKIP"; Notes="No build script"}
}
} elseif ((Test-Path $pyproject) -or (Test-Path $requirements)) {
# Python project
if (Get-Command ruff -ErrorAction SilentlyContinue) {
Run-Step "Lint (ruff)" "ruff check ."
} elseif (Get-Command flake8 -ErrorAction SilentlyContinue) {
Run-Step "Lint (flake8)" "flake8 ."
} else {
Write-Host "SKIP: No Python linter found"
$Results += [PSCustomObject]@{Step="Lint"; Status="SKIP"; Notes="Install ruff or flake8"}
}
if (Get-Command mypy -ErrorAction SilentlyContinue) {
Run-Step "Type Check (mypy)" "mypy ."
}
if (Get-Command pytest -ErrorAction SilentlyContinue) {
Run-Step "Tests (pytest)" "pytest -v"
}
} elseif (Test-Path $goMod) {
Run-Step "Lint (go vet)" "go vet ./..."
Run-Step "Build" "go build ./..."
Run-Step "Tests" "go test ./..."
} elseif (Test-Path $cargoToml) {
Run-Step "Lint (clippy)" "cargo clippy -- -D warnings"
Run-Step "Build" "cargo build"
Run-Step "Tests" "cargo test"
} else {
Write-Host "WARNING: Could not detect project type."
$Fail++
$Results += [PSCustomObject]@{Step="Detection"; Status="FAIL"; Notes="Unknown project type"}
}
Write-Host ""
Write-Host "=== Validation Summary ==="
$Results | Format-Table -AutoSize
Write-Host "Passed: $Pass | Failed: $Fail"
if ($Fail -gt 0) {
Write-Host ""
Write-Host "ACTION: Fix the failures above and re-run this script."
exit 1
} else {
Write-Host ""
Write-Host "All checks passed. Ready to commit."
exit 0
}
#!/usr/bin/env bash
# APEX — Self-Correcting Validation Chain (Linux/Mac)
# Runs linter, type checker, tests, and build in sequence.
# Exits with the first failure so the agent can fix and re-run.
# Usage: bash validate.sh <project-dir>
set -euo pipefail
PROJECT_DIR="${1:-.}"
cd "$PROJECT_DIR"
echo "=== APEX Validation Chain ==="
echo "Project: $PROJECT_DIR"
echo "Date: $(date -u +"%Y-%m-%dT%H:%M:%SZ")"
echo ""
PASS=0
FAIL=0
RESULTS=""
run_step() {
local step_name="$1"
local cmd="$2"
echo "--- Step: $step_name ---"
if eval "$cmd" 2>&1; then
echo "PASS: $step_name"
PASS=$((PASS + 1))
RESULTS="$RESULTS\n| $step_name | PASS | — |"
else
echo "FAIL: $step_name"
FAIL=$((FAIL + 1))
RESULTS="$RESULTS\n| $step_name | FAIL | See output above |"
return 1
fi
echo ""
}
# Detect project type and run appropriate tools
if [ -f "package.json" ]; then
# Node.js project
PM="npx"
[ -f "pnpm-lock.yaml" ] && PM="pnpm exec"
[ -f "yarn.lock" ] && PM="yarn"
# Step 1: Lint
if grep -q '"lint"' package.json 2>/dev/null; then
run_step "Lint" "$PM run lint 2>&1" || true
elif [ -f ".eslintrc.js" ] || [ -f ".eslintrc.json" ] || [ -f "eslint.config.js" ] || [ -f "eslint.config.mjs" ]; then
run_step "Lint" "npx eslint . --max-warnings 0 2>&1" || true
else
echo "SKIP: No linter configured"
RESULTS="$RESULTS\n| Lint | SKIP | No config found |"
fi
# Step 2: Type check
if [ -f "tsconfig.json" ]; then
run_step "Type Check" "npx tsc --noEmit 2>&1" || true
else
echo "SKIP: No TypeScript config"
RESULTS="$RESULTS\n| Type Check | SKIP | No tsconfig.json |"
fi
# Step 3: Tests
if grep -q '"test"' package.json 2>/dev/null; then
run_step "Tests" "$PM run test -- --passWithNoTests 2>&1" || true
else
echo "SKIP: No test script"
RESULTS="$RESULTS\n| Tests | SKIP | No test script |"
fi
# Step 4: Build
if grep -q '"build"' package.json 2>/dev/null; then
run_step "Build" "$PM run build 2>&1" || true
else
echo "SKIP: No build script"
RESULTS="$RESULTS\n| Build | SKIP | No build script |"
fi
elif [ -f "pyproject.toml" ] || [ -f "requirements.txt" ] || [ -f "setup.py" ]; then
# Python project
# Step 1: Lint
if command -v ruff &>/dev/null; then
run_step "Lint (ruff)" "ruff check . 2>&1" || true
elif command -v flake8 &>/dev/null; then
run_step "Lint (flake8)" "flake8 . 2>&1" || true
else
echo "SKIP: No Python linter found"
RESULTS="$RESULTS\n| Lint | SKIP | Install ruff or flake8 |"
fi
# Step 2: Type check
if command -v mypy &>/dev/null; then
run_step "Type Check (mypy)" "mypy . 2>&1" || true
else
echo "SKIP: mypy not installed"
RESULTS="$RESULTS\n| Type Check | SKIP | Install mypy |"
fi
# Step 3: Tests
if command -v pytest &>/dev/null; then
run_step "Tests (pytest)" "pytest -v 2>&1" || true
else
echo "SKIP: pytest not installed"
RESULTS="$RESULTS\n| Tests | SKIP | Install pytest |"
fi
# Step 4: Build
run_step "Build (syntax check)" "python -m py_compile *.py 2>&1 || true" || true
elif [ -f "go.mod" ]; then
# Go project
run_step "Lint (go vet)" "go vet ./... 2>&1" || true
run_step "Build" "go build ./... 2>&1" || true
run_step "Tests" "go test ./... 2>&1" || true
elif [ -f "Cargo.toml" ]; then
# Rust project
run_step "Lint (clippy)" "cargo clippy -- -D warnings 2>&1" || true
run_step "Build" "cargo build 2>&1" || true
run_step "Tests" "cargo test 2>&1" || true
else
echo "WARNING: Could not detect project type. No validation run."
RESULTS="$RESULTS\n| Detection | FAIL | Unknown project type |"
FAIL=$((FAIL + 1))
fi
echo ""
echo "=== Validation Summary ==="
echo "| Step | Status | Notes |"
echo "|------|--------|-------|"
echo -e "$RESULTS"
echo ""
echo "Passed: $PASS | Failed: $FAIL"
if [ "$FAIL" -gt 0 ]; then
echo ""
echo "ACTION: Fix the failures above and re-run this script."
exit 1
else
echo ""
echo "All checks passed. Ready to commit."
exit 0
fi