houren Antony 2dc1e227eb fix(langgraph-dev): rotate langgraph_dev.log when it exceeds 50MB (#270)
* fix(langgraph-dev): rotate langgraph_dev.log when it exceeds 50MB

``_LOG_FILE`` (``~/.config/evoscientist/langgraph_dev.log``) was
opened in ``start_langgraph_dev`` with plain ``"ab"`` and never
rotated, so it grew unbounded over weeks/months of heavy use —
especially when chatty MCP servers spawned by langgraph dev
filled it, or when failure paths produced stack traces.

Implement the recommended option 1 from #209: filesize-based
rollover. When the active log exceeds 50MB on the next
``start_langgraph_dev`` invocation, rename it to
``langgraph_dev.log.1`` (overwriting any existing backup) via
``os.replace`` and start fresh. Single-backup policy keeps the
disk footprint bounded at roughly 2x threshold.

Rotation is best-effort: ``_rotate_log_if_needed`` logs and
swallows OSError so a permission error or racing rename can't
block langgraph dev from starting. The next ``start`` invocation
will try again — worst case the log grows for one more session.

Options 2 (timestamped per-session + 7-day sweep) and 3
(``RotatingFileHandler`` + pipe) are explicitly NOT done — option
1 is simplest, no async machinery, matches the issue's
recommendation.

Closes #209

* test(langgraph-dev): redirect _PID_DIR in rotate integration test

Address CodeRabbit review comment on #270: the
``TestStartLanggraphDevRotatesLog::test_rotate_called_before_open``
test patched only ``_LOG_FILE`` to a tmp path, but
``start_langgraph_dev`` also calls ``_PID_DIR.mkdir(...)`` as part
of its prelude, which would create a real directory under
``~/.config/evoscientist/`` on a dev machine. Redirect
``_PID_DIR`` to ``tmp_path / "pids"`` too so the test stays
fully isolated. Add a final assertion that ``pid_dir.is_dir()``
holds, proving the function reached past the mkdir call.

* refactor(langgraph-dev): bundle runtime paths into LanggraphRuntimePaths

@din0s review follow-up on #270: the previous test isolation patched
only ``_LOG_FILE`` (and after a second round, ``_PID_DIR``), but
``start_langgraph_dev`` still touches 5 distinct on-disk paths. Patching
any subset of those still leaves the others pointing at the user's real
``~/.config/evoscientist/`` — exactly the case that produced the
"Port 6174 cannot be bound after waiting 60s" symptom on the
reviewer's machine.

Replace the five free-floating module-level constants
(``_PID_DIR`` / ``_PID_FILE`` / ``_LOG_FILE`` / ``_WORKSPACE_SIDECAR``
/ ``_FILE_LOCK_PATH``) with a single ``LanggraphRuntimePaths`` frozen
dataclass exposed as a module-level ``RUNTIME`` instance. Production
code accesses ``RUNTIME.pid_file`` etc.; tests can now substitute the
*whole* bundle in one assignment:

    monkeypatch.setattr(
        manager, "RUNTIME",
        manager.LanggraphRuntimePaths.for_directory(tmp_path / "runtime"),
    )

The classmethod ``for_directory(pid_dir)`` builds an isolated bundle
rooted at a single dir, so the test author doesn't spell out every
path field. Tests that only care about one field (e.g. pid_file
during the stale-process kill path) use
``dataclasses.replace(manager.RUNTIME, pid_file=X)`` — frozen
dataclass-friendly, no need to enumerate the other four fields.

The dataclass's docstring records the migration rationale (the old
five-name layout invited inconsistent patches).

External callers of the old constants updated:
- ``EvoScientist/deploy/server.py`` and ``webui.py`` now import
  ``RUNTIME`` and use ``RUNTIME.log_file`` for the on-screen log
  path hint. The other imports they had (``_DEFAULT_PORT``,
  ``_is_port_occupied``, ``_read_workspace_sidecar``) are still
  module-level functions/values, untouched.

Test updates:
- ``tests/test_langgraph_manager.py``: ``patch.object(manager, "_XXX",
  X)`` patterns now go through ``dataclasses.replace(manager.RUNTIME,
  xxx=X)``; the ``TestStartLanggraphDevRotatesLog::test_rotate_called_before_open``
  test (from the previous #270 review iteration) uses
  ``for_directory`` for one-shot isolation.
- ``tests/test_langgraph_dev_workspace_sidecar.py``: each test now
  goes through a tiny ``_isolated_runtime(monkeypatch, tmp_path)``
  helper that calls ``for_directory``.
- ``tests/test_langgraph_dev_deploy_mode.py``: same ``for_directory``
  swap.

No production behavior change. All ``langgraph_dev``-side tests
(``test_langgraph_manager.py`` 26/26, ``test_langgraph_dev_workspace_sidecar.py``
14/14, ``test_langgraph_dev_deploy_mode.py`` 14/14, ``test_cli_deploy.py``
18/18 — which indirectly exercises deploy/server.py and deploy/webui.py
imports) pass. Full-project test count unchanged from baseline; the
remaining 22 Windows-only pre-existing failures (test_background
``os.killpg``, test_file_mentions tilde, mcp_client ``shutil.which``,
test_sessions 8.3 short path) are documented as out-of-scope for #207.

* style: apply ruff format to langgraph_dev test + module files

CI lint check on #270 failed:

  Run ruff format --check .
  Would reformat: EvoScientist/langgraph_dev/manager.py
  Would reformat: tests/test_langgraph_manager.py

Plus two test files touched by the prior consolidation commit that
``ruff format`` hadn't seen yet:

  tests/test_langgraph_dev_deploy_mode.py
  tests/test_langgraph_dev_workspace_sidecar.py

Just formatting. No logic change. All 75 refactor-related tests pass.

* fix(test): use for_directory for full path isolation + patch _can_bind_port to skip real socket ops

Two fixes for TestStartLanggraphDevRotatesLog:

1. Replace dataclasses.replace(manager.RUNTIME, ...) with
   LanggraphRuntimePaths.for_directory(pid_dir) so pid_file,
   workspace_sidecar, and lock_file are also temp-rooted
   (prevents leak to ~/.config/evoscientist/).

2. Monkeypatch _can_bind_port to always return True so the
   bind-poll loop in _wait_for_port_bindable passes immediately
   without touching real sockets (fixes 60s timeout on machines
   where port 6174 is already in use).

* fix: cross-platform compatibility for Windows CI runners

- background.py: replace POSIX-only os.killpg/os.getpgid with
  cross-platform _kill_process_tree() helper. On Windows falls back
  to Popen.terminate()/Popen.kill() (TerminateProcess); on POSIX
  keeps existing os.killpg logic.

- test_backends.py: replace mkdir -p shell execution in
  test_literal_workspace_path_replaced with preprocessing-boundary
  assertion (patch LocalShellBackend.execute, capture command,
  assert workspace path was rewritten to ./). Avoids POSIX-only
  mkdir -p on Windows runners.

- test_file_mentions.py: monkeypatch USERPROFILE on Windows so
  ntpath.expanduser() resolves ~ to tmp_path even when HOME is
  unset on CI runners.

* refactor(test): add runtime_paths fixture to isolate manager.RUNTIME

Adds a reusable fixture that monkeypatches manager.RUNTIME to a
temp-rooted LanggraphRuntimePaths.for_directory(). Tests that need
specific fields can still dataclasses.replace(runtime_paths, ...)
but the baseline is always temp-isolated, preventing leaks to
~/.config/evoscientist/.

Updated test_langgraph_dev_deploy_mode.py, test_langgraph_dev_workspace_sidecar.py,
and test_langgraph_manager.py to use the fixture, consolidating sequential
lock_file + pid_dir patches into single dataclasses.replace calls.

* Revert "fix: cross-platform compatibility for Windows CI runners"

This reverts commit eb025d24af32e195a982cd40f6d70dba885c4019.

* style: ruff format conftest.py

* fix: address review issues in log-rotation + runtime paths

- Use for_directory(tmp_path/pids) as base in ensure_langgraph_dev tests
  so pid_file/log_file are co-located with pid_dir, not split across paths
- Remove unused runtime_paths param from test_no_existing_file_is_noop
- Replace manager.RUNTIME with runtime_paths in two sidecar tests
- Use for_directory(DEFAULT_PID_DIR) instead of explicit construction
- Fix stale _LOG_FILE reference in TestRotateLogIfNeeded docstring

* style: ruff format test files

---------

Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-06-09 15:55:44 +01:00
2026-06-07 00:52:59 +01:00
2026-03-11 11:09:44 +00:00
2026-06-07 00:52:59 +01:00
2026-06-07 00:52:59 +01:00
2026-06-07 00:52:59 +01:00

EvoScientist Logo

Typing SVG

English | 简体中文

EvoScientist aims to harness vibe research by enabling self-evolving AI scientists that autonomously explore, generate insights, and iteratively improve. It is designed to be opinionated and ready to use out of the box, offering a living research system that grows alongside evolving agent skills, toolsets, and memory bases. Moving beyond traditional human-in-the-loop systems, EvoScientist adopts a human-on-the-loop paradigm, where AI acts as a research buddy that co-evolves with human researchers and internalizes scholarly taste and scientific judgment.

🏆 Awards & Recognition

ICAIS 2025 Awards
Best Paper & Appraisal Award
Best Paper
AI-Generated Best Paper
DeepResearch Bench II #1
#1 on DeepResearch Bench II

DeepResearch Bench #1
#1 on DeepResearch Bench
AstaBench Code & Execution #1
#1 on AstaBench Code & Execution
AstaBench Data Analysis #1
#1 on AstaBench Data Analysis

⚡ Unified Control, Different Surfaces

🖥️ CLI / TUI / WebUI

📱 Mobile

✨ Features

  • 🤖 Multi-Agent Team — 6 sub-agents (plan, research, code, debug, analyze, write) working in concert.
  • 🧠 Self-Evolving Memory — User profile and observations auto-distilled each turn, growing across sessions.
  • 🌐 Multi-Provider — Anthropic, OpenAI, Google, MiniMax, NVIDIA — one config to switch.
  • 📱 Multi-Channel — CLI as the hub; Telegram, Slack, Feishu, WeChat, and more — one agent session.
  • 🖥️ Browser WebUI (beta) — Workspace-panel web app, one terminal via --ui webui.
  • 🔬 Scientific Workflow — Intake → plan → execute → evaluate → write → verify.
  • 🔄 Code Generation Modes — More Effort (iterative refinement), continuously improving code quality.
  • ⚡ Adaptive Tools — Per-turn tool selection keeps only relevant tools visible, reducing noise.
  • ✂️ Context Editing — Dynamic system prompt rewriting based on conversation state.
  • 🔌 MCP & Skills — Plug in MCP servers or install skills from GitHub on the fly.

Tip

Looking for ready-to-use research skills? Check out EvoSkills — powered by EvoScientist's engine and installable skills, the entire end-to-end research lifecycle is covered out of the box. EvoSkills are also compatible with other CLI coding agents.

🔥 News

📦 Release Highlights — version changelog
  • [07 Jun 2026] v0.1.4 — Auxiliary model for background tasks & tool selection, observation-memory lifecycle, Qwen3.7-Max/Plus (DashScope), UI-backend selection, plus an OpenRouter multi-turn reasoning fix.
  • [03 Jun 2026] v0.1.3 — Multimodal handling (image + PDF/doc flatten/hoisting, text-only model fallback), runtime-context middleware, memory middleware → profile files with stream timeline narration, textual CJK-input fix.
  • [02 Jun 2026] v0.1.2 — Browser WebUI mode (beta), EvoSci deploy standalone LangGraph server, default model → claude-sonnet-4-6, MiniMax M3, plus sandbox-timeout and async-notifier channel-routing fixes.
  • [19 May 2026] v0.1.1 — deepagents 0.6.2 DeltaChannel upgrade, tier-aware skill mounts, status & elapsed-time bar, QQ inline buttons.
  • [08 May 2026] v0.1.0 — Async sub-agents (langgraph dev), official Docker image, personal WeChat, sessions-DB compaction.
  • [26 Apr 2026] v0.0.9 — Faster startup, in-session model switching, unified slash commands, DeepSeek V4 thinking fix.
  • [21 Apr 2026] v0.0.8 — Unified data directory, status bar, enhanced ask-user & auto-mode.
  • [10 Apr 2026] v0.0.7 — Global skills directory, Moonshot/Kimi providers, ccproxy fixes, channel improvements.
  • [03 Apr 2026] v0.0.6 — Dynamic context management, OpenRouter reasoning, More Effort mode, GLM-5.1.
  • [27 Mar 2026] v0.0.5 — Context-retry middleware, OpenAI relay config, Feishu event-loop fix, /compact.
  • [24 Mar 2026] v0.0.4 — @file mentions, resume history, Feishu WebSocket, LaTeX setup.
  • [20 Mar 2026] v0.0.3 — Voice input (STT), MiniMax/DeepSeek providers, MCP & skill browsers.
  • [17 Mar 2026] v0.0.2 — OAuth sign-in, human-in-the-loop & ask_user, headless serve mode.
  • [13 Mar 2026] v0.0.1 — First public release of the self-evolving AI Scientist.

📖 Table of Contents

📦 Installation

Tip

Requires Python 3.11+ (< 3.14). We recommend uv or conda for dependency management and virtual environments. Prefer to skip a local Python install entirely? Jump to 🐳 Docker.

🪛 Install uv (if you don't have it)
curl -LsSf https://astral.sh/uv/install.sh | sh

Quick Install

uv tool install EvoScientist

Note

To update an existing installation to the latest version, use uv tool upgrade:

uv tool upgrade EvoScientist

Or install into the current environment instead:

uv pip install EvoScientist

Latest from GitHub

To get the latest patches before a PyPI release:

uv pip install git+https://github.com/EvoScientist/EvoScientist.git

Development Install

git clone https://github.com/EvoScientist/EvoScientist.git
cd EvoScientist
uv sync --dev

enable pre-commit hooks:

uv run pre-commit install
Using conda
conda create -n EvoSci python=3.11 -y
conda activate EvoSci
pip install -e ".[dev]"
Using PyPi
pip install EvoScientist          # quick install
pip install -e ".[dev]"           # development install
Optional: Channel dependencies

Messaging channel integrations require extra dependencies. Install only what you need:

uv pip install "EvoScientist[telegram]"     # Telegram
uv pip install "EvoScientist[discord]"      # Discord
uv pip install "EvoScientist[slack]"        # Slack
uv pip install "EvoScientist[wechat]"       # WeChat
uv pip install "EvoScientist[qq]"           # QQ
uv pip install "EvoScientist[feishu]"       # Feishu
uv pip install "EvoScientist[all-channels]" # everything
Upgrade to the latest code base
git pull && uv sync --dev

🐳 Docker

A pre-built image is published to GitHub Container Registry with everything evosci onboard would otherwise install for you:

  • Python 3.11, EvoScientist, and the cross-platform messaging channels (i.e., EvoScientist[all-channels])
  • uv — used by the MCP registry to install Python MCP servers on demand
  • Node.js 24 LTS + npx — required by the majority of MCP servers

The iMessage channel isn't usable from the container — it requires the imsg CLI talking to macOS's Messages.app, which is host-OS-specific. Run EvoScientist directly on macOS if you need iMessage.

Running EvoScientist in a container also sandboxes the agent's shell access — file edits and shell commands stay confined to volumes you explicitly mount.

docker run -it --rm \
  --env-file .env \
  -v "$(pwd)/workspace:/workspace" \
  -v evosci-data:/home/evosci/.evoscientist \
  ghcr.io/evoscientist/evoscientist:latest

What the mounts are for:

Mount Purpose
--env-file .env API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, …)
./workspace:/workspace The agent's working directory
evosci-data:/home/evosci/.evoscientist Persistent app state: sessions DB, global skills, memories, and config.yaml/mcp.yaml

Important

The image runs as a non-root user (evosci, UID 1000). For the ./workspace bind mount, the host directory must be writable by that UID. If your host user ID differs, either chown -R 1000:1000 ./workspace once, or pass --user "$(id -u):$(id -g)" on every docker run so the container takes on your UID.

Or use docker compose (a starter docker-compose.yml is included):

docker compose run --rm evoscientist

To build the image locally instead of pulling:

docker build -t evoscientist:dev .

Note

Not bundled — install on demand by deriving from the image:

  • stt (speech-to-text via faster-whisper) and oauth (ccproxy-api)
  • TinyTeX / LaTeX (pdflatex, latexmk) for paper-writing skills
FROM ghcr.io/evoscientist/evoscientist:latest

# Python extras
USER root
RUN uv pip install --python /opt/venv/bin/python "EvoScientist[stt,oauth]"
USER evosci

# TinyTeX
# The official install method is `curl | sh`; if you'd rather not
# pipe an unpinned remote script into a shell, fetch a specific TinyTeX
# release tarball from https://github.com/rstudio/tinytex-releases, verify
# its checksum, and extract to /home/evosci/.TinyTeX instead.
RUN curl -sL https://yihui.org/tinytex/install-bin-unix.sh | sh \
 && /home/evosci/.TinyTeX/bin/*/tlmgr install latexmk

🔝Back to top

🔑 Configuration

The easiest way to configure API keys is the interactive wizard:

EvoSci onboard

Tip

It walks you through provider selection, key validation, model choice, and workspace mode. Supports OAuth sign-in for CLI coding agent subscribers — no API key needed.

onboard

📟 Manual configuration via environment variables

Set at least one LLM provider key and (optionally) a search key:

# Pick one LLM provider
export ANTHROPIC_API_KEY="sk-..."   # Claude  — console.anthropic.com
export OPENAI_API_KEY="sk-..."      # GPT    — platform.openai.com
export GOOGLE_API_KEY="AI..."       # Gemini  — aistudio.google.com/api-keys
export MINIMAX_API_KEY="sk-..."     # MiniMax — platform.minimaxi.com (China, default) or platform.minimax.io (Global)
export MINIMAX_BASE_URL="https://api.minimax.io/anthropic"  # only needed for Global keys (default: https://api.minimaxi.com/anthropic)
export NVIDIA_API_KEY="nvapi-..."   # NIM    — build.nvidia.com

# Web search (optional)
export TAVILY_API_KEY="tvly-..."    # app.tavily.com

Or use EvoSci config set to persist keys in ~/.config/evoscientist/config.yaml.

Alternatively, copy the example .env file for project-level configuration:

cp .env.example .env  # then fill in your keys

⚠️ Never commit .env files with real keys. It is already in .gitignore.

🔝Back to top

⚡ Quick Start

EvoSci  # or EvoScientist — interactive mode (TUI by default)

demo

Run EvoSci -h for all CLI options.

cli help

Tip

Prefer a browser? Run EvoSci --ui webui for the web workspace UI (beta). Need to copy long outputs? Use --ui cli for classic mode where native terminal copy works freely. On macOS, iTerm2 users can also hold ⌥ Option while dragging to select, then ⌘+C.

Common examples
EvoSci                            # interactive mode (TUI by default)
EvoSci -p "your question"        # single-shot mode
EvoSci --workdir /path/to/project # open in a specific directory
EvoSci -m run                     # isolated per-session workspace
EvoSci --ui cli                   # classic CLI (lightweight)
EvoSci --ui webui                 # browser workspace UI (beta, needs Node/npx)
EvoSci serve                      # headless mode — channels only, no interactive prompt
EvoSci deploy                     # standalone LangGraph server for external UIs / SDK clients
Browser WebUI (beta)

Set the UI backend to webui and a fresh EvoSci session launches a deploy-style LangGraph server and the @evoscientist/webui front-end in one terminal — no second process to manage:

EvoSci config set ui_backend webui   # persist; or one-off with `EvoSci --ui webui`
EvoSci                               # opens http://localhost:4716
EvoSci config set webui_port 4800    # change the front-end port (must differ from the langgraph dev port)

Requires Node.js 24 LTS (for npx); the first launch downloads @evoscientist/webui and needs network. Beta: the WebUI does not show your CLI/TUI chat history, and -p / --resume fall back to the classic CLI.

Action Approval

By default, shell commands (execute tool) require human approval before running. To skip approval prompts:

# Per-session: auto-approve via CLI flag
EvoSci --auto-approve
EvoSci -p "query" --auto-approve

# Persistent: set in config (applies to all future sessions)
EvoSci config set auto_approve true

# Or allow only specific command prefixes
EvoSci config set shell_allow_list "python,pip,pytest,ruff,git"

During a session you can also reply 3 (Approve all) at any approval prompt to auto-approve for the rest of that session.

Agent Questions

The agent can proactively ask you questions when it needs clarification (e.g., dataset choice, experiment direction). This is enabled by default. To disable:

# Persistent: set in config
EvoSci config set enable_ask_user false

# Re-enable
EvoSci config set enable_ask_user true
In-session commands
Command Description
/current Show current session info
/threads List recent sessions
/resume Resume a previous session
/delete Delete a saved session
/new Start a new session
/clear Clear chat history
/skills List installed skills
/install-skill <src> Add a skill from path or GitHub
/uninstall-skill <name> Remove an installed skill
/mcp Manage MCP servers
/channel Configure messaging channels
/help Show available commands
/exit Quit
Script Inference
from EvoScientist import EvoScientist_agent
from langchain_core.messages import HumanMessage
from EvoScientist.utils import format_messages

thread = {"configurable": {"thread_id": "1"}}
last_len = 0

for state in EvoScientist_agent.stream(
    {"messages": [HumanMessage(content="Hi?")]},
    config=thread,
    stream_mode="values",
):
    msgs = state["messages"]
    if len(msgs) > last_len:
        format_messages(msgs[last_len:])
        last_len = len(msgs)

🔝Back to top

🍪 Examples & Recipes

A curated collection of official examples, advanced usage patterns, and community-contributed recipes to help you get the most out of EvoScientist.

👉 Browse all examples & recipes

🔝Back to top

🔌 MCP Integration

Add external tools via MCP servers with a single command:

# Usage
EvoSci mcp add <name> <command> [-- args...]

# Example
EvoSci mcp add sequential-thinking npx -- -y @modelcontextprotocol/server-sequential-thinking

Tip

For command options, config fields, tool routing, wildcard filtering, and troubleshooting, see the MCP Integration Guide.

🔝Back to top

📱 Channels

Connect messaging platforms so they share the same agent session as the CLI:

# Usage
EvoSci channel setup <channel>

# Example
EvoSci channel setup telegram

Multiple channels can run concurrently — comma-separate names in the config:

channel_enabled: "telegram,slack,feishu,qq"

The channel can also be started interactively with /channel in the CLI session.

Tip

For per-channel setup guides, capability matrix, architecture details, and troubleshooting, see the Channel Integration Guide.

🔝Back to top

📚 Acknowledgments

This project builds upon the following outstanding open-source works:

  • LangChain — A framework for building agents and LLM-powered applications.
  • DeepAgents — The batteries-included agent harness.

We thank the authors for their valuable contributions to the open-source community.

🔝Back to top

🎯 ᯓ➤ Roadmap

Coming soon:

  • 🖥️ Full-screen TUI and classic CLI interfaces
  • 📻 EvoMemory v1.0 shipped
  • ⚒️ 200+ predefined skills built in
  • 🧩 Built-in research-lifecycle skills shipped
  • 👋 Human-in-the-loop action approval
  • 🦾 Agent-initiated human clarification
  • 📑 Technical report on the way
  • 🔐 OAuth sign-in (CLI coding agent subscribers)
  • 📺 Web app with workspace UI (beta)
  • 📹 Demo and tutorial in the works
  • 📊 Benchmark suite to be released
  • ⏰ Scheduled tasks for the core system planned

Stay tuned — more features are on the way!

🔝Back to top

🌍 Project Roles

Core Contributors

Xi Zhang
Xi Zhang
Yougang Lyu
Yougang Lyu
Dinos Papakostas
Dinos Papakostas
Yuyue Zhao
Yuyue Zhao
Ziheng Zhang
Ziheng Zhang
Xiaohui Yan
Xiaohui Yan

Contributors

Jan Piotrowski, Wiktor Cupiał, Jakub Kaliski, Jakub Filipiuk, Xinhao Yi, Shuyu Guo, Andreas Sauter, Wenxiang Hu, Jacopo Urbani, Zaiqiao Meng, Jun Luo, Lun Zhou

Xiaoyi DeepResearch Xiaoyi DeepResearch Team and the wider open-source community contribute to this project.

For any inquiries or collaboration opportunities, please contact: EvoScientist.ai@gmail.com

🔝Back to top

🤝 Contributing

EvoScientist Team

We welcome contributions from developers, researchers, and AI coding agents at all levels. Our Contributing Guidelines are designed for both humans and AI agents — covering architecture, patterns, extension guides, and code standards to help you contribute safely and effectively.

👥 Community Contributors

⚗️ Join the EvoScientist community to discuss AI-driven research, share experiment results, and help shape the future of automated scientific discovery.

  • Discord — Ask questions, share findings, and collaborate with researchers and developers in real-time.

  • WeChat — Connect with our Chinese-speaking research community.

    WeChat QR Code

Every contribution brings us one step closer to a future where AI accelerates scientific breakthroughs for all of humanity.

🔝Back to top

📝 Citation

If you find our paper and code useful in your research and applications, please cite using this BibTeX:

@article{evoscientist2026, 
  title={EvoScientist: Towards Multi-Agent Evolving AI Scientists for End-to-End Scientific Discovery}, 
  author={Yougang Lyu and Xi Zhang and Xinhao Yi and Yuyue Zhao and Shuyu Guo and Wenxiang Hu and Jan Piotrowski and Jakub Kaliski and Jacopo Urbani and Zaiqiao Meng and Lun Zhou and Xiaohui Yan}, 
  journal={arXiv preprint arXiv:2603.08127}, 
  year={2026} 
}

🔝Back to top

📜 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

🔝Back to top

S
Description
No description provided
Readme 70 MiB
v0.2.3 Latest
2026-08-13 11:03:15 +08:00
Languages
Python 98.8%
HTML 1.2%