Skip to content

denarolabs/scribl

Repository files navigation

scribl

Let your agent scribl. Publish a page, share it like a doc, pull it back to build.

scribl turns a single-page HTML file into a private, shareable URL. Your coding agent (or you) pushes a write-up — a plan, spec, report, or repo breakdown — and gets back a link at https://scribl.ws/p/<slug>. Anyone you invite can read and edit it inline in the browser, with live cursors. Then your agent pulls the human-edited version back down before it builds.

That round-trip — agent writes → human edits & approves → agent builds the approved version — is the whole point.

Made by Denaro Labs, Inc. · OSS (MIT).


Install

npm i -g scribl       # or: pnpm add -g scribl

No global install needed if you'd rather not — every command works through npx:

npx scribl@latest push ./plan.html

Sign in

scribl login          # opens GitHub sign-in in your browser

Headless box with no browser? Use the device flow:

scribl login --device --label "ci-runner"

Tokens are stored locally and can be revoked anytime from Settings → CLI tokens at scribl.ws.

60-second quickstart

# 1. publish — private to you by default
$ scribl push ./plan.html --title "Auth implementation plan"
✓ live at  https://scribl.ws/p/aR7xK2  · private

# 2. let a teammate in (or open it up to anyone with the link)
$ scribl share aR7xK2 --email sam@acme.com --role editor

# …Sam opens the link and edits the plan in the browser…

# 3. pull the latest before you build
$ scribl pull aR7xK2 -o plan.html
✓ pulled  v4  (edited 6m ago by sam@acme.com)

You can also pipe HTML straight in, no temp file:

my-agent --render-plan | scribl push --title "Migration plan"

Commands

Command What it does
scribl push <file> Publish a page (or --update <id> to add a new version). Reads a file, --html, or stdin. Prints the URL.
scribl pull <id|slug> Fetch the current HTML — -o <file> to write it, else stdout. --version <v> for a historical version.
scribl ls List your pages. --owned / --shared to narrow.
scribl share <id> Manage access (see below).
scribl open <id|slug> Open the page in your browser.
scribl rm <id> Delete a page (--yes to skip the prompt).
scribl login / logout / whoami Manage CLI auth.

Useful push flags: --title, --slug <custom-slug>, --update <id>.

Sharing

Private by default. Invite individuals, or open the page to anyone with the link:

# invite a person as viewer or editor
scribl share <id> --email sam@acme.com --role editor

# anyone with the link can view…
scribl share <id> --link-access view

# …or edit (use --require-signin to disallow anonymous guests)
scribl share <id> --link-access edit --require-signin

# lock it back down, or revoke one person
scribl share <id> --link-access restricted
scribl share <id> --remove sam@acme.com

Use it from your coding agent

scribl ships an agent Skill so your agent knows when and how to publish. Install it into your agent's skills directory:

scribl skill --install

Then just ask:

› scribl a plan for adding auth to this project
› scribl a breakdown of this repo
› scribl a report of what changed this week

The agent renders the write-up as one HTML page, pushes it, and hands you the link. Tip for agents: always pull before building from a plan you posted — the human may have edited it.

In the browser

Open any page link and you get a doc-style surface:

  • Edit inline — a dual-mode editor over the HTML: visual blocks or raw code.
  • Multiplayer — presence avatars, live cursors, and conflict-free concurrent editing (Liveblocks + Yjs CRDT).
  • Doc-style sharing — private by default; invite by email as viewer/editor, or flip on anyone-with-the-link (view or edit).

Self-hosting & development

Requires Node >= 20 and pnpm >= 9.

pnpm install
cp .env.example .env   # fill in WorkOS / AWS / Postgres / Liveblocks values
pnpm dev               # run everything via Turborepo
pnpm typecheck && pnpm lint && pnpm test && pnpm build

Monorepo layout

single/
├─ apps/
│  └─ web/            # TanStack Start app → Vercel
├─ packages/
│  ├─ cli/            # scribl → bin "scribl"
│  ├─ core/           # @scribl/core — Zod schemas, types, API + permission contract
│  ├─ skill/          # agent Skill bundle (SKILL.md + assets)
│  └─ config/         # @scribl/config — shared tsconfig, eslint, tailwind preset
└─ pnpm-workspace.yaml · turbo.json · package.json

@scribl/core is the contract: page schemas, the permission model (roles + link-access enum), and request/response types shared by the CLI and web app so they never drift.

Stack

Area Choice
Framework TanStack Start (SSR + server fns) on Vercel
Routing TanStack Router / Query / Table / Form
Auth WorkOS AuthKit — GitHub sign-in & sessions (no organizations)
Storage AWS S3 (SDK v3), versioned private keys
Realtime Liveblocks + Yjs — presence, live cursors, CRDT co-editing
Editor CodeMirror 6 (raw HTML) + a contenteditable block model
DB Drizzle ORM + serverless Postgres
CLI TypeScript, bundled with tsup → public npm
Monorepo pnpm workspaces + Turborepo

See PLAN.html for the authoritative architecture and SPEC.md for implementation-level recon findings.

Releases

CI runs lint · typecheck · test · build on every PR (Node 20 & 22). The CLI is published to the public npm registry via Changesets on merge to main (with npm provenance + a GitHub Release); the @scribl/* packages are private and the web app deploys via the Vercel GitHub integration. Add a changeset with pnpm changeset — see .changeset/README.md.

License

MIT © 2026 Denaro Labs, Inc.

About

Give your agents access to put its throwaway html files on a real-time file sharing platform.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors