by xuzhougeng
Open-source, local-first desktop AI research workbench for scientific computing with Python/R, MCP bioinformatics tools, SSH/WSL/GPU runtimes, and OpenAI/Anthropic models.
# Add to your Claude Code skills
git clone https://github.com/xuzhougeng/wisp-sciencewisp-science is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by xuzhougeng. Open-source, local-first desktop AI research workbench for scientific computing with Python/R, MCP bioinformatics tools, SSH/WSL/GPU runtimes, and OpenAI/Anthropic models. It has 149 GitHub stars.
wisp-science's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/xuzhougeng/wisp-science" and add it to your Claude Code skills directory (see the Installation section above).
wisp-science is primarily written in HTML. It is open-source under xuzhougeng on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh wisp-science against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Wisp Science is an open-source, local-first desktop AI research assistant
and scientific computing workbench. It connects to OpenAI-compatible and
Anthropic models, runs persistent Python and R environments on local, SSH, WSL,
and GPU compute, loads reusable Agent Skills (SKILL.md), and reaches ~80
bioinformatics and computational biology databases through bundled Model
Context Protocol (MCP) servers.
Built with Rust, Tauri v2, and Leptos, Wisp Science runs as a cross-platform desktop app or a headless CLI.
Our manifesto: Wisp Science is open source and borderless. We are building a scientific workbench that anyone, anywhere can use, study, improve, and share.
Status: MVP vertical slice. The agent loop, streaming providers, tools, Python/R REPLs, SQLite store, MCP client, and Leptos UI all build and run. See Roadmap for what is deferred.
wisp-science/
├─ crates/
│ ├─ wisp-llm/ Provider trait + OpenAI-compatible + Anthropic + SSE + RoutedProvider
│ ├─ wisp-core/ ContextManager (3-tier compaction), SystemPrompt, agent_loop, memory
│ ├─ wisp-tools/ read/write/edit/search/grep/shell/attempt_completion + Windows safety
│ ├─ wisp-store/ sqlx SQLite (projects/frames/messages/artifacts/settings) + OS keyring
│ ├─ wisp-skills/ SKILL.md discovery + use_skill tool (bundled catalog at skills/)
│ ├─ wisp-runtime/ project-scoped Python/R runtime manager + REPL tools
│ ├─ wisp-mcp/ stdio JSON-RPC MCP client + McpTool adapter (bundled bio-tools)
│ ├─ wisp-acp/ ACP v1 stdio client for external coding agents
│ ├─ wisp-sync/ Encrypted snapshot protocol + self-hosted relay server
│ └─ wisp-cli/ `wisp-science` headless binary
├─ src-tauri/ Tauri v2 desktop shell (commands + agent event stream)
├─ ui/ Leptos CSR frontend (built by Trunk, loaded in WebView2)
├─ python/ kernel_worker.py + mock MCP server (uv-managed)
├─ r/ optional system-R kernel worker (requires jsonlite)
├─ skills/ Bundled SKILL.md catalog (29 science workflows)
├─ mcp-servers/ Bundled MCP servers (bio-tools: ~80 DB clients)
└─ seed/ Bundled demo session recordings (CRISPR / enzyme / extremophile / immunotherapy)
wasm32-unknown-unknown:
rustup target add wasm32-unknown-unknownRscript on PATH and the jsonlite package for the
persistent r tool. Wisp never installs R packages automatically.cargo install --locked trunkcargo install tauri-cli --version "^2"xcode-select --install — macOS
uses the system WebKit, so no extra runtime is needed.$env:WISP_API_KEY = "<your provider key>"
$env:WISP_PROVIDER = "openai" # openai=OpenAI-compatible Chat Completions; or openai_responses / anthropic
$env:WISP_MODEL = "deepseek-v4-pro" # openai_responses: gpt-5.5; anthropic: claude-sonnet-5
cargo run -p wisp-cli
The CLI auto-loads the bundled skills/ catalog and wires the bundled Python
and optional system-R REPLs. Python provisions a uv venv at
.wisp/python/.venv on first run; R uses Rscript from PATH and requires
jsonlite in that R environment. In the desktop app, Python and R interpreter
paths are saved per execution context from Settings → Environments or the agent's
set_runtime_interpreter tool, so local, WSL, and each SSH server can use
different environments without host environment variables. Each runtime card's
Configure path action opens these per-context Python and R settings. The tool restarts
the current project's matching REPL when needed, so a failed runtime can recover
without restarting the Wisp app; restarting clears that REPL's in-memory state.
Clicking a runtime's Python or R label opens its RStudio-style in-memory
environment table beside the runtime cards with bounded object names, types,
values/shapes, and sizes. Pinning that table moves it onto the conversation as a
draggable window, where it remains available after the runtime dialog closes.
The composer's agent-options menu groups Auto-review, Reviewer model, Memory,
Specialist, and Compute controls in one place. Local compute is always available;
the searchable Compute menu only lists configured remote servers. A server must
be explicitly selected for the current conversation before the agent can use it,
and selected servers are preferred for suitable work. The selection is isolated
per conversation. Settings → Environments always shows local compute and owns
adding, importing, removing, configuring, and probing environments; it does not
control conversation resource selection. Probe uses the bundled
probe-compute-environment skill to persist hardware, scheduler, runtime, and
privilege facts. The Environment side panel always shows local compute plus the
remote servers selected for the current conversation.
Each Python or R cell is limited to 1 MiB of source so a malformed request cannot
exhaust the persistent worker before execution begins.
cargo tauri dev # hot-reload: Trunk serves UI, Tauri opens WebView2
cargo tauri build # produce an MSI/NSIS installer under target/release/bundle
winver result, WebView2 Runtime version, installer filename, and
reproduction steps in an issue. Never post API keys, tokens, passwords, or
private keys.Desktop development uses port 1421. UI tests use 1422, and their Trunk
outputs are isolated in ui/dist-dev and ui/dist-test; release packaging
continues to use ui/dist. This prevents a running dev/test server from racing
with cargo tauri build while it copies the optimized WASM bundle.
On macOS, run the same commands from a shell (cargo tauri build emits a
.app and .dmg under target/release/bundle). src-tauri/tauri.macos.conf.json
is auto-merged by Tauri to replace the PowerShell beforeBuildCommand with a
cross-platform trunk build. For a universal binary (Apple Silicon + Intel):
rustup target add x86_64-apple-darwin
cargo tauri build --target universal-apple-darwin
The .app/.dmg are unsigned — first launch needs right-click → Open (or
allow it in System Settings → Privacy & Security).
The desktop app stores API keys in the OS keyring and model profiles in
.wisp/wisp.sqlite (Settings -> Models). Profiles can point at remote API
providers. See Model configuration for the
provider fields. The per-turn model/tool loop limit is configurable under
Settings → General → Maximum agent iterations per turn (default: 100; 0 disables the limit).
Conversations persist to that SQLite database — each turn's
messages are appended to the active session frame, so restarting the app
restores the full history. The headless CLI keeps using .wisp/session.json for
portability.
Projects can be moved between Windows and macOS from the Projects screen. Use the download action on a project card to export a versioned ZIP, then Import project on the other computer. The importer asks for a parent folder and creates a new project directory there; Windows drive letters are never reused. See Project transfer for contents and limitations.
Projects can also be synchronized explicitly between devices. Configure either a self-hosted relay or a folder managed by the Baidu Netdisk/Nutstore desktop client in Settings → General, then press Sync now on a project card. Synchronization never runs in the background and refu