Scriptonia/documentation
Blog← Back to site
— DOCUMENTATION

Set up in one prompt.

Read https://scriptonia.dev/agents.md and set up Scriptonia for this repo.

Paste that into Claude Code, Codex, Cursor, or OpenClaw. Your agent runs the whole setup — you just approve one browser sign-in and answer two questions. First PLAN.md in ~3 minutes.

free tier · sample data included · you approve everything

— WHAT YOU'LL SEE
$ npx scriptonia login
✓ Signed in as you@example.com
✓ Agent wired — skill + AGENTS.md know about `scriptonia plan`
① One sign-in wires everything — project, keys, your agent.
$ scriptonia add "Compliance can't use the audit log …"
✓ → ticket · sig_9015e031
✓ context synthesized
5 signal(s) cited · ⚠ 1 contradiction — gate is UNRESOLVED
② Signal goes in; the brain analyzes it against everything it knows.
$ scriptonia plan "filter the audit log by actor"
✓ Plan filter-audit-log-by-actor v1 → PLAN.md
5 cited signal(s), 1 unresolved contradiction(s)
Hand it to your agent: claude "execute PLAN.md"
③ One sentence becomes an executable, cited plan.
$ scriptonia comment plan/filter-audit-log-by-actor \
"Approved — override the April call."
✓ Plan filter-audit-log-by-actor v2 → PLAN.md
RESOLVED (human-approved override)
④ Your comment regenerates the plan — approval, recorded.
Your agent stops. You decide. One comment.
IN PLAN.MD
April roadmap defers per-actor filters to v2.
⚠ UNRESOLVED — agent must not proceed
YOUR ONE COMMENT
"Approved — this blocks the renewal."
→ v2: RESOLVED (human-approved override)

Every override is recorded — who approved it, when, in which plan version. That's the whole approval ceremony.

THE FULL REFERENCE — EVERYTHING BELOW IS OPTIONAL READING
01 / WHAT IS THIS

One sentence, then the whole picture.

Scriptonia turns a description of a problem into a plan your coding agent can execute — grounded in what your customers actually said, what your codebase actually looks like, and what your team already decided.

You use it entirely from the terminal. There is no dashboard you have to learn first. The whole product is five words: add signal, plan an issue, hand the plan to your agent, comment if something's off.

THE SHAPE OF IT
customer signalbrain (repo + signal + decisions)PLAN.mdyour agentPR

Every claim in a generated plan links back to a real piece of signal — a Slack message, a support ticket, a sales call transcript. If your plan would contradict a decision your team already made, Scriptonia stops and asks a human before your agent writes a single line of code.

02 / INSTALL

Install — nothing to configure yet.

Scriptonia is a single command-line tool distributed on npm. You need Node.js 18 or newer — if you can run node --version in your terminal and see a number, you have it.

Run it directly with npx — no install step, always the latest version:

$ npx scriptonia --help

If you'll use it often, install it globally so the scriptonia command is always available without the npx prefix:

$ npm install -g scriptonia
$ scriptonia --help
Everywhere else on this page we write scriptonia — if you didn't install globally, just prefix every command with npx: npx scriptonia login.
03 / QUICKSTART

60 seconds, start to finish.

This is the entire product, run once. Everything after this section explains each step in depth.

terminal
# 1. sign in — opens your browser, no password, no API key to paste
$ scriptonia login
 
Opening your browser to sign in…
✓ Signed in as you@example.com (project "Example", with sample data to try)
✓ Agent wired — skill + AGENTS.md know about `scriptonia plan`
 
# 2. feed it something a customer actually said
$ scriptonia add "Users keep asking for CSV export of their data"
 
✓ "Users keep asking for CSV export of their data…" → ticket · sig_a1b2c3d4
1 added.
Analyzing against the brain — retrieved signal · prior decisions… (~10s)
✓ context synthesized
Next: scriptonia plan "Users keep asking for CSV export of their data"
 
# 3. turn it into a plan your agent can execute
$ scriptonia plan "add CSV export for user data"
 
Planning "add CSV export for user data" — retrieving signal, checking decisions, drafting… (Opus, ~15s)
✓ Plan add-csv-export v1 → PLAN.md
1 cited signal(s)
Hand it to your agent: claude "execute PLAN.md"
 
# 4. hand PLAN.md to your coding agent
$ claude "execute PLAN.md"

That's it. Step 4 is wherever you already do your building — Claude Code, Codex, Cursor, whatever you use. Scriptonia's job ends at a file called PLAN.md sitting in your repo, ready to be executed.

04 / THE LOOP

The four moves you'll make, forever.

Everything you do with Scriptonia is one of these four things, in this order, on repeat:

1
SIGNALscriptonia add <files or text>
Feed it a customer message, a support ticket, a call transcript, a Slack thread — anything that describes what someone wants or is struggling with.
2
PLANscriptonia plan "<the issue>"
Describe what you want to build. Scriptonia finds the signal that supports it, checks it against decisions you've made before, and writes a plan file.
3
BUILDclaude "execute PLAN.md"
Hand the plan to your coding agent. It's specific enough that the agent shouldn't need to ask you anything.
4
REFINEscriptonia comment plan/<slug> "…"
If a reviewer has a note — a missing edge case, an approval to override an old decision — leave it as a comment. The plan regenerates with it folded in.

You never approve a plan by clicking a button. Handing it to your agent — running claude "execute PLAN.md"is the approval.

05 / SIGNAL

Adding signal — what customers actually said.

Signal is any piece of text that reflects a real customer, user, or teammate's reality: a support ticket, a Slack rant, a sales call transcript, a one-line note you typed into your phone at 2am. The more signal you add, the better Scriptonia's plans get, because every claim in a plan has to point back to something real.

Three ways to add it

1. Paste it directly, as an issue. This is the fast path — a single sentence or paragraph, quoted:

$ scriptonia add "Compliance team says the audit log is unusable without filtering by user"
When you add a single piece of quoted text like this, Scriptonia does something extra: it immediately analyzes that text against everything already in the brain and writes a context.md file showing what it found — cited signal, and any contradiction with a past decision. See The brain, file by file.

2. Point it at files. Text files, markdown notes, call transcripts (.vtt/.srt):

$ scriptonia add slack-thread.txt call-with-acme.vtt founder-notes.md
 
✓ slack-thread.txt → founder_note · sig_7f2a91cc
✓ call-with-acme.vtt → sales_call · sig_e410bb02
✓ founder-notes.md → founder_note · sig_33c8a015
 
3 added.
The brain is enriching them now. Then: scriptonia plan "<issue>"

Scriptonia guesses the source type from the file extension (a .vtt or .srt file is treated as a sales call; everything else defaults to a founder note). Override it with --source if the guess is wrong.

3. Pipe it in. If your signal is already in another tool, pipe it straight through — no temp file needed:

$ pbpaste | scriptonia add -
$ cat exported-tickets.txt | scriptonia add -

Flags

--source <type>
Tag the source explicitly instead of letting Scriptonia guess.
one of: slack · ticket · sales_call · voice_note · founder_note · email · notion · github
--segment <tier>
Tag which customer tier this signal came from — used to weight plans toward the segment you care about.
one of: enterprise · mid_market · smb · free

What happens after you add it

Every signal is embedded and stored so it can be retrieved later by meaning, not just keyword — asking about "filtering audit logs" will find a ticket that said "can't see who did what" even though the words don't match. Adding the same file twice is safe: Scriptonia recognizes duplicates and won't double-count them.

$ scriptonia add founder-notes.md
dup founder-notes.md
0 added, 1 already there.
06 / PLANS

Generating plans — the money command.

scriptonia plan is the whole point of the product. You describe an issue in plain language; Scriptonia retrieves the signal that supports it, checks it against every decision your team has made in the past, and writes a single markdown file — PLAN.md — that your coding agent can execute with no follow-up questions.

$ scriptonia plan "filter the audit log by actor"
 
Planning "filter the audit log by actor" — retrieving signal, checking decisions, drafting… (Opus, ~15s)
✓ Plan filter-audit-log-by-actor v1 → PLAN.md
5 cited signal(s), 1 unresolved contradiction(s)
 
Hand it to your agent: claude "execute PLAN.md" (or codex · opencode · hermes)
refine: scriptonia comment plan/filter-audit-log-by-actor "…" (rewrites PLAN.md)

Reading PLAN.md

A generated plan always has the same seven sections, in this order:

PLAN.md
---
plan: filter-audit-log-by-actor
version: 1
issue: "filter the audit log by actor"
project: acme
generated: 2026-07-03
sources: [d4c0c394, f1d0347b, 256c4967, ef19f98c, 45c5a2b6]
decisions_checked: [sample/2026-04-roadmap.md]
---
 
# Filter audit log by actor
 
## Goal
One sentence describing what exists when this is done.
 
## Why now — customer evidence
- Enterprise prospect: compliance can't use the audit log without per-actor
filtering; blocks purchase. [d4c0c394]
- Founder note: blocking a $48k ARR renewal. [f1d0347b]
 
## Constraints & prior decisions
- April roadmap defers per-actor filters to v2. This issue overrides that.
⚠ UNRESOLVED — confirm with the human before building
 
## Non-goals — do NOT build
- Do not build date-range, action-type, or resource filters — only actor.
- Do not touch SSO / dual-org membership (out of scope here).
 
## Acceptance criteria
1. A user can supply an actor id and see only that actor's audit entries.
2. With no filter supplied, behavior is unchanged.
 
## Implementation steps
1. src/app/api/audit/route.ts — accept an actor_id query param, scope the query.
2. src/components/AuditToolbar.tsx — add an actor picker, default "All actors".
 
## Test plan
- API test: filter by actor returns only matching entries.
- API test: no filter returns everything (unchanged behavior).
 
## Definition of done
- [ ] All acceptance criteria pass
- [ ] Tests added and green
- [ ] PR description cites the source signal ids above

Two things in that file matter more than the rest:

  • Non-goals. This is the fence that keeps an agent from over-building. If it's not in the acceptance criteria, it doesn't belong in the PR.
  • ⚠ UNRESOLVED. This means your plan conflicts with something your team already decided. Your agent should stop and wait for a human — see Refining with comments for how to clear it.

Flags

--out <file>
Write the plan somewhere other than PLAN.md in the current directory.
--refresh <slug>
Re-fetch the latest version of a plan you already generated (e.g. after someone else's comment) without regenerating it.

Finding a plan's slug

Every plan gets a short identifier derived from its title. List everything you've generated:

$ scriptonia plans
 
1 plan · Acme
 
filter-audit-log-by-actor v1
filter the audit log by actor
scriptonia plan --refresh filter-audit-log-by-actor · scriptonia comment plan/filter-audit-log-by-actor "…"
07 / REFINE

Refining with comments — the human-in-the-loop.

A generated plan is a first draft, not a final answer. If a reviewer notices something — a missing edge case, a wrong default, or explicit approval to override a past decision — leave it as a comment on the plan. The whole plan regenerates with that note folded in, as a new version.

$ scriptonia comment plan/filter-audit-log-by-actor "Default should be all actors, not the current user."
 
Folding your note into "filter-audit-log-by-actor" and regenerating…
✓ Plan filter-audit-log-by-actor v2 → PLAN.md
5 cited signal(s)

PLAN.md is rewritten in place with the comment absorbed — you don't diff two files, you just re-open PLAN.md.

Clearing an ⚠ UNRESOLVED gate

If a plan says a constraint is unresolved, that means it conflicts with a decision on record and no one has approved overriding it yet. A human — usually whoever owns that decision — approves it the same way, in plain language:

$ scriptonia comment plan/filter-audit-log-by-actor \
"Approved. Override the April decision — this is blocking the Acme renewal."
 
✓ Plan filter-audit-log-by-actor v2 → PLAN.md
0 unresolved contradiction(s)

In PLAN.md, that constraint now reads:

## Constraints & prior decisions
- April roadmap defers per-actor filters to v2.
RESOLVED (human-approved override)
This is the entire approval ceremony. There is no "approve" button anywhere in Scriptonia — a comment that resolves a gate is the sign-off, and it's recorded (see comments/plan/<slug>/ in the brain reference).

Attributing a comment to someone else

By default a comment is attributed to your signed-in email. Override it with --as:

$ scriptonia comment plan/filter-audit-log-by-actor "…" --as "Maya (Head of Compliance)"
08 / THE BRAIN

The brain, file by file. what your agent actually reads.

Running scriptonia init inside a repository gives that project its own brain — a folder of plain markdown and JSON files at ~/.scriptonia/projects/<your-project>/. Nothing in here is a database you need a tool to read; every file is something you or your agent can open directly.

$ cd my-repo
$ scriptonia init --about "Audit-log SaaS for enterprise security teams."
 
Scanning /Users/you/my-repo…
✓ Brain created for my-repo → ~/.scriptonia/projects/my-repo
AGENTS.md · PROJECT.md · REPO.md · signals/ · rules/ · contexts/ · plans/ · comments/ · logs/
✓ Scanned repo (Next.js / TypeScript)
✓ Wrote agent instructions → ./AGENTS.md
 
Feed it customer signal, then turn an issue into a plan:
 
scriptonia add feedback.txt call.vtt (or: scriptonia add "Issue #42: …")
scriptonia plan "the issue you want to build"

The directory, annotated

~/.scriptonia/projects/my-repo/
AGENTS.mdthe master contract — identity, workflow, non-negotiable rules
PROJECT.mdwhat this product is, its stack, in your own words
REPO.mda scan of your codebase — real file paths a plan can reference
context.mdthe LATEST issue you added, analyzed against everything above
plan.mdthe LATEST plan you generated (a live copy — no slug needed to find it)
signals/one JSON receipt per piece of signal you've added
sig_a1b2c3d4.jsonsource, ref, preview, embedding status
rules/every past decision, rendered as a machine-checkable constraint
april-roadmap-audit-log-filters.ruleseverity, source, what it enforces
contexts/every enriched theme the brain has found across all your signal
plans/every plan you've ever generated, every version, kept forever
comments/plan/<slug>/the approval chain — who commented, what changed, when
v2.json{"author", "body", "applied_in_version", "at"}
logs/a plain-text audit trail: init.log, add.log, plan.log, comment.log, sync.log

Notice what's not there: no vector index, no embedding cache. Those live on Scriptonia's servers — the brain folder on your machine is the human- and agent-readable surface, not a copy of the database.

Keeping it fresh

contexts/ and rules/ are snapshots — they update when you run sync, not automatically on every add. Run it after you've added a batch of signal or after a teammate has recorded a new decision:

$ scriptonia sync
 
✓ synced 3 context(s) → contexts/, 1 decision(s) → rules/ (~/.scriptonia/projects/my-repo)

context.md and plan.md, by contrast, are always current — they're overwritten every time you run add "…" or plan.

Confidential customer signal stays on your machine, in your home directory, never inside the repo. The only thing Scriptonia writes into your repository is PLAN.md itself and a small section in AGENTS.md — see the next section.
09 / AGENTS

Agent integration — works with what you already use.

scriptonia init (or your first scriptonia login) writes a section into your repo's AGENTS.md file — the emerging standard that Claude Code, Codex, Cursor, OpenClaw, and Hermes all read automatically before they start working. You don't configure each tool separately.

AGENTS.md (excerpt Scriptonia manages)
<!-- scriptonia:start -->
## Scriptonia — product memory
 
This repo has a product brain (customer signal + prior decisions). Before building
any user-facing change:
 
- `scriptonia plan "<the issue>"` → writes PLAN.md here. Execute PLAN.md
exactly; respect its Non-goals; cite its sources ids in your PR.
- `scriptonia query "<topic>"` → JSON: what customers asked for, contradictions,
edge cases.
- If a plan constraint is UNRESOLVED, stop and ask the human. If a step
conflicts with the code, `scriptonia comment plan/<slug> "<what you found>"`
and re-read PLAN.md.
<!-- scriptonia:end -->

This section is idempotent — re-running init updates it in place between the same markers, without disturbing anything else you've written in AGENTS.md.

Claude Code specifically

On top of AGENTS.md, logging in also installs a dedicated skill to ~/.claude/skills/scriptonia/SKILL.md so Claude Code knows to reach for scriptonia plan before it starts any user-facing work, without you saying anything. Reinstall it any time (for example after an update) with:

$ scriptonia skill
✓ skill reinstalled → ~/.claude/skills/scriptonia/SKILL.md

MCP-native agents

If your agent speaks the Model Context Protocol instead of reading AGENTS.md, point it at Scriptonia as an MCP server:

mcp config
{
"command": "npx",
"args": ["-y", "scriptonia", "mcp"]
}

This exposes three tools using your already-stored login — get_context, link_back, and flag_contradiction. No extra configuration; it reads the same credentials scriptonia login already saved.

10 / REFERENCE

Full command reference.

Every command the CLI supports, grouped the way you'll actually reach for them.

SETUP

scriptonia login
Browser sign-in. Stores your credentials locally, wires your agent (AGENTS.md + Claude Code skill). No API keys to copy.
scriptonia init
Run inside a repository to give it its own brain — scans your codebase, creates the folder structure described above, injects the AGENTS.md section.
--about "<description>" skip the interactive question
--name <name> override the auto-detected project name
--force re-scan and rebuild even if already initialized

SIGNAL

scriptonia add <files or text>
Ingest customer signal — files, piped stdin, or a single quoted issue (which also triggers instant analysis).
--source <type> slack · ticket · sales_call · voice_note · founder_note · email · notion · github
--segment <tier> enterprise · mid_market · smb · free
scriptonia sync
Refresh contexts/, rules/, and AGENTS.md's constraint section from the current state of the brain.

PLANS

scriptonia plan "<issue>"
Generate PLAN.md — sourced evidence, contradiction check, non-goals, real file paths, acceptance criteria.
--out <file> write somewhere other than ./PLAN.md
--refresh <slug> re-fetch the latest version of an existing plan
scriptonia plans
List every plan you've generated in this project, with its slug and version.
scriptonia comment plan/<slug> "…"
Fold a note into a plan — regenerates it as a new version. Can resolve an ⚠ UNRESOLVED gate.
--as "Name" attribute the comment to someone other than you

INSPECT

scriptonia
With no arguments: shows the loop, how much signal you have, how many plans, and the exact next command to run.
scriptonia contexts
List the themes the brain has synthesized from your signal so far — strength, segment, whether it contradicts a decision.
scriptonia query "<topic>"
A quick lookup without generating a full plan — same underlying retrieval, JSON output.
--window 7d|30d|90d|all (default 30d)
--segment enterprise|mid_market|smb|free
--json force JSON even in an interactive terminal
scriptonia link "<signal_id>"
Fetch a signal's full original text — useful for quoting a customer verbatim.

ACCOUNT

scriptonia status
Show who you're signed in as and which project is active.
scriptonia logout
Forget your stored credentials.
scriptonia skill
Reinstall the Claude Code skill file.
scriptonia mcp
Run as an MCP server over stdio for MCP-native agents.
scriptonia help
Print the same command list, from your terminal.
11 / MULTI-REPO

Working across repos — for people juggling more than one project.

If you only ever work on one product, you don't need scriptonia init at all — login → add → plan uses your account's default project, and plan will still scan whatever directory you run it in for file paths.

If you work across several repos — different products, or client work where signal must stay separated — run scriptonia init once inside each one. Scriptonia recognizes which project you're in automatically based on your current directory, so every command after that just works without you specifying anything:

$ cd ~/code/product-a && scriptonia add "…" # goes to product-a's brain
$ cd ~/code/product-b && scriptonia add "…" # goes to product-b's brain — completely separate

Each repo's brain lives in its own folder under ~/.scriptonia/projects/, with its own signal, its own decisions, its own plan history. Nothing crosses between them.

12 / TROUBLESHOOTING

When something doesn't do what you expect.

`scriptonia login` opens the browser but nothing happens after I sign in.

The CLI is waiting on a local callback (a temporary web server on your machine, port picked automatically) for up to two minutes. If it times out, just run scriptonia login again. If your firewall or VPN blocks local loopback connections, this is the most common cause — try again with the VPN off.

A plan has 0 cited signals.

This means nothing in the brain closely matched your issue description yet. Two likely causes: you just added signal and it's still being processed (wait roughly a minute and re-run scriptonia plan), or your issue description uses very different words than any signal you've added — try rephrasing closer to how a customer actually said it, or add more signal on the topic first.

I can't find a plan's slug to comment on it.

Run scriptonia plans — it lists every plan you've generated along with the exact scriptonia comment plan/<slug> command, ready to copy.

`scriptonia init` says the repo is already initialized, but I want to rescan it.

Add --force: scriptonia init --force. This re-scans your codebase and refreshes the repo map without losing any signal, plans, or history you already have.

Adding the same file twice does nothing.

That's expected — Scriptonia treats identical signal as a duplicate on purpose so re-running scriptonia add on the same folder never double-counts your signal.

Every command says “run `scriptonia login` first”.

Your session has expired or you're on a machine you haven't signed into. Run scriptonia login — it takes about ten seconds and re-wires everything, including any per-repo brains you'd already set up.

13 / FAQ

Questions people actually ask.

Do I need to know how to code to use this?

To run the CLI commands, no — they're plain English in, a file out. Step 4 (handing PLAN.md to an agent) is where code gets written, and that part is your coding agent's job, not yours.

Where does my customer data go?

Signal you add is stored on Scriptonia's servers so it can be searched by meaning across your whole history. The brain folder on your own machine (~/.scriptonia/projects/…) is local — the only thing that ever gets written into your actual repository is PLAN.md and the small AGENTS.md section.

What's the difference between `query` and `plan`?

query is a quick lookup — "what have customers said about X" — and returns structured JSON in a second. plan is the full treatment: it also checks decisions, writes a complete PLAN.md with acceptance criteria and file-level steps, and is what you hand to an agent.

Can I edit PLAN.md by hand instead of commenting?

You can, but it won't be remembered — the next scriptonia plan --refresh or comment will overwrite it. If you want a change to stick and be part of the plan's history, leave it as a scriptonia comment instead.

What if two people comment on the same plan?

Each comment regenerates the plan into a new version with everything folded in so far — comment history is kept in comments/plan/<slug>/ as one file per version, so you can see exactly which note produced which change.

— COMING SOON
Web dashboard
review contexts and plans in the browser
Slack connector at scale
channels flow in as signal, continuously
Plan templates
your house style for PLAN.md, enforced

The CLI ships first, on purpose — it lives where your agent lives. Want one of these sooner? Tell me.

Something missing from this page? Tell us and we'll add it.