examples/durable-notebook/.
For this walkthrough, we will use Goose as the harness / Agent Application Framework,
and Dharta as the Agent Application Platform
to deploy the agent. Same agent can be written for other harness/frameworks, with
corresponding folder structure and that agent can be deployed to platforms
that support that particular harness.
0: Agent project folder
The paper describes an Agent Project by parts, not by specific filenames:1. Framework selection
Pick a harness that can load instructions, call tools, keep a working directory across sessions, and later run as a native project on a platform. This example uses Goose because it is open source, model-agnostic, and already compared in the paper’s capability model. The same application can be written for other harnesses such as Claude Code and Deep Agents. Install the Goose CLI and configure a model:brew install block-goose-cli. First launch asks
you to choose a provider. See Goose’s installation
guide.
2. Agent Application Programming
Agent Application Programming is designing, authoring, and evaluating the hybrid program. The result is an Agent Project in Goose’s native layout, using the parts from section 12.2. The job: one user, a research notebook, durable notes and a briefing. The privacy boundary is that user. The walkthrough uses two example users, Ada and Bea. They are different people and must not share a workspace. Natural-language instructions. Goose loadsAGENTS.md from this directory
when a session starts. This app has no skills, so skills/ stays empty.
tools/save-note.ts is a script Goose runs with the
developer shell tool:
evals/persistence.yaml is the behavior to keep: Ada’s note
survives suspension, and Bea cannot see it.
Package dependencies. package.json marks the folder as an ES module so
Node can run tools/save-note.ts.
Platform configuration. dharta.toml is used in section 4.
3. Local testing
Local Goose checks that the notebook continues in the same folder after the process exits. The developer builtin is required so Goose can run the save script and write files. Stay in the project:notes.md
should still be in this directory.
Start Goose again in the same folder:
briefing.md.
You can also run one turn without the interactive prompt:
goose configure must have a model. recipe.yaml is valid Goose recipe
input (goose recipe validate recipe.yaml).
On Monday, Ada says, “Remember that the launch moved to September 18.” On
Friday she asks for a briefing. The same workspace, durable artifact.
Ada and Bea still must not share a workspace. Copying the project into two
folders on the same disk does not provide that isolation. The agent can see
the whole filesystem, and a natural-language rule not to look in the other
folder is not a privacy boundary. Each user needs an instance whose workspace
is a dedicated virtual filesystem the other instance cannot reach. That is
platform work, in section 4.
The YAML eval states both checks: Ada’s note survives suspension, and Bea
cannot see it. Local Goose covers the first. The second needs isolated
instances.
4. Agent Application Platform deployment
A platform turns the tested Goose project into a release and operates long-lived instances. It provisions an instance at the notebook’s privacy boundary (one user), attaches a dedicated virtual filesystem as that instance’s workspace, and serves a URL. Two signed-in users must get two instances. Their files never sit as sibling folders on one shared disk. Dharta is one platform that runs Goose projects in their native format. Install the CLI, sign in, enable deploy for this folder, and ship it:dharta.toml. It names the agent and selects the Goose harness:
dharta deploy builds an immutable release and activates it at a stable URL.
The platform then creates instances as users arrive. In Dharta, the instance is
a karta: one id is one
durable computer with its own workspace and memory. Map the id to Ada and to Bea. Each gets a private notebook. The same
project, two instances.
Open the hosted page (dharta open). Sign in as Ada, leave the September 18
note, sign out. Sign in as Bea. Bea must not see Ada’s notes. Sign in as Ada
again; the briefing work is still there.
dharta dev --user ada and dharta dev --user bea exercise that routing on
your machine against the same session API production serves. They do not
replace Goose’s own local workflow in section 3.
The same hello-world-on-Goose shape, including other harness twins, is also
published at dharta-ai/examples. This
repository does not operate a platform.
Optional: the notebook as a plugin
The example above keepssave-note.ts in the project so its code is visible.
Another version could get the note tool and briefing procedure from a portable
plugin: