AI Risk Index # AI Risk Index **The most methodologically rigorous, fully transparent AI job-exposure index.** [![Live](https://img.shields.io/badge/live-www.airiskindex.io-2a78d6)](https://www.airiskindex.io) [![Methodology](https://img.shields.io/badge/methodology-1.0.0--draft.1-1c5cab)](https://www.airiskindex.io/methodology) [![Occupations](https://img.shields.io/badge/occupations-1%2C016-2a78d6)](https://www.airiskindex.io/occupations) [![Scored](https://img.shields.io/badge/scored-923-2a78d6)](https://www.airiskindex.io/ranking) [![Tasks rated](https://img.shields.io/badge/O*NET_tasks_rated-18%2C796-2a78d6)](https://www.airiskindex.io/methodology) [![Ratings](https://img.shields.io/badge/dimension_ratings-~225k-1c5cab)](https://www.airiskindex.io/methodology) [![Rater panel](https://img.shields.io/badge/rater_panel-Sonnet_5_%2B_Haiku_4.5-6da7ec)](https://www.airiskindex.io/methodology) [![Scores license](https://img.shields.io/badge/scores-CC_BY_4.0-0ca30c)](https://creativecommons.org/licenses/by/4.0/) [![Next.js](https://img.shields.io/badge/Next.js-14-000000?logo=nextdotjs)](apps/web) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?logo=typescript&logoColor=white)](packages/scoring) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169e1?logo=postgresql&logoColor=white)](packages/db) [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?logo=python&logoColor=white)](apps/etl) [![Monorepo](https://img.shields.io/badge/pnpm-Turborepo-f69220?logo=pnpm&logoColor=white)](pnpm-workspace.yaml) [![Tests](https://img.shields.io/badge/tests-12_passing-0ca30c)](packages/scoring/src) **[Ranking](https://www.airiskindex.io/ranking)** · **[Insights](https://www.airiskindex.io/insights)** · **[Methodology](https://www.airiskindex.io/methodology)** · **[API](https://www.airiskindex.io/api/v1/methodology)**
--- ## Headline metrics (run 1.0.0-draft.1 · 2026-08-05) | Metric | Value | Pastille | |---|---|---| | Share of the U.S. wage bill under substitution pressure | **32%** (≈ $4.7T of $14.5T) | ![32%](https://img.shields.io/badge/wage_bill_under_pressure-32%25-e34948) | | Employment-weighted substitution score | **34** / 100 | ![34](https://img.shields.io/badge/emp--weighted_substitution-34-2a78d6) | | Employment-weighted augmentation score | **55** / 100 | ![55](https://img.shields.io/badge/emp--weighted_augmentation-55-0ca30c) | | Workers in high-substitution occupations (≥ 70) | **5.3M** (2.7%) | ![5.3M](https://img.shields.io/badge/workers_high_pressure-5.3M-eda100) | | Workers in high-augmentation occupations (≥ 70) | **47.8M** (24.6%) | ![47.8M](https://img.shields.io/badge/workers_high_augmentation-47.8M-0ca30c) | | Coverage | 887 occupations · 194.2M workers (BLS OEWS) | ![coverage](https://img.shields.io/badge/coverage-194.2M_workers-6da7ec) | > "Under pressure" means paid work overlapping with what AI can plausibly take over — **not a payroll forecast**. Realized effects to date are concentrated and cohort-specific; measured usage remains majority-augmentative. The index is built as **adaptation guidance, not doom**. ## What this is AI Risk Index scores **every U.S. occupation** on its exposure to AI-driven automation using a **task-based methodology**: each of the ~18,800 O*NET task statements is rated individually by a **multi-model LLM panel**, and occupation scores are derived from importance-weighted task scores. Every number is **transparent, versioned, and reproducible**. ### The three scores (never collapsed into one) | Score | Question it answers | |---|---| | **Exposure** | Is AI *technically capable* of performing the occupation's tasks? | | **Substitution** | Does AI *actually replace* the human — after cost, barriers, and adoption? *(headline)* | | **Augmentation** | Does AI *assist* the human, raising productivity without replacing them? | Every score ships with a **confidence interval derived from rater disagreement** — multi-model replication shows single-model exposure ratings can vary by an order of magnitude, so a single-model index is an artifact. Ours makes the disagreement visible. ## Methodology in one screen **Dimensions & weights** (v1 — defined once in [`packages/scoring/src/weights.ts`](packages/scoring/src/weights.ts), served live at [`/api/v1/methodology`](https://www.airiskindex.io/api/v1/methodology)): | Dimension | Weight | Orientation | |---|---|---| | Task automatability | 0.35 | direct | | Current technical feasibility | 0.20 | direct | | Cost of substitution vs. wage | 0.15 | direct | | Adoption barriers | 0.20 | **inverted** — strong barriers protect | | Sector adoption velocity | 0.10 | direct | **Formulas** — a rating *r* ∈ [1,5] normalizes to pressure *p* = (r−1)/4 (inverted: 1−(r−1)/4): ``` substitution_task = 100 · Σ_d w_d · p_d exposure_task = 100 · (w_auto·p_auto + w_feas·p_feas) / (w_auto + w_feas) augmentation_task = 100 · p_augmentation (rated separately, outside the composite) occupation = importance-weighted mean of its tasks (O*NET IM weights) CI bounds = worst/best-case envelope over the rater panel (min/mean/max) ``` The scoring engine ([`packages/scoring`](packages/scoring)) is **pure and deterministic** — no I/O, no clock, no randomness — pinned by property-based tests (fast-check) and a published worked example reproduced to 3 decimals. Full spec: [METHODOLOGY.md](docs/methodology/METHODOLOGY.md) · [changelog](docs/methodology/CHANGELOG.md). **Rating pipeline** ([`apps/worker`](apps/worker)): Anthropic **Message Batches** (50% discount, prompt-cached rubric, schema-constrained JSON output), one request per task × model, deterministic `custom_id`s → idempotent and resumable. Every rating stores model, prompt version, raw response, parsed score, and rationale — the **full audit trail is visible on every occupation page** (expand any task). **Integrity rules**: weights/formulas/prompt changes bump `INDEX_VERSION` with a changelog entry; every published score traces to an immutable `score_runs` row; historical runs stay queryable forever. ## Data sources | Source | Version | Role | License | |---|---|---|---| | [O*NET database](https://www.onetcenter.org/database.html) | 30.3 (May 2026) | 1,016 occupations, 18,796 task statements, importance weights | CC BY 4.0 | | [BLS OEWS](https://www.bls.gov/oes/) | May 2025 national | Median wages + employment (830 SOCs) | Public domain | | ESCO v1.2 + ROME 4.0 | planned | EU/France crosswalk | EUPL / Licence Ouverte | | Adoption evidence (BTOS, Anthropic Economic Index, …) | 2025–2026 | Grounds the adoption-velocity & barriers rubrics | various | Raw dumps are immutable (`data/raw/`, fetched by script, never committed); derived artifacts commit **manifests only** (hashes + row counts). The research corpus grounding v1 — 20+ indices reviewed, verified source URLs, API cost analysis — lives in [`docs/research/`](docs/research/README.md). ## Public API Versioned, JSON, `index_version` in every payload. Rate limit 60 req/min (600 with key). ```bash # Health curl https://www.airiskindex.io/api/v1/health # Machine-readable methodology (weights, orientation, thresholds) curl https://www.airiskindex.io/api/v1/methodology # Search occupations curl "https://www.airiskindex.io/api/v1/occupations?q=paralegal" # Full score breakdown: sub-scores, CI bounds, tasks, wages curl https://www.airiskindex.io/api/v1/occupations/23-2011.00 ``` ## Monorepo ``` airiskindex/ ├── apps/ │ ├── web/ # Next.js 14 — site + public API (ranking, insights, detail pages, drawer nav) │ ├── worker/ # BullMQ + Anthropic Message Batches rater pipeline, recompute, purge scripts │ └── etl/ # Python 3.12 — O*NET/OEWS download → transform (manifests) → Postgres load ├── packages/ │ ├── scoring/ # Pure TS scoring engine — the auditable core (weights, formulas, CI) │ ├── db/ # Prisma schema: occupations, tasks, rating audit trail, immutable runs │ ├── ui/ # Shared React components │ └── config/ # Shared tsconfig presets ├── data/ # raw/ (immutable, gitignored) · derived/ (manifests committed) ├── docs/ │ ├── methodology/ # METHODOLOGY.md (source of truth), changelog, worked examples │ └── research/ # Research corpus: indices, data sources, rater API, market evidence └── infra/ # docker-compose, PM2 wrappers, ngrok config, deploy script ``` ## Quick start ```bash pnpm install docker compose -f infra/docker-compose.dev.yml up -d # postgres 16 + redis (or brew services) cp infra/.env.example .env # fill DATABASE_URL, ANTHROPIC_API_KEY, RATER_MODELS… pnpm db:migrate && pnpm db:seed pnpm dev # web on :3000 ``` Full pipeline to a real index: ```bash cd apps/etl && make pipeline # O*NET 30.3 + OEWS → Postgres (1,016 occupations, 18,796 tasks) pnpm --filter @airiskindex/worker rate # multi-model batch rating (parallel, resumable) pnpm score:recompute # new immutable score run ``` Checks (must pass before any commit): `pnpm typecheck && pnpm lint && pnpm test` ## Design system Charts follow a validated, colorblind-safe reference palette (sequential blue for magnitude, CI whiskers in muted ink, emphasis form for "you are here" distributions, visible data-table fallbacks). Fully responsive — right-side drawer navigation on mobile, dark mode with selected (not flipped) palette steps. ## Roadmap - [ ] 5% human review sample + expert Delphi override queue (schema ready) - [ ] Sensitivity analyses published per release (`docs/methodology/sensitivity/`) - [ ] Convergent-validity report vs Felten AIOE, GPTs-are-GPTs, ILO gradients - [ ] ESCO/ROME crosswalk — EU & France coverage - [ ] API keys + rate limiting middleware - [ ] `INDEX_VERSION` 1.0.0 — first published run ## License, citation & contact - **Scores & derived data**: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — reuse freely with attribution *"AI Risk Index (airiskindex.io), version X"*. - **Code, site design & text**: © 2026 Simon-Pierre Boucher. All rights reserved. - Incorporates the O*NET® database (USDOL/ETA, CC BY 4.0) and BLS OEWS data. O*NET® is a trademark of USDOL/ETA, which has not reviewed or endorsed this project. > **Cite as:** *AI Risk Index, version 1.0.0-draft.1, airiskindex.io, Simon-Pierre Boucher (2026).* **Contact** — methodology questions, corrections, expert-panel participation, commercial licensing & contracts: **Simon-Pierre Boucher** · [contact@spboucher.ai](mailto:contact@spboucher.ai) [Terms of Service](https://www.airiskindex.io/terms) · [Privacy Policy](https://www.airiskindex.io/privacy)