EvoScientist: Towards Self-Evolving AI Scientists for End-to-End Scientific Discovery
Project description
EvoScientist
๐ฅ News
TODO
- [27 Sep 2025] โณ Our preprint is now live on [arXiv] โ check it out for details.
Overview
TODO
๐ Contents
- ๐ค Supported Models
- โ๏ธ Installation
- ๐ API Key Configuration
- โก Quick Start
- ๐ MCP Tools
- ๐ Evaluation
- ๐ Citation
- ๐ Acknowledgments
- ๐ฆ EvoScientist Team
- ๐ License
๐ค Supported Models
| Provider | Short Name | Model ID |
|---|---|---|
| Anthropic | claude-opus-4-6 |
claude-opus-4-6 |
| Anthropic | claude-opus-4-5 |
claude-opus-4-5-20251101 |
| Anthropic | claude-sonnet-4-5 |
claude-sonnet-4-5-20250929 |
| Anthropic | claude-haiku-4-5 |
claude-haiku-4-5-20251001 |
| OpenAI | gpt-4o |
gpt-4o |
| OpenAI | gpt-4o-mini |
gpt-4o-mini |
| OpenAI | o1 |
o1 |
| OpenAI | o1-mini |
o1-mini |
gemini-3-pro |
gemini-3-pro-preview |
|
gemini-3-flash |
gemini-3-flash-preview |
|
gemini-2.5-pro |
gemini-2.5-pro |
|
gemini-2.5-flash |
gemini-2.5-flash |
|
gemini-2.5-flash-lite |
gemini-2.5-flash-lite |
|
| NVIDIA | glm4.7 |
z-ai/glm4.7 |
| NVIDIA | deepseek-v3.1 |
deepseek-ai/deepseek-v3.1-terminus |
| NVIDIA | nemotron-nano |
nvidia/nemotron-3-nano-30b-a3b |
You can also use any full model ID directly โ the provider will be inferred automatically.
โ๏ธ Installation
[!TIP]
Useuvfor installation โ it's faster and more reliable thanpip.
For Development
# Create and activate a conda environment
conda create -n EvoSci python=3.11 -y
conda activate EvoSci
# Install in development (editable) mode
pip install EvoScientist
# or
pip install -e .
Option 1:
Install the latest version directly from GitHub for quick setup:
TODO
Option 2:
If you plan to modify the code or contribute to the project, you can clone the repository and install it in editable mode:
TODO
๐ Upgrade to the latest code base
git pull
uv pip install -e .
๐ API Key Configuration
EvoScientist requires API keys for LLM inference and web search. You can configure them in three ways:
Option A: Interactive Setup Wizard (Recommended)
EvoSci onboard
The wizard guides you through selecting a provider, entering API keys, choosing a model, and configuring workspace settings. Keys are validated automatically.
Option B: Environment Variables (Global)
Set keys directly in your terminal session. Add these to your shell profile (~/.bashrc, ~/.zshrc, etc.) to persist across sessions:
export ANTHROPIC_API_KEY="your_anthropic_api_key_here"
export TAVILY_API_KEY="your_tavily_api_key_here"
# Optional: OpenAI, Google, or NVIDIA provider
export OPENAI_API_KEY="your_openai_api_key_here"
export GOOGLE_API_KEY="your_google_api_key_here"
export NVIDIA_API_KEY="your_nvidia_api_key_here"
Option C: .env File (Project-level)
Create a .env file in the project root. This keeps keys scoped to the project and out of your shell history:
cp .env.example .env
Then edit .env and fill in your keys:
ANTHROPIC_API_KEY=your_anthropic_api_key_here
TAVILY_API_KEY=your_tavily_api_key_here
[!WARNING] Never commit
.envfiles containing real API keys to version control. The.envfile is already included in.gitignore.
| Key | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
For Anthropic | Anthropic API key for Claude (console.anthropic.com) |
GOOGLE_API_KEY |
For Google | Google API key for Gemini models (aistudio.google.com) |
OPENAI_API_KEY |
For OpenAI | OpenAI API key for GPT models (platform.openai.com) |
NVIDIA_API_KEY |
For NVIDIA | NVIDIA API key for NIM models (build.nvidia.com) |
TAVILY_API_KEY |
Yes | Tavily API key for web search (app.tavily.com) |
โก Quick Start
CLI Inference
You can perform inference directly from the command line using our CLI tool:
python -m EvoScientist
or
EvoSci # or EvoScientist
Optional arguments:
--mode <mode> Workspace mode: 'daemon' (persistent) or 'run' (isolated per-session)
-n, --name <name> Name for the run directory (requires --mode run; duplicates get _1, _2, โฆ)
--workdir <path> Override workspace directory for this session
--use-cwd Use current working directory as workspace
--thread-id <id> Resume a conversation thread
--no-thinking Disable thinking display
-p, --prompt <q> Single-shot mode: execute query and exit
Configuration commands:
EvoSci onboard # Interactive setup wizard
EvoSci onboard --skip-validation # Skip API key validation
EvoSci config # List all configuration values
EvoSci config get <key> # Get a single value
EvoSci config set <key> <val> # Set a single value
EvoSci config reset --yes # Reset to defaults
EvoSci config path # Show config file path
Interactive Commands:
| Command | Description |
|---|---|
/exit |
Quit the session |
/new |
Start a new session (new workspace + thread) |
/thread |
Show current thread ID and workspace path |
/channel |
Start iMessage channel (shares agent session) |
/skills |
List installed user skills |
/install-skill <source> |
Install a skill from local path or GitHub |
/uninstall-skill <name> |
Uninstall a user-installed skill |
/mcp |
List configured MCP servers and tool routing |
Skill Installation Examples:
# Install from local path
/install-skill ./my-skill
# Install from GitHub URL
/install-skill https://github.com/owner/repo/tree/main/skill-name
# Install from GitHub shorthand
/install-skill owner/repo@skill-name
iMessage Channel
EvoScientist can be controlled remotely via iMessage. The channel shares the same agent and conversation thread as the CLI โ messages from your phone go through the same session.
# Enable during onboard
EvoSci onboard # Step 7 configures iMessage
# Or enable manually
EvoSci config set imessage_enabled true
EvoSci config set imessage_allowed_senders "+1234567890"
The channel can also be started manually with /channel in the interactive CLI.
Features:
- Thinking content and todo lists are forwarded to iMessage as intermediate messages
- Media files (images, PDFs) are auto-sent when the agent writes (
write_file) or reads (read_file) them โ no extra commands needed
Runtime Directories
By default, the workspace is created under the current directory:
./workspace/
memory/ # shared MEMORY.md (persistent across sessions)
skills/ # user-installed skills
runs/ # per-session workspaces
You can force workspace to be the current directory via --use-cwd.
Override individual paths via environment variables:
| Variable | Default | Description |
|---|---|---|
EVOSCIENTIST_WORKSPACE_DIR |
./workspace |
Root workspace directory |
EVOSCIENTIST_RUNS_DIR |
./workspace/runs |
Per-session run directories |
EVOSCIENTIST_MEMORY_DIR |
./workspace/memory |
Shared memory storage |
EVOSCIENTIST_SKILLS_DIR |
./workspace/skills |
User-installed skills |
Script Inference
from EvoScientist import EvoScientist_agent
from langchain_core.messages import HumanMessage
from EvoScientist.utils import format_messages
thread = {"configurable": {"thread_id": "1"}}
question = "Hi?"
last_len = 0
for state in EvoScientist_agent.stream(
{"messages": [HumanMessage(content=question)]},
config=thread,
stream_mode="values",
):
msgs = state["messages"]
if len(msgs) > last_len:
format_messages(msgs[last_len:])
last_len = len(msgs)
Output
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๐ง Human โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Hi? โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๐ AI โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Hi! I'm here to help you with experimental research tasks. I can assist with: โ
โ โ
โ - **Planning experiments** - designing stages, success criteria, and workflows โ
โ - **Running experiments** - implementing baselines, training models, analyzing results โ
โ - **Research** - finding papers, methods, datasets, and baselines โ
โ - **Analysis** - computing metrics, creating visualizations, interpreting results โ
โ - **Writing** - drafting experimental reports and documentation โ
โ โ
โ What would you like to work on today? โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Web Interface
TODO
๐ MCP Tools
EvoScientist supports MCP servers, allowing you to extend agents with external tools (databases, APIs, etc.).
Adding Servers
The quickest way to add an MCP server is from the CLI:
# stdio transport (auto-detected from command)
EvoSci mcp add filesystem npx -- -y @modelcontextprotocol/server-filesystem /tmp
# http transport (auto-detected from URL)
EvoSci mcp add brave-search http://localhost:8080/mcp -H "Authorization:Bearer ${BRAVE_API_KEY}"
# sse transport, routed to a specific agent
EvoSci mcp add my-sse http://localhost:9090/sse --transport sse -e research-agent
# With tool allowlist
EvoSci mcp add fs npx -- -y @modelcontextprotocol/server-filesystem /tmp -t read_file,write_file
Or from the interactive CLI:
/mcp add filesystem npx -y @modelcontextprotocol/server-filesystem /tmp
/mcp remove filesystem
/mcp list
Options:
| Flag | Description |
|---|---|
--tools, -t |
Comma-separated tool allowlist (omit = all tools) |
--expose-to, -e |
Comma-separated target agents (default: main) |
--header, -H |
HTTP header as Key:Value (repeatable) |
--env |
Env var as KEY=VALUE for stdio (repeatable) |
YAML Configuration
Servers are stored in ~/.config/evoscientist/mcp.yaml. You can also edit this file directly:
filesystem:
transport: stdio
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
tools: [read_file, write_file] # optional allowlist (omit = all tools)
expose_to: [main, code-agent] # optional routing (omit = ["main"])
brave-search:
transport: http
url: "http://localhost:8080/mcp"
headers:
Authorization: "Bearer ${BRAVE_API_KEY}"
expose_to: [research-agent]
Use ${VAR} syntax to reference environment variables in config values.
Supported Transports
| Transport | Config Fields |
|---|---|
stdio |
command, args, env (optional) |
http |
url, headers (optional) |
sse |
url, headers (optional) |
websocket |
url |
Tool Routing
Use expose_to to control which agents receive each server's tools:
mainโ the main EvoScientist orchestrator agent- Any subagent name (
code-agent,research-agent,debug-agent,planner-agent,data-analysis-agent,writing-agent)
Tools routed to subagents are injected automatically โ no need to edit subagent.yaml. All MCP tools are also registered in the tool registry, so they can be referenced by name in subagent.yaml if needed.
Editing Servers
Update individual fields on an existing server without re-adding it:
# Change routing
EvoSci mcp edit filesystem --expose-to main,code-agent
# Set a tool allowlist
EvoSci mcp edit filesystem --tools read_file,write_file
# Clear a tool allowlist (pass all tools)
EvoSci mcp edit filesystem --tools none
# Change URL
EvoSci mcp edit my-api --url http://new-host:9090/mcp
Or interactively: /mcp edit filesystem --expose-to main,code-agent
Management Commands
EvoSci mcp # List configured servers
EvoSci mcp list # List configured servers
EvoSci mcp add ... # Add a server
EvoSci mcp edit ... # Edit an existing server
EvoSci mcp remove ... # Remove a server
All commands also work interactively: /mcp, /mcp list, /mcp add ..., /mcp edit ..., /mcp remove <name>.
๐ Evaluation
TODO
๐ Citation
If you find our paper and code useful in your research and applications, please cite using this BibTeX:
TODO
๐ Acknowledgments
This project builds upon the following outstanding open-source works:
- Deep Agents โ A framework for building AI agents that can interact with various tools and environments.
- Deep Agents UI โ A user interface for visualising and managing Deep Agents.
We thank the authors for their valuable contributions to the open-source community.
๐ฆ EvoScientist Team
|
Xi Zhangโ |
Yougang Lyu |
Dinos Papakostas |
โ Project Leader
For any enquiries or collaboration opportunities, please contact: EvoScientist.ai@gmail.com
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evoscientist-0.0.1.dev6.tar.gz.
File metadata
- Download URL: evoscientist-0.0.1.dev6.tar.gz
- Upload date:
- Size: 157.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef767a2eb91971bd62714b3b636345feb56c2932f6c794c641729ea3ae3330df
|
|
| MD5 |
4e3d5a16df2bfbefd88a4a7232e35c25
|
|
| BLAKE2b-256 |
0acadc0afc1508393e85946b76151bc4a48d3702b5e2bad9b8ff96d7ff183a19
|
File details
Details for the file evoscientist-0.0.1.dev6-py3-none-any.whl.
File metadata
- Download URL: evoscientist-0.0.1.dev6-py3-none-any.whl
- Upload date:
- Size: 145.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8244d8344b54f3d30f074579664619b68611826e24126e16caac23fc0728bbcc
|
|
| MD5 |
61bee5945d1078a4736cad312f49a348
|
|
| BLAKE2b-256 |
4e28b760a52aa688f503e4cd754fb762a557035cf6b185b6f6fc783941f26d11
|