Model or dataset
PKU-YuanGroup/OpenAI4S avatar
PKU-YuanGroup/OpenAI4S

OpenAI4S: a Code-as-Action science agent that runs on a 9.9 yuan Doubao plan

9.9 元豆包 API 复刻 Claude Science

415 stars48 forksPythonMIT

At a glance

What is it?
OpenAI4S splits agent work into a JSON control plane and persistent Python/R kernels, and its README pitches the whole thing as a Claude Science replacement on Volcengine Ark's cheapest tier. Here is what the repository actually documents, and where the design gets awkward.
Who is it for?
Adopt OpenAI4S if you want an MIT-licensed research agent where the compute stays in a persistent kernel, you are willing to point it at Volcengine Ark's Doubao endpoint, and you prefer a desktop package with an embedded science stack over assembling one yourself.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The round-trip problem OpenAI4S is built around

A ReAct-style agent doing data work spends most of its turns moving tokens, not doing science. The README's own illustration puts the number at roughly 14 round-trips for a read, filter, sort and plot sequence, because each step is a separate model call that has to describe its result back into context. OpenAI4S attacks that by letting a single code cell contain the whole sequence. The README's example reads files through host.read_file, sorts them by size, loads the top three into pandas, and saves a plot as an artifact. The comment on the DataFrame is the part worth noticing: a 100k-row frame stays in the kernel and only a short representation such as "<DataFrame 100000×20>" reaches the model's context. That is the actual product claim. It is a context-budget argument, not a model-quality argument, and it is the reason the project can credibly run on a cheap model tier instead of a frontier key. The audience is researchers and research engineers who already write Python or R, since the agent's main action unit is a code cell the user is expected to be able to read.

Two action planes, and why the split is not cosmetic

The README describes two planes with different jobs. Provider-native JSON tool calls handle orchestration, permissions, metadata, external services and human approval. Python and R Code-as-Action handles computation, exploration, analysis and simulation in persistent kernels. The distinction matters because the two planes have different state models. Tool calls land in an append-only Action Ledger, which is an audit trail. Kernel work lands in kernel memory plus versioned artifacts, which is not a log at all. The README is explicit that this is not a tools-versus-code choice: each plane does what it is good at, and tool-only or conversational work can finish through an Engine-owned finalize_response action. Composition differs too. JSON tools compose through auditable schemas and resource policy; code composes through for loops, conditionals and library imports. The README also notes that Python cells can synchronously call the in-kernel host API while they run, which is the mechanism that keeps a long cell from having to end before it can ask for anything.

The completion contract is asymmetric between Python and R

This is the sharpest detail in the README and the one most likely to bite. In Python, a cell signals completion with host.submit_output, which the README calls the only completion signal that can fire inside a cell, and which carries structured artifacts and metrics. R has no in-cell completion. The README states that plainly in its comparison table: for R, the completion column reads no in-cell completion. So an R analysis is an independent persistent channel that the Engine has to close from outside, rather than something that reports its own result the way a Python cell does. If your workflow is R-heavy, you are working against the grain of the completion design, and the persistent kernel is doing less for you than it does on the Python side. The README does mention an interrupt-signal train added in v0.2.0 that makes a running R cell reliably stoppable on every platform, which addresses stopping rather than finishing. Those are different problems and the documentation treats them separately.

Getting it running: two desktop packages and a CLI

The v0.2.0 release notes describe one release with two desktop packages: an Apple Silicon .dmg and a relocatable Linux x86_64 tarball, both carrying the same embedded Python and science stack. The Windows/WSL2 zip is described as built and under stabilization, shipping in a coming release, so it is not part of v0.2.0. v0.1.0 added PyPI packaging, so pip install openai4s is the documented path for the library, and the release notes list openai4s --version as a v0.2.0 addition. To select the cheap route, the README says to pick the ark provider in the UI, which routes the agent through Doubao on Volcengine Ark's Agent Plan. The README identifies the entry Small tier at 9.9 yuan per month, roughly US$1.4, and the repository includes a screenshot of that plan page at docs/ark-agent-plan-9.9.png. Beyond the provider toggle, the README does not publish the config file format or the exact key names for the Ark credentials. That gap is worth knowing before you plan a rollout: the documented setup is a UI selection plus a desktop package, not a hand-written config you can review in the repository.

Environments, sharing and the operational surface

The 2026-08-04 news entry on main lists a set of commands that define the operational surface: openai4s env plan, openai4s env apply and openai4s env rollback, described as environments as a transaction. There is also openai4s share and openai4s relay for read-only session sharing over an outbound relay tunnel. A redacted doctor and diagnostics support bundle is documented, and telemetry is described as consent-gated and revocable. The versioned /api/v1 surface is documented with keyset pagination, one error envelope and a resumable WebSocket cursor. Also in that entry: seven normalized public-database connectors that carry where a record came from and when. That provenance field is the detail that separates these connectors from a plain fetch wrapper, and it is the kind of thing that matters if a result has to be traced back to a source record later. Docker and Kubernetes deployment appear in the v0.2.0 notes, so the desktop packages are not the only documented deployment path.

Where the design will frustrate you

The honest limitation is not performance, it is that the README makes a strong claim it does not quantify. It says OpenAI4S delivers a Claude-Science-class agent on the cheap tier, and the only evidence offered is the architecture and the round-trip comparison. There is no published evaluation against Claude Science in the material available here, so treat the class claim as positioning until you have run your own task through it. The second limitation is the completion asymmetry described above: R cells cannot signal completion from inside, so any pipeline that expects R to report its own artifacts has to be restructured. Third, the append-only Action Ledger is the record of what the agent did, but kernel state is not in it. Reconstructing why a number came out the way it did means reading artifacts and kernel history alongside the ledger, not the ledger alone. Fourth, the Windows package is documented as not yet shipped in v0.2.0, which rules the project out for Windows-first teams right now. Finally, the README does not state what happens when the Ark endpoint is unreachable mid-cell, so failure behaviour under a dropped provider connection is unverified here.

How it differs from a notebook-plus-assistant setup

The obvious alternative is a Jupyter notebook with an assistant bolted on, which is what most researchers already have. The difference is where the agent boundary sits. In a notebook, the human drives cell execution and the assistant suggests code; the model's context and the kernel's memory are kept in sync by the person at the keyboard. OpenAI4S inverts that: the Engine owns the loop, the model emits whole cells as the action unit, and the kernel persists across them so intermediate objects never need to be serialized into context. That is a real architectural difference, not a packaging one, and it is what makes the 14-round-trip comparison meaningful. The cost of the inversion is control. In a notebook you see every cell before it runs. In OpenAI4S, the README describes a Guardian review boundary in Auto Mode and a human approval path through the JSON plane, which means the approval surface is a configured boundary rather than the default mode of operation. If your work requires line-by-line review of every computation, the notebook is still the better tool and OpenAI4S is the wrong fit.

Licence, maintenance and what the release cadence tells you

The repository is MIT-licensed, which permits commercial use and modification with the licence and copyright notice retained. That is a permissive position and it is the main reason a lab or a company can build on this without a procurement conversation. It is not legal advice; if you are redistributing the embedded science stack, check the licences of the bundled libraries separately, since MIT on the wrapper says nothing about what the package ships. On maintenance, the dates in the material are close together: open-sourced 2026-07-06, v0.1.0 on 2026-07-15, v0.2.0 on 2026-08-25, and a last push of 2026-09-10. Two releases in roughly six weeks, with a substantial feature list in each, describes a project moving quickly. That cuts both ways. Upgrades will land often, and the README already shows a Windows package promised in a coming release, so a version you adopt may be superseded before your environment is fully settled. The openai4s env plan, apply and rollback commands exist precisely for that churn, and they are the mechanism to lean on rather than pinning a desktop package indefinitely.

Editorial conclusion

Adopt OpenAI4S if you want an MIT-licensed research agent where the compute stays in a persistent kernel, you are willing to point it at Volcengine Ark's Doubao endpoint, and you prefer a desktop package with an embedded science stack over assembling one yourself. Do not adopt it if your work depends on R cells that must finish and report on their own, if you need the Windows package today (the README says it is built but under stabilization), or if you cannot accept an append-only ledger as your session record. Before committing, run openai4s --version and openai4s doctor to confirm the embedded Python and kernel stack resolve on your machine, then exercise openai4s env plan and openai4s env apply against a throwaway environment so you have seen a rollback path before a real analysis depends on it.

Official sources

  1. License: MIT
  2. PKU-YuanGroup/OpenAI4S on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes