arXiv | Getting Started | Cite | License
NOVA is a modular agentic framework, based on CodeAct and developed using smolagents, that dynamically generates and executes Python code to orchestrate tool usage and answer user queries for scalable computational analysis. NOVA integrates 49 domain-specific tools (e.g., nuclei segmentation, whole-slide encoding) built on open-source software, and can also create new tools ad hoc.
To evaluate NOVA's capabilities, we introduce SlideQuest, a benchmark of 90 questions designed to evaluate computational agents in pathology. The tasks span four categories, including pyramidal data interrogation (DataQA), cellular analysis (CellularQA), histology ROI understanding (PatchQA), and gigapixel slide-level experimentation (SlideQA).
First clone the repository:
git clone https://github.com/microsoft/nova-agent.git
cd nova-agentThis repository uses mise-en-place for dev environment setup. Run the following make and just commands to install and set up the environment:
make mise ## install mise and necessary tools (just, uv, python, etc)
just env ## setup the environmentmake mise will install necessary tools including just, uv, etc.
You can check the Makefile and Justfile for more details on what these recipes run.
The environment is built with uv for fast virtual environment management.
Modify configs/llms/default_llm.yaml to set your LLM API base URL.
You can also override the base URL at runtime using the command line argument baseline.llm.api_config.base_url.
NOVA relies on Hover-net for cell segmentation which is setup as a git submodule in this repository.
You may encounter the following error when ruuning queries that require multiprocessing:
ERROR: ctypes objects containing pointers cannot be pickledThis is due to the change of multiprocessing strategy to spawn in Hover-net.
To fix this error, remove or comment mp.set_start_method("spawn", True) in
infer/wsi.py
and
infer/tile.py in hovernet.
If you wish to run NOVA in exploration mode using gradio capabilities provided by smolagents, run the following command:
uv add smolagents[gradio]
uv run python src/nova/main.py baseline.llm.api_config.base_url=<your_base_url>This will launch a Gradio interface for interactive exploration of NOVA's capabilities. You will be able to visualize and interact with the various tools and agents integrated within NOVA described on the left of the interface.
We provide a custom benchmark runner for SlideQuest. To run nova on SlideQuest, use the following command:
uv run python src/nova/experiments/run_experiment.py \
--config-name experiments/codeagent_with_tools \
run.subfolder_working_dir=True \
baseline.llm.api_config.deployment_name=gpt-4.1 \
baseline.llm.api_config.base_url=<your_base_url> \
categories=[data_qa] \
benchmark.limit=2Explore the config codeagent_with_tools for more details on what options are available.
We provide a debugging config in .vscode/launch.json to facilitate debugging experiments. This will allow you to step through the code and inspect variables during execution in case you encounter any issues.
We kindly request that you cite our paper if any part of this code is used in your work.
@misc{vaidya2025novaagenticframeworkautomated,
title={NOVA: An Agentic Framework for Automated Histopathology Analysis and Discovery},
author={Anurag J. Vaidya and Felix Meissen and Daniel C. Castro and Shruthi Bannur and Tristan Lazard and Drew F. K. Williamson and Faisal Mahmood and Javier Alvarez-Valle and Stephanie L. Hyland and Kenza Bouzid},
year={2025},
eprint={2511.11324},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2511.11324},
}This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

