---
title: What is Scripto?
description: An agent-first writing tool. A human writes in a Medium-style canvas; an agent drafts, edits, and publishes from the terminal — both on one backend.
---

Scripto is an **agent-first writing tool**. A human writes in a Medium-style canvas; an agent drafts, edits, and publishes from the terminal. Both surfaces run on one backend, and a published story imports into Medium with its layout intact.

The primary way in is the [`scripto` CLI](/cli/overview). An agent installs it, provisions itself over an email one-time code with no browser, authors a piece section by section, and publishes — getting back a public URL to hand to Medium's "Import a story".

<Info>

**The pitch is the install.** Hand an agent this documentation URL with one instruction — *"Install Scripto and tell me what it can do"* — and a good agent reads these docs, installs the CLI, self-provisions over OTP, and explains the product by using it.

</Info>

## The one load-bearing promise

**What you write is what imports.** The server is the only thing that renders Markdown to HTML, so formatting stays correct by construction. A published story lives at a server-rendered `/story/<slug>` page; Medium's import bot fetches that exact page and rebuilds the story faithfully — headings, code blocks, lists, dividers, and figures intact.

## How you use it

<CodeGroup>

<Tab label="Bootstrap (no key yet)">

```bash
npm install -g @codika-io/scripto
scripto auth login-request --email you@example.com
# read the 6-digit code from your inbox
scripto auth login-complete --email you@example.com --code 123456
```

</Tab>

<Tab label="Author + publish">

```bash
scripto articles create --file draft.md     # splits Markdown into sections, returns an id
scripto outline <id>                         # the cheap section map
scripto section set <id> <anchor> --file part.md
scripto articles publish <id>                # prints the public /story/<slug> URL
```

</Tab>

</CodeGroup>

Sign-up happens from the terminal via a one-time code emailed to you — no dashboard round-trip. An unknown email is registered on completion, so the same flow is both signup and login. If you already have a key from the web Settings page, `scripto config set --api-key scripto_...` skips the OTP step.

## The model in one breath

<Steps>

<Step title="An article is an ordered list of sections">

A boundary is cut before every `H2` heading and every `· · ·` divider. `article.content` is the derived concatenation of the sections.

</Step>

<Step title="The agent edits one section at a time">

A long article never has to be pushed or pulled whole. Read the cheap [outline](/concepts/sections), then `get` / `set` a single section by its **anchor**.

</Step>

<Step title="Publish is explicit and idempotent">

`scripto articles publish <id>` mints a slug once and returns the public URL. Re-publishing keeps the same slug.

</Step>

</Steps>

## What Scripto is not

- **Not a Markdown-to-clipboard tool.** You don't paste rendered HTML anywhere. You publish a URL and Medium imports it.
- **Not a multi-document push tool.** You edit sections, not whole files, so the agent's context stays small.
- **Not human-only or agent-only.** The Write canvas and the CLI drive the same backend; a piece can move between them mid-draft.

## Next steps

- **[Quickstart](/quickstart)** — install, self-provision, and publish your first story in a few minutes.
- **[The ordered-sections model](/concepts/sections)** — the core concept that makes agent editing cheap.
- **[CLI overview](/cli/overview)** — why the CLI is the recommended way in.
- **[Use Scripto with Claude](/guides/with-claude)** — the full agent loop, end to end.
