CLI Reference

The usertold CLI is the primary authoring interface for agents and power users. Every operation supports --format json for machine-readable output.

Install

npm install -g usertold
usertold auth login

Run usertold --help or usertold <command> --help for the human-readable flag reference. Add --json to any help command for structured discovery, for example usertold --help --json.

Project defaults

The CLI defaults to your personal workspace for project discovery and creation:

usertold project list
usertold project create --name "Demo"
usertold init --name "My Product" --format json --yes

Set a current project once, then omit <projectRef> from project-scoped commands:

usertold project use acme/checkout
usertold work list
usertold interview list
usertold config set --key openai_api_key --value sk-...

If you belong to multiple orgs, pass --org <orgHandle> or an explicit <orgHandle> to target a different workspace.

Command groups

GroupWhat it does
authlogin, logout, whoami, token — authenticate and inspect the current session
initBootstrap project + study + intake — interactive on TTY, non-interactive with --yes
projectlist, create, get, update, delete, snippet (embed code), status (evidence-health summary), overview (dashboard summary)
studylist, create, get, update, delete, export, import, reprocess, validate-script, guide (design guide for agents)
intakelist, create, get, update, delete, set-questions, list-responses, get-response, qualify-response, disqualify-response
interviewlist, create, upload-video, import-transcript, forensics, end, get, status, events, update, delete, transcript, timeline, enriched-timeline, media, audio, screen, reprocess, retry-media-merge, watch
evidencelist, get, annotate, dismiss, undismiss, link, unlink, delete, bulk-link, bulk-delete
worklist, get, create, create-from-evidence, update, delete, push, push-status (provider state — issue URL, sync status)
apiRaw HTTP calls to the REST API using stored credentials
configset, get, list, delete — per-project / per-env configuration (openai_api_key, etc.)
billingstatus (credit balance), history (recent billing events)
completionsEmit shell completion scripts for bash / zsh / fish
extractRun evidence extraction on local transcript/event files using your OpenAI key — offline alternative to server-side interview reprocess
adminAdministrative operations (admin embed-backfill, admin credits grant); requires elevated auth

Every command and subcommand accepts --help for the full flag reference. Use --help --json when an agent or script needs the command manifest without parsing text.

Output contract

Every command outputs structured JSON. Schema is stable across releases.

{
  "id": "sig_abc123",
  "signal_type": "struggling_moment",
  "quote": "I tried this flow three times and still cannot find where to change billing.",
  "confidence": 0.91,
  "intensity": 0.8,
  "session_id": "ses_xyz789",
  "timestamp_ms": 142300,
  "page_url": "/checkout/step-3"
}

Environments

--env accepts production (default), stage, or local. Credentials are stored per environment.

Web parity

This table maps the main dashboard flows to their CLI equivalents. Project-scoped commands accept <projectRef> explicitly, or use the current project set by usertold project use <projectRef>. Rows marked Web-only do not have a CLI verb yet.

Dashboard actionCLI verb
Sign in (Google OAuth)usertold auth login
Sign outusertold auth logout
Create projectusertold project create --name "..."
List projectsusertold project list or usertold project list <orgHandle>
Select current projectusertold project use <projectRef>
Update project (name, repo, branch)usertold project update [projectRef] [...]
Delete projectusertold project delete <projectRef>
Get embed snippetusertold project snippet [projectRef]
Project readiness checkusertold project status [projectRef]
Project dashboardusertold project overview [projectRef]
Configure BYOK OpenAI keyusertold config set [projectRef] --key openai_api_key --value sk-...
Install GitHub AppWeb-only today: install from project settings
Create studyusertold study create <projectRef> --title "..."
Activate / pause studyusertold study update <projectRef> <studyRef> --status active|paused
Edit study scriptusertold study export … > script.json → edit → usertold study import … --script @script.json
Re-run evidence extraction on a studyusertold study reprocess <projectRef> <studyRef> --wait
Validate study scriptusertold study validate-script <projectRef> <studyRef>
Create intakeusertold intake create <projectRef> --title "..."
Edit intake settingsusertold intake update <projectRef> <intakeRef> [--title "..." | --description "..." | ...]
Activate / pause / close intakeusertold intake update <projectRef> <intakeRef> --status active|paused|closed
Delete intakeusertold intake delete <projectRef> <intakeRef>
Set intake questionsusertold intake set-questions <projectRef> <intakeRef> --questions @q.json
List intake responsesusertold intake list-responses <projectRef> <intakeRef>
Qualify responseusertold intake qualify-response <projectRef> <intakeRef> <responseId> [--reason "..."]
Disqualify responseusertold intake disqualify-response <projectRef> <intakeRef> <responseId> --reason "..."
List interviewsusertold interview list <projectRef>
Upload a custom recording for processingusertold interview upload-video <projectRef> --audio ./interview.ogg --video ./visible.mp4 --json
Import a transcript and run extractionusertold interview import-transcript <projectRef> ./transcript.txt --wait
Run extraction forensics on an imported transcriptusertold interview forensics <projectRef> <interviewId> --key sk-... --json
Watch an interview processusertold interview watch <projectRef> <interviewId>
View transcript / timelineusertold interview transcript|timeline|enriched-timeline <projectRef> <interviewId>
Download audio / screen recordingusertold interview audio|screen <projectRef> <interviewId> --output file.webm
Reprocess an interviewusertold interview reprocess <projectRef> <interviewId> --wait
Retry stuck media mergeusertold interview retry-media-merge <projectRef> <interviewId>
List evidenceusertold evidence list <projectRef> [--type ...]
Dismiss evidenceusertold evidence dismiss <projectRef> <evidenceId> --reason "..."
Undismiss evidenceusertold evidence undismiss <projectRef> <evidenceId>
Annotate evidenceusertold evidence annotate <projectRef> <evidenceId> --text "..."
Link evidence to work itemusertold evidence link <projectRef> <evidenceId> <workId>
Create work item from evidenceusertold work create-from-evidence <projectRef> --title "..." --evidence sig_1,sig_2
Update work item status / priorityusertold work update <projectRef> <workId> [...]
Push work item to GitHub / Linearusertold work push <projectRef> <workId> [--provider github|linear|auto]
Inspect provider state of pushed work itemusertold work push-status <projectRef> <workId>
View credit balance / billing historyusertold billing status|history

Web-only actions today: org membership management, Linear OAuth connect (CLI uses auth login's session). These will surface as CLI verbs as the integration surface stabilizes.


See also: MCP Integration · Quickstart · API Reference