v0.7.2
Open Science v0.7.2
A skills- and polish-focused release on top of v0.7.1: agent-requested skill imports, installed-skill import with candidate preview, crisp and zoomable PDF rendering, model-aware reasoning effort, and plain-language permission cards.
Open Science is an open-source, model-agnostic AI workbench for scientific discovery — a self-hosted desktop app pairing a plan-and-execute agent with a persistent, sandboxed compute kernel and durable project/session storage.
This is a patch release: no breaking changes and no Roadmap phase status changes. It rounds out the skills lifecycle (import installed global skills, preview candidates before import, agent-requested package imports in a session), sharpens the PDF preview (crisp on-screen rendering plus a width-based zoom), maps reasoning effort to each model's real capability set, and classifies tool access requests into plain-language actions on the approval card, plus two new bundled models and macOS update routing fix.
✨ Highlights
- Agent-requested skill imports. Ask the agent to install an attached
.zipor.skillpackage and it routes through the app-owned preview and confirmation dialog (Select all / Invert) before anything is written — no manual archive extraction. (#449) - Preview before you import. Installed, GitHub, ZIP/
.skill, and bare-Markdown skill candidates can all be inspected (parsedSKILL.mdbody, metadata, file/reference names) before selection. (#437, #433) - Sharper, zoomable PDFs. Pages rasterize at their on-screen resolution (no more soft A4/Letter pages) and gain a width-based zoom (0.5–3) with overlay controls and Ctrl/Cmd+wheel. (#429, #430)
- Reasoning effort mapped to the model. Effort is resolved against each model's real capability profile, custom models can pick a 2–5 level preset, and each framework receives only its valid transport values. (#440)
- Plain-language permission cards. Tool access requests show a readable action, impact summary, and category (Python / R / JS REPL / notebook shell, file, network, command, MCP service) instead of raw protocol identifiers. (#428)
🚀 New Features
- Conversational package imports — a session-scoped
request_skill_importtool lets the agent request a skill import from an attachment owned by the invoking conversation; resolution reuses the bounded Skill preview/import pipeline, an app-owned candidate selection and preview dialog runs before any write, and the existing import confirmation checklist (Select all / Invert) applies. Pending approvals cancel on timeout, prompt cancellation, session deletion, or global disconnect, and still-pending approvals recover after renderer recreation. Replacement targets stay authoritative in main and skills reload after a successful import for the next turn. (#449) - Skill candidate preview — one accessible, read-only preview dialog shared by all import flows renders parsed
SKILL.mdbodies with the renderer, plus candidate description, safe source label, extra frontmatter metadata, and relative file/reference names; installed candidates lazy-load through trusted source/slug resolution with realpath containment, GitHub candidates lazy-load through the bounded import helpers, and uploads reuse already-extracted content. Row checkboxes stay selection-only and preview failures are isolated per candidate. (#437) - Import installed global skills — an "Import installed skills" entry scans
~/.agents/skillsplus the framework-specific~/.codex/skills(Codex) and~/.claude/skills(Claude Code) directories, lets users multi-select, and imports through the existing managed-skill flow with per-skill results so one invalid selection doesn't abort the rest; source paths resolve in the main process with traversal rejection and safe cross-root symlink handling, and absolute paths are never exposed to the renderer. (#433) - PDF preview zoom — zoom by page width (like Chrome / Preview), not by CSS transform: each page's displayed width is
fitWidth × zoom(0.5–3), canvases rasterize at that width so text stays crisp at every zoom level, and the measured width tracks the current frame so narrowing the panel or returning from full screen shrinks pages back to fit. Controls are a bottom-right overlay (zoom out / reset / zoom in + percentage, mirroring the image preview) and Ctrl/Cmd+wheel; native vertical scrolling and lazy per-page rendering are preserved, and zoom resets when the previewed file changes. (#430) - Model-aware reasoning effort — static per-provider and per-model effort profiles with five stable user-intent slots; the control renders only the selected model's real concrete choices plus a separate Default option, custom models can enable/disable effort and choose a 2–5 level preset (legacy/unconfigured default to five), intent resolves once and every framework (Claude Code, OpenCode, Codex, ACP, Responses bridge) carries the resolved value in its valid transport vocabulary, and live changes stay scoped to the active runtime. (#440)
- Plain-language permission classification — a pure renderer-side presentation classifier for pending permission requests shows a plain-language action, impact summary, and category in the approval-card header; Python, R, JS REPL, and notebook shell execution are distinguished while preserving the existing environment badge and code preview, notebook control operations (restart, …) are explained without raw MCP identifiers, and file / network / command / MCP-service / fallback requests are classified without altering ACP responses or session grants. (#428)
- New bundled models —
claude-opus-5(1M context) added to the Anthropic catalog (#432), anddoubao-seed-2-1-turbo-260628(256k context, multimodal) added to the Volcengine Ark catalog alongside the Seed 2.1 pro flagship (#431).
🔧 Improvements
- Sharper PDF rendering — the full-page PDF preview now sizes its canvas backing store from the container's measured CSS width × device-pixel ratio ÷ page point width, so pages occupy their real physical pixels (a 350pt page in a 700px frame at DPR 2 backs at 1400×2000, not 700px); the hardcoded
2cap is replaced by aMAX_RENDER_SCALE = 4memory-safety bound, aResizeObservergrows the render width when the frame widens (panel → fullscreen), and it falls back to the intrinsic page width when unm laid out. (#429)
🐛 Bug Fixes
- macOS update routing for incompatible signatures — packaged macOS builds with a stable version string are no longer assumed to be Developer ID signed; the in-place updater inspects the installed bundle metadata and uses Squirrel.Mac only when both the bundle ID and Apple Team ID match the official stable release identity, failing closed to the manifest installer flow for ad-hoc, mismatched, or unreadable signatures so the UI downloads and opens the installer instead of offering a restart that can't complete. (#439)
- OpenCode external-skill isolation — every OpenCode session now sets
OPENCODE_DISABLE_EXTERNAL_SKILLS(andOPENCODE_DISABLE_CLAUDE_CODE_SKILLSas defense in depth), so host-global.agents/.claudeskills can no longer leak into an app session and inflate the reported catalog count; app-materialized skills remain discoverable from the isolated XDG config. (#434)
📦 Install
Requirements: macOS 12+ (Apple Silicon or Intel), Linux x64, or Windows 10/11 x64. On first run the app's onboarding wizard checks your environment and can install and configure a Claude-compatible model backend for you. Once installed, the app updates itself in place.
Download the build for your platform from the Assets below:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | aipoch-open-science-0.7.2-mac-arm64.dmg |
| macOS (Intel) | aipoch-open-science-0.7.2-mac-x64.dmg |
| Linux | aipoch-open-science-0.7.2-linux-x86_64.AppImage / aipoch-open-science_0.7.2_amd64.deb |
| Windows | aipoch-open-science-0.7.2-win-x64-setup.exe |
macOS — first launch. Release builds are Developer ID signed and notarized by Apple, so they open like any other app. (A .app you build yourself is not notarized — see README → Building From Source.)
Windows — first launch (unsigned build). No Authenticode certificate yet, so SmartScreen shows a bypassable "unrecognized app" prompt (More info → Run anyway).
Build from source instead:
npm install
npm run build:mac # or: build:linux / build:win
🧭 What's in this release (maturity)
Aligned with the PRD and Roadmap. This is a patch release on top of v0.7.1. It rounds out the skills lifecycle (import installed global skills with candidate preview, agent-requested package imports in a session), sharpens the PDF preview (crisp on-screen rendering plus zoom), maps reasoning effort to each model's real capability set, classifies tool access requests into plain-language actions, and adds two bundled models. No Roadmap phase changes status.
- ✅ Implemented: desktop shell (Electron + React + TS) with a tray/single-instance lifecycle, reachable as a desktop app, an optional localhost web UI (with project/session deep links and lifecycle sync), a headless backend mode, and an
open-scienceCLI daemon plus a zero-dependency Node.js task SDK; ACP agent runtime on a pluggable framework backend (Claude Code default, with OpenCode and Codex as alternatives — Codex usable via an existing ChatGPT/Codex subscription login, and Claude via a subscription with both shared (browser OAuth into~/.claude) and isolated (claude setup-token) sign-in) whose app-managed runtimes are installable, switchable, and uninstallable from Settings; tool-activity cards grouped under agent-declared purpose titles with a live context-usage indicator; an opt-in reviewer with a bounded fix loop (AI-review pipeline now dual-Codex, static-inspection-only); a persistent multi-kernel notebook runtime (warm Python/R/REPL kernels, app-managed conda environments with offline provisioning and bring-your-own interpreters, crash-recoverable run history, session.ipynbexport); project + session persistence with a paginated, session-grouped Files tab and session pinning; artifacts MCP server; file renderers (incl. Office DOCX/XLSX/PPTX in isolated processes, a zoom/pan image viewer, and a crisp, zoomable PDF preview) + notebook/session-notebook viewers + a full-screen preview mode + offline molecule viewer; file-based agent skills (create, edit, package upload, GitHub preview/import, installed-global-skill import with candidate preview, and agent-requested package imports in a session) with explicit/selection; multi-provider config (built-in vendors Anthropic (Claude, incl. claude-opus-5), DeepSeek, Zhipu AI (GLM), GLM Coding Plan, Kimi (Moonshot), MiniMax, StepFun, StepFun Step Plan, Xiaomi MIMO, SenseNova, Volcengine Ark (incl. doubao-seed-2-1-turbo), plus the OpenRouter aggregation gateway, custom gateways, and Claude/Codex subscription logins) with per-model image-input metadata and per-model reasoning-effort control mapped to each model's real capability set; plain-language permission cards classifying tool access requests into readable actions, impact summaries, and categories; desktop task notifications; remote SSH compute hosts as notebook execution targets; resilient range-resume downloads; signed-and-notarized macOS packaging plus Windows/Linux installers and in-place auto-update that routes incompatible macOS signatures to the installer. - 🚧 Partial: R remains managed-only and environment snapshotting/export is not built; the CLI/SDK surface is a first entry point and task-automation layer, not yet a fully scriptable/embeddable orchestration SDK; provider choice is still gated on the selected framework's endpoint compatibility rather than one unified gateway; remote compute covers SSH hosts for notebook runs but not Slurm/cloud-GPU submission or sub-agent fan-out; skills are local and file-based (no shared/public commons yet); the reviewer verifies a turn's own record but does not yet apply domain-specific citation/units/statistics rubrics.
- 🗺️ Roadmap (not in this build): public skills commons and savable specialist roles (rest of Phase 3); a fully model-agnostic gateway with unified per-agent routing and a full CLI/SDK entry point (rest of Phase 1); artifact versioning + provenance chain, environment snapshotting/export, and specialist sub-agents (rest of Phase 2); Slurm/cloud-GPU remote compute, sub-agent fan-out, and the rest of the security stack — network sandbox, credential vault, scoped permission tiers (rest of Phase 4).
🐢 Known Limitations
- R is managed-only. A bring-your-own R interpreter path is not built yet.
- No environment snapshotting or export yet. Phase 2 work.
- Remote compute is SSH-only. Slurm, cloud GPU, and sub-agent fan-out are not built yet.
- Provider choice is per backend, not one unified gateway. Claude Code reaches Anthropic-compatible endpoints; OpenCode and Codex add OpenAI-compatible / Responses ones.
- The task SDK is a first-generation surface. Task creation, polling, and artifact fetch work; a broader programmatic orchestration API is still open Phase 1 work.
- Switching backends can't carry a live session over. Open conversations replay to the new backend, but in-flight tool state is not migrated.
- Skills are local only. No shared/public commons, cross-machine forking, or user-facing version pinning yet.
- The reviewer is opt-in and record-scoped.
- Windows builds are unsigned. SmartScreen prompt on first launch. (macOS is notarized.)
- No provenance chain / artifact versioning yet. Phase 2.
- No local GPU compute backend.
- No multi-user / real-time collaboration.
🙏 Acknowledgements
Thanks to @ewen-poch, @roxi3906, @LJLJ111, @imjszhang, @wen2zhou, @GiaoLee, and everyone in Discord, X, and Discussions.
What's Changed
- feat(permissions): classify tool access requests by @ewen-poch in #428
- fix(preview): render PDF pages at on-screen resolution by @ewen-poch in #429
- feat(preview): add zoom to the PDF preview by @ewen-poch in #430
- feat(providers): add doubao-seed-2-1-turbo to Volcengine Ark by @ewen-poch in #431
- feat(provider): add claude-opus-5 to Anthropic models by @ewen-poch in #432
- feat(skills): import installed global skills by @ewen-poch in #433
- fix(agent-framework): isolate OpenCode external skills by @ewen-poch in #434
- fix(update): route incompatible macOS signatures to installer by @ewen-poch in #439
- feat(model-settings): map effort to model capabilities by @ewen-poch in #440
- build(deps): bump actions/github-script from 8 to 9 by @app/dependabot in #441
- ci(review): support Codex subscription auth by @ewen-poch in #436
- ci(dependabot): pause version updates by @ewen-poch in #448
- feat(skills): preview import candidates by @ewen-poch in #437
- feat(skills): add conversational package imports by @ewen-poch in #449
- chore(release): bump version to 0.7.2 by @ewen-poch in #450
Full Changelog: v0.7.1...v0.7.2