DOCUMENTATION

Four minutes from paste to your first answered report.

Command runs on one script tag. Everything below is optional configuration — the widget receives, classifies and answers reports the moment it loads.

01

Install the widget

Paste this before the closing </body> tag. It loads asynchronously and adds nothing to your bundle.

<script src="https://app.incommand.dev/widget.js" data-key="YOUR_PROJECT_KEY" async></script>
Tag Manager
Custom HTML tag, all pages
Webflow
Site settings → custom code
Not the person who edits the site?

Command can email a developer the snippet and tell you when it goes live. You don't have to chase them.

02

Verify it works

Setup ends with proof, not a congratulations screen. Open your app, hit the mark, and type anything — Command catches it and shows you exactly what a real reporter would have seen.

DETECTED ON APP.ACME.CO · 1.4s
TEST REPORT RECEIVED · T-0001
WAITING ON LINEAR CONNECTION
WHAT CAME BACK

Copy that — received loud and clear. You're set up.

/dashboard · 1512×982 · CHROME 126 · 0 ERRORS
03

What gets captured

Reporters see this exact list before they send. Whatever you switch off is never collected — not hidden, not collected.

The page they were on
/billing/exports
ON
Errors the browser logged
TypeError: url is undefined
ON
Requests that failed
POST /api/exports → 500
ON
Their last few clicks
12 events · never keystrokes
ON
Screen recording
OPT-IN PER REPORT
OFF
04

How users open it

The mark, on the edge

Icon only, docked right. Its colour carries the status: grey filed, orange needs you, green done.

Keyboard only
⌘ .

Zero pixels in your UI. Rebind with data-hotkey.

Your own button
command.open()

Wire it to any element — a nav link, a help menu, an error state.

✕ NOT OFFERED
A floating bubble

There is no bubble option and there won't be. A bubble announces the vendor; a tab announces the service.

05

Connect your stack

Linear

Command creates the issue with type, priority, scope, acceptance criteria, session context and reporter info — then reads state back so the reporter's thread stays accurate. Choose the team and default project; labels map to report types.

GitHub & CI

Command watches PRs, checks, statuses, reviews and review comments. Nothing merges outside your normal process — branch protection and required checks stay in force.

Coding agents

Agents receive repo, branch, test command, scope, acceptance criteria and constraints — never a raw report. Review comments route back for rework automatically.

CodexCursorClaude CodeopencodeHumans only
06

JavaScript API

command.open() — open the widget
command.open({ type: 'bug' }) — preselect a type
command.identify({ id, name, email }) — name the reporter
command.context({ plan: 'growth' }) — attach your own fields
command.on('status', fn) — react to status changes
Identifying users

Optional. Without it, reports are anonymous and the thread lives in the browser. Identified reporters keep history across devices.

Data & retention

Reports and their session context are deleted automatically after 30 days. Keystrokes are never captured.

Something missing from these docs?

HELP US MAKE THIS CLEARER

Send feedback →