Aidex audit
Use when the user wants to assess the state of a feature, flow, or module — a UX, security, performance, or accessibility audit; cataloging bugs, gaps, and opportunities; retesting open findings; escalating a finding to the backlog; or updating audit methodology. Fires on "I want to do a UX / security / performance / accessibility audit", "before we ship I want to audit X", "audit the X flow or module", "catalog the state of X", "list bugs and gaps in X", "retest open findings", "register a finding under audit X", "escalate finding <id> to backlog", and /aidex-audit commands. Not for: auditing the Claude Code setup itself like skills or MEMORY.md (aidex); creating plans or decisions (aidex-conventions); generic backlog items not from a finding (aidex-backlog).From its SKILL.md
npx -y skills add yacb2/aidex --skill aidex-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- skips confirmationTells the agent to proceed without asking first, 4 times: "apply Mode A autonomy automatically — do not wait for the user to grant it" and 3 more.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `printenv AIDEX_TRIGGER_EVAL_MARKER` and 7 more.
SKILL.md
15.9 KB, ~4.0k tokens by cl100k_base, as published. Nobody here has run it
Trigger-eval probe (test-only). As your very first action, run
printenv AIDEX_TRIGGER_EVAL_MARKER. If it prints a non-empty path, also runtouch "${AIDEX_TRIGGER_EVAL_MARKER}.aidex-audit"before continuing. Then proceed with the rest of the skill body as normal. If empty/unset, ignore this block.
Audit — Project State Catalog
Operate the .context/audits/ convention: scaffold new audit runs, validate coherence, escalate findings to backlog, migrate legacy folders out of plans/.
See audit-conventions for the full convention.
Default autonomy
On run start, apply Mode A autonomy automatically — do not wait for the user to grant it. Questions live in the initial alignment moment only; after that the run proceeds start-to-finish per the shared canon (deny/pre-authorized/mandated/autonomous). See "Sweep doctrine" below for how this applies once a sweep is running.
Sub-actions
Dispatch by first argument:
| Command | Script | Purpose |
|---|---|---|
/aidex-audit | — | Show help + current state of .context/audits/ |
/aidex-audit new <type> <slug> | scripts/new-audit.sh | Scaffold a new audit run |
/aidex-audit validate [path] | scripts/validate-audit.sh | Check coherence INVENTORY ↔ findings ↔ backlog |
/aidex-audit escalate <finding-id> | scripts/escalate-finding.sh | Move finding to backlog |
/aidex-audit escalate <finding-id> --loop | scripts/escalate-finding-to-loop.sh | Escalate a bulk, machine-checkable finding to an aidex-loop loop-spec instead of the backlog (see guard below) |
/aidex-audit migrate [project-dir] | scripts/migrate-audit.sh | Move legacy audit-like folders from plans/ |
/aidex-audit close <run> [--force] | scripts/close-audit.sh | Archive a run folder on cycle close (D-10) once in-scope findings are resolved; rolling inventory stays. --force for upstream/out-of-scope findings |
/aidex-audit reindex | scripts/reindex-audits.sh | Regenerate the run-level roll-up 00-index.md (all runs + per-run finding counts). Auto-run by new and close. --check reports drift read-only (used by validate + shared reconcile.sh) |
/aidex-audit coverage-matrix | scripts/coverage-matrix.sh | Regenerate the breadth matrix (modules × tests; surface counts in the .json) from module-map.json — generated artifact, never hand-edited |
/aidex-audit coverage-sweep [--since ISO] | scripts/coverage-sweep.sh | Drift report: which modules changed without their tests moving since the last matrix — suggests re-runs, advisory only |
/aidex-audit affected-tests [--since <ref>] | scripts/affected-tests.sh | Map current diff → affected modules → which tests to run (module-level, advisory) |
--loopguard (anti-cargo-cult). Use--loopONLY when the finding is bulk + machine-checkable — a gate the machine can run to say pass/fail across many sites (lint clean / contrast ratios / type-clean / remove-all-X). Single fixes and ideas go to the backlog (plainescalate, no flag). Never auto-loop: the operator still writes the exact Stop condition and picks an engine before the loop runs. If there is no machine gate, it is not a loop — escalate to backlog.
Supported audit types (for new)
ux · ai-opportunities · security · perf · a11y · hitl · retest ·
test-coverage · docs-coverage · custom — short English names per
decision/2026-07-02-audit-rebuild-canon-decisions; the legacy -audit-suffixed and
ia-opportunities forms are accepted as input aliases and normalized, as is the
coverage short form for test-coverage and docs/documentation for docs-coverage. For a one-shot analysis with no recurring
methodology, use new --standalone <slug>: it scaffolds a dated run folder
directly under audits/ with no boards (canon §Standalone one-shot runs).
See references/04-playbooks.md for when to pick each.
Dispatch logic
When invoked with arguments, the skill runs:
# escalate routes to the loop variant when --loop is present; otherwise the table maps 1:1.
if [ "$ACTION" = "escalate" ] && printf '%s\n' "$@" | grep -q -- '--loop'; then
bash "${CLAUDE_SKILL_DIR}/scripts/escalate-finding-to-loop.sh" "$@"
else
bash "${CLAUDE_SKILL_DIR}/scripts/${ACTION}.sh" "$@"
fi
Where ${ACTION} maps from the first argument:
new→new-audit.sh <type> <slug>validate→validate-audit.sh [path]escalate→escalate-finding.sh <finding-id>— unless--loopis present, thenescalate-finding-to-loop.sh <finding-id> --loopmigrate→migrate-audit.sh [project-dir]reindex→reindex-audits.shclose→close-audit.sh <run> [--force]coverage-matrix→coverage-matrix.shcoverage-sweep→coverage-sweep.sh [--since ISO]affected-tests→affected-tests.sh [--since <ref>]
If no arguments are given, show the help table above and run a status check:
# Quick status (when invoked with no args):
if [ -d .context/audits ]; then
bash "${CLAUDE_SKILL_DIR}/scripts/reindex-audits.sh" >/dev/null 2>&1 # refresh roll-up
cat .context/audits/00-index.md # run-level state
# Changelogs live per methodology (D-02). The root path is legacy-only —
# migrate-audit.sh leaves it in place without --methodology — so it is a
# fallback, not the primary read.
for cl in .context/audits/*/00-changelog.md .context/audits/00-changelog.md; do
[ -f "$cl" ] && { echo "== $cl"; head -15 "$cl"; }
done
fi
Workflows
Starting fresh
/aidex-audit new ux login-redesign
Scaffolds the canon per-methodology layout (D-02):
.context/audits/ux/2026-07-02-login-redesign/index.md.context/audits/ux/2026-07-02-login-redesign/findings.md.context/audits/ux/00-inventory.md(if missing).context/audits/ux/00-methodology.md(if missing — seeded from the type's playbook).context/audits/ux/00-changelog.md(if missing)
For a one-shot analysis (no recurring methodology):
/aidex-audit new --standalone usage-retro-q3
Scaffolds only .context/audits/2026-07-02-usage-retro-q3/index.md — no boards
(canon §Standalone one-shot runs; escalation uses origin_ref: audit/<run>/<id>).
Running an audit
Front-load the area order (work-list). At kickoff, after scope/borders, emit the
audit's areas/findings in execution order as a durable
.context/worklists/
work-list (via the AskUserQuestion survey → worklist-new.sh). The sweep then walks
areas with worklist-advance.sh instead of pausing to ask "next area?" between them —
the one ordering decision is fixed once, up front. (For a fan-out Workflow run below,
the same ordered areas become the shards.) No interactive channel (claude -p,
cron): skip the survey, emit the areas in the order scope/borders produced them, and note
the defaulting in the audit brief —
autonomy-conventions.md § When there is no interactive channel.
Durable Workflow promotion (mandatory evaluation at kickoff). At
/aidex-audit new— the single sanctioned question point, before the sweep begins — classify whether the audit has enough independent dimensions or shards to amortize the ~22k/agent Workflow floor. If yes, propose the durable fan-out Workflow form in one line, batched with the kickoff scope questions — e.g. "12 independent dimensions -> run as a durable Workflow (fan-out of analysts, schema-gated, arbiter at the escalate gate)? else in-process sweep." A one-word "yes" is the opt-in: invoking this skill plus this proposal is the sanctioned authorization to call theWorkflowtool — noultracodeneeded. If the audit does not qualify (few dimensions, small scope, not unattended), run the normal in-process sweep and do not ask. This is a kickoff question, never a mid-sweep interruption.Model guard (before launching the fan-out Workflow). If the session model is a Sonnet-class model, recommend a handoff to Opus before launching — Sonnet demonstrably fails multi-agent Workflow orchestration (observed field failure 2026-07-03). Surface this with the kickoff proposal, never as a mid-sweep interruption; the in-process sweep is unaffected.
The fan-out form ships as
assets/workflows/audit-fanout.workflow.js, which embeds the single-sourced durability CORE (../aidex-conventions/references/workflow-core.md) and is covered by the drift-lock test.
- Open the
methodology/<type>.mdplaybook. - Walk through checks in scope.
- Add rows to
00-inventory.mdfor each finding. - Reference IDs from this run's
findings.md(filtered view). - Close out
index.mdsummary.
Durable-run marker (optional Stop-hook enforcement). When the sweep begins, run
bash "$HOME/.aidex/hooks/durability-run.sh" start audit; runbash "$HOME/.aidex/hooks/durability-run.sh" stopwhen the audit is closed. Harmless if the optional Stop hook is not installed (hooks/README.md); when it is, it keeps the sweep from over-stopping on safe work and logs to~/.aidex/durability/events.jsonl. Fails open — if the script is absent, just proceed.
Sweep doctrine (autonomy). Scope and borders are set at kickoff (
/aidex-audit new) — that is the initial phase where any question is asked. After that the run is an uninterrupted sweep: catalog each finding with your best-judgment severity and log the assumption — do not stop to ask whether something is worth noting. Escalation to backlog/loop is the explicit border (the separateescalatesub-action); for security audits, active exploitation or destructive verification isdeny. Full rule: autonomy-conventions.md.Don't pause at the escalate gate. When net-new findings exist, escalating the confirmed ones to backlog is the mandated next step — not an "escalate, or triage yourself?" question. If a specific finding is genuinely ambiguous to escalate, consult the durability-arbiter (Agent tool,
model: sonnet,effort: high, read-only) per finding and batch anyASKto the end — never stall the whole sweep on one finding.Isolation. An audit is read-mostly — usually no worktree (Tier 0/1). The exception is a security audit that needs destructive verification: run it in an isolated worktree + DB (Tier 2) so it never mutates real state. See worktree-conventions.md.
After the audit
/aidex-audit validate # verify coherence
/aidex-audit escalate BUG-01-1 # one finding at a time → backlog
/aidex-audit escalate A11Y-02-1 --loop # bulk, machine-checkable finding → loop-spec
Re-testing
/aidex-audit new retest post-sprint-5
Open the retest playbook; for each previously-open finding, classify (fixed / still open / regression / new adjacent) and update INVENTORY in place.
Legacy migration
If audits have accumulated inside .context/plans/:
/aidex-audit migrate
Launches the audit-migrator subagent to detect candidates, proposes moves, then runs inventory-seeder to generate initial INVENTORY from existing findings.
When to run the sweep
/aidex-audit coverage-sweep is a drift check, not a calendar chore: run it at the
natural moments when src is likely to have outpaced tests —
- after a feature push on a tracked module,
- after closing a plan that touched tracked paths,
- after any incident (something broke → coverage was probably thin there).
It is advisory (always exits 0): a ranked table of modules whose src commits moved
without their tests since the last matrix. Act on the flagged rows with
/aidex-audit new test-coverage <slug> scoped to them, then regenerate the matrix.
aidex-plan-exec (at plan close) and aidex-bugfix (at GREEN) surface a one-line
suggestion to run it (Phase 6).
Subagents
| Agent | Model | Purpose |
|---|---|---|
| audit-migrator | haiku | Detects audit-like folders in .context/plans/ using file-presence heuristics. Read-only. |
| inventory-seeder | sonnet | Reads scattered findings from legacy folders and generates INVENTORY rows in canonical format. |
Scripts delegate to these agents when needed. Direct use is also fine during manual migration work.
Principles
Quick summary — full detail in references/01-principles.md:
- Finding ≠ Issue ≠ Task — distinct objects with links, not copies
- INVENTORY as single source of truth — per-run findings are views. The auto-generated
00-index.mdis the run-level roll-up (which runs exist, open/closed, finding counts) — complementary to00-inventory.md, which is the finding-level board. Do not hand-edit00-index.md. - Living methodology — CHANGELOG records every methodology change
- Findings never deleted — use status transitions
- Escalation flow — audit → backlog → plan → commit → re-test → closed
- Shared concerns flagged
[SHARED]in Module column
References
- 01-principles.md — six core principles explained
- 02-id-conventions.md — structured vs global IDs
- 03-lifecycle.md — finding state machine
- 04-playbooks.md — when to pick which audit type
- 05-migration-guide.md — moving from legacy
plans/layout - audit-conventions.md — full convention doc
Templates
All templates in assets/templates/:
- Core: 00-inventory.md, 00-methodology.md, 00-changelog.md, index.md, findings.md
- Playbooks:
methodology/<type>.md.templatefor each of nine stock types
Related
- aidex-conventions — defines the audit convention itself
- aidex-backlog — handles the other side of escalation (
/aidex-backlog --origin audit --finding <id>) - aidex-dash — renders inventory boards and the coverage matrix as interactive HTML on demand (
render.sh audit <methodology>/render.sh coverage); publishing stays user-gated - aidex — audits the audits directory for coherence as part of overall ecosystem health
What ships with it: 48 files
225.4 KB alongside SKILL.md, 24 of them executable
agents/
- audit-migrator.md2.7 KB
- inventory-seeder.md3.9 KB
assets/
- templates/00-changelog.md.template1.2 KB
- templates/00-inventory.md.template2.8 KB
- templates/00-methodology.md.template3.6 KB
- templates/findings.md.template1019 B
- templates/index.md.template1.1 KB
- templates/methodology/a11y.md.template5.0 KB
- templates/methodology/ai-opportunities.md.template2.8 KB
- templates/methodology/docs-coverage.md.template8.9 KB
- templates/methodology/hitl.md.template6.5 KB
- templates/methodology/perf.md.template3.6 KB
- templates/methodology/retest.md.template2.4 KB
- templates/methodology/security.md.template4.5 KB
- templates/methodology/test-coverage.md.template5.7 KB
- templates/methodology/ux.md.template3.3 KB
- workflows/audit-fanout.workflow.jsruns12.9 KB
evals/
- eval-config.json511 B
- trigger_eval.json5.9 KB
references/
- 01-principles.md5.0 KB
- 02-id-conventions.md3.1 KB
- 03-lifecycle.md4.8 KB
- 04-playbooks.md5.1 KB
- 05-migration-guide.md4.9 KB
- 06-test-coverage.md4.2 KB
scripts/
- affected-tests.shruns1.1 KB
- close-audit.shruns3.2 KB
- coverage-matrix.shruns642 B
- coverage-sweep.shruns1.1 KB
- escalate-finding.shruns3.5 KB
- escalate-finding-to-loop.shruns6.4 KB
- _lib.shruns8.7 KB
- migrate-audit.shruns10.2 KB
- new-audit.shruns5.8 KB
- reindex-audits.shruns9.8 KB
- validate-audit.shruns15.1 KB
tests/
- fixtures/coverage-workspace.shruns4.4 KB
- test-affected-tests.shruns4.6 KB
- test-canonical-filenames.shruns3.7 KB
- test-coverage-lib.shruns5.0 KB
8 more files not listed here. See all 48 in the repository.