Reference

Complete reference for all repost CLI commands, flags, TUI keyboard shortcuts, and environment variables including auth, bucket, forwarder, and forward.

This page documents every command, flag, shortcut, and environment variable available in the current repost binary. Use the navigation below to jump to a specific section.

Global flags

These flags apply to every repost command.

FlagDescription
--config <dir>Use a specific config directory for local preferences and encrypted token fallback.
--no-colorDisable terminal styling and produce plain text output.
--skip-update-checkDisable the background update check on startup. Equivalent to REPOST_NO_UPDATE_CHECK=1.

auth

The auth commands manage how the CLI authenticates to your Repost account.

repost auth login

Opens browser login, receives a local callback, and stores the generated API token securely in your system keychain or an encrypted config file.

repost auth login

If a token is already saved, this command keeps the existing token and will not replace it. Run repost auth logout first when you need to switch accounts.

repost auth token [TOKEN]

Stores an API token for non-browser authentication. If TOKEN is omitted, the CLI reads from stdin. Tokens must start with rp_ and be exactly 43 characters long.

repost auth token rp_your_token_here
repost auth status

Validates the current token against the Repost API and prints a summary. When server validation succeeds, the output includes:

  • Token name
  • Token type (personal or organization)
  • Token prefix
  • Scopes
  • Creation time
  • Last-used time
  • Expiration date
  • Auth method (stored token or REPOST_TOKEN environment variable)
repost auth status

If a stored token has been revoked server-side, the CLI removes the local copy and asks you to authenticate again.

repost auth logout

Attempts to revoke the stored token on the Repost server, then removes the token saved in local secure storage.

repost auth logout

repost auth logout does not unset REPOST_TOKEN from your shell environment. Commands that run after logout will continue to use the environment variable if it is still set. Unset it manually with unset REPOST_TOKEN.

bucket

repost bucket list

Lists every bucket the authenticated account can access.

repost bucket list

Shortcut: repost bl

Output columns:

ColumnDescription
IDBucket identifier.
NAMEHuman-readable bucket name.
SLUGBucket slug. Use this value with repost forward -b.
DOMAINPublic bucket domain.
STATUSactive or inactive.

forwarder

The forwarder commands let you list, pause, resume, and disable forwarders across your buckets.

repost forwarder list

Lists forwarders across every accessible bucket. Pass --bucket <bucket-slug> to scope the output to one bucket. Bucket ID is accepted for compatibility.

repost forwarder list

Shortcut: repost fl

Output columns:

ColumnDescription
IDForwarder identifier.
NAMEForwarder name.
TYPEForwarder type, such as INTERNAL.
STATUSactive, paused, or inactive.
TARGETTarget URL, topic display, or - if not applicable.

Pause, resume, and disable

Run any of the following commands without flags to open an interactive selector, or pass --bucket and --forwarder for scripted use.

repost forwarder pause \
  --bucket stripe-prod \
  --forwarder local-webhooks

repost forwarder resume also reactivates a forwarder that has been disabled, not just one that is paused.

Flags for pause, resume, and disable:

FlagDescription
-b, --bucket <slug>Bucket slug.
--bucket-slug <slug>Compatibility alias for --bucket.
-f, --forwarder <name>Forwarder name. Repeatable: pass once per forwarder.

Action output columns (same shape for pause, resume, and disable):

ColumnDescription
OUTCOMEPAUSED, RESUMED, DISABLED, or FAILED.
NAMEForwarder name.
TYPEForwarder type.
TARGETTarget URL, topic display, or the API error when the action failed.

Command shortcuts:

ShortcutEquivalent command
repost blrepost bucket list
repost flrepost forwarder list
repost fprepost forwarder pause
repost frrepost forwarder resume
repost fdrepost forwarder disable

forward

repost forward connects selected internal forwarders to your local machine and opens the terminal UI.

repost forward

Flags:

FlagDescription
-b, --bucket <slug>Bucket slug. Required when --forwarder is present.
--bucket-slug <slug>Compatibility alias for --bucket.
-f, --forwarder <name>Internal forwarder name. Repeatable. Required when --bucket is present.
--pending-firstProcess queued events before new real-time events.
--skip-pendingSkip queued events for this session and receive new events only.
--headlessRun without the terminal UI. Prints HEADLESS_READY to stdout after setup. Intended for CI and automated tests.

Do not combine --pending-first and --skip-pending. If both are present, --skip-pending takes precedence and all queued events are skipped.

Target resolution rules:

InputRule
--bucketMatches the bucket slug from repost bucket list.
--bucket-slugCompatibility alias for --bucket.
--forwarderMatches an internal forwarder name inside that bucket.
Partial flagsPassing only --bucket or only --forwarder is rejected.
Multiple forwardersRepeat --forwarder once per internal forwarder name.

TUI keyboard shortcuts

These shortcuts are available during an active repost forward session.

ContextKeysAction
Event listj / k or arrow keysMove selection up and down.
Event listg / HomeJump to the top of the list.
Event listG / EndJump to the bottom of the list.
Event listSpaceOpen the detail panel for the selected event.
Event listcCopy the selected row context.
Event listtGenerate types from the selected JSON request body.
Event listCtrl+LClear all local rows from the TUI.
Details panelSpace or EscClose the detail panel.
Details panelcCopy the detail view.
Details paneltGenerate types from the request body.
Generate typesh / l or arrow keysSwitch between supported languages.
Generate typesTabEdit the root type name.
Generate typesoOpen the options panel.
Generate typesSpace / EnterToggle an option, cycle a value, or commit an edited value.
Generate typescCopy the generated code.
Generate typesEscClose the generate types panel.
Any viewq or Ctrl+CQuit the CLI.

schema

The schema commands define, validate, version, and generate code for your webhook events. They delegate to a bundled schema engine that release builds embed, so no separate install is needed. Your arguments pass through verbatim and the engine's output and exit code are preserved. These are human-facing commands: they do not emit the agent JSON envelope, and the --json / --output flags do not apply. See Schema for the end-to-end workflow.

repost schema init

Scaffold a new schema workspace: creates repost/schema.repost (a generator block plus a small working example), a .env placeholder, and a .gitignore that covers .env and the generated output. Refuses if repost/ already exists. Interactive on a terminal; pass the flags to run headless.

FlagDescription
--language <lang>SDK language for the generator block: typescript, go, python, java, or kotlin.
--output <path>Generated-code output directory. Required for every language except TypeScript.
repost schema init --language java --output ./src/main/java
repost schema validate

Parse and validate .repost files without writing output. The exit code reflects the diagnostics, so it is CI-friendly.

FlagDescription
--schema <path>Path to a .repost file or a directory of them.
repost schema validate
repost schema generate

Validate, then emit each generator's SDK (typescript, go, python, java, or kotlin) and the JSON Schema into the path its generator block points at. No migration is written. It refuses (hard error) when the migration lineage has a fork or a hand-edited snapshot, and warns on stderr, but still generates, when the schema has unmigrated changes.

A Java or Kotlin generator also needs packageName, clientName, and a resourceOutput root (for the client.json registry) alongside output. JVM projects usually generate through the Maven (repost:generate / repost:check) or Gradle (repostGenerate / repostGenerateCheck) plugin rather than the CLI. See the Java and Kotlin guides.

FlagDescription
--schema <path>Path to a .repost file or a directory of them.
repost schema generate
repost schema migrate dev

Diff the current output against the previous state; when it changed, write a new repost/migrations/<timestamp>_<name>/ snapshot (the directory is prefixed with a UTC YYYYMMDDHHMMSS timestamp), bump the affected event versions, and regenerate. No change is a no-op. Each migration records its parent (or parents for a reconciliation) and a checksum of its snapshot.

--name is optional: when a migration is written and it is omitted, the command prompts for a name on a terminal (an empty answer gives a timestamp-only directory) and errors when stdin is not a terminal.

When the migration would remove event types, it lists them and requires an explicit y on a terminal (default No), or --accept-removals to proceed non-interactively. This is the one command that reconciles a fork: it diffs the merged schema against every head, prints a per-parent summary, and records parents: [...].

FlagDescription
--name <name>Name for the migration, slugged into the <timestamp>_<name> directory. Prompted for interactively when omitted.
--accept-removalsProceed without prompting when the migration removes event types (required to remove non-interactively).
--schema <path>Path to a .repost file or a directory of them.
repost schema migrate dev --name add_subtitle

After merging a branch that added migrations, run repost schema migrate dev once to write a reconciling migration; in CI, use repost schema migrate status (below) as the gate.

repost schema migrate status

Report migration health without writing anything. This is the CI gate. Exit code 0 with a one-line summary when the lineage is clean; non-zero with a line-per-finding report when a merge left a fork, when the schema has unmigrated changes (the emission differs from the last snapshot, so migrate dev is not a no-op), or when a snapshot's checksum no longer matches (a hand-edited or corrupted artifact).

FlagDescription
--schema <path>Path to a .repost file or a directory of them.
repost schema migrate status
repost schema migrate deploy

Apply the committed migrations to a live Repost environment: sends the migration head, the full lineage, and the accumulated schemas.json; the server materializes the event-type registry. Requires a clean local status: a fork, unmigrated changes, or a checksum mismatch is a hard error. Re-deploying the same head is a no-op. A server head that is not in your lineage refuses the deploy with a machine-readable reason: behind (your checkout is stale; git pull the latest migrations and redeploy) or diverged (the histories have split; reconcile by git-merging the deployed migrations and running migrate dev, or replace the deployed history with --force).

Auth: REPOST_TOKEN (an environment-scoped token with the schema:deploy scope) and optionally REPOST_API_URL, read from repost/.env before the process environment.

--force replaces a diverged (or rolled-back) deployed history: the CLI fetches the deployed head, shows what will be replaced, and asks for confirmation, then echoes that head back as an optimistic lease. If the head moves between the look and the deploy, the force is refused. Forcing to an older, previously deployed checksum rewinds the registry (the rollback path).

FlagDescription
--dry-runPrint the deployment payload instead of sending it.
--forceReplace the deployed history when it is not an ancestor of yours (diverged or rolled back): fetches the deployed head, shows what will be replaced, and asks for confirmation.
--accept-replaceProceed without prompting when --force replaces the deployed history (required to force non-interactively).
--schema <path>Path to a .repost file or a directory of them.
repost schema migrate deploy
repost schema push

Push the current schema to a live Repost environment without a migration artifact: Prisma's db push, for dev and staging loops. Refused on environments that already have migration history, so a push can never fork a production lineage. The payload is checksummed from the emission itself, so repeat pushes of an unchanged schema are no-ops. Same auth as migrate deploy.

FlagDescription
--dry-runPrint the deployment payload instead of sending it.
--schema <path>Path to a .repost file or a directory of them.
repost schema push
repost schema import svix FILE

Convert a Svix environment export into a repost/ workspace.

FlagDescription
--out <dir>Directory to scaffold repost/ into. Defaults to the current directory.
repost schema import svix export.json --out app
repost schema fmt [PATH]

Format .repost files in place. Idempotent.

FlagDescription
--checkDo not write; exit non-zero if any file is not already formatted.
repost schema fmt

Maintenance

repost version

Prints the binary version. Output may include commit hash and build date metadata.

repost version
repost update

Checks for a newer release and prompts to install it. Add --force to redownload the latest release regardless of the current version.

repost update
repost update --force

Help

repost help [COMMAND] (or repost with no arguments) prints usage. Help output is an interactive convenience with no JSON envelope and no stable contract, so it is out of scope for agent automation. For machine-readable command discovery, use capabilities and docs schema instead. The CLI no longer ships a completion subcommand; if a shell profile still runs eval "$(repost completion …)", remove that line.

Agentic commands

These commands are built for non-interactive use: scoped tokens, machine-readable output, and stable exit codes. This section is the flag-level reference. For the operating model, runbooks, and the JSON contract, see the Agents section and Output & errors.

Output format

Every command below honors the global output flags.

FlagEffect
--jsonMachine-readable JSON on stdout.
--output json / --output tableForce JSON, or force human tables. Takes precedence over --json.
(none)Non-terminal stdout (piped/redirected) auto-enables JSON; a terminal prints tables.

expect, tail, capabilities, and docs schema always emit JSON regardless of these flags. docs search and docs agent emit Markdown. capabilities exposes each command's output_mode so agents can distinguish envelopes, top-level JSON, JSONL, raw-body exceptions, Markdown, and interactive streams.

Command, schema, and scope map

CommandOutput schemaScope
auth token [TOKEN]repost.auth.token/v1— (local credential storage)
auth statusrepost.auth.status/v1read
auth logoutrepost.auth.logout/v1write when revoking a server token
whoamirepost.whoami/v1read
capabilitiesrepost.capabilities/v1— (local)
docs schema [COMMAND]repost.command_schema/v1— (local)
docs search · docs agentMarkdown— (local)
versionrepost.version/v1— (local)
updaterepost.update/v1— (release download)
events search [QUERY]repost.events.search/v1read
events get EVENT_IDrepost.events.get/v1read · secrets for --reveal-secrets/--as-fixture
events diff L Rrepost.events.diff/v1read
events schema [EVENT_ID]repost.events.schema/v1read
forwards search [QUERY]repost.forwards.search/v1read
forwards chain EVENT_IDrepost.forwards.chain/v1read
dlq listrepost.dlq.list/v1read
healthrepost.health/v1read
expectbare object (no envelope)read
tailNDJSON (no envelope)read
initrepost.init/v1write
promote setuprepost.promote.setup/v1write
bucket create NAME · bucket get SLUG · bucket listrepost.bucket.create/v1 · .get/v1 · .list/v1write · read · read
forwarder create NAME · forwarder listrepost.forwarder.create/v1 · .list/v1write · read
forwarder pause/resume/disablerepost.forwarder.action/v1write
replay [EVENT_ID...]repost.replay.create/v1write
replay status/wait JOB_IDrepost.replay.status/v1read
replay listrepost.replay.list/v1read
replay pause JOB_ID · replay resume JOB_ID · replay cancel JOB_IDrepost.replay.action/v1write

bucket list, forwarder list, and forwarder pause/resume/disable are documented under bucket and forwarder above; pass --json for the schemas listed here.

Identity and discovery

repost whoami

Prints the authenticated identity, active organization, plan, and usage. Schema repost.whoami/v1. No command-specific flags.

repost capabilities

Prints the machine-readable command manifest: paths, usage, descriptions, command kind, group IDs, output mode, agent contract status, output schema names, and flags. Always JSON. Cache it by its version field.

FlagDefaultMeaning
--jsonfalsePrint the JSON manifest.
repost docs schema [COMMAND]

Prints one command's output schema, output mode, runtime envelope shape, and a data_shape when one is documented. Schema repost.command_schema/v1.

repost docs search · docs agent

docs search prints the query cheatsheet. docs agent prints the operating manual. Output is Markdown.

FlagApplies toMeaning
--topic <name>docs agentPrint a specific topic, e.g. runbooks.
--installdocs agentWrite .repost/AGENTS.md and print an @include line.
--stdoutdocs agentPrint the primer to stdout instead of writing a file.

Investigate

repost events search [QUERY]

Search received events. Schema repost.events.search/v1. Returns next_cursor/has_more for forward paging.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug or ID to search.
--all-bucketsfalseSearch every bucket visible to the token.
--since <time>RFC3339 timestamp or duration ago (e.g. 30m).
--until <time>RFC3339 timestamp or duration ago.
--limit <n>20Maximum events to return.
--cursor <token>Pagination cursor from a previous search (same query and window).
repost events get EVENT_ID

Fetch one event with credentials redacted by default. Schema repost.events.get/v1. Body truncates to 4096 bytes unless --full.

FlagDefaultMeaning
--fullfalseReturn full request and response bodies.
--body-onlyfalsePrint only the raw request body (no envelope).
--reveal-secretsfalseReturn unredacted values. Requires secrets scope.
--as-fixturefalseReturn the event as a test fixture. Requires secrets scope.
repost events diff LEFT_EVENT_ID RIGHT_EVENT_ID

Compare two events after default redaction. Schema repost.events.diff/v1.

repost events schema [EVENT_ID]

Infer a JSON schema from event bodies or supplied samples. Schema repost.events.schema/v1.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug or ID for the samples.
--path <glob>Path glob to sample within the bucket.
--sample-json <json>Inline JSON sample; repeatable.
--max-samples <n>25Maximum samples used for inference.
repost forwards search [QUERY]

Search delivery attempts. Schema repost.forwards.search/v1.

FlagDefaultMeaning
-f, --forwarder <id|name>Forwarder ID or name.
-b, --bucket <slug|id>Bucket slug or ID; required when --forwarder is a name.
--event <id>Filter to one event ID.
--failedfalseShow failed forwards only.
--since / --until <time>Time bounds (RFC3339 or duration).
--limit <n>20Maximum forwards to return.
--cursor <token>Pagination cursor from a previous search.
repost forwards chain EVENT_ID

The authoritative per-attempt delivery timeline for one event and forwarder. Schema repost.forwards.chain/v1.

FlagDefaultMeaning
-f, --forwarder <id|name>Forwarder ID or name.
-b, --bucket <slug|id>Bucket slug or ID; required when --forwarder is a name.
repost dlq list

List dead-letter rows for a bucket or forwarder. Schema repost.dlq.list/v1.

FlagDefaultMeaning
-f, --forwarder <id|name>Forwarder ID or name.
-b, --bucket <slug|id>Bucket slug or ID; required when --forwarder is a name.
--since / --until <time>Time bounds (RFC3339 or duration).
--limit <n>20Maximum DLQ rows to return.
--cursor <token>Pagination cursor from a previous list.
--include-archivedfalseInclude archived DLQ rows.
repost health

Forwarder health over a window, with optional threshold gating. Schema repost.health/v1.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug or ID.
-f, --forwarder <id|name>Forwarder ID or name.
--window <dur>1hHealth window duration.
--fail-on <expr>Exit 8 when the expression breaches, e.g. success_rate < 0.99 || dlq_depth > 0.

Wait for events

repost expect

Block until one matching event arrives on the observe stream. Emits a bare JSON object (no envelope) and exits 0; exits 7 on timeout.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug or ID to observe.
--filter <query>Events query filter.
--path <glob>Path glob to match.
--method <verb>HTTP method to match.
--timeout <dur>30sMaximum time to wait.
repost tail

Stream compact, redacted events as NDJSON (one object per line). Set at least one bound.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug or ID to observe.
--filter <query>Events query filter.
--count <n>0Stop after N events (0 = unlimited).
--max-wait <dur>0Stop after this duration (0 = no limit).

Mutate

repost init

Create a bucket and an external forwarder in one step. Schema repost.init/v1.

FlagDefaultMeaning
--name <name>Bucket name.
--target <url>Target URL for the external forwarder.
--forwarder-name <name>defaultForwarder name.
--idempotency-key <key>Stable key for retry-safe init.
repost promote setup

Promote a temporary guest webhook setup into account-backed resources through the browser-confirmed local callback flow. Schema repost.promote.setup/v1. The command first emits status: "requires_user_action", then either status: "completed" after the CLI receives the browser callback or status: "failed" before exiting non-zero.

FlagDefaultMeaning
--from-guest <guest-url-or-access-id>Temporary guest URL, bucket endpoint URL, or access ID. Required.
--yesfalseReserved; browser confirmation is always required.
repost bucket create NAME · bucket get SLUG

create provisions a bucket (schema repost.bucket.create/v1); get returns a bucket plus its forwarders (schema repost.bucket.get/v1).

FlagDefaultMeaning
--color <hex>#3B82F6Bucket color.
--response-mode <mode>QUEUEQUEUE or PROXY.
--ack-status-code <n>200ACK status code for queue mode.
--ack-body <text>ACK response body.
--proxy-timeout-ms <ms>30000Proxy timeout for proxy mode.
repost forwarder create NAME

Create a forwarder on a bucket. Schema repost.forwarder.create/v1. --target is required for EXTERNAL forwarders.

FlagDefaultMeaning
-b, --bucket <slug|id>Bucket slug. Bucket ID is accepted for compatibility. Required.
--target <url>Target URL (required for EXTERNAL).
--type <type>EXTERNALForwarder type.
--path-mode <mode>LOCKEDPath handling mode.
--http-timeout-ms <ms>30000Per-attempt request timeout.
--max-retries <n>3Delivery attempts before the DLQ.
--retry-delay-ms <ms>15000Initial retry backoff.
--retry-backoff <x>2.0Backoff multiplier.
--retry-max-delay-ms <ms>900000Backoff ceiling.
--rate-limit-per-second <n>0Per-forwarder rate limit (0 = off).
repost replay [EVENT_ID...]

Preview or create a forwarder-scoped replay. Schema repost.replay.create/v1. A single explicit event ID needs no --yes; a --query or --dlq selection, or multiple IDs, require --yes unless --dry-run.

FlagDefaultMeaning
-f, --forwarder <id|name>Target forwarder. Required.
-b, --bucket <slug|id>Bucket slug or ID; required when --forwarder is a name.
--query <expr>Quickwit query selecting prior deliveries.
--dlqfalseReplay dead-letter rows.
--dlq-id-from / --dlq-id-to <ulid>DLQ ULID range bounds.
--dlq-id <id>Specific DLQ row ID; repeatable.
--since / --until <time>Time bounds (RFC3339 or duration).
--rate <n>50Deliveries per second (5500).
--dry-runfalseReturn would_replay without creating a job.
--yesfalseConfirm a non-dry-run bulk replay.
--idempotency-key <key>Retry-safe job creation.
repost replay status · list · wait · pause · resume · cancel

Inspect and steer replay jobs by ID. status/waitrepost.replay.status/v1; listrepost.replay.list/v1; replay pause / replay resume / replay cancelrepost.replay.action/v1.

CommandFlagDefaultMeaning
replay list--limit <n>20Maximum jobs to return.
replay list-b, --bucket <slug|id> / -f, --forwarder <id|name>Filter listed jobs.
replay wait JOB_ID--max-wait <dur>5mWait deadline. Exit 7 on timeout, 8 if finalized with failures.

Environment variables

VariableDescription
REPOST_TOKENAPI token for non-interactive authentication. Takes priority over any stored credentials.
REPOST_CONFIG_DIROverride the config directory path used for local preferences and encrypted token fallback.
REPOST_NO_UPDATE_CHECK=1Disable background update checks. Equivalent to the --skip-update-check flag.
REPOST_BASE_URLDerive the API, web, and WebSocket URLs from a single base domain.
REPOST_API_URLOverride the CLI API URL individually.
REPOST_WEB_URLOverride the app URL used by browser login.
REPOST_WS_URLOverride the WebSocket URL used by repost forward.

When REPOST_BASE_URL=example.com is set, the CLI automatically derives the following service URLs:

VariableDerived value
REPOST_API_URLhttps://cli.example.com
REPOST_WEB_URLhttps://app.example.com
REPOST_WS_URLwss://ws.example.com/ws

Set REPOST_API_URL, REPOST_WEB_URL, or REPOST_WS_URL individually only when a single endpoint needs a different value than what REPOST_BASE_URL would derive.