{"id":26480174,"url":"https://github.com/thalesgroup/agilab","last_synced_at":"2026-05-30T23:04:12.546Z","repository":{"id":283270828,"uuid":"948548540","full_name":"ThalesGroup/agilab","owner":"ThalesGroup","description":"Open-source platform for reproducible AI/ML workflows, from local experimentation to distributed workers and long-lived services.","archived":false,"fork":false,"pushed_at":"2026-05-29T17:41:23.000Z","size":27573,"stargazers_count":15,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-29T18:15:33.639Z","etag":null,"topics":["agentic-ai","ai","ai-agents","ai-engineering","cython","dask","data-science","distributed-computing","experiment-tracking","free-threaded-python","jupyter-notebook","machine-learning","mlflow","mlops","python","reproducibility","reproducible-research","rust","streamlit","workflow-orchestration"],"latest_commit_sha":null,"homepage":"https://thalesgroup.github.io/agilab","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThalesGroup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-03-14T14:29:22.000Z","updated_at":"2026-05-29T17:41:21.000Z","dependencies_parsed_at":"2025-07-03T09:22:12.109Z","dependency_job_id":"47a6b29c-63e6-43be-b521-1096bdb63c81","html_url":"https://github.com/ThalesGroup/agilab","commit_stats":null,"previous_names":["thalesgroup/agilab"],"tags_count":140,"template":false,"template_full_name":"ThalesGroup/template-project","purl":"pkg:github/ThalesGroup/agilab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fagilab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fagilab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fagilab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fagilab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThalesGroup","download_url":"https://codeload.github.com/ThalesGroup/agilab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fagilab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33712582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-ai","ai","ai-agents","ai-engineering","cython","dask","data-science","distributed-computing","experiment-tracking","free-threaded-python","jupyter-notebook","machine-learning","mlflow","mlops","python","reproducibility","reproducible-research","rust","streamlit","workflow-orchestration"],"created_at":"2025-03-20T02:06:21.292Z","updated_at":"2026-05-30T23:04:12.539Z","avatar_url":"https://github.com/ThalesGroup.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp\u003e\n  \u003ca href=\"https://pypi.org/project/agilab/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/pypi-version-agilab.svg\" alt=\"PyPI version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://thalesgroup.github.io/agilab/release-proof.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/release%20proof-latest%20proven%20release-0F766E\" alt=\"Latest proven release proof\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://thalesgroup.github.io/agilab/release-proof.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/supply%20chain-SBOM%20%2B%20audit%20%2B%20provenance-0F766E\" alt=\"Supply chain: SBOM, audit, provenance\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://thalesgroup.github.io/agilab/release-proof.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/first%20proof-passing-0F766E\" alt=\"First proof: passing\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/BSD-3-Clause\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-BSD%203--Clause-blue.svg\" alt=\"License: BSD 3-Clause\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://thalesgroup.github.io/agilab\"\u003e\u003cimg src=\"https://img.shields.io/badge/Documentation-online-brightgreen.svg\" alt=\"Documentation\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/github-ai-scraper/\"\u003e\u003cimg src=\"https://img.shields.io/badge/github--ai--scraper-discoverable-0F766E\" alt=\"GitHub AI scraper discoverable\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/ThalesGroup/agilab?style=flat\u0026label=stars\" alt=\"GitHub stars\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/ThalesGroup/agilab/actions/workflows/ci.yml/badge.svg?branch=main\" alt=\"CI\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"https://pypi.org/project/agilab/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/agilab.svg\" alt=\"Supported Python Versions\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/agilab/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/dm/agilab\" alt=\"PyPI downloads\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/ThalesGroup/agilab\" alt=\"Open issues\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab/pulse\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/ThalesGroup/agilab.svg\" alt=\"Commit activity\" /\u003e\u003c/a\u003e\n  \u003ca href=\"AGENT_SKILLS.md\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/skills.svg\" alt=\"Skills\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://agentskills.io/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/agent-standard.svg\" alt=\"Standard: Agent Skills\" /\u003e\u003c/a\u003e\n  \u003ca href=\"tools/agent_workflows.md\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/agent-works-with.svg\" alt=\"Works with Codex Claude Aider and OpenCode\" /\u003e\u003c/a\u003e\n  \u003ca href=\"tools/agent_workflows.md\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/agent-api.svg\" alt=\"Agent API: CLI Python\" /\u003e\u003c/a\u003e\n  \u003ca href=\"docs/source/environment.rst\"\u003e\u003cimg src=\"https://img.shields.io/badge/Language-python%20free--threaded%20%26%20cythonized-5B6CFF\" alt=\"Language Python free-threaded and Cythonized\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab/pulls\"\u003e\u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs welcome\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/agilab/\"\u003e\u003cimg src=\"https://img.shields.io/badge/wheel-yes-0F766E\" alt=\"Wheel: yes\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab\"\u003e\u003cimg src=\"https://img.shields.io/github/repo-size/ThalesGroup/agilab\" alt=\"Repo size\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.astral.sh/ruff/\"\u003e\u003cimg src=\"https://img.shields.io/badge/style%20guard-Ruff%20changed--files-0F766E\" alt=\"Style guard: Ruff changed-files\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://orcid.org/0009-0003-5375-368X\"\u003e\u003cimg src=\"https://img.shields.io/badge/ORCID-0009--0003--5375--368X-A6CE39?logo=orcid\" alt=\"ORCID\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/ThalesGroup/agilab/actions/workflows/coverage.yml\"\u003e\u003cimg src=\"https://github.com/ThalesGroup/agilab/actions/workflows/coverage.yml/badge.svg?branch=main\" alt=\"Coverage workflow\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agilab.svg\" alt=\"agilab coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab?flags%5B0%5D=agi-gui\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agi-gui.svg\" alt=\"agi-gui coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab?flags%5B0%5D=agi-env\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agi-env.svg\" alt=\"agi-env coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab?flags%5B0%5D=agi-node\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agi-node.svg\" alt=\"agi-node coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab?flags%5B0%5D=agi-cluster\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agi-cluster.svg\" alt=\"agi-cluster coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ThalesGroup/agilab?flags%5B0%5D=agi-core\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ThalesGroup/agilab/main/badges/coverage-agi-core.svg\" alt=\"agi-core coverage\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# AGILAB\n\nAGILAB is an anti-lock-in reproducibility workbench for AI/ML engineering.\nIt turns notebooks and scripts into executable, portable, evidence-backed apps\nwhile preserving a notebook export path.\nThat export is an `agi-core` runtime handoff: you can continue to run the saved\nproject and stage contract with only the stable, production-grade core\ntechnology, without depending on the AGILAB UI or distributed worker layer.\nThe stable core runtime remains the smallest supported handoff surface.\nThat means you do not lose your work if the AGILAB UI or distributed runtime is\nno longer the right interface. Those apps can run locally or on distributed\nworkers, and the workflow stays portable: export it back to an `agi-core`\nnotebook, inspect or adapt the Python stages, and hand off tracking evidence to\nMLflow when that integration is enabled.\nApps can also declare multiple UI surfaces, so an app can keep the same runtime\nand evidence contract while exposing Streamlit, hosted Hugging Face, or future\nNiceGUI/Gradio/FastAPI adapters.\n\nYou do not need a cluster to get AGILAB's core value. The primary adoption path\nis local: turn a notebook or script into a replayable app with evidence,\nartifacts, analysis views, and a notebook or MLflow handoff. Cluster execution is\na scale-out option after that local proof works.\n\nUse it to keep experimental AI work:\n\n- **one-command setup**\n- **controlled environments**\n- **local or distributed execution**\n- **reviewable run evidence**\n- **runnable outside the AGILAB UI as `agi-core` notebooks**\n- **optional MLflow integration**\n\nAGILAB complements MLflow and production MLOps platforms. It owns the\nreproducible execution and analysis layer around them.\nIn short: MLflow tracks experiments; AGILAB transforms notebooks and scripts\ninto executable, portable, evidence-backed AI applications.\n\n## Core Flow\n\nNotebook/script → AGILAB app → controlled execution → artifacts + evidence →\nnotebook / MLflow / UI handoff\n\nThe flow is reversible where it matters for long-term reuse: WORKFLOW can export\nthe saved pipeline as a runnable `agi-core` supervisor notebook, so the code,\nstage order, runtime hints, and review context remain usable through the stable,\ncore runtime if the AGILAB UI or distributed runtime is no\nlonger the right interface for that work.\n\n## Demo Routes\n\nStart with the route that matches the proof you want to show:\n\n| Goal | Demo route | What it proves |\n|---|---|---|\n| Try AGILAB in the browser | [AGILAB Space](https://huggingface.co/spaces/jpmorard/agilab) | Hosted `PROJECT` -\u003e `ORCHESTRATE` -\u003e `WORKFLOW` -\u003e `ANALYSIS` path. |\n| Choose by objective | [Demo chooser](https://thalesgroup.github.io/agilab/demos.html) | Public router for notebook, UI, proof-pack, and performance demos. |\n| Migrate a notebook into an app | [Weather notebook migration](https://thalesgroup.github.io/agilab/notebook-migration-skforecast-meteo.html) | Notebook stages, `lab_stages.toml`, artifacts, and reusable analysis views. |\n| Keep Excel as the front end | [Excel workbook proof](https://thalesgroup.github.io/agilab/excel-users.html) | Workbook inputs plus CSV and JSON evidence without an Office add-in. |\n| Keep a notebook dashboard | [Voila notebook proof](https://thalesgroup.github.io/agilab/voila-users.html) | Hide-code notebook dashboard path plus widget-to-args and app-view evidence. |\n| Publish run evidence | [Quarto bridge](https://thalesgroup.github.io/agilab/quarto-users.html) | `agilab export quarto` turns a run manifest into a publishable `.qmd` report. |\n| Prove database access locally | [SQLite connector proof](https://thalesgroup.github.io/agilab/data-connectors.html#sqlite-database-proof) | Local schema, parameterized SQL query, result CSV, and JSON evidence hashes. |\n| Gate candidate data | [Data Quality Gate](src/agilab/apps/builtin/data_quality_gate_project) | Contract, drift, leakage, and promotion decision evidence before training. |\n| Show performance engineering | [Cython worker speedup demo](https://thalesgroup.github.io/agilab/execution-playground.html) | Worker execution model plus checksum-matched typed-kernel speedup evidence. |\n| Show a native extension boundary | [Rust/PyO3 native worker preview](https://thalesgroup.github.io/agilab/execution-playground.html#optional-rust-pyo3-worker-preview) | Generated PyO3/maturin worker skeleton with explicit evidence handoff. |\n| Explore an opt-in app | [PyTorch Playground](https://thalesgroup.github.io/agilab/pytorch-playground.html) | Reproducible classifier playground with live play/pause training, replayable teaching route, evidence ZIPs, generated PyTorch/Lightning code, multi-UI surface declarations, and loss-landscape analysis. |\n| Go deeper after first proof | [Advanced Proof Pack](https://thalesgroup.github.io/agilab/advanced-proof-pack.html) | Mission decision, execution playground, UAV queue, service, MLflow, and release-proof routes. |\n\nUse the [local quick start](#quick-start) when you want to run the product\nlocally, the [demo capture guide](https://thalesgroup.github.io/agilab/demo_capture_script.html)\nwhen preparing screenshots or video, and the [50-star promotion kit](PROMOTE.md)\nwhen sharing the project publicly.\n\nIf AGILAB helps you make AI/ML experiments reproducible, please star the\nrepository so other engineers can find it.\n\nFor spreadsheet-first users, the packaged `excel_workbook_proof` preview keeps\nExcel as the familiar interface and writes a proof workbook, Power Query-friendly\nCSV files, and JSON hash evidence without requiring an Office add-in.\n\nFor notebook-dashboard users, the packaged `voila_notebook_proof` preview keeps\nthe notebook dashboard flow and writes a hide-code manifest, widget-to-args\nhints, an app-view plan, and JSON evidence without requiring Voila in the base\ninstall.\n\n## Featured Opt-In App\n\n- [Data Quality Gate](src/agilab/apps/builtin/data_quality_gate_project)\n  is the deterministic data-readiness gate: baseline/candidate datasets,\n  contract checks, drift metrics, leakage detection, and promotion evidence\n  without external services.\n- [PyTorch Playground](src/agilab/apps/builtin/pytorch_playground_project)\n  is the opt-in classifier playground app for\n  synthetic datasets, real play/pause training, hidden-layer activation maps,\n  network diagnostics, a replayable teaching route, and the **Loss landscape**\n  view. It keeps the instant visual learning loop of classic neural playgrounds,\n  then adds PyTorch-native evidence, replay tokens, and reusable PyTorch or\n  Lightning code. It demonstrates the reusable app-surface contract: inspect backends with\n  `agilab app surface pytorch_playground_project --list`, open the local UI with\n  `agilab app surface pytorch_playground_project --ui streamlit`, or open the\n  hosted backend with `agilab app surface pytorch_playground_project --ui hf`.\n  The shortcut `agilab pytorch-playground` remains for convenience. It is a\n  reproducible app project, not a generic app-agnostic analysis page, and loss\n  landscape is part of that project.\n\n## Featured Performance Demo\n\n- [Execution Pandas Project](src/agilab/apps/builtin/execution_pandas_project)\n  is the Cython worker speedup demo. It keeps Pandas I/O and reducer evidence\n  in Python, then isolates the hot scoring loop as a typed contiguous\n  `float64` kernel so AGILAB can compare Python and Cython execution honestly.\n  The versioned local kernel proof reports `0.620s` Python vs `0.002s` Cython\n  on 100,000 rows x 32 passes, a checksum-matched `306x` speedup. That is a\n  focused hot-loop result, not an end-to-end runtime promise.\n- [Flight Telemetry Project](src/agilab/apps/builtin/flight_telemetry_project)\n  is the real-world worker-only Cython example: the Polars ingestion and\n  artifact contract stay in Python, while the per-row haversine distance kernel\n  reports `speed_kernel_runtime`, `speed_dtype_contract`, and checksum evidence\n  in the reducer summary.\n\n## [Quick Start](https://thalesgroup.github.io/agilab/quick-start.html)\n\n\u003cp\u003e\n  \u003ca href=\"https://huggingface.co/spaces/jpmorard/agilab\"\u003e\u003cimg src=\"https://img.shields.io/badge/AGILAB-Space-0F766E?style=for-the-badge\" alt=\"AGILAB Space\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kaggle.com/kernels/welcome?src=https://github.com/ThalesGroup/agilab/blob/main/src/agilab/examples/notebook_quickstart/agi_core_kaggle_first_run.ipynb\"\u003e\u003cimg src=\"https://img.shields.io/badge/agi--core-notebook-1D4ED8?style=for-the-badge\" alt=\"agi-core notebook\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Local PyPI Proof\n\n```bash\nuv --preview-features extra-build-dependencies tool install --upgrade \"agilab[examples]\"\nagilab first-proof --json\nagilab adoption-report\n```\n\nUse the UI profile only when you also want the local Streamlit pages:\n\n```bash\nuv --preview-features extra-build-dependencies tool install --upgrade \"agilab[ui]\"\nagilab\n```\n\nFor a zero-install browser preview, open the public\n[AGILAB Space](https://huggingface.co/spaces/jpmorard/agilab). It opens the\nlightweight `flight_telemetry_project` path by default and exposes the\n`weather_forecast_project` notebook-migration demo with forecast analysis views.\nAdvanced scenarios such as `mission_decision_project`,\nthe `execution_pandas_project` Cython worker speedup demo,\n`execution_polars_project`, and `uav_relay_queue_project` are collected in the\n[Advanced Proof Pack](https://thalesgroup.github.io/agilab/advanced-proof-pack.html).\nFor the full project/package/status matrix, see the\n[Public App Catalog](https://thalesgroup.github.io/agilab/public-app-catalog.html).\nThe default hosted flight journey covers `PROJECT`, `ORCHESTRATE`, `WORKFLOW`,\nand `ANALYSIS`, including bundled flight analysis views.\n\nIf startup fails, run a progressive fallback:\n\n```bash\nagilab dry-run\nagilab first-proof --json\nagilab adoption-report\n```\n\n`agilab dry-run` is the fast alias for `agilab first-proof --dry-run`; it\nverifies CLI/core readiness only.\n`agilab first-proof --json` does the local onboarding contract and writes the\nmanifest without requiring Streamlit. Add `--with-ui` only when you intentionally\nwant the proof to boot the packaged Streamlit pages too.\n`agilab adoption-report` reads the manifest and tells you whether the first\nproof is a safe baseline before trying notebooks, private apps, or cluster work.\n\n### Maturity snapshot\n\n| Capability | Status |\n|---|---|\n| Local run | Stable |\n| Distributed (Dask) | Stable |\n| UI Streamlit | Beta |\n| MLflow | Beta |\n| Production | Experimental |\n| RL examples | Example available |\n\nAGILAB is most mature in the bridge between notebook experimentation and\nreproducible AI applications: local execution, environment control, and\nanalysis. Distributed execution is mature in the core runtime; remote cluster\nmounts, credentials, and hardware stacks remain environment-dependent.\nProduction-grade MLOps features are delivered through integrations and are not\nyet a packaged platform claim.\n\n## Production Boundary\n\nAGILAB should be adopted as an experimentation and validation workbench first.\nUse this boundary before deploying it in sensitive environments:\n\n| Boundary | Status | Required controls |\n|---|---|---|\n| Go for controlled local use | Local research sandboxes, internal demos, notebook-to-app migration, reproducible validation with non-sensitive data. | Normal repository hygiene and local proof evidence. |\n| Go for hardened shared use | Shared team workspaces, SSH/Dask clusters, reviewed external apps, LLM connectors, local/offline LLMs, or sensitive internal datasets when the hardening gate passes. | Per-user isolation, strict `agilab security-check` gate, explicit secrets management, TLS/auth for exposed services, pinned/allowlisted external apps, SBOM plus vulnerability scan evidence for deployed install profiles, bounded resources, and a deployment threat model. |\n| Not safe as-is | Sole production MLOps control plane, public Streamlit exposure, regulated production model serving, enterprise governance, online monitoring, drift detection, or audit-trail ownership. | Pair AGILAB with a hardened production stack such as MLflow/Kubeflow/SageMaker/Dagster/Airflow or an internal platform. |\n\nFor shared adoption, run `agilab security-check --profile shared --json` and\nuse `--strict` or `AGILAB_SECURITY_CHECK_STRICT=1` when missing controls should\nblock the gate. The stricter profiles check app-repository allowlists, public UI\nbind controls, cluster-share isolation, generated-code execution boundaries,\nplaintext local secrets, and profile-specific SBOM / `pip-audit` evidence.\nTreat a clean strict report plus profile-specific SBOM / `pip-audit` evidence\nas the documented go gate for hardened shared/team use. To persist the combined\ndecision, write the gate artifact:\n\n```bash\nuv --preview-features extra-build-dependencies run python tools/shared_go_gate.py \\\n  --security-check-json test-results/security-check.json \\\n  --supply-chain-dir test-results/supply-chain \\\n  --output test-results/shared_go_gate.json\n```\n\n## Security Reporting\n\nDo not use public GitHub issues, discussions, pull requests, or comments for\nsuspected vulnerabilities. Use the private reporting path in\n[SECURITY.md](SECURITY.md); if GitHub Private Vulnerability Reporting is not\navailable to you, request a private AGILAB security intake through a maintainer\ncontact or another private channel listed by the project. The public issue\ntracker is only for non-sensitive bugs, support questions, and post-fix\nfollow-up.\n\nFor adoption boundaries and the shared-use hardening checklist, see\n[Security and adoption](https://thalesgroup.github.io/agilab/security-adoption.html).\n\n## Dependency And Supply-Chain Boundaries\n\nThe public package is intentionally profile-based so operators can install only\nwhat they need:\n\n| Profile | Dependency scope | Use when |\n|---|---|---|\n| Base package | Lightweight `agilab` command shell plus Python 3.13 stdlib shims. It does not install the core runtime, UI, apps, pages, notebooks, or model stacks by default. | Version/help checks, package/app management commands, and metadata/reporting helpers that do not execute AGILAB runtime code. |\n| `core` extra | `agi-core`, which wires `agi-env`, `agi-node`, and `agi-cluster` for compact local/distributed runtime smoke checks. | CLI proof, source-checkout validation, notebook/API runtime, and worker-runtime development without the UI or packaged examples. |\n| `ui` extra | Streamlit UI, page helpers, pandas/network graph utilities, `agi-apps`, and the `agi-pages` provider. Promoted app and page payload packages are on PyPI; unpromoted app payloads remain release artifacts until publication is enabled. | Running the local product UI with the packaged runtime and optional public demo assets. |\n| `examples` extra | `agi-apps` app catalog/examples plus notebook/demo helper dependencies such as JupyterLab and optional plotting packages. | Running packaged notebooks, demos, learning examples, and package first-proof routes. |\n| `notebook` extra | Notebook execution helpers such as `nbclient`, `nbformat`, and `ipykernel`. | Running `agilab run notebook` to execute a local notebook and write AGILAB evidence. |\n| `pages` extra | `agi-pages` page-provider helpers without the full UI profile. | Installing or validating sidecar page-bundle discovery separately from built-in app projects. |\n| `proof` extra | Optional `cryptography` dependency for detached Ed25519 proof-capsule signatures. | Signing `.agipack` archives and verifying them against local trust policies. |\n| `agents` extra | API client dependency boundary for packaged agent workflow helpers. | Reproducible coding-agent and assistant-backed workflows. |\n| `mlflow` extra | MLflow tracking integration. | Recording runs, metrics, artifacts, or model registry handoff evidence. |\n| `ai` and `viz` extras | API LLM clients and optional plotting packages. | Assistant-backed workflows or richer visual analysis. |\n| `local-llm` / `offline` extras | Local/offline model stacks such as Torch, Transformers, GPT-OSS, and MLX where supported. | Isolated local-model experiments; expect a larger supply-chain and hardware footprint. |\n| `dev` extra | Contributor test/build/audit tooling only. | Validating a source checkout or release candidate; avoid it for runtime installs. |\n\nAgent workflows can now produce AGILAB evidence directly. Use\n`agilab agent-run --agent codex --permission-level standard --label \"Review current diff\" --tag review --metadata branch=main -- codex review`\nto execute a local coding-agent command and write a redacted\n`agilab.agent_run.v1` manifest plus local stdout/stderr artifacts under\n`~/log/agents/`. Each run also writes an append-only\n`agilab.agent_trace.v1` stream in `agent_events.ndjson`, with typed events for\nsession, command/tool, permission, compaction, rewind, and completion evidence.\nCommand arguments are redacted by default and represented by an argv hash; pass\n`--include-command-args` only when the prompt/arguments are safe to store.\nOutput artifact files redact obvious secret assignments, supported secret refs,\nand common standalone API-token patterns by default; pass `--include-raw-output`\nonly for safe local diagnostics. Destructive executable names and obvious\ndestructive shell, Python, Git, Docker, Kubernetes, or package-manager command\ncontent are operator-gated, but this permission layer is an evidence guard, not\na process sandbox. Add\n`--protocol-adapter mcp` or `--capability app-as-tool` as metadata-only labels\nwhen experimenting with agent protocol bridges; the base package records those\nlabels and lifecycle events without depending on the protocol stacks. Use\n`agilab agent-run list --agent codex --json` or the Python helpers\n`agilab.agent_run.trace_agent_run()` and\n`agilab.agent_run.list_agent_runs()` to create or consume run evidence from\nautomation. Provider/model capability context can be stamped with\n`--provider`, `--model`, project-local `.agilab/agents.json`, or global\n`~/.agilab/agents/agents.json`.\n\nCluster/Dask support is intentionally part of the base runtime through\n`agi-core`. AGILAB keeps local, pool, and distributed back planes behind the\nsame reproducible execution contract; moving `agi-cluster` behind an extra would\nbe only an install-footprint optimization if measured adoption data ever\njustifies the added conditional paths.\n\nRelease and adoption supply-chain evidence is explicit: Dependabot watches\nPython and GitHub Actions manifests, release workflows publish per-profile\n`pip-audit` JSON and CycloneDX SBOM artifacts, and\n`tools/profile_supply_chain_scan.py` can regenerate the same profile evidence\nlocally. PyPI publication uses Trusted Publishing/OIDC and the release workflow\nruns `tools/pypi_provenance_check.py` after upload so missing PyPI attestations\nfail before GitHub release assets are published. By default, the workflow omits\nselected PyPI projects whose current wheel/sdist artifacts already exist, so\nunchanged split packages do not enter upload, provenance, retention, or release\nasset jobs. For packages that still need publication, the workflow then attempts\nto prune older PyPI releases; missing current versions or remaining stale\nreleases are hard failures. If PyPI asks for unrecognized login confirmation,\nthe workflow waits on the temporary\n`PYPI_CONFIRM_LOGIN_URL` Actions variable instead of silently continuing. Release\nassets and Hugging Face sync only proceed after PyPI retention verifies that each\nselected project exposes only the current release. After release assets are\npublished, the same workflow syncs the public Hugging Face Space, runs the\nhosted smoke test, and records the resulting Space commit in release proof.\n\n## Evidence Taxonomy\n\nAGILAB separates public claims by evidence type:\n\n| Evidence type | What it proves | What it does not prove |\n|---|---|---|\n| Automated proof | Commands such as `agilab first-proof --json`, workflow parity checks, coverage, release proof, and UI robot evidence ran successfully. | Independent certification or coverage of every deployment topology. |\n| Integration tests | A specific source path, package route, app, or workflow contract is exercised by tests. | Production SLA, security certification, or external operator acceptance. |\n| Benchmarks | Timings for declared hardware, datasets, modes, and benchmark scripts. | General performance across arbitrary hardware, networks, or datasets. |\n| Self-assessment | KPI scores such as production readiness and strategic potential are maintained from repository evidence. | External validation or third-party certification. |\n| External validation | Only claimed when a named external artifact, reviewer, CI provider, or hosted demo proof is linked. | Implied endorsement beyond the linked evidence. |\n\n## Proof Capsule Direction\n\nThe north-star product primitive is an AGILAB proof capsule: one portable,\nreviewable bundle for a run or app promotion decision. It should collect the\nrun manifest, app/stage metadata, exported notebook handoff, MLflow handoff\nmetadata when enabled, UI robot screenshots/traces/HAR/video when captured,\nartifact hashes, dependency locks, SBOM, `pip-audit`, wheel hashes, provenance,\nand a short human/machine summary.\n\nAGILAB already ships many of those pieces separately through first-proof\nmanifests, notebook export, release proof, supply-chain scans, robot artifacts,\nand adoption reports. The first public proof-pack layer now adds\n`agilab prove`, `agilab verify`, `agilab replay`, `agilab export-lineage`,\n`agilab export-traces`, `agilab policy-check`, `agilab cards`, and\n`agilab metadata-store` for `run_manifest.json` evidence, plus a\nhash-verifiable `.agipack` archive for portable handoff with\n`agilab prove --export proof.agipack`. The `proof` extra adds detached Ed25519\nsigning with `agilab sign proof.agipack --key signer.pem --signature\nproof.agipack.sig.json` and trust-policy verification with `agilab verify\nproof.agipack --signature proof.agipack.sig.json --trust-policy policy.toml`.\nFor fail-closed evidence, maintainers can run `./dev robust`; it executes a P0\nrobustness matrix of synthetic bad states covering cluster shares, public UI\nbinds, service health gates, evidence manifests, notebook import, app settings,\nand Streamlit route contracts. A scenario passes only when the bad state is\nrejected with a clear remediation and replay command.\nFor adoption-surface evidence, maintainers can run `./dev app-contracts`; it\nchecks that built-in apps, worker manifests, reducer expectations, promoted PyPI\napp packages, the app catalog, and public app docs stay aligned. The same guard\nruns in release validation, CI, and targeted pre-push checks when those inputs\nchange.\nFor style tooling, maintainers should run `./dev lint`; it executes Ruff through\nthe repo `dev` extra so a fresh checkout provisions the tool instead of relying\non an already-synced local environment.\nExternal Sigstore/SLSA attestation binding, native lineage or observability\ntransport, durable ML metadata, rich app-authored cards, and enterprise\ngovernance integrations remain roadmap work. See the\n[proof capsule](https://thalesgroup.github.io/agilab/proof-capsule.html)\ncontract for the intended boundary.\n\n## Repository Map And Stability Boundaries\n\nAGILAB is a monorepo, but it is not a single stability surface:\n\nUse three planes to read the repository:\n\n| Plane | Owns | Main roots |\n|---|---|---|\n| Control plane | Product entry points, runtime APIs, environment resolution, worker packaging, and local/distributed execution. | `src/agilab/core/*`, `src/agilab/lib/agi-gui`, `src/agilab/pages` |\n| Payload plane | Apps, page bundles, templates, notebooks, examples, and PyPI payload umbrellas. | `src/agilab/apps/builtin`, `src/agilab/apps-pages`, `src/agilab/lib/agi-apps`, `src/agilab/lib/agi-pages`, `src/agilab/examples` |\n| Evidence plane | Proof, audits, release contracts, supply-chain evidence, UI robot outputs, docs mirror, and agent/runbook automation. | `tools`, `.github`, `docs/source`, `.codex`, `.claude`, `badges` |\n\nThis is why AGILAB can look broader than a normal Python package: the runtime,\nits reusable app/page payloads, and the evidence proving those paths are kept in\nthe same releaseable tree.\n\n| Area | Role | Stability contract |\n|---|---|---|\n| `src/agilab/core/agi-env`, `agi-node`, `agi-cluster`, `agi-core` | Runtime packages for environment setup, worker packaging, distributed execution, and the compact API. | Stable where documented; changes require focused regression evidence. |\n| `src/agilab/lib/agi-gui`, `src/agilab/pages` | Main web UI, Streamlit page helpers, and app-surface launch adapters. | Beta product surface; useful for operators, still evolving. App runtime contracts should not depend on one UI backend. |\n| `src/agilab/lib/agi-apps` | PyPI umbrella that carries app catalog/example assets and exact-pins the app payload packages already promoted to PyPI. | Packaged asset surface for the `ui` and `examples` extras. |\n| `src/agilab/lib/agi-pages` | PyPI provider package for public analysis page discovery. Published `agi-page-*` payload packages are distributed independently; `agi-pages` supplies the discovery/provider surface. | Packaged page-provider surface for the `ui` and `pages` extras. |\n| `src/agilab/apps/builtin` | Public built-in apps used for first proof, demos, workflow examples, and regression coverage. | Packaged examples, not enterprise deployment templates. |\n| `src/agilab/examples` | Learning scripts, notebooks, and preview examples. | Educational material; optional helper dependencies live behind extras. |\n| `tools`, `.github`, `pycharm`, `.codex`, `.claude`, `dev` | Contributor, release, agent, and IDE automation. | Maintainer tooling, not runtime API. |\n| `docs/source` | Public documentation mirror. | Published docs source; canonical docs are synchronized before release. |\n\nThis split is intentional. Treat AGILAB as an AI engineering reproducibility\nworkbench first: stable runtime contracts, beta UI, packaged examples, and\nmaintainer automation live together so release proof can validate the same\nsource tree users install from.\n\n## Package Surface Contract\n\nLocal source checkouts can grow after runs because built-in apps can create\n`.venv` directories, build outputs, caches, datasets, and local logs.\nThose local artifacts are not the package contract. Public wheels are bounded\nby `pyproject.toml` package data rules and exclude virtual environments,\ntests, `docs/html`, build directories, generated C files,\n`__pycache__`, `.pyc`, and `.egg-info` artifacts.\n\nCurrent packaging policy is conservative:\n\n- Base `agilab` keeps the command shell separate from core runtime, UI, page\n  bundles, examples, agents, MLflow, visualization, local-LLM, offline, and dev\n  profiles; use `agilab[core]` when CLI proof/runtime smoke checks are needed.\n- Promoted app payloads live in per-app packages such as\n  `agi-app-mission-decision`, `agi-app-pandas-execution`,\n  `agi-app-polars-execution`, `agi-app-flight-telemetry`, `agi-app-multi-dag`,\n  `agi-app-weather-forecast`, `agi-app-pytorch-playground`,\n  `agi-app-tescia-diagnostic`, and `agi-app-uav-relay-queue`;\n  `agi-apps` is the umbrella catalog/example package\n  pulled in by the `ui` and `examples` extras.\n- Public analysis page bundles use decoupled `agi-page-*` package names such\n  as `agi-page-feature-attribution`; `agi-pages` is the provider package pulled\n  in by the `ui` and `pages` extras.\n- The optional PyTorch playground lives in\n  [`src/agilab/apps/builtin/pytorch_playground_project`](src/agilab/apps/builtin/pytorch_playground_project).\n  It is a reproducible app project rather than a generic app-agnostic analysis\n  page; its loss-landscape projection is part of that project, not a separate\n  `view_loss_landscape` bundle.\n- Larger optional stacks must stay behind extras, and release evidence must\n  include SBOM / `pip-audit` data for the actual enabled profile.\n- `agi-cluster` remains in the base runtime by design. A separate minimal\n  runtime profile should only be considered if measured install-footprint or\n  adoption data justifies the new conditional package contract.\n\n## Choose Your Path\n\n1. Preview the product quickly: [AGILAB Space](https://huggingface.co/spaces/jpmorard/agilab)\n2. Understand notebook-to-app migration: [Notebook Migration Demo](https://thalesgroup.github.io/agilab/notebook-migration-skforecast-meteo.html)\n3. Prove the full source-checkout flow: [Source Checkout](#source-checkout)\n4. Verify a CLI-only package install: [Published Package](#published-package)\n5. Contribute safely: [Contributor onboarding](CONTRIBUTING.md)\n6. Audit external apps and evidence: [App Repository Updates](#app-repository-updates) and [Release Proof](https://thalesgroup.github.io/agilab/release-proof.html)\n\nFor a single-page adoption checklist, use [ADOPTION.md](ADOPTION.md).\n\n## Source Version vs Package Version\n\nAGILAB publishes from this repository, but each public surface has a distinct\nrole:\n\n| Surface | Meaning | Source of truth |\n|---|---|---|\n| `main` branch and root `pyproject.toml` | Active source checkout and next release candidate. It can move after a package has already been published. | GitHub source tree |\n| Release tag | Immutable source snapshot used for a public release. Use this for reproducible source installs. | GitHub tag and GitHub Release |\n| PyPI package | Latest installable public wheel/sdist for `agilab` and the `agi-*` packages. | PyPI project and PyPI version badge |\n| Release proof | Public evidence tying the release tag, PyPI package version, docs, CI, coverage, and demo proof together. | [Release Proof](https://thalesgroup.github.io/agilab/release-proof.html) |\n\nFor development, use `main`. For reproducible release validation, use the\nrelease tag or the PyPI package version recorded in the release proof.\n\nAGILAB uses date-based public versions. The dense `.postN` history in\nApril-May 2026 records public-beta packaging hardening, provenance refreshes,\nand dependency-pin alignment across the split package set. It is kept visible\nfor auditability, but it is not the target steady-state release rhythm; normal\nfeature or behavior changes should advance to a deliberate new date-based\nrelease. The `pypi-publish` workflow now rejects committed public `.postN`\nversions unless a maintainer explicitly marks the dispatch as a critical hotfix\nand records the reason; release candidates or TestPyPI should be used before a\nfinal public release.\n\n## Source Checkout\n\nRun the installable product path with the built-in `flight_telemetry_project`:\n\n```bash\nCHECKOUT=\"${AGILAB_CHECKOUT:-$HOME/agilab-src}\"\ngit clone https://github.com/ThalesGroup/agilab.git \"$CHECKOUT\"\ncd \"$CHECKOUT\"\n./install.sh --install-apps\nuv --preview-features extra-build-dependencies run --extra ui streamlit run src/agilab/main_page.py\n```\n\nOn native Windows, prefer the published package route below. The source checkout\ninstaller uses POSIX shell scripts, so run that path from WSL2 until native\ninstaller parity is published.\n\nFollow the in-app pages from `PROJECT` to `ORCHESTRATE`, `WORKFLOW`, and\n`ANALYSIS`. To collect the same check as JSON:\n\n```bash\nuv --preview-features extra-build-dependencies run agilab first-proof --json\nuv --preview-features extra-build-dependencies run agilab adoption-report\n```\n\nThe JSON proof writes `run_manifest.json` under `~/log/execute/flight_telemetry/`. For\ninstaller flags, IDE run configs, and troubleshooting, use the Quick Start docs.\n\n## Published Package\n\nFor a CLI-only package smoke without Streamlit:\n\n```bash\nuv --preview-features extra-build-dependencies tool install --upgrade \"agilab[examples]\"\nagilab first-proof --json --max-seconds 60\n```\n\n## App Repository Updates\n\nWhen `APPS_REPOSITORY` points at an external apps repository, rerun the\ninstaller after app changes:\n\n```bash\n./install.sh --non-interactive --apps-repository /path/to/apps-repository --install-apps all\n```\n\nDuring an update, the apps repository is treated as the source of truth. If the\ntarget app/page already exists as a real directory instead of a symlink, AGILAB\nbacks it up as `\u003cname\u003e.previous.\u003ctimestamp\u003e`, then links the repository copy in\nits place. After the update, AGILAB runs the repository version; the\n`.previous` directory is kept only for manual recovery. See\n[Service mode and paths](https://thalesgroup.github.io/agilab/service_mode_and_paths.html)\nfor the full path contract.\n\n## Evidence And Scope\n\nThe README is only the entry page. Detailed capability evidence, compatibility\nstatus, and roadmap scope live in:\n\n- [Features](https://thalesgroup.github.io/agilab/features.html)\n- [Capability map](https://thalesgroup.github.io/agilab/capability-map.html)\n- [Release proof](https://thalesgroup.github.io/agilab/release-proof.html)\n- [Compatibility matrix](https://thalesgroup.github.io/agilab/compatibility-matrix.html)\n- [MLOps positioning](https://thalesgroup.github.io/agilab/agilab-mlops-positioning.html)\n- [Maintenance playbook](https://thalesgroup.github.io/agilab/maintenance-playbook.html)\n- [Extension contracts](https://thalesgroup.github.io/agilab/extension-contracts.html)\n- [Package publishing policy](https://thalesgroup.github.io/agilab/package-publishing-policy.html)\n- [Future work](https://thalesgroup.github.io/agilab/roadmap/agilab-future-work.html)\n- [Audience bridges](https://thalesgroup.github.io/agilab/roadmap/audience-bridges.html)\n\n## Evaluation Snapshot\n\n\u003c!-- AGILAB_PUBLIC_KPI_SUMMARY_START --\u003e\nCurrent public evaluation summary, refreshed from the public KPI bundle:\n\n- `4.0 / 5` for ease of adoption, research experimentation, and engineering prototyping.\n- `3.2 / 5` for production readiness.\n- `4.2 / 5` for strategic potential.\n- Overall public evaluation, rounded category average: `3.8 / 5`.\n\u003c!-- AGILAB_PUBLIC_KPI_SUMMARY_END --\u003e\n\nThese are public experimentation-workbench scores, not production MLOps claims.\nThey cover project setup, environment management, execution, and result analysis.\nThe evidence and limits are maintained in the\n[compatibility matrix](https://thalesgroup.github.io/agilab/compatibility-matrix.html)\nand [MLOps positioning](https://thalesgroup.github.io/agilab/agilab-mlops-positioning.html).\nThe strategic evidence criteria and strategic score movement rule are tracked in the\n[strategic scorecard](https://thalesgroup.github.io/agilab/strategic-potential.html).\n\n## Read Next\n\n- [Newcomer troubleshooting](https://thalesgroup.github.io/agilab/newcomer-troubleshooting.html)\n- [MLOps positioning](https://thalesgroup.github.io/agilab/agilab-mlops-positioning.html)\n- [Strategic scorecard](https://thalesgroup.github.io/agilab/strategic-potential.html)\n- [Documentation](https://thalesgroup.github.io/agilab)\n- [Contributor onboarding](CONTRIBUTING.md)\n- [Flight-telemetry project guide](https://thalesgroup.github.io/agilab/flight-telemetry-project.html)\n- [Adoption guide](ADOPTION.md)\n- [Releases](https://github.com/ThalesGroup/agilab/releases)\n- [Changelog](CHANGELOG.md)\n- [Developer runbook](AGENTS.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgroup%2Fagilab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthalesgroup%2Fagilab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgroup%2Fagilab/lists"}