The inline command puts the whole platform in your terminal. It reviews your local changes with the same reviewer,
repository memory and team learnings as inline’s pull request reviews, before the pull request exists. It shows the
inline review and merge gate on a pull request, lists everything inline has found wrong across every feature, prints a
fix brief for any of it or hands it to inline’s coding agent, and answers questions about your workspace.
It is built for coding agents as much as for people: every command has --json, long-running ones stream --events,
nothing ever waits on a prompt without a terminal, and exit codes are stable.
inline login prints a short code and opens your browser at /device. Check the code matches, click
Authorize, and the terminal finishes on its own. The key it gets reads what you can read and runs pre-PR reviews.
It expires after 90 days and appears under Coding agents like any other key, where you can revoke it.
Run inline doctor any time something looks wrong: it checks the version, the server, your sign-in, the repository,
the hook and the terminal, and says how to fix each problem.
inline login # default access: read and reviewinline login --access full # also resolve issues, start fixes, comment on plans, read metricsinline login --no-browser # SSH or a container: open the printed link anywhereinline login --no-wait --json # for an agent: print the link and code, exit 3inline login --complete # then finish once the person approvesprintenv INLINE_KEY | inline login --with-key
With --access full the /device page lists exactly what the key will be able to do, and you approve it by ticking
a box. A key never gets more than you can grant yourself, and no terminal key can manage agents, members, roles or
connections.
inline logout forgets the key and revokes it when inline login minted it. A key you pasted may be wired into
something else, so it is only revoked with --revoke.
inline status (or inline whoami) shows the server, the key and where it came from, who it acts as, the workspace
and plan, the access tier, and whether this repository is connected.
inline review # staged changes, or the working tree when nothing is stagedinline review --staged # only what is stagedinline review --working # staged, unstaged and new filesinline review --base origin/main # everything on this branchinline review --deep # codebase-wide review of the pushed commitinline review -- src/payments # only these pathsinline review --layout diff # read each file with its findings in place
The review shows each stage live (context, triage, review, validation), then the findings grouped by file, worst
first, each with a code frame and a file:line location your terminal can open. Add -t "what this does" and
-m "why" to give the reviewer intent.
When the repository is connected to inline, its memory and your team’s learnings apply. Otherwise the review still
runs on your changes and the files they touch. Press Ctrl-C to stop a review; it stops on the server too.
Gate levels: minor (any finding), major (medium and above), critical (high only). Findings at or above the gate
exit 2. In CI, create a key under Coding agents, store it as a secret, and pass it as INLINE_API_KEY.
The pre-push hook reviews the commits you are about to push. It blocks the push only when findings reach the gate; if
the review cannot run at all (offline, signed out), it says so and lets the push through. INLINE_SKIP=1 git push or
git push --no-verify skips it, and inline hook uninstall removes it.
inline pr # this branch's pull requestinline pr 412 --resolved # include findings already resolved or held backinline pr --web # open it on GitHub
The newest inline review of a pull request: who opened it, its risk, the merge gate, the commit inline reviewed
against your HEAD, and every open finding.
Pull requests inline reviewed in this repository. Filter with --mine, --author <login>, --open-findings and
--since 7d; --all-repos lists every repository your key can read.
One line with an exit code for scripts and hooks: 0 the gate passes or is off, 2 it fails, 3 a review is running
or your head is newer than the reviewed commit, 5 this branch has no reviewed pull request.
The inline / review check: its mode, state and what blocks the merge. --watch polls until it settles, and
--fail-fast exits as soon as a finding blocks. Its exit codes are pr status’s, so a check that passes on a head
inline has not reviewed exits 3.
inline issues # this repository, worst firstinline issues -i # pick one, then choose what to do with itinline issues --min-severity high --jsoninline issues --all-repos --source observe_issue
Everything inline has found wrong, from every feature: review findings, runtime errors, CI failures, security alerts,
documentation drift and cloud findings. Each row ends with a ref such as review_finding:abc123 that the commands
below take.
inline fix review_finding:abc123 | claude # the brief, for the agent on your machineinline fix review_finding:abc123 --remote # inline's coding agent fixes it and opens a pull request
The brief is the same one inline’s own coding agent receives. With --remote the terminal follows the session until
it opens a pull request; add --no-wait to print the session id and move on. --remote needs --access full.
After inline pr <number>, the F-1, F-2 aliases on its finding cards work here too: inline fix F-2.
inline resolve review_finding:abc123 --as fixed --pr https://github.com/acme/api/pull/12inline resolve observe_issue:9f2 --as ignored --note "known, tracked in the Q4 plan"
Records what happened to an issue, so it leaves the open list and whoever filed it can see why. dismissed and
ignored need a --note. On a review finding this is your claim: the merge gate still clears on the push that changes
the flagged lines, or when the thread is resolved. Needs --access full.
A coding session is inline’s coding agent at work on one issue: it plans the change in a sandbox, runs the
repository’s own checks and opens a pull request written in the repository’s conventions. It may decline, and a decline
comes with its reason.
inline sessions watch <id> follows a session live until it ends, then prints the pull request. It exits 0 when the
session succeeds or declines, 1 when it fails or is cancelled, and 3 at --timeout.
inline sessions cancel <id> stops a running session at its next safe point. It asks first on a terminal; pass
--yes anywhere else. Needs --access full.
inline plan create --file plan.json creates a plan from the same document the create_plan tool takes and prints
its share link. --file - reads it from stdin.
inline ask "which repos have open critical security alerts?"echo "what changed in the merge gate this week" | inline ask --fast
Asks the portal’s copilot and streams the answer. It reads through tools that run with your key’s permissions, across
every feature, and changes nothing.
inline rules checks the repository’s .inline.yml files with the same parser a review uses and points at every
problem by line. It runs entirely on your machine.
inline rules explain <path> shows the path instructions, filters and settings that apply to one file. --remote adds
the portal’s merged settings, each with where its value came from.
inline metrics shows the four DORA figures, where pull request time goes, how AI-authored pull requests compare and
what inline saved, for this repository or, with --all-repos, every one. --window 7d|30d|90d. Needs
--access full.
inline open opens the portal; inline open pr, issue <ref>, session <id>, plan <id>, settings and keys
open those pages. --print prints the address instead.
inline config shows every setting this CLI resolved (server, key, output, colour, width, pager, agent and CI
detection, update check and auto-update) and where each value came from.
inline config set auto-update off stops background updates on this machine; on turns them back on, and also lets
CI and coding agents update, which they otherwise never do. The setting is saved in settings.json in the config
directory.
inline upgrade updates a global npm, pnpm, bun or yarn install after you confirm; for npx and project installs it
prints the command to run. --check only reports whether a newer version exists, and whether auto-update is on and
how its last install went.
inline keeps itself up to date. At most once a day, after a command and in the background, it asks the npm registry
for the latest version; when there is a newer one and inline was installed globally with npm, pnpm, bun or yarn, the
same background process installs that exact version. Nothing waits on it and nothing prompts. The next command you run
says Updated to inline X. once. An npx, project or source install is never touched: inline names the command
instead.
inline keeps working throughout. For a global npm install the new version is installed into a staging folder
next to the current one, its binary must report the new version, and only then do its files move into place, the
code before the entry point. A slow download, a failed one or the update being killed (even kill -9 or a power
cut) leaves the version you had, and a release that does not run never replaces it. pnpm, bun and yarn install in
place, and when the result does not run the version that worked is installed back.
One install at a time: a lock in the config directory keeps two commands from installing at once.
An install counts only when the new binary reports the new version. A failed one is retried after an hour, then two,
then four; after three failures that version is left for inline upgrade, and the notice comes back. A release that
installs but does not run is given up at once.
If you install an older version by hand, auto-update keeps it until a release newer than the one you replaced.
npm’s output goes to update.log in the config directory (the previous one kept as update.log.1).
When the server no longer supports your version, the command says so on a terminal and the update starts at once.
The line says what is happening: updating, checking for a newer release, that the latest release is still too old,
or (for an install inline cannot update) the command to run. Scripts, CI and agents get no line; the server’s own
error tells them if it refuses the version.
Off with inline config set auto-update off, INLINE_DISABLE_AUTOUPDATE=1 or DISABLE_AUTOUPDATER=1; the daily
check and its one-line notice stay. INLINE_NO_UPDATE_CHECK=1 turns both off. In CI, under a coding agent, in a pipe
or with --json there is no check and no notice unless you ran inline config set auto-update on, which updates
there too, silently.
inline doctor shows whether auto-update is on and the last install’s result.
inline skills install teaches your coding agents to use inline: it writes two skills (inline-cli for the commands,
JSON shapes and exit codes, inline-loop for review, fix, re-review) into .claude, .agents and .codex at the
repository root. A skill file you edited is only replaced with --force.
--json prints one document on stdout, errors included, with schemaVersion: 1. Errors look like
{"status": "error", "error": {"code", "message", "hint", "next", "exitCode"}}, and next is the command to run.
--events streams one JSON object per line on review, pr checks --watch, sessions watch,
plan feedback --watch, ask and login. The last line is always complete (with the same document --json
prints) or error.
Data goes to stdout; progress, prompts and notices go to stderr.
Without a terminal, in CI, under a coding agent or with --no-input, nothing prompts: a command that needs an answer
exits 64 and names the flag to pass. Claude Code, Codex and Cursor are detected; INLINE_AGENT=1 or 0 overrides.
Output adapts to the terminal: NO_COLOR, FORCE_COLOR, --plain, TERM=dumb, pipes and narrow windows all
degrade to clean, stable text.
Exit code
Meaning
0
Done; findings below the gate; a declined coding session
1
The command could not do its job (network, server, a failed session)
2
Findings at or above the gate, or the merge gate fails
3
Still running, or --watch reached --timeout
4
Not signed in, or the key was rejected
5
No such issue, review, session, plan or pull request
For a review: your diff, the full contents of the changed files, and the files they import. Files that look like
secrets (environment files, private keys, certificates, credentials) are never sent, neither their contents nor their
changes. The check is by file name: a secret pasted into an ordinary source file is sent with the diff. Binary and very large files are reviewed from the diff alone. Every file left out is listed when the review
runs. inline rules sends nothing at all.