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.
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>Command can email a developer the snippet and tell you when it goes live. You don't have to chase them.
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.
What gets captured
Reporters see this exact list before they send. Whatever you switch off is never collected — not hidden, not collected.
/billing/exportsTypeError: url is undefinedPOST /api/exports → 50012 events · never keystrokesOPT-IN PER REPORTHow users open it
Icon only, docked right. Its colour carries the status: grey filed, orange needs you, green done.
⌘ .Zero pixels in your UI. Rebind with data-hotkey.
command.open()Wire it to any element — a nav link, a help menu, an error state.
There is no bubble option and there won't be. A bubble announces the vendor; a tab announces the service.
Connect your stack
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.
Command watches PRs, checks, statuses, reviews and review comments. Nothing merges outside your normal process — branch protection and required checks stay in force.
Agents receive repo, branch, test command, scope, acceptance criteria and constraints — never a raw report. Review comments route back for rework automatically.
JavaScript API
— open the widget — preselect a type — name the reporter — attach your own fields — react to status changesOptional. Without it, reports are anonymous and the thread lives in the browser. Identified reporters keep history across devices.
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