# Quickstart

> From nothing to a shared notebook: point slivingdoc at a bucket, prove it from the command line, then add it to an MCP host.

Canonical URL: https://www.slivingdoc.dev/docs/quickstart/ · Version: 0.1 · Updated: 2026-09-21

Full site index: https://www.slivingdoc.dev/llms.txt

This page goes from an empty machine to a notebook that an agent and you
share. It takes four commands. Every command here is safe to repeat.

## Before you start

- **Node.js 22 or newer.** The `npx` launcher downloads the native
  binary for your platform, verifies its checksum, and runs it. No Git
  and no toolchain are needed. See
  [Installation](/docs/installation/) for the direct download instead.
- **An S3-compatible bucket that already exists.** slivingdoc never
  creates or configures one.
- **Credentials for that bucket**, in your shell. They come from the
  normal AWS chain, so an exported `AWS_PROFILE` or an active SSO session
  works too.

> **Tip:** No bucket yet? [Tigris](https://www.tigrisdata.com) gives you
> one with a single global endpoint, and a local SeaweedFS container
> gives you one with no account at all. Both are in
> [Set up a bucket](/docs/guides/bucket/), with the endpoint and region
> settings each of them needs. Come back here afterwards.

The examples use a bucket called `my-notes` in `us-east-1`. Substitute
your own.

```text
export AWS_ACCESS_KEY_ID=<your-access-key-id>
export AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
export AWS_REGION=us-east-1
export SLIVINGDOC_BUCKET=my-notes
```

## 1. Check the launcher

```text
npx -y slivingdoc version
```

It prints `slivingdoc` and a version number, and touches nothing else —
no bucket, no configuration. If this fails, the problem is Node.js or
the platform, not your storage.

## 2. Pull the notebook

```text
npx -y slivingdoc pull notes
```

This is the first contact with the bucket. Before anything else,
slivingdoc runs a compatibility probe that proves the store does
conditional writes the way the publication protocol needs; a store that
fails it is refused here, at startup, rather than halfway through a
commit.

On an empty notebook the report is short:

```text
OK  generation 0  /home/you/work/notes
0 files changed, 0 insertions(+), 0 deletions(-)
```

`OK` is the status token, the generation is the accepted remote state you
are now looking at, and the path is the notebook directory — every
result names it. The directory `notes/` now exists and holds the
notebook.

> **Warning:** A refusal here is almost always the bucket or the
> credentials. The diagnostic names the reason with every secret
> redacted — an `INCOMPATIBLE_STORE` category means the store itself is
> not suitable; an access error means the key or the policy is. See
> [S3 requirements](/docs/reference/s3/).

## 3. Write something and commit it

Create a file under `notes/`. It must be UTF-8 text; empty files are
fine.

```text
echo "Standup: shipped the cache fix." > notes/today.md
```

Publish it:

```text
npx -y slivingdoc commit notes -m "first note"
```

```text
OK  generation 1  /home/you/work/notes
  today.md  +1
1 files changed, 1 insertions(+), 0 deletions(-)
```

The generation moved, and the per-file line says what the publication
added. That is the whole write path: edit files with any tool, then
commit.

Run `npx -y slivingdoc pull notes` again from a second
machine, or a second directory, and the same note comes back.

## 4. Give it to an agent

Now register the same command in your MCP host. In Claude Code:

```text
claude mcp add slivingdoc \
  --env SLIVINGDOC_BUCKET=my-notes \
  --env AWS_ACCESS_KEY_ID=<your-access-key-id> \
  --env AWS_SECRET_ACCESS_KEY=<your-secret-access-key> \
  -- npx -y slivingdoc serve
```

Verify it with `claude mcp list`, or `/mcp` inside a session. Other hosts
take the same command in their own syntax, or a JSON block —
[Connect an MCP host](/docs/guides/mcp-hosts/) has all of them, and the
credential choices that beat pasting keys into a configuration file.

The agent now has two tools, `notes_pull` and `notes_commit`. Ask it to
read the notebook and add to it. It needs no path: each server takes its
own notebook directory and names it in every result.

That directory is private to the server process, so it is not the
`notes/` you just used. To share one directory between the agent and
yourself, add `--workspace-root` to the arguments — see
[Share a directory with humans](/docs/guides/shared-directory/).

## Where to go next

- [Connect an MCP host](/docs/guides/mcp-hosts/) — every host, and how
  credentials reach the server.
- [Share a directory with humans](/docs/guides/shared-directory/) — one
  directory for agents and people.
- [Resolve conflicts](/docs/guides/conflicts/) — the one case slivingdoc
  hands back to you.
- [Configuration](/docs/reference/configuration/) — every flag,
  environment variable, and default.
