Skip to main content

EvoScientist: Towards Self-Evolving AI Scientists for End-to-End Scientific Discovery

Project description

EvoScientist Logo EvoScientist

Typing SVG

PyPI Project Page License

๐Ÿ”ฅ News

TODO

  • [27 Sep 2025] โ›ณ Our preprint is now live on [arXiv] โ€” check it out for details.

Overview

TODO

๐Ÿ“– Contents

๐Ÿค– 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
Google gemini-3-pro gemini-3-pro-preview
Google gemini-3-flash gemini-3-flash-preview
Google gemini-2.5-pro gemini-2.5-pro
Google gemini-2.5-flash gemini-2.5-flash
Google 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]
Use uv for installation โ€” it's faster and more reliable than pip.

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 .env files containing real API keys to version control. The .env file 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:

demo

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

demo

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 root is the current working directory. Sub-directories are created automatically:

<cwd>/
  memory/   # shared MEMORY.md (persistent across sessions)
  skills/   # user-installed skills
  runs/     # per-session workspaces (run mode only)

Use --workdir to set a different workspace root, or configure it via EvoSci config set default_workdir /path/to/workspace.

Override individual paths via environment variables:

Variable Default Description
EVOSCIENTIST_WORKSPACE_DIR current directory 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 (supports glob wildcards)
EvoSci mcp add fs npx -- -y @modelcontextprotocol/server-filesystem /tmp -t "read_*,write_*"

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, supports glob wildcards (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_*", "write_*"]       # optional allowlist with wildcards (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 (supports glob wildcards)
EvoSci mcp edit filesystem --tools "read_*,write_*"

# 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
Xi Zhangโ€ 
Yougang Lyu
Yougang Lyu
Dinos Papakostas
Dinos Papakostas
Ziheng Zhang
Ziheng Zhang

โ€  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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evoscientist-0.0.1.dev8.tar.gz (263.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evoscientist-0.0.1.dev8-py3-none-any.whl (246.2 kB view details)

Uploaded Python 3

File details

Details for the file evoscientist-0.0.1.dev8.tar.gz.

File metadata

  • Download URL: evoscientist-0.0.1.dev8.tar.gz
  • Upload date:
  • Size: 263.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for evoscientist-0.0.1.dev8.tar.gz
Algorithm Hash digest
SHA256 d7ab5631f42c78cd542751845dc861fdddacc3602ade5e4b5ce650fe0ff234ce
MD5 818d5d8452edbe9507ac303422c41e30
BLAKE2b-256 a215b506829b3f2cda451ec185f2f5e9c0f7f3ee269fc40b598f3e882c73b1e2

See more details on using hashes here.

File details

Details for the file evoscientist-0.0.1.dev8-py3-none-any.whl.

File metadata

File hashes

Hashes for evoscientist-0.0.1.dev8-py3-none-any.whl
Algorithm Hash digest
SHA256 85faf57790f70e3f0d1ad5594c71d27fce5623bd40d338688664bcd9d6ec8079
MD5 a290006e9cac0c2a29402b16f565841d
BLAKE2b-256 a9bcd88a2c11356d937dd8a2746aae42823c8550d4d6b9c204f420b47091cfd1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page