A CLI-first notebook engine for long-running agents, backed by the filesystem.
Sandnote is a resumability-first notebook for agents.
It is not agent memory. It is the agent's notebook.
Its job is to preserve the continuity of thought so interrupted work can resume without starting over.
For long-running agents, the intended use is:
- install the Sandnote skill from this repository
- install a Sandnote binary from GitHub Releases
- let the agent use Sandnote as its notebook/workspace instead of treating a raw local folder as the workspace
If your agent supports Skills, the simplest onboarding should be:
npx skills add sandbox0-ai/sandnoteThat installs the repository skill at skills/sandnote/SKILL.md, which is written to steer the agent toward:
- using Sandnote as the notebook/workspace for long-running work
- preferring Sandnote over directly managing raw files and folders
- importing real source material as
artifactobjects when document-backed resumability matters - using the canonical
thread-first CLI instead of ad hoc file organization
Come back to unfinished thought without starting over.
For v0, the more operational version is:
Stop without losing your place.
entry: a lightweight thinking unitartifact: source-backed content kept as a reference or snapshotthread: a continuable line of thoughtworkspace: the current thinking contexttopic: a durable re-entry surface
These layers stay distinct:
entrycaptures local thoughtartifactcarries source material without overloading entriesthreadis the main working unitworkspaceexplains current relevancetopicpreserves understanding worth re-entering later
Sandnote is not trying to turn entry into a document body. If a thread depends on a real spec, design doc, sample payload, or source file, import it as an artifact and link it into the working context.
Sandnote uses the filesystem as the source of truth:
- state is stored as plain object files
- derived indexes are rebuildable
- snapshots and restores can rely on the underlying volume
- raw files remain inspectable without introducing a database as authority
This keeps the notebook durable and operationally simple while still allowing higher-level notebook semantics.
Canonical CLI:
sandnote overview
sandnote artifact ...
sandnote entry ...
sandnote thread ...
sandnote workspace ...
sandnote topic ...
sandnote repl
Current core flows:
- agent-oriented notebook overview through
sandnote overview, with--jsonreserved for stable parsing - document-backed resumability through
artifactreference and snapshot modes - thread-first resume and frontier selection
- checkpoint and vitality transitions
- workspace focus and active selection persistence
- topic promotion and topic re-entry reads
- stateful REPL over persisted notebook state
For macOS and Linux, the shortest install path is:
curl -fsSL https://raw.githubusercontent.com/sandbox0-ai/sandnote/main/scripts/install.sh | bashInstall a specific version:
curl -fsSL https://raw.githubusercontent.com/sandbox0-ai/sandnote/main/scripts/install.sh | env SANDNOTE_VERSION=v0.1.0 bashFor Windows PowerShell:
irm https://raw.githubusercontent.com/sandbox0-ai/sandnote/main/scripts/install.ps1 | iexInstall a specific version on Windows:
$env:SANDNOTE_VERSION="v0.1.0"; irm https://raw.githubusercontent.com/sandbox0-ai/sandnote/main/scripts/install.ps1 | iexIf you prefer Go:
go install github.com/sandbox0-ai/sandnote/cmd/sandnote@latestPrebuilt binaries are also published on GitHub Releases:
https://github.com/sandbox0-ai/sandnote/releases
Release archives are published as:
sandnote_<version>_<os>_<arch>.tar.gz
sandnote_<version>_<os>_<arch>.zip
Examples:
sandnote_v0.1.0_linux_amd64.tar.gz
sandnote_v0.1.0_darwin_arm64.tar.gz
sandnote_v0.1.0_windows_amd64.zip
Typical end-user flow:
- Install the skill with
npx skills add. - Install the
sandnotebinary withcurl | bash, PowerShell, orgo install. - Confirm
sandnoteis onPATH. - Let the agent use Sandnote as its notebook/workspace.
For developers, local build commands are:
Build a local binary:
go build ./cmd/sandnoteOr install it into your Go bin directory:
go install ./cmd/sandnoteFor a preview build with explicit metadata:
go build -ldflags "-X github.com/sandbox0-ai/sandnote/internal/cli.Version=v0.1.0-preview -X github.com/sandbox0-ai/sandnote/internal/cli.GitCommit=$(git rev-parse --short HEAD) -X github.com/sandbox0-ai/sandnote/internal/cli.BuildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)" ./cmd/sandnoteInspect the current build:
sandnote versionInitialize a local store:
sandnote init
sandnote init --root-path /path/to/repoinit persists the notebook root path. Later commands automatically discover the nearest initialized .sandnote from the current directory upward, so running from subdirectories keeps using the same notebook.
Inspect the notebook-level state before resuming:
sandnote overviewUse --json only when a caller needs the full machine-readable contract.
Create a workspace, an entry, and a thread:
sandnote workspace create --id ws_auth --name task/auth
sandnote entry create --id en_auth --subject "auth anchor" --meaning "resume auth work here"
sandnote thread create --id th_auth --question "How should auth work continue?" --workspace ws_authImport any real source document the work depends on:
sandnote artifact import ./auth-spec.md --id art_auth_spec --mode reference --entry en_authUse reference when Sandnote should follow the live file, and snapshot when the current body must be preserved exactly.
Attach the entry, focus the workspace, and resume:
sandnote entry attach en_auth --thread th_auth
sandnote workspace focus ws_auth th_auth
sandnote workspace use ws_auth
sandnote resumeLeave behind a better stopping point:
sandnote thread checkpoint th_auth \
--belief "auth flow is working" \
--open-edge "promote durable auth understanding" \
--next-lean "promote auth topic" \
--reentry-anchor en_authPromote durable understanding into a topic surface:
sandnote topic create --id tp_auth --name auth
sandnote topic promote tp_auth --thread th_auth --include-supportingUse the REPL as a stateful working console:
sandnote replInside the REPL:
workspace use ws_auth
resume
inspect
checkpoint belief=auth-flow-is-working edge=promote-durable-auth-understanding lean=promote-auth-topic anchor=en_auth
transition dormant
exit
Sandnote v0 centers on checkpoint quality.
A good checkpoint should minimally leave:
- a current stance
- an open edge
- a likely next lean
- a re-entry anchor
For live threads, Sandnote currently enforces the minimum continuity contract:
open_edgemust be clear enough to leave a real continuation pointreentry_anchormust be present so future work has a low-cost way back in
Threads carry vitality states:
livedormantsettled
Promotion is separate from vitality:
- vitality answers whether a thread is still alive as a line of thought
- promotion answers whether some understanding is worth preserving as a durable topic-level re-entry point
Sandnote is now in the v0 preview hardening stage.
The main remaining work is:
- harden end-to-end notebook workflows
- tighten the CLI contract and help/documentation
- prepare the first preview release boundary
The first v0 preview is intended to cover:
- filesystem-backed notebook state
- canonical
entry,thread,workspace, andtopiccommands - top-level
resume - persisted REPL session state
- frontier-based active work selection
- checkpoint quality enforcement for live threads
The preview is not trying to ship:
- LLM-assisted workflows
- full PKM/editor features
- synchronization or multi-user coordination
- a stable long-term storage schema beyond the current local object model
Sandnote is not trying to become:
- a memory store
- a local database with notebook branding
- a full PKM suite
- a document editor first
- an AI wrapper that auto-generates understanding
It should stay focused on resumability, checkpoint quality, and thread-first work.