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


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.dev6.tar.gz (157.4 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.dev6-py3-none-any.whl (145.2 kB view details)

Uploaded Python 3

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

Hashes for evoscientist-0.0.1.dev6.tar.gz
Algorithm Hash digest
SHA256 ef767a2eb91971bd62714b3b636345feb56c2932f6c794c641729ea3ae3330df
MD5 4e3d5a16df2bfbefd88a4a7232e35c25
BLAKE2b-256 0acadc0afc1508393e85946b76151bc4a48d3702b5e2bad9b8ff96d7ff183a19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for evoscientist-0.0.1.dev6-py3-none-any.whl
Algorithm Hash digest
SHA256 8244d8344b54f3d30f074579664619b68611826e24126e16caac23fc0728bbcc
MD5 61bee5945d1078a4736cad312f49a348
BLAKE2b-256 4e28b760a52aa688f503e4cd754fb762a557035cf6b185b6f6fc783941f26d11

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