Documentation menu
On this page
Article 9v2.0.0pip install riskforge

RiskForge

Risk assessment CLI across 8 risk dimensions, with 37 questions drawn from EU AI Act Article 9 requirements and Annex III pattern matching. You run the assessment in a terminal, or from a YAML answers file (`--answers`) in scripts and CI. It exports a Risk Management File as JSON for your Annex IV technical documentation pack, with Markdown and PDF as other formats, and can sign the JSON with an Ed25519 key. It is not a substitute for notified-body conformity assessment.

Quick Start

bashpip install riskforge==2.0.0

Needs Python 3.11 or newer.

bash# 1. Register your AI system
riskforge init \
  --name "Loan Scoring Model" \
  --sys-version "2.1" \
  --purpose "Automated credit scoring for retail loan applications." \
  --provider "Acme Financial Services" \
  --category essential_services

# 2. Record the Article 6(2) self-classification (required before export)
riskforge system classify <system-id> --confirm

# 3. Run the 8-dimension risk assessment. In a terminal it asks the questions;
#    in scripts and CI, pass an answers file
#    (one line per question ID, e.g. DI-001: { applies: yes, likelihood: 4, severity: 5 }).
riskforge assess <system-id> \
  --assessor-name "Alice Chen" \
  --assessor-role "AI Governance Lead" \
  --answers answers.yaml

# 4. Mitigate or accept each high or critical risk (list them with: riskforge risk list <system-id>).
#    --by records who made the decision; that person writes the rationale.
riskforge risk accept <system-id> <risk-id> --rationale "Residual within appetite after controls." \
  --by "Alice Chen, AI Governance Lead"

# 5. Save the Article 9(6) to 9(8) test requirements, then run the 8 validation gates
riskforge tests generate <system-id>
riskforge validate <system-id>

# 6. Create a signing key once, outside the project. keygen writes the private key
#    unencrypted (mode 600 on Linux and macOS): keep it out of the project and version control.
mkdir -p ~/.config/riskforge
riskforge keygen --output ~/.config/riskforge/signing.pem

# 7. Export your Article 9 Risk Management File as signed JSON
riskforge export <system-id> --format json --output rmf.json --sign ~/.config/riskforge/signing.pem

# 8. Check the file against your public key, then the project's audit log
riskforge verify --file rmf.json --trusted-key ~/.config/riskforge/signing.pem.pub
riskforge verify

The full command reference and guides are in the complete documentation.

Features

  • 8 risk dimensions derived across Articles 9, 10, 13, 14 and 15, mapped to Article 9 obligations with 37 guided questions
  • Pattern matching pre-populates risk items for seven scenarios, each tied to its high-risk route: credit scoring, recruitment, remote biometric identification, student assessment, asylum and visa decisions and offending risk assessment (Annex III), and medical diagnosis (Article 6(1), Annex I)
  • 5×5 likelihood × severity scoring matrix with automatic risk band classification
  • 8 pre-export validation gates (dimension coverage, Article 6(2) classification, open high risks, saved test requirements, vague mitigation detection)
  • SHA-256 hash-chained audit log with a fingerprint of the register on each entry: `riskforge verify` exits 2 after a hand edit to a register or system file, or a changed, cut or deleted log, unless the log and its head file are rewritten together; commands that change data refuse such a project
  • JSON and Markdown export, plus PDF where the WeasyPrint system libraries are installed
  • Every JSON export carries a SHA-256 content digest, a chain proof and a receipt; `riskforge verify --file` checks them against RMF schema 1.1.0
  • Ed25519-signed exports and receipts (`riskforge keygen`, `export --sign`), checked with `--trusted-key`
  • Integration adapters for rag-benchmarking and TraceForge: import evidence directly
  • Cross-framework mapping: NIST AI RMF and ISO/IEC 42001 (per-question references in every export)
  • Zero outbound network calls in CLI mode, enforced by pytest-socket CI gate

Regulatory Foundation

Article 9Risk management systemUpcoming · 2 Dec 2027 · deferred

Read the full pillar: EU AI Act Article 9 explainer →

What the regulation requires

1. A risk management system shall be established, implemented, documented and maintained in relation to high-risk AI systems. 2. The risk management system shall be understood as a continuous iterative process planned and run throughout the entire lifecycle of a high-risk AI system, requiring regular systematic review and updating. It shall comprise the following steps: (a) the identification and analysis of the known and the reasonably foreseeable risks that the high-risk AI system can pose to health, safety or fundamental rights when the high-risk AI system is used in accordance with its intended purpose; (b) the estimation and evaluation of the risks that may emerge when the high-risk AI system is used in accordance with its intended purpose, and under conditions of reasonably foreseeable misuse; […] (d) the adoption of appropriate and targeted risk management measures designed to address the risks identified pursuant to point (a). […] 6. High-risk AI systems shall be tested for the purpose of identifying the most appropriate and targeted risk management measures. Testing shall ensure that high-risk AI systems perform consistently for their intended purpose and that they are in compliance with the requirements set out in this Section.
9(1)9(2)(a)9(2)(b)9(2)(d)9(6)

Omitted from this excerpt

  • 9(2)(c) — Post-market monitoring evaluation per Article 72 is out of scope for RiskForge; planned as a Sigil post-market module, after Sigil v1.0.
  • 9(3)–(8) — Test-data, documentation, and testing provisions live in Art. 9(3) to 9(8). They are covered structurally by the Risk Management File output rather than quoted here.

What you face if you don't comply

Article 9 applies from 2 Dec 2027 for high-risk AI systems listed in Annex III, and from 2 Aug 2028 for those covered by Annex I. Regulation (EU) 2026/1744, the Digital Omnibus on AI (in force since 27 July 2026), deferred those dates from 2 August 2026 and 2 August 2027. What the article requires is a documented, lifecycle-long risk management system, not a one-time assessment. Failure to maintain it routes through the Article 16 provider obligations and is sanctionable up to €15M or 3% of global annual turnover under Article 99(4). The operational consequence: risk management must produce versioned, reviewable artefacts mapped to identified hazards, with testing evidence sufficient to defend the residual-risk judgement.

Up to €15M or 3% of global annual turnover, whichever is higher
Article 99(4) · Penalties

For SMEs, including start-ups, the fine is capped at whichever of the two is lower (Art. 99(6)). Since 27 Jul 2026, the same lower cap applies to small mid-cap enterprises (Art. 99(6a)).

How RiskForge addresses this

  • 9(1)Generates a versioned risk-management-system file: hazard register, risk owners, review cadence, change history
  • 9(2)(a)Structured hazard identification across health, safety and fundamental-rights dimensions with intended-purpose framing
  • 9(2)(b)Reasonably-foreseeable-misuse scenario library with likelihood × severity scoring and mitigation linkage
  • 9(2)(d)Maps each identified risk to a targeted mitigation control and records who accepted each residual risk, and why
  • 9(6)Test-plan generator tying each knowledge-gap risk, and each risk with an inherent score of 9 or more, to a measurable test with a prior-defined metric and threshold (Art. 9(8))

Source: eur-lex.europa.eu/…/CELEX:32024R1689 · Retrieved

Frequently asked questions

Direct answers to common questions about RiskForge and Article 9. Regulatory citations reference EUR-Lex CELEX:32024R1689.

What does EU AI Act Article 9 require?
A documented, lifecycle-long risk management system for high-risk AI systems, not a one-time assessment. It must identify foreseeable risks to health, safety, and fundamental rights; estimate and evaluate them under intended use and reasonably foreseeable misuse; adopt targeted mitigation measures; and produce testing evidence sufficient to defend the residual-risk judgement. Source: Regulation (EU) 2024/1689 Article 9(1)–(2)(a)–(b)(d), 9(6).
When does Article 9 become enforceable?
Article 9 obligations apply from 2 Dec 2027 for high-risk AI systems listed in Annex III, and from 2 Aug 2028 for high-risk AI systems covered by Annex I. The Digital Omnibus on AI, Regulation (EU) 2026/1744, moved these dates from 2 Aug 2026 and 2 Aug 2027. It was published in the Official Journal on 24 Jul 2026 and has been in force since 27 Jul 2026. Source: Regulation (EU) 2024/1689 Article 113, third paragraph, point (c), as amended by Regulation (EU) 2026/1744.
How do I run a RiskForge assessment?
Register the system with `riskforge init`, record the Article 6(2) self-classification, then run `riskforge assess`. In a terminal it asks the questions; in scripts and CI, `--answers <file.yaml>` scores the questions that apply across the 8 risk dimensions. Mitigate or accept each high or critical risk, naming who decided with `--by`, run `riskforge tests generate` and `riskforge validate`, and export the Risk Management File as JSON. The file supports your Annex IV technical documentation pack; it is not a notified-body conformity assessment.
Is RiskForge a notified-body conformity assessment?
No. RiskForge produces documented evidence supporting an Article 9 risk management system. Conformity assessment by a notified body, where required, is a separate process performed by accredited entities. RiskForge output is one input to that process, not a replacement for it.
What scoring methodology does RiskForge use?
A 5×5 likelihood × severity matrix with automatic risk-band classification, applied per identified risk. Pattern matching pre-populates risk items for seven high-risk scenarios: six Annex III uses, from credit scoring to offending risk assessment, and medical diagnosis under Article 6(1) and Annex I.
Does RiskForge cross-map to NIST AI RMF and ISO/IEC 42001?
Yes. Each risk-management dimension carries per-question references to NIST AI RMF GOVERN/MAP/MEASURE/MANAGE categories and ISO/IEC 42001 controls, emitted in every export. A single assessment produces evidence reusable across both frameworks.
What is the penalty for Article 9 non-compliance?
Up to €15M or 3% of global annual turnover, whichever is higher, under Article 99(4). The Article 16 provider obligation chain routes Article 9 failures through this penalty band. For SMEs, including start-ups, the fine is capped at whichever of the two is lower (Art. 99(6)). Since 27 Jul 2026, the same lower cap applies to small mid-cap enterprises (Art. 99(6a)).
Is RiskForge free?
Yes. Apache 2.0 licensed, free for any use including commercial. No telemetry: outbound network calls are blocked at CI level via pytest-socket.
Can I customize the question bank for sector-specific risks?
Yes. The question bank is plug-in based via Python entry points. The core 8 dimensions cover the regulatory baseline; sector-specific additions (medical devices, financial services) are extensible through user-supplied bank YAML files.

Known Limitations

  • Produces documented evidence for Article 9 compliance. It does not substitute for qualified legal counsel or notified body conformity assessment.
  • Question bank covers 37 questions across 8 risk dimensions; specialised sector questions (e.g. medical devices) may require custom additions.
  • Interactive `riskforge assess` needs a terminal; without one it exits 3. Scripts and CI pass `--answers <file.yaml>`.
  • `riskforge verify` does not catch an audit log cut back with its head file rewritten to match. A receipt kept outside the project (`riskforge receipt`) catches it, checked with `riskforge verify --receipt`.
  • Without `--trusted-key`, `riskforge verify --file` shows only that a file is consistent with itself: anyone can rebuild its chain proof, receipt and signatures.
  • The name given with `--by` is recorded as given; RiskForge does not check who it is.
  • PDF export uses WeasyPrint and needs the Pango and Cairo system libraries; without them it fails. JSON and Markdown export need nothing extra.
  • Apache 2.0 licensed; no warranty of legal compliance.

For the most current status, see GitHub issues.

Contributing

Contributions are welcome; everything is Apache 2.0 licensed. See the contributing guide and open issues.

License

Licensed under the Apache License 2.0. Not legal advice. Not a notified body.

AI Exponent LLC, a USA-registered company, also operates a separate advisory brand. The tool above is product, not advisory. How the two are kept apart.

Evidence flow

One tool covers one article. The full set covers your audit.

Each AiExponent tool emits a named artefact the next tool reads as input. Browse the full toolchain, from Article 5 screening through Article 72 post-market monitoring.

See all tools →

Content verified 2026-10-25