scritty scritty
man 1 scritty
Get started github
One terminal, every supported AI agent

Supported AI agents' memory,
in one place you control.

scritty is a terminal emulator. Run a supported AI CLI inside it; scritty detects the agent, captures each turn it can attribute -- the prompt scritty submitted and the output the pane wrote afterwards -- tags it with the provider, and indexes it for search. Then it serves that memory back -- to your agents over MCP, and to you over the CLI. On Linux, set it as your system's default terminal, and every shell your desktop, editor, or file manager opens is already scritty -- already capturing. On Windows, register it as your per-user Default Terminal Application and normal non-elevated console launches open as scritty tabs. macOS has no system default-terminal hook; launch scritty and run agents inside it. Your captures stay on your machine. No copy-paste, no per-vendor silos. One agent gives you a searchable memory of your own work; every supported agent you add shares the same corpus.

Runs natively on macOS (Apple Silicon) Windows Linux
Captures, on day one:
Claude CodeOpenAI Codex CLIGitHub Copilot CLIGemini CLIAntigravity CLIxAI Grok CLIOllama
Watch it work

Four agents. One memory.

Copilot, Codex, Claude Code, and Antigravity run on one project and share memory across sessions; then the same memory is searched from the terminal panel and the CLI, synced to a browser and a paired phone, run offline with local Ollama models, and federated into an operator control plane with per-tenant isolation and audited admin overrides.

Why this matters

Context dies at the boundary between tools.

5 agents,
one project.

Claude for architecture, Codex for tests, Copilot for boilerplate, Antigravity for research, Ollama on a plane. Every tool is its own silo, and none of them know what the others said.

You re-explain decisions. You repeat yourself. You lose work.

"What did we decide about auth two weeks ago?"
- you, to an agent that was not there
  • Each vendor keeps its own log, in its own format, in its own silo.
  • No cross-agent search. No embeddings. No shared corpus.
  • The decision your Claude session made is invisible to Codex.
  • So you paste context between tools by hand, or just lose it.
Same session, in your browser

One process. Two live views.

The desktop terminal embeds a token-secured web server. Open that URL in any browser -- on the same machine or another device on your network -- and you are looking at the exact same PTY and the same memory panel. Type on the desktop and the browser updates; type in the browser and the desktop updates. One process, two views, byte-for-byte in sync.

The native scritty desktop window on the left and the same session open in a browser tab on the right, both showing the identical echo desktop-to-browser-sync and echo browser-to-desktop-sync output
Left: the native desktop window. Right: the same session in a browser tab -- a line typed on either side shows up on the other, byte-for-byte.
  • A per-session bearer token rides in the URL; nothing is shared until you hand out the link.
  • Install it as a desktop PWA (Chrome / Edge "Install app") -- a standalone window, no browser chrome.
  • A trusted cert unlocks secure-context features, so the browser treats it like a first-class app.
  • The browser is not a read-only mirror: it drives the same session, memory, and search as the desktop.
Take it with you

Start on your desktop. Continue on your phone.

scritty desktop terminal showing a session that echoes HELLO_FROM_DESKTOP then HELLO_FROM_PHONE
The same scritty session open in the mobile PWA, showing HELLO_FROM_DESKTOP and HELLO_FROM_PHONE with the on-screen keyboard
One session. Typed on the desktop, continued on the phone -- frames from the demo.

The web listener accepts only loopback clients by default; every other source receives a 403 before routing. First start a Tailscale Funnel to https+insecure://localhost:3000. Then either set SCRITTY_WEB_PUBLIC_URL before launching scritty and scan its startup QR, or run the explicitly scoped scritty pair command below with --admin or --sessions plus --origin. Both paths use the same CA-trusted Funnel origin. Widen SCRITTY_WEB_BIND_ALLOW only for direct LAN access. Drop the connection and it reconnects on its own.

Example scritty pair --admin QR and https pairing URL with a #token fragment; not a live token
After configuring the trusted Funnel origin, run scritty pair --admin --origin https://machine.tailnet.ts.net, replacing the example hostname with yours. Use --sessions '<id>' instead of --admin to limit the token to one session. Scan the code, and the same session opens -- no app store, no account.
  • Pair after the explicit Funnel opt-in; tailscaled reaches scritty over loopback and supplies the trusted public cert.
  • Add to Home Screen on iOS or Android; offline-aware, auto-reconnects when scritty comes back.
  • The mobile UI adapts: touch-friendly targets, a full-width exploration panel, swipe to scroll the live terminal.
  • Drive the session from the phone -- keystrokes reach the same PTY as the desktop, not a read-only view.
  • Search every agent and session from your phone, the same corpus as the desktop.
  • Locked down by default: TLS is always on (no plain-HTTP mode), every connection is bearer-token gated with only the token's hash stored, a CIDR allowlist sits in front, and reaching it from any other device takes an explicit opt-in.

Once configured, monitor a long-running agent from the couch, review output on the train, or send a prompt from the paired phone.

The system

How it works, in one line.

SUPPORTED AGENT
Claude / Codex / Copilot / Gemini / Antigravity / Grok / Ollama
runs inside the terminal
->
THE TERMINAL
scritty
detect / capture / tag / embed
->
ONE CORPUS
vector plus keyword index
searchable across supported agents
scritty :: Ctrl+Shift+M
# Monday   Claude refactors auth middleware    -> captured
# Tuesday  Codex writes tests for the refactor -> captured
# WednesdayCopilot scaffolds the API routes    -> captured
# Thursday Antigravity researches OAuth2 PKCE  -> captured
# Friday   Ollama (offline) ties it together   -> captured

search> auth decisions
  14 matches / 5 sessions / 5 providers / one unified view
  same results on your phone, laptop, or any browser

The terminal is the one boundary every CLI agent has to cross. scritty captures supported providers there without vendor cooperation -- only a provider entry -- and the corpus is yours.

Before it even sends

Your rules. Every supported agent. Every message.

Capture is the inbound half. On the way out, scritty assembles every message before it reaches the agent: it folds in your standing instructions, enforcement rules, the current goal, and the provider's own rule file -- so the same rules apply whether you're in Claude, Codex, Copilot, or Antigravity.

  • Write your instructions once in prompt.toml; stop re-typing and re-pasting them into every tool.
  • Reads each vendor's native rule file too: .claude/CLAUDE.md, AGENTS.md, copilot-instructions.md, GEMINI.md.
  • Every section toggles live from the terminal -- flip a rule off for one message, back on for the next.
  • Then press Ctrl+Shift+M to query your whole substrate inline, without leaving the terminal.
Ctrl+Shift+R
User rules

Your standing instructions from prompt.toml -- written once, applied to every supported agent.

Ctrl+Shift+E
Enforcement

Hard constraints that get injected on every send, not politely suggested once.

Ctrl+Shift+G
Goal state

The current objective, kept in front of the agent so it doesn't drift.

Ctrl+Shift+K
Control context

Tone classification and control signals assembled before the message leaves.

The memory substrate

Your agents query the memory. Not just you.

Capture is only half of it. The corpus is a substrate, not a side panel: one engine, reachable three ways. A human at a keyboard, an agent over MCP, and a shell script all read and write the same data with the same behavior.

Ctrl+Shift+M opens scritty's memory panel, slash enters search, and an auth query returns ranked rows from two different agents' captured conversations -- a Copilot session asked to design auth for a Rust service and an Antigravity session asked to review a JWT design.
Ctrl+Shift+M -- search every agent's captured conversations, inline, in the terminal.
Terminal panel

Press Ctrl+Shift+M to search every agent and session inline, without leaving the terminal.

Ctrl+Shift+M
MCP server

Expose the corpus over MCP -- stdio on every tier, or Streamable HTTP for remote and multi-machine agents with a current Team+ licence. Public HTTP binds require Enterprise. Any agent can search its own and other agents' prior turns.

scritty serve -- stdio; Team+: --http -- 40 tools + memory:// resources
CLI

Scriptable access to the same store -- list, read, and search sessions from any shell or pipeline.

scritty memory ...
connect over stdio or Streamable HTTP
// stdio -- local agents (Claude, Codex, Copilot, ...)
{
  "mcpServers": {
    "scritty": { "command": "scritty", "args": ["serve"] }
  }
}

# Streamable HTTP -- remote / multi-machine agents (current Team+ licence)
$ scritty serve --http --bind 127.0.0.1 --port 8081
  scritty HTTP MCP listening at http://127.0.0.1:8081/mcp
  (bearer-token auth, per-tenant routing)
or query it from any shell
$ scritty memory cross-session-search \
    --query "auth refactor" --limit 10
  14 matches / 5 sessions / 5 providers

$ scritty memory read-session --session-id abc-123
  every exchange scritty recorded, as text
store_exchange cross_session_search memory_search query_exchanges (read-only SQL) summarize_session generate_embedding memory://search?q=

Terminal, MCP, and CLI share one MemoryService -- same data, same behavior. With a current Team+ licence, the HTTP transport is the standard MCP Streamable HTTP endpoint (/mcp), so any compliant client connects with a bearer token. The corpus is also exposed as MCP resources (memory://sessions, memory://search) for agents that read resources instead of calling tools.

Browser-style tab restore

Close it. Reopen it. Right where you left off.

Quit with a dozen tabs open across a dozen projects, and the next launch brings every one back -- each shell already in the directory you left it. Like a browser restoring your tabs, for your terminal.

scritty open with four tabs at ~/api, ~/web, ~/infra and ~/docs; the window is closed to an empty desktop, then relaunched with all four tabs restored at their original working directories
Four tabs, four working directories. Quit the app, relaunch -- same tabs, same paths.
Multiplexer-aware capture

One agent answers from another agent's session.

Split your tmux window and run a different agent in each pane. scritty captures them as two separate conversations -- built from the bytes each pane itself emitted, so a neighbouring pane never leaks into an exchange, and your prefix, copy mode and popups are untouched. Then it serves that memory back: here Copilot is asked about fetch.rs, told not to open any files, and answers from what Antigravity found in the other pane.

Copilot answers a fetch.rs question it never read -- straight out of Antigravity's captured turn, over MCP. Real time, unedited.
One corpus, supported agents

The second agent answers from the first agent's work.

Recorded end to end, unedited except for trimming each agent's launch and a modest speed-up. Copilot designs a JWT auth middleware and writes its notes to a file. Antigravity is then started in a fresh session, given no context, and told to use scritty's cross_session_search tool -- it finds Copilot's decisions and answers on top of them, citing session storage and refresh token rotation it was never told about.

Antigravity cites session:{sid}, user_sessions and RS256 -- Copilot's decisions, from a session it never saw, over MCP.
What's inside

8 things nothing else does together.

01

Agent-agnostic capture

The terminal sits upstream of every supported CLI agent. Launch Claude Code, Codex, Copilot CLI, Gemini, Antigravity, Grok, or Ollama and scritty captures attributable turns without vendor cooperation, plugins, or wrappers. Unknown CLIs still run normally but are not auto-captured until a provider entry is added.

no plugin, no SDK, no copy-paste
02

Process-level provider detection

It reads the process running in the terminal, not the prompt text, so what you submit through scritty and the output that pane wrote afterwards are recorded together and tagged with the provider that produced them. No prompt sniffing, no heuristics.

what you sent, and what the pane wrote back
03

Runs inside tmux

scritty works with your multiplexer, not against it. It resolves which tmux client owns its terminal by pty, so capture survives exec tmux, wrappers and aliases -- none of which leave a child process to find. Content is the bytes that pane itself emitted, replayed through a terminal, so a neighbouring pane can never contaminate an exchange, and two agents in two panes are two conversations. Your key bindings are untouched.

prefix, copy mode, popups -- all still yours
04

One corpus across vendors

Your Claude session about an OAuth bug and your Codex session two weeks later about the same bug live in the same store, in one query.

one store, supported agents
05

Hybrid search

Vector plus keyword search fused with Reciprocal Rank Fusion. Dual offline ONNX embeddings, one tuned for code and one for prose. Press Ctrl+Shift+M and search everything.

semantic and keyword, ranked
06

Pluggable vector backend

A built-in embedded engine by default, or qdrant, pgvector, chroma, weaviate, all behind one trait, with dimension and fingerprint enforcement and atomic blue/green rev swaps.

swap backends, keep the corpus
07

Yours at rest

Captures stay on your machine, and opt-in at-rest encryption locks the whole local store -- transcript, keyword index, and vector index -- under a passphrase only you hold, so nothing is readable to another process, another agent, or a synced backup. Agents reach memory over scoped tokens, so one can be pinned to a single session and can't widen to the whole corpus.

encrypted store, scoped access
08

Honest about what it captured

scritty records the output a pane wrote after a prompt it submitted itself. It does not infer or strip agent UI, so stored text can include prompt echo, progress displays and terminal chrome -- kept because every rule that tried to remove them also removed real answers. Input scritty did not submit is not attributed to a turn. When scritty can name a loss -- a tmux pause, a failed write to its record -- the exchange carries a visible capture gap rather than being presented as complete. A reply taller than the pane keeps the lines that scrolled out of view, including one that scrolls inside a scroll region or is written on the alternate screen. Lines an application deletes outright are not preserved and raise no gap: that is an edit the agent made, not output that went missing, and a marker that cries wolf is one readers learn to ignore.

a short answer always says it is short
How we compare

In the gap nothing else fills.

You currently use What it does What it does not do
iTerm2 / Alacritty / Windows Terminal A traditional terminal emulator Renders a shell, nothing more. No agent detection, no capture, no memory. scritty can be the Linux x-terminal-emulator and the per-user Windows Default Terminal Application for normal non-elevated console launches; macOS has no system default-terminal hook.
Warp Agentic terminal with its own AI Captures only Warp's own agent. Claude Code, Codex, Antigravity running inside it are invisible. Cloud-tied.
Cursor / Continue / Cody IDE-side AI with codebase indexing Indexes your code, not your conversations. Lives in an editor, not a terminal.
mem0 / Letta / Zep / Cognee Memory-as-a-service and agent runtimes A library; you build the agent that uses it. No terminal, no auto-capture, mostly cloud.
Per-vendor session logs Claude Code memory, Codex sessions, Copilot history Siloed by vendor, one format each, no cross-agent search, no embeddings, no shared corpus.
asciinema / ttyrec / script(1) Terminal recorders Capture bytes. No agent detection, no parsing, no semantic search.
tmux / screen Terminal multiplexers Not a competitor -- scritty runs with tmux. It resolves the owning client, spools each pane's emitted bytes, replays them through a per-pane terminal, and records agents in separate panes as separate conversations.
scritty Supported CLI agents captured at the terminal, into one searchable corpus you control Bring its own agent or model. It captures the ones you already run.

scritty sits between AI terminals (which own the surface but not cross-agent memory) and agent memory layers (which own memory but make you build the agent). It is the only one that captures supported CLI agents at the OS boundary they all share: the terminal.

For teams and enterprises

One control plane for your whole team.

Roll scritty out to your team and every member's captures land in one control plane for your org, isolated from everyone else's. Admin search is gated by compliance role: a member's private sessions stay private, while team-marked work is searchable across the org. Members, billing, seats, audit, license, SSO and SAML are each a tab.

scritty control plane for an org: an admin types the query deployment in the Acme Corp Search tab and four federated team results appear, with Activity, Audit Log, Members, API Keys, SAML, Subscription, Billing, Seats, Usage, License and Settings each a tab
Your org's control plane: an admin runs a team-wide search, gated by compliance role, and surfaces every member's federated exchanges, with members, billing, seats, audit, license, and SAML each a tab.
Pricing

Local-first architecture. Paid product.

Your captures live on your machine and the data stays yours; that is the architecture, not the price. Solo devs start on Personal; teams meter federated exchange volume. There is no per-seat pricing, ever.

Personal -- for individual developers

One dev, every supported agent, on your own machine.

Buy it once and own it forever. Runs fully local: your captures never leave your machine, and the license never contacts us -- no heartbeat, no account, no expiry, no kill switch. The same capture, dual-embedding search, MCP over stdio, and CLI the bigger tiers get, sized for one person.

Yours forever Never phones home Unlimited capture MCP stdio + CLI included
$99.99 once

Unlimited capture, forever.
First year of updates included.

Buy Personal or download free -- no card, no account, no expiry

Already own Personal? Year one of updates is included. After that, new builds are $39.99/yr -- optional. Let it lapse and nothing happens to the copy you own; you just stop getting newer versions.

Renew updates
For teams
Team Pilot
$0 trial

25,000 exchange-pairs or 35 days, whichever comes first. 3+ seats.

  • Full Pro feature set on shared infra
  • Converts to Pro / Pro Plus / Enterprise
  • Solo dev? Download free instead
Start Team Pilot
Pro
$249.99 / mo

Unlimited local capture. 100k federated pairs/mo.

  • Central federation, one org
  • Tenant-scoped isolation
  • Google / GitHub SSO
Get Pro
Pro Plus
$749.99 / mo

Unlimited local capture. 400k federated pairs/mo.

  • Everything in Pro, plus SAML SSO
  • 90-day audit retention
  • Email and chat support
Get Pro Plus
Enterprise
from $2,500 / mo

Unlimited local capture. 1M+ federated band.

  • Multi-org federation, dedicated isolation
  • BYOK, custom DPA, 99.9% SLA
  • Hybrid keeps captured data in your cloud
Contact sales
Enterprise self-hosted

Own the entire stack. Nothing leaves your walls.

Run scritty end to end in your own environment: your infrastructure, your network, your data. No shared infra, no hybrid dependency, full data sovereignty. Built and priced for your org, your compliance posture, and your scale.

Air-gap friendly Full data sovereignty SAML / OIDC / BYOK Custom MSA + DPA
Contact us
for pricing

Tailored to your org.

Talk to us

Local capture is unlimited on every paid tier. It runs on your own disk and CPU, so we never meter it -- a team should never capture less on their laptop than a solo developer does. What the numbers above size is federation: the shared central plane, cross-team search, SSO and audit. Never per seat. Start a Team Pilot - 25,000 pooled pairs or 35 days, 3+ seats.

Personal is metered by nothing at all -- it is uncapped and the license never reports anything. Letting the $39.99/yr updates lapse stops new builds being served to you and does nothing whatsoever to the copy already on your machine: it keeps capturing, searching and exporting, offline, forever. The Team Pilot is a limited-time offer and may be changed or ended at any time; ending it does not affect anyone already on an active trial.

Binary licence: Every binary distributed from scritty.dev, including the free evaluation, is provided under scritty's commercial binary-licence branch, not the AGPL source-code option. The product source is private and is not distributed. Evaluation has no expiry, pauses new capture at 25,000 exchanges, and leaves existing captures searchable and exportable. Paid binaries are governed by the applicable purchase agreement.

One terminal for every supported agent.
Every captured conversation, searchable.

Run a supported AI CLI inside scritty and it captures, tags, and indexes each attributable turn on hardware you control. You own your context; no agent gets to forget it.

Solo developer
  • Free forever to evaluate -- 25,000 exchange-pairs, no card, no account. Personal is $99.99 once.
  • Runs fully local; run Claude, Codex, Copilot, Gemini, Antigravity, Grok, or Ollama, all captured.
  • Ctrl+Shift+M to search every agent, every session; MCP stdio + CLI included.
  • Open the same session on your phone or any browser as a PWA.
Team
  • Free Team Pilot (3+ seats), then Pro / Pro Plus / Enterprise.
  • Central Plane for shared cross-team search, self-hosted or managed.
  • Per-org isolation, audit, OIDC and SAML, configurable telemetry.
  • No per-seat pricing; metered by federated exchange volume. Hybrid keeps data in your cloud.