Free and open source · MIT

Scriptorium

A markdown-native writing desk driven by Claude Code. Move a piece from idea to published, steered by a voice you tune, without checking a word of your writing into a shared repo.

The room and the furniture

The scriptorium was the room where texts were composed and copied. This is the shareable furniture for that room. Your desk is your own.

The framework is public, and yours to fork

Skills, starter styles, templates, docs, and tools. No personal writing ever lives here. Fork it: your desk mounts your fork, you tune the framework as you write, and you send back what is worth sharing.

Your desk is private

A separate repo holding your pieces, drafts, logs, and trained voices. It mounts the framework as a git submodule, so your writing keeps its own history and stays yours.

The writing loop

A style steers how Claude writes. You train it the way you refine anything here: draft, correct, and let the corrections accumulate.

1

Draft

Start or continue a piece in a chosen style. The style is structured context, not a fine-tuned model: a constitution, a few knobs, and exemplars of the voice.

2

Critique

An editor's pass against the piece's own style, with concrete feedback. A separate style-audit is the linter: a mechanical sweep that reports every stray line.

3

Tune

Your corrections accumulate in an append-only file. A deliberate, gated pass folds them into the style's constitution. Nothing is silently rewritten.

4

Publish

One piece goes out to Substack, LinkedIn, and your own sites from the same markdown, with the live copy checked against the draft rather than assumed.

What's inside

Skillsdraft, critique, style-audit, tune-style, rewrite, review, publish, tags, talk, and a book-scale set for long manuscripts.
ToolsMarkdown to Substack, LinkedIn, and Marp slide decks; citation, link, and quote checks; a content-store publisher; a regression suite.
StylesStarter voices for essay, poem, note, and talk. Your tuned voices live only in your instance, and a privacy check keeps them there.
QuireThe companion renderer. It turns a scriptorium content bundle into React so several sites read one piece the same way.
Two repos: muffin-labs/scriptorium and muffin-labs/scriptorium-quire. Both MIT. The essays and talks on this site are written on a scriptorium desk and rendered by quire.

Who it's for

Writers

A desk that remembers your voice and keeps your drafts, logs, and corrections in a private git history that only you hold.

Researchers

Citation and reference checks, a reference shelf, and an append-only log that is evidence of what you actually did, when.

Engineers

Plain Python and markdown. Skills, templates, a CI suite, and a scaffolding tool. Read the whole thing in an afternoon; extend it in a day.

Teams

This is how MuffinLabs builds Claude-Code-native workflows: a public framework, a private instance, and evidence at every step. We build the same shape for clients.

What it needs, plainly

The writing loop needs nothing but Claude Code and a git repo. Publishing needs more, and the README says so rather than implying it works everywhere.

  • Claude Code on a direct Anthropic plan
  • The Claude in Chrome extension, for publishing to Substack
  • macOS today for the clipboard transport; Linux and Windows are small, wanted contributions
  • Python 3 and git; no other runtime

Fork the framework first, then scaffold a private desk from your fork. Your desk mounts your fork, so the framework is yours to tune as you write, and Claude Code can change it as it works. Pull from upstream when you want what changed here.

# 1. fork github.com/muffin-labs/scriptorium to your account, then
git clone git@github.com:YOU/scriptorium.git
scriptorium/tools/new-desk ~/code/writing-desk --framework git@github.com:YOU/scriptorium.git

Want this shape for your own work?

A public framework, a private instance, and evidence at every step. We build Claude-Code-native workflows like this one for teams.