{"slug": "show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend", "title": "Show HN: Slivingdoc, conflict-resolving notebook for agents w. S3 backend", "summary": "Slivingdoc, a conflict-resolving notebook for AI agents with an S3 backend, was released on Hacker News, enabling concurrent agents to edit files and commit changes without clobbering each other through conditional manifest replacement and text-based conflict markers. The tool, which supports both MCP and CLI interfaces, uses immutable packs and checkpoints to ensure durability and fast cold starts.", "body_md": "## Pull the notebook into a directory\n\n`pull`\n\nmcp:\nnotes_pull(path)\n→ OK\ncli:\n`slivingdoc pull`\n\n→ OK\nreads the accepted state from the bucket — one small manifest\ncalled `current`\n\n, plus the immutable packs it\nreferences — and writes the notebook into your directory as\nordinary UTF-8 text files.\n\nThe path picks a *checkout*, not a place inside the\nnotebook: any directory under the workspace root works, each one\nmirrors the full notebook, and each remembers its own baseline —\nwhat it last saw. Unpublished local edits are merged with the\naccepted state, never overwritten.\n\nThe caller never sees Git object IDs, pack names, or S3 keys. The directory is the whole interface.\n\n## Edit with ordinary file tools\n\nBetween calls there is no protocol at all. Agents — as many as you\nlike — read and write the files with the tools they already have:\na text editor, `sed`\n\n, an LLM's file tools.\n\nThe notebook is directories and UTF-8 text files — binary files are rejected, never mangled. Bytes and line endings are preserved. slivingdoc does nothing until the next call.\n\nAs such, humans can work in the same directory: open the notebook in your editor and write alongside your agents. Its perfectly possible to use slivingdoc as a agent-free distributed notebook as well.\n\n## Commit publishes your changes\n\n`commit`\n\nmcp:\nnotes_commit(path, message)\n→ OK\ncli:\n`slivingdoc commit -m \"note\"`\n\n→ OK\nmerges your files with the latest accepted state, packs the\nresult, and uploads the pack. Packs are immutable: uploading one\npublishes nothing.\n\nYour change is the delta since the checkout's baseline — so a path\nthat was never pulled is refused with\n`INVALID_REQUEST`\n\nbefore any network work. Pull once\nfirst: commit publishes intent, not a guess.\n\nPublication is a single conditional replace of the small\n`current`\n\nmanifest — `If-Match`\n\non the ETag\nthe writer observed. The bucket is the durability boundary;\neverything local is a rebuildable cache.\n\n## Concurrent writers cannot clobber each other\n\nTwo agents commit at once. Both observed `current`\n\nat\nETag `e1`\n\n; S3 accepts exactly one replacement for it.\nThe loser gets a precondition failure — expected contention, not\nan error.\n\nThe losing writer downloads what it missed, merges against the new head, and retries with a fresh proposal. No lock object, no lease, no clock. Accepted state is never silently overwritten.\n\n## Conflicts are just text\n\nWhen your change and an accepted remote change touch the same\nlines, the call returns `CONTENT_CONFLICT`\n\nand writes\nstandard conflict markers into the affected files. The structured\nerror names every file and marker line range.\n\nResolve with the same file tools you edit with: keep the text you\nwant, delete the marker lines, call\n`notes_commit`\n\nagain. A complete marker block is never\naccepted into the notebook.\n\n## Checkpoints keep cold starts fast\n\nEvery commit uploads one small incremental pack. Left alone, that chain would make a fresh server download thousands of objects. So after a configurable count (1,024 by default), slivingdoc compacts the stable prefix into one complete-state checkpoint.\n\nA new reader needs one checkpoint plus the short tail after it. Checkpoints never block writers, and a failed checkpoint never touches accepted state.", "url": "https://wpnews.pro/news/show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend", "canonical_source": "https://www.slivingdoc.dev/", "published_at": "2026-08-17 13:21:33+00:00", "updated_at": "2026-08-17 13:41:58.808822+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-infrastructure"], "entities": ["Slivingdoc", "S3", "Hacker News"], "alternates": {"html": "https://wpnews.pro/news/show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend", "markdown": "https://wpnews.pro/news/show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend.md", "text": "https://wpnews.pro/news/show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend.txt", "jsonld": "https://wpnews.pro/news/show-hn-slivingdoc-conflict-resolving-notebook-for-agents-w-s3-backend.jsonld"}}