Dissecting Claude Science Anthropic released Claude Science in beta on June 30, 2026, a daemon-centered agent harness for scientific execution, durable artifacts, and verification. The system splits kernel working state from daemon authority, enabling code compression, versioned artifacts, and external review that can block completion. The implementation examined is version 0.1.15-dev. Dissecting Claude Science Claude Science is a daemon-centered agent harness for execution, durable artifacts, and verification. On June 30, 2026, Anthropic released Claude Science in beta 1 ref-official-claude-science . It looks like a simple local app.Starting the app unexpectedly opens a localhost page in your browser instead of a conventional desktop window. Its real novelty sits below the interface: Anthropic has turned the scientific workbench itself into an agent harness, with a daemon mediating the path from a running analysis to the evidence behind the final artifact. The visible experience is intentionally familiar. You open a project, talk to an agent, watch it write and execute code, and receive a figure, table, structure, or report. Generated outputs can also expose the code that produced them. That code was my first way into the architecture. In one generated analysis, I found a call like this: try: EMAIL = host.get user email except Exception: EMAIL = None There was no import host . There was no host package in the Python environment. Yet the name existed inside the running kernel. A starter project contained another clue, host.exec peek ... , inside its recorded code path. These small anomalies in an otherwise ordinary Python session raised the question that led me through the system: what put host there, and what is on the other side of the call? The answer begins with a concrete mechanism. kernel worker.py says that the host SDK is installed through the first execute after kernel startup. The daemon injects that SDK, and calls such as host.llm and host.mcp become synchronous RPC back across the process boundary. That call boundary supplies the essay's spine: kernels hold working state, while the daemon holds authority and history. From that split follow the product's three defining choices. Code compresses orchestration without collapsing capability boundaries. Artifacts outlive the conversation as versioned evidence. Review runs outside the main agent's self-reflection loop and can block completion. For agent-harness developers, Claude Science is a useful case study in how model capability, harness policy, and application-owned execution combine into one scientific pipeline. I will follow the same boundary from beginning to end: first through the app shell and runtime payload, then through the injection and RPC behind host , and finally through the code, artifact, and verification flows that the daemon controls. The implementation examined here is 0.1.15-dev .The mechanism claims come from the local app bundle, the files under ~/.claude-science/runtime , the SQLite migrations, and the behavior of the staged claude-science daemon. What Ships to Your Machine Before following host , let me start with what any user can inspect. The macOS bundle is mostly a signed launch and update shell. It starts with a seed executable, stages a newer claude-science daemon under the app's home directory, and lets that daemon serve the local web application on loopback. The daemon, in turn, selects a versioned runtime payload under ~/.claude-science/runtime . The payload identifies its build and platform in BUILD.json . Around that small file is the actual product distribution: the web client, agent profiles, kernel workers, SQLite migrations, scientific skills, MCP servers, compute-provider code, seed projects, micromamba, image-processing dependencies, fonts, and write-tracing support. The runtime itself is replaceable; the much larger Python and R environments are provisioned separately under ~/.claude-science/conda . The signed shell can remain small while the daemon and product payload move quickly. In the inspected installation, baseline Python analysis, R analysis, and bundled MCP services lived in separate conda environments; individual workspaces then added local Python virtual environments and R libraries on top. The payload also contains compressed starter projects for a CRISPR screen, enzyme engineering, extremophile analysis, and immunotherapy analysis. Their manifests and archives contain plans, reports, tables, figures, structures, arrays, intermediate results, and the recorded message streams that produced them. Because all of this lives on the user's machine, the starter projects are more than demos. They are inspectable specimens of the product's artifact model: users can see what Claude Science does, how it did it, and what quality its deliverables reach. Following host Into the Daemon The artifact code panel gives me the first clue, but the runtime explains how the trick is performed. Near kernel startup, kernel worker.py initializes an ordinary persistent namespace and leaves this comment: The host SDK host.lineage/query/llm is installed via the first execute after kernel start -- see base.ts postStartCode mechanism. The file contains protocol plumbing for SDK calls, but not the SDK implementation itself. That implementation is part of the claude-science daemon, which assembles and injects it per kernel. The daemon always sends one base fragment, then concatenates gated fragments according to the agent profile. Those later fragments attach methods to an already-created singleton. The base fragment binds that singleton to both host and the legacy name operon , then registers the object in sys.modules , which is why import host also appears to work even though no module was installed. The same fragment answers what happens on the other side of a method call. Inside a kernel, host.llm , host.artifacts , host.mcp , and host.compute.create look like ordinary Python. Each ultimately serializes a synchronous request over the private kernel protocol and waits for a matching daemon response: The injected methods make the SDK convenient to use; they do not grant the final authority. The daemon chooses an allowed method set for each kernel kind, checks that permit before dispatch, and lets each handler perform its own validation. Fabricating a raw host call "mcp", ... does not recover a capability omitted from the analysis kernel. The daemon is the architectural center. It owns identity, permissions, agent frames, execution records, artifact storage, connector access, compute providers, verification state, and the local web service. Python, R, shell processes, the stdlib-only control REPL, and remote compute remain subordinate workers. Python and R can retain state, and all of these workers can calculate or produce files; none decides which external capabilities it may use or which outputs become durable. With the physical payload and the host boundary now connected, we can follow the consequences of that design. The first is how the agent does its work: it writes code. Cut I: Code as the Orchestration Language Most agent products use some variation of a ReAct loop: reasoning, one or more tool calls, results, then another model turn. Claude Science can do that too, but its distinctive interface is code. Python expresses the control flow among tools, and the difference becomes clear at scale. Take the literature sweep behind the shipped literature-review skill. The skill loads helpers such as search openalex and expand citations directly into the Python kernel. One cell can pull hundreds of candidate papers, walk their citation graph in both directions, and retain the result as a table. Because model calls run inside the same kernel, a loop can call host.llm on each candidate to score relevance and extract its reported effect. The model writes one cell and receives one consolidated result; it does not have to manage hundreds of tool exchanges in its transcript. Matplotlib can then draw the result from the table already in memory. Two properties make this compression possible. First, the full working set never has to enter the main agent's conversation context. It remains data inside the persistent kernel; individual host.llm requests cross the boundary, and only the consolidated result returns to the main transcript. Second, the iteration lives in code rather than in the model's turn-by-turn transcript. One for loop makes N calls from inside a single cell. The model writes the loop once and reads one result. Code moves the iteration out of the language model. Code is therefore not just a way to analyze returned data. It compresses the orchestration. The rest of this cut is the machinery that keeps that compression safe: the code runs inside capability-shaped processes, and the boundaries between them are as deliberate as the code itself. The main OPERON prompt states the workflow directly. MCP calls happen in repl , not in Python or R. Loops over samples or records run inside one REPL cell. Results are serialized into ./handoff/