Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/yacb2/aidex/aidex-backlognpx skills add yacb2/aidex --skill aidex-backloggit clone --depth 1 https://github.com/yacb2/aidexWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/yacb2/aidex/aidex-backlog)<a href="https://agentmods.dev/skills/yacb2/aidex/aidex-backlog"><img src="https://agentmods.dev/badge/skills/yacb2/aidex/aidex-backlog.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00198 | $0.05365 |
| Opus 5 | $0.00099 | $0.02683 |
| Sonnet 5 | $0.00040 | $0.01073 |
| Haiku 4.5 | $0.00020 | $0.00536 |
Grade A, and why
aidex-backlog scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 227 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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-backlog"before continuing. Then proceed with the rest of the skill body as normal. If empty/unset, ignore this block.
Backlog
Create and manage consistent, machine-readable entries in .context/backlog/ with origin tracking and lifecycle (register · list · close).
Sub-actions
| Command | Script | Purpose |
|---|---|---|
/aidex-backlog |
scripts/register-item.sh | Interactive: prompt for title, origin, priority |
/aidex-backlog --origin manual --title "<title>" [--type] [--priority] [--estimate] [--surface] [--verify] [--touches] [--depends] [--context] [--acceptance …] |
same | Non-interactive manual entry. Given all six contract fields plus a Context and an Acceptance it lands defined in one step; every registration ends with define-check.py's verdict for the new id and, when underdefined, the exact define-item.sh command. Nothing is mandatory: a bare stub still registers |
/aidex-backlog --origin audit --finding <id> |
same | From an audit finding (called by /aidex-audit escalate) |
/aidex-backlog --origin issue --issue <id> |
same | From an issue tracker ID |
/aidex-backlog --origin plan --plan <slug> |
same | Deferred mid-run from a plan (called by aidex-plan-exec's between-phase checkpoint) |
/aidex-backlog --origin sweep [--worklist <file>] |
same | Discovered mid-sweep: registered, judged against the kickoff criteria, appended to the queue — never asked |
/aidex-backlog sweep --title "<run>" [--size XS,S] [--include|--exclude BL-NNN] [--dry-run] |
scripts/sweep-kickoff.sh | The sweep kickoff: partition → cluster-ordered work-list (mode: sweep, publish never) → the NEEDS-DECISION list for one consultation artifact. See Sweep run mode |
bash scripts/sweep-gate.sh [--only <leg>] [--json] |
scripts/sweep-gate.sh | The boundary gate, from testing-profile.md's *_suite_cmd/build_cmd: raw exit + spec count per leg; a countless leg is FAIL, never PASS; a detached E2E leg is printed, not run (--from-log scores it). Not sweep.sh, the D-10 archiver |
bash scripts/sweep-report.sh <worklist> |
scripts/sweep-report.sh | The run's one artifact, generated from disk as the work-list's companion (worklists/_archive/<worklist>-report.md), anchored worklist/<file>: closed items + rows, the owner rows aggregated, NEEDS-DECISION unchanged, deferrals, emergent growth (flagged > 25 %), gate rows verbatim, metrics |
python3 scripts/define-check.py [--json] [BL-NNN …] |
scripts/define-check.py | Read-only: open items below the definition contract, what each lacks, what the body already tells a script. Exit 1 while any is underdefined |
bash scripts/define-item.sh <BL-id> [--estimate] [--surface] [--verify] [--touches] [--depends] |
scripts/define-item.sh | The writer: a definition verdict INTO the item (triage.sh stays read-only) |
/aidex-backlog --list |
same | List open entries grouped by priority (P0 → P3 + Blocked) |
/aidex-backlog --check-ids |
same | Read-only id guard: duplicate or non-BL-NNN ids. Exit 1 on any. Unlike --reindex, writes nothing |
bash scripts/start-item.sh <BL-id|slug> |
scripts/start-item.sh | Open the item for work: status → doing → stamp updated → rebuild index. When the item carries type: bug, it prints the RED→GREEN route — that front-matter field, not any bug-report phrasing, is what enters the procedure |
bash scripts/close-item.sh <BL-id> [--commit <sha>] [--status dropped] [--superseded-by <ref>] [--escalated-to <ref>] [--sweep] |
scripts/close-item.sh | Atomically close one item: status → record commit → move to _archive/ → rebuild index (D-10). --sweep makes proof a precondition: done needs ## Verification rows with proof that meet the item's surface minimum, else exit 2 and nothing changes; an unanswered owner row PARKS the item (awaiting: owner, never archived) |
bash scripts/defer-item.sh defer <BL-id|slug> --reason "<blocker>" |
scripts/defer-item.sh | Move an open item to backlog/_deferred/ (open-but-blocked): set/append blocked_by → stamp updated → rebuild index (## Deferred section). Not a close — status stays open |
bash scripts/defer-item.sh reactivate <BL-id|slug> |
same | Move a deferred item back to the active queue: clear blocked_by → stamp updated → rebuild index |
/aidex-backlog worklist new|advance|close <args> |
aidex-conventions/scripts/worklist-*.sh | The run-queue lifecycle. Delegates to the canon hub's scripts, which is where they stay — a work-list is cross-source (backlog + plans + audits), so no single artifact skill owns its content. This skill owns the entry point, because "resolve these in a row" is what creates one (ADR 2026-08-06) |
/aidex-backlog quick-wins |
scripts/quick-wins.py | A proposed attack order, grouped by priority then cheapest estimate then oldest, with blocked items apart. Reads front-matter and never opens a body — that constraint is the feature, not an optimisation |
/aidex-backlog detect-resolved |
scripts/detect-resolved.py | Which open items the code may already have fixed. The script builds the work-list — per item, the paths and commits its body cites; the skill fans one read-only subagent per item over those anchors. Proposes with a cited path or commit; never closes |
/aidex-backlog triage [--quiet] |
scripts/triage.sh | The backlog's health in one read-only pass: id shape/duplicates + archive sweep + cross-artifact drift, one consolidated report. Prints the fix commands, runs none of them; exit 1 on anything actionable, so it can gate CI |
bash scripts/normalize-language.sh |
scripts/normalize-language.sh | Reports backlog bodies that read Spanish-dominant (D-04). Read-only, and it translates nothing — rewriting an item's prose is a human or assisted step, never automatic. No second detector: it filters validate.py --type backlog --json for body-language-not-english, so the sweep and the validator can never disagree. Exit 1 when any item is reported |
bash scripts/sweep.sh [--apply|--check] |
scripts/sweep.sh | Batch-archive items already marked done/dropped that linger in the active folder; rebuild index once. Dry-run by default; --check is the dry-run that exits 1 on findings |
bash scripts/reconcile.sh |
scripts/reconcile.sh | Read-only cross-artifact drift detector (shared): flags open backlog whose plan is done (close candidates) + done-without-commits. Exit 1 on actionable drift |
bash scripts/migrate-ids.sh [--apply] |
scripts/migrate-ids.sh | Backfill stable id: BL-NNN into items predating the id scheme (D-09). Idempotent. Only safe where every existing id already conforms — it skips any file that has an id, and feeds every id's digits into its max, so one legacy BL-20260610 makes it mint BL-20260611. Use renumber-ids.py where that is the case |
python3 scripts/renumber-ids.py [--apply] |
scripts/renumber-ids.py | Make the open queue's ids conforming: insert one where absent, replace a nonconforming one and rewrite every citation of the old code. _archive//_deferred/ keep theirs, so citations from closed work stay valid. New ids allocate above the project's highest conforming id. Dry-run by default; tars .context/ to _tmp/ before writing |
python3 scripts/migrate-filenames.py [--apply] |
scripts/migrate-filenames.py | Move open items to YYYY-MM-DD-bl-nnn-<slug>.md and rewrite every inbound reference in the same pass. Skips — and reports — items with a non-BL-NNN id, a duplicate id, or a filename cited in a git commit message. Proves itself by counting dangling backlog refs before and after and requiring them equal. Dry-run by default; same _tmp/ backup |
bash scripts/install-commit-hook.sh |
scripts/install-commit-hook.sh | Wire a repo-local post-commit hook that harvests commit SHAs from trailers into commits: (D-09). Idempotent; never global |
bash scripts/harvest-commit.sh [--sha <s>] [--message <m>] |
scripts/harvest-commit.sh | The harvester the hook calls; parses Backlog:/Plan: trailers and records the SHA. Cross-artifact |
bash scripts/migrate-priorities.sh [--apply] |
scripts/migrate-priorities.sh | Idempotent: normalize legacy **Priority**: High/Low/... to P0–P3 codes. Dry-run by default |
python3 scripts/estimate-calibration.py [--from <dir>] [--project <p>] |
scripts/estimate-calibration.py | A read, never a gate: scores closed items' estimate: against realized effort from the usage-retro miner, per bucket, with median and p90/max plus tail concentration. Prints no single accuracy number — one would average the flat middle with the spreading tail. Not wired into any lifecycle script and never blocks a run; it is measurement feedback, not a prompt for a better estimate. A full run mines the corpus (~4 min); --from reuses a previous run |
What ships with it
50 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- evals/eval-config.json 517 B
- evals/trigger_eval.json 6.8 KB
- references/01-backlog-conventions.md 28 KB
- references/02-triage-quick-wins-detect-resolved.md 3.0 KB
- references/03-define-run-mode.md 1.1 KB
- references/04-commit-provenance-and-audit-escalation.md 1.2 KB
- references/sweep-execution-policy.md 12 KB
- scripts/close-item.sh 14 KB runs code
- scripts/defer-item.sh 6.0 KB runs code
- scripts/define-check.py 7.9 KB runs code
- scripts/define-item.sh 5.4 KB runs code
- scripts/detect-resolved.py 6.7 KB runs code
- scripts/estimate-calibration.py 7.4 KB runs code
- scripts/harvest-commit.sh 4.6 KB runs code
- scripts/install-commit-hook.sh 2.0 KB runs code
- scripts/migrate-filenames.py 8.3 KB runs code
- scripts/migrate-ids.sh 2.6 KB runs code
- scripts/migrate-priorities.sh 6.4 KB runs code
- scripts/normalize-language.sh 2.6 KB runs code
- scripts/quick-wins.py 4.4 KB runs code
- scripts/reconcile.sh 5.6 KB runs code
- scripts/register-item.sh 55 KB runs code
- scripts/renumber-ids.py 6.5 KB runs code
- scripts/start-item.sh 5.4 KB runs code
- scripts/sweep-eligible.py 10 KB runs code
- scripts/sweep-gate.sh 13 KB runs code
- scripts/sweep-kickoff.sh 5.9 KB runs code
- scripts/sweep-order.py 6.2 KB runs code
- scripts/sweep-report.py 11 KB runs code
- scripts/sweep-report.sh 2.5 KB runs code
- scripts/sweep.sh 3.1 KB runs code
- scripts/triage.sh 3.7 KB runs code
- tests/test-define-check.sh 7.6 KB runs code
- tests/test-detect-resolved-and-quick-wins.sh 6.8 KB runs code
- tests/test-estimate-calibration.sh 5.9 KB runs code
- tests/test-filename-id.sh 3.1 KB runs code
- tests/test-lifecycle.sh 14 KB runs code
- tests/test-migrate-filenames.sh 4.4 KB runs code
- tests/test-normalize-language.sh 3.5 KB runs code
- tests/test-register-define.sh 4.2 KB runs code
- tests/test-register-fields.sh 4.5 KB runs code
- tests/test-register-plan-origin.sh 5.4 KB runs code
- tests/test-register-regressions.sh 22 KB runs code
- tests/test-renumber-ids.sh 4.4 KB runs code
- tests/test-sweep-gate.sh 15 KB runs code
- tests/test-sweep-kickoff.sh 14 KB runs code
- tests/test-sweep-policy-shape.sh 3.3 KB runs code
- tests/test-sweep-report.sh 10 KB runs code
- tests/test-triage.sh 4.9 KB runs code
- tests/test-verification-gate.sh 7.1 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · -14 lines cd20bed51a47
- 5d ago First seen · 241 lines · 198 tokens per session scan A 5a74f82cb954
aidex-backlog is a skill published in the GitHub repository yacb2/aidex (2 stars, last pushed yesterday), licensed MIT. It adds 198 tokens to every session and 5,365 once invoked, about $0.0010 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
pgvector-semantic-search
Use this skill for setting up vector similarity search with pgvector for AI/ML embeddings, RAG applications, or semantic search. Trigger when user asks to: Store or search vector embeddings in PostgreSQL Set up semantic search, similarity search, or nearest neighbor search Create HNSW or IVFFlat indexes for vectors…
postgres-hybrid-text-search
Use this skill to implement hybrid search combining BM25 keyword search with semantic vector search using Reciprocal Rank Fusion (RRF). Trigger when user asks to: Combine keyword and semantic search Implement hybrid search or multi-modal retrieval Use BM25/pgtextsearch with pgvector together Implement RRF (Reciprocal…
find-hypertable-candidates
Use this skill to analyze an existing PostgreSQL database and identify which tables should be converted to Timescale/TimescaleDB hypertables. Trigger when user asks to: Analyze database tables for hypertable conversion potential Identify time-series or event tables in an existing schema Evaluate if a table would…
autoprompt
Explicit-only useful-first orchestration. Invoke only when the user names autoprompt - typed as /autoprompt or in plain language such as "act in autoprompt mode" - to turn a mission into one executable roadmap, build dependency-safe lanes, and verify the result with independent reviewers. Do not infer invocation from…
autoprompt
Explicit-only useful-first orchestration. Invoke /autoprompt to turn a mission into one executable roadmap, build dependency-safe lanes, and verify the result with independent reviewers. Never infer invocation from ordinary requests. Never resume from leftover artifacts without an explicit resume instruction.
autoprompt
Explicit-only useful-first orchestration. Invoke /autoprompt to turn a mission into one executable roadmap, build dependency-safe lanes, and verify the result with independent reviewers. Never infer invocation from ordinary requests. Never resume from leftover artifacts without an explicit resume instruction.