Metadata-Version: 2.4
Name: osprey-framework
Version: 2026.5.2
Summary: An open-source, domain-agnostic, capability-based architecture for building intelligent agents
Project-URL: Homepage, https://als-apg.github.io/osprey
Project-URL: Documentation, https://als-apg.github.io/osprey
Project-URL: Repository, https://github.com/als-apg/osprey
Project-URL: Paper, https://doi.org/10.1063/5.0306302
Project-URL: Issues, https://github.com/als-apg/osprey/issues
Project-URL: Changelog, https://github.com/als-apg/osprey/blob/main/CHANGELOG.md
Author-email: Thorsten Hellert <thellert@lbl.gov>
Maintainer-email: Thorsten Hellert <thellert@lbl.gov>
License: BSD-3-Clause
License-File: LICENSE.txt
Keywords: accelerator-physics,agent-framework,agents,ai,als,berkeley,capability-based,container-orchestration,epics,framework,human-in-the-loop,scientific-computing
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Distributed Computing
Requires-Python: >=3.11
Requires-Dist: accelerator-toolbox[plot]
Requires-Dist: aiofiles>=24.1.0
Requires-Dist: aiohttp-socks>=0.8.0
Requires-Dist: aiohttp>=3.10
Requires-Dist: anthropic
Requires-Dist: bokeh>=3.0
Requires-Dist: caproto
Requires-Dist: certifi>=2025.4.26
Requires-Dist: charset-normalizer>=3.4.2
Requires-Dist: claude-agent-sdk==0.2.87
Requires-Dist: click>=8.1.0
Requires-Dist: duckdb>=1.5.1
Requires-Dist: fastapi>=0.109.0
Requires-Dist: fastmcp>=3.0.0
Requires-Dist: google-generativeai
Requires-Dist: httpx>=0.27.0
Requires-Dist: idna>=3.10
Requires-Dist: ipywidgets
Requires-Dist: jinja2>=3.1.6
Requires-Dist: litellm>=1.56.0
Requires-Dist: markdown>=3.5
Requires-Dist: markupsafe>=3.0.2
Requires-Dist: matplotlib>=3.10.3
Requires-Dist: nbclient
Requires-Dist: nbconvert>=7.0.0
Requires-Dist: nbformat>=5.0.0
Requires-Dist: nltk>=3.8.1
Requires-Dist: numpy>=2.2.6
Requires-Dist: ollama>=0.5.1
Requires-Dist: openai>=2
Requires-Dist: pandas>=2.2.3
Requires-Dist: playwright>=1.40.0
Requires-Dist: plotly>=5.0.0
Requires-Dist: psycopg-pool<4.0.0,>=3.1.0
Requires-Dist: psycopg[binary,pool]<4.0.0,>=3.1.0
Requires-Dist: pyepics
Requires-Dist: python-dotenv>=1.1.0
Requires-Dist: pyyaml>=6.0.2
Requires-Dist: questionary>=2.0.0
Requires-Dist: requests>=2.32.3
Requires-Dist: rich>=14.0.0
Requires-Dist: ruamel-yaml>=0.18.0
Requires-Dist: scikit-learn
Requires-Dist: scipy>=1.15.3
Requires-Dist: seaborn
Requires-Dist: tenacity>=9.1.4
Requires-Dist: typing-extensions>=4.12.0
Requires-Dist: unique-namer>=0.1.0
Requires-Dist: urllib3>=2.4.0
Requires-Dist: uvicorn[standard]>=0.27.0
Requires-Dist: watchdog>=3.0.0
Requires-Dist: websocket-client>=1.7.0
Provides-Extra: all
Requires-Dist: build; extra == 'all'
Requires-Dist: docker>=7.0.0; extra == 'all'
Requires-Dist: graphviz; extra == 'all'
Requires-Dist: gspread>=6.0.0; extra == 'all'
Requires-Dist: mss>=9.0.0; extra == 'all'
Requires-Dist: mypy; extra == 'all'
Requires-Dist: myst-parser; extra == 'all'
Requires-Dist: pre-commit; extra == 'all'
Requires-Dist: psycopg-pool<4.0.0,>=3.1.0; extra == 'all'
Requires-Dist: psycopg[binary,pool]<4.0.0,>=3.1.0; extra == 'all'
Requires-Dist: psycopg[pool]<4.0.0,>=3.1.0; extra == 'all'
Requires-Dist: pydata-sphinx-theme; extra == 'all'
Requires-Dist: pymongo>=4.0; extra == 'all'
Requires-Dist: pytest; extra == 'all'
Requires-Dist: pytest-asyncio; extra == 'all'
Requires-Dist: pytest-cov; extra == 'all'
Requires-Dist: pytest-order; extra == 'all'
Requires-Dist: pytest-rerunfailures; extra == 'all'
Requires-Dist: python-xlib>=0.33; extra == 'all'
Requires-Dist: ruff; extra == 'all'
Requires-Dist: sphinx-autobuild; extra == 'all'
Requires-Dist: sphinx-copybutton; extra == 'all'
Requires-Dist: sphinx-design; extra == 'all'
Requires-Dist: sphinx>=8.0.0; extra == 'all'
Requires-Dist: sphinxcontrib-jsmath>=1.0.1; extra == 'all'
Requires-Dist: sphinxcontrib-mermaid; extra == 'all'
Requires-Dist: testcontainers[mongodb]>=4.0.0; extra == 'all'
Requires-Dist: testcontainers[postgres]>=4.0.0; extra == 'all'
Provides-Extra: archiver-mongodb
Requires-Dist: pymongo>=4.0; extra == 'archiver-mongodb'
Provides-Extra: ariel
Requires-Dist: psycopg-pool<4.0.0,>=3.1.0; extra == 'ariel'
Requires-Dist: psycopg[pool]<4.0.0,>=3.1.0; extra == 'ariel'
Provides-Extra: ariel-proxy
Requires-Dist: aiohttp-socks>=0.8.0; extra == 'ariel-proxy'
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: docker>=7.0.0; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pre-commit; extra == 'dev'
Requires-Dist: psycopg-pool<4.0.0,>=3.1.0; extra == 'dev'
Requires-Dist: psycopg[binary,pool]<4.0.0,>=3.1.0; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-asyncio; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest-order; extra == 'dev'
Requires-Dist: pytest-rerunfailures; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: testcontainers[mongodb]>=4.0.0; extra == 'dev'
Requires-Dist: testcontainers[postgres]>=4.0.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: graphviz; extra == 'docs'
Requires-Dist: myst-parser; extra == 'docs'
Requires-Dist: pydata-sphinx-theme; extra == 'docs'
Requires-Dist: sphinx-autobuild; extra == 'docs'
Requires-Dist: sphinx-copybutton; extra == 'docs'
Requires-Dist: sphinx-design; extra == 'docs'
Requires-Dist: sphinx>=8.0.0; extra == 'docs'
Requires-Dist: sphinxcontrib-jsmath>=1.0.1; extra == 'docs'
Requires-Dist: sphinxcontrib-mermaid; extra == 'docs'
Provides-Extra: screen-capture-linux
Requires-Dist: mss>=9.0.0; extra == 'screen-capture-linux'
Requires-Dist: python-xlib>=0.33; extra == 'screen-capture-linux'
Provides-Extra: sheets
Requires-Dist: gspread>=6.0.0; extra == 'sheets'
Description-Content-Type: text/markdown

# Osprey Framework

[![CI](https://github.com/als-apg/osprey/workflows/CI/badge.svg)](https://github.com/als-apg/osprey/actions/workflows/ci.yml)
[![Documentation](https://readthedocs.org/projects/osprey-framework/badge/?version=latest)](https://als-apg.github.io/osprey/)
[![codecov](https://codecov.io/gh/als-apg/osprey/branch/main/graph/badge.svg)](https://codecov.io/gh/als-apg/osprey)
[![PyPI version](https://badge.fury.io/py/osprey-framework.svg)](https://badge.fury.io/py/osprey-framework)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)

**🎉 Latest Release: v2026.5.2** - Reliability & integrations: SDK sub-agent trace collection restored, e2e suite stabilized, MongoDB archiver connector, and per-project Claude Code CLI pinning

> **🚧 Early Access Release**
> This is an early access version of the Osprey Framework. While the core functionality is stable and ready for experimentation, documentation and APIs may still evolve. We welcome feedback and contributions!

A production-ready framework for deploying agentic AI in large-scale, safety-critical control system environments—particle accelerators, fusion experiments, beamlines, and complex scientific facilities.

**📄 Research**
This work was presented as a contributed oral presentation at [ICALEPCS'25](https://indico.jacow.org/event/86/overview) and will be featured at the [Machine Learning and the Physical Sciences Workshop](https://ml4physicalsciences.github.io/2025/) at NeurIPS 2025.


## 🚀 Quick Start

```bash
# Install the framework as a standalone CLI tool (using uv, recommended)
uv tool install osprey-framework

# Create a minimal project to verify your setup
osprey build quickstart --preset hello-world
cd quickstart

# If API keys aren't already in your environment, copy and edit .env:
# cp .env.example .env

# Start a Claude Code agent session
claude
```

For a production project tailored to your detector, beamline, or accelerator
subsystem, install the guided osprey-build-interview skill and run it from Claude Code:

```bash
# Install the /osprey-build-interview skill into ~/.claude/skills/
uv run osprey skills install osprey-build-interview
```

Then start Claude Code in an empty directory and type `/osprey-build-interview`. The
skill walks you through a guided conversation, produces a build profile, and
`osprey build profile.yml` generates a ready-to-use project.


## 📚 Documentation

**[📖 Read the Full Documentation →](https://als-apg.github.io/osprey)**

### 🧪 Testing

```bash
# Run unit tests (fast, no API keys required)
pytest tests/ --ignore=tests/e2e -v

# Run e2e tests (slow, requires API keys)
# ⚠️ IMPORTANT: Use 'pytest tests/e2e/' NOT 'pytest -m e2e'
pytest tests/e2e/ -v
```

See [tests/e2e/README.md](tests/e2e/README.md) and the [Contributing Guide](https://als-apg.github.io/osprey/contributing/) for details.


## Key Features

- **Agent-Driven Orchestration** - Skills, MCP tools, and explicit dependency declarations let the Osprey agent decompose operator requests into auditable steps with mandatory approval gates
- **Control-System Safety** - Pattern detection, PV boundary checking, and mandatory approval for hardware writes
- **Protocol-Agnostic Integration** - Seamless connection to EPICS, LabVIEW, Tango, and mock environments
- **Scalable Capability Management** - Dynamic classification prevents prompt explosion as toolsets grow
- **Production-Proven** - Deployed at major facilities including LBNL's Advanced Light Source accelerator

---

## 📖 Citation

If you use the Osprey Framework in your research or projects, please cite our [paper](https://doi.org/10.1063/5.0306302):

```bibtex
@article{10.1063/5.0306302,
      author = {Hellert, Thorsten and Montenegro, João and Sulc, Antonin},
      title = {Osprey: Production-ready agentic AI for safety-critical control systems},
      journal = {APL Machine Learning},
      volume = {4},
      number = {1},
      pages = {016103},
      year = {2026},
      month = {02},
      doi = {10.1063/5.0306302},
      url = {https://doi.org/10.1063/5.0306302},
}
```

---

*For detailed installation instructions, tutorials, and API reference, please visit our [complete documentation](https://als-apg.github.io/osprey).*

---

**Copyright Notice**

Osprey Framework Copyright (c) 2025, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved.

If you have questions about your rights to use or distribute this software,
please contact Berkeley Lab's Intellectual Property Office at
IPO@lbl.gov.

NOTICE.  This Software was developed under funding from the U.S. Department
of Energy and the U.S. Government consequently retains certain rights.  As
such, the U.S. Government has been granted for itself and others acting on
its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the
Software to reproduce, distribute copies to the public, prepare derivative
works, and perform publicly and display publicly, and to permit others to do so.

---
