seri is a cross-platform coding-agent CLI. It ships as a single seri binary — no runtime to
install — written in TypeScript on Bun, and runs natively on Windows, macOS,
and Linux (no WSL2 or Docker required).
It is a research-oriented harness, working on self-evolving harnesses: recorded trajectories become reviewable per-project policy, with a human on every promotion. That pipeline is not shipped. Evaluate seri today as a coding agent.
seri is code-first, not code-only. Coding is what it does today, and the only thing this release is built for. The loop, the session store, and the permission model are not bounded to a repository; general assistant work is a planned direction.
- A permission gate as the base safety layer, on every OS:
read-only/approve-each/auto, cycled with/mode. Approving a tool "always" is scoped to that tool — forwrite_file/editit persists across sessions. - Checkpoints, undo, rewind, restore. Filesystem-mutating tool calls commit to a shadow git
ref, independent of your branch.
/undo,/rewind, and/restorewalk it back without touching your commit history. - Subagents. Built-in isolated-context roles (
explore,plan) plus user-defined agents in.seri/agents/. Dispatch with/explore <task>or let the model pick one./plan [task]is the TUI plan-mode overlay, not a subagent. - Persistent memory. After a turn, an archivist can stage facts to
MEMORY.md/USER.mdoutside the repo./memoryreviews them; nothing is applied silently. - Seven providers in one harness. Groq, OpenRouter, Vercel AI Gateway, Anthropic, OpenAI,
Google, and xAI. Switch with
/modelmid-session without losing context. - Three ways to pay, including consumer subscriptions. A BYOK API key, a hosted seri
account (
/login), or a Grok or ChatGPT subscription from/setup. Keys and subscriptions live side by side in the same session. - Extensibility without a source change. Agents, skills, rules, MCP servers, and hooks are
files you drop in
.seri/(this project) or under your profile (every project). - Verify after write. Point seri at your project's check command via
/configand it runs after every successful write, feeding diagnostics back in the same turn. - Sessions, profiles, compaction.
--continue/--resume <id>reopen a conversation./profileisolates config, memory, and sessions./compact [instructions]summarizes older messages so the conversation fits the context window. Local trajectory recording (/trajectory) is on by default — the research substrate, not an evolution loop. - A local daemon.
seri servestarts a loopback daemon for the profile;seri exec <task>runs one task through it. Scheduled fires andseri execsessions age out ofseri.dbafterSERI_TRAJECTORY_RETENTION_DAYS(default 30). The schedule row stays; TUI transcripts are not pruned.GET /v1/schedules/:id/runsthen shows only that window. Hosted portal/sessionsis WorkOS login sessions, not this file.seri doctorprints a local health report.seri updatereplaces an installed binary from GitHub Releases.
The provider is the API surface. The credential is what pays. They are separate on purpose: the same model can be reached by a key, a subscription, or a hosted account.
| Provider | Id | BYOK key |
|---|---|---|
| Groq | groq |
GROQ_API_KEY |
| OpenRouter | openrouter |
OPENROUTER_API_KEY |
| Vercel AI Gateway | vercel |
AI_GATEWAY_API_KEY |
| Anthropic | anthropic |
ANTHROPIC_API_KEY |
| OpenAI | openai |
OPENAI_API_KEY |
google |
GOOGLE_GENERATIVE_AI_API_KEY |
|
| xAI | xai |
XAI_API_KEY |
The provider is spelled xai, not grok. Grok is the model family; xAI is the company that
serves it.
OpenRouter and Vercel AI Gateway are peer aggregators. Configure either key, or both; neither is required for the other, and installing one does not replace the other. A hosted seri account still routes through OpenRouter — that is separate from a Vercel AI Gateway key you bring yourself.
| How you pay | What it is |
|---|---|
| Key | your own API key for that provider (/setup, or the env var above) |
| Subscription | a plan you already pay for — seri (/login, free / pro / max / ultra), Grok (SuperGrok / X Premium+) on xAI, or ChatGPT on OpenAI |
| Hosted | the seri plan above: a seri account that routes on your behalf |
/setup lists API keys and Subscriptions in one panel. seri, Grok, and ChatGPT each appear as
their own subscription row. Connect a Grok plan or a ChatGPT plan with a browser sign-in.
Disconnect is local to this profile and leaves the remote login in place so you
can switch back to the plan or to your own keys.
A subscription and a metered key can both be present. For that vendor the subscription wins, and
the key is marked unused. Turns on a subscription report (cost: included) instead of a dollar
amount. seri never silently falls back from a refused subscription to a key that would charge
you.
/model lists every provider and every route to a given model, including plan-included rows.
A pick whose next turn succeeds becomes the default for future sessions. If the pair you're on
has no credential, seri reroutes to a configured provider that reaches the same model — native
providers preferred over an aggregator — and says so once in the transcript.
SERI_PROVIDER names which of the seven SERI_MODEL is read against.
curl -fsSL https://seri-agent.seriora.ai/install.sh | bashcurl -fsSL https://seri-agent.seriora.ai/install.sh | bashInstalls to ~/.local/bin. If that directory isn't on your PATH, the script prints the
line to add — it never edits your shell config for you.
irm https://seri-agent.seriora.ai/install.ps1 | iexInstalls to ~\.seri\bin and adds it to your user PATH. No admin rights
required. Open a new terminal afterwards so the PATH change takes effect.
Refresh an existing install with seri update. That talks to GitHub Releases for this
repo, verifies SHA256SUMS, and replaces the binary you ran. It refuses a source checkout
(bun run dev). Pin a tag with SERI_VERSION=v0.1.3 the same way the install scripts do.
If you'd rather not run a script straight from the internet, download the binary for your
platform from Releases, make it
executable, and put it somewhere on your PATH. Both install scripts are short enough to
read first, and both verify the download against the SHA256SUMS file published with each
release — that catches a truncated or corrupted download, not a compromised release.
seriThat opens the TUI. On a first run, guided setup asks how you want to pay: paste a provider
key and pick a model, or connect a seri, Grok, or ChatGPT subscription from /setup.
Signing into a hosted account on the welcome splash (Log in / Sign up) skips setup — the
seri plan covers OpenRouter without a local key, and /setup lists it under Subscriptions
with the plan name (free / pro / max / ultra). OpenRouter stays a normal API-key row for a
key you bring yourself. Disconnecting the seri plan (without /logout) switches this
profile back to your keys. Setting a key in the environment before you launch
(GROQ_API_KEY, OPENROUTER_API_KEY, or AI_GATEWAY_API_KEY, say) also skips setup.
seri <task> one-shot, non-interactive
seri --continue [task] reopen the most recent session
seri --resume <id> [task] reopen that session
seri serve start the loopback daemon for this profile
seri exec <task> run one task through an already-running daemon
--profile <name> (or SERI_PROFILE) puts config, auth, permissions, sessions, and checkpoints
under an isolated root.
seri loads one AGENTS.md into the system prompt. It uses the nearest AGENTS.md from
the working directory up to the git root (or only the working directory if it is not a
git repo). If none exists, seri loads ~/.seri/AGENTS.md when that file exists. The two
are never merged. An AGENTS.md above the repo — including ~ — is ignored.
Everything below is a slash command inside the session.
| Command | Does |
|---|---|
/mode |
cycle permission mode: read-only → approve-each → auto |
/plan [task] |
TUI-only: research and write a plan; empty /plan or Ctrl+O toggles plan mode |
/effort |
show, set, or clear this session's reasoning-effort override |
/undo |
step back through file checkpoints |
/restore |
restore a checkpoint by sha |
/rewind |
rewind the conversation |
/clear |
start a new session (previous one stays recoverable with seri --resume <id>) |
/compact [instructions] |
summarize older messages so the conversation fits the context window |
/memory |
review staged memory writes |
/trajectory |
show or turn local trajectory recording on or off |
/usage |
hosted allowance used |
/exit |
end the session (or Ctrl-D) |
/model |
open the model picker across all seven providers and subscription routes |
/setup |
add or replace a provider API key; connect or ignore seri, Grok, or ChatGPT plans |
/login |
sign in to a hosted seri account |
/signup |
create a hosted seri account |
/logout |
leave a hosted seri account |
/config |
view or edit non-provider settings (including the verify command) |
/permissions |
view or revoke permanently approved tools |
/skills |
list skills, and review what the archivist proposed |
/mcp |
manage MCP servers |
/hooks |
read this project's hooks and decide whether they may run |
/max-turns |
override the per-task turn budget (default 500) |
/profile |
create a new profile — an isolated config/memory/session root |
/<agent> <task> |
dispatch a built-in or user-defined subagent |
/<skill> [args] |
run a skill in the session's own context |
See CONTRIBUTING.md for how to get the repo running and what a change needs to clear before it lands.
Apache License 2.0. Copyright 2026 Seriora Research.