---
title: Feedback Collection
description: "How HyperFrames collects feedback, what data is collected, and how to opt out."
---

HyperFrames occasionally asks how likely you are to recommend the render experience or Studio. This page explains why we do it, when prompts appear, what data is collected, and how to disable them.

## Why We Ask

We use anonymous recommendation scores to understand whether the tool is actually working well — not just whether it runs without errors. A render that takes 10 minutes and produces a broken file counts as a success in logs but a failure in practice. The feedback prompt is the only signal we have for that gap.

No account, email, or identity is tied to responses. Each installation generates a random UUID at setup; that is the only identifier.

## How It Works

### CLI — post-render prompt

After a successful `hyperframes render`, a short prompt may appear:

```
  How likely are you to recommend HyperFrames? [0=not likely 10=extremely likely, enter to skip]
  Any details? (enter to skip)
```

**When it shows:**

- First ever successful render
- Then every 15 renders after that (16th, 31st, 46th...)
- At most once per process — re-renders in the same session don't trigger a second prompt
- Automatically suppressed in quiet mode (`--quiet`), non-TTY shells, and CI environments

The prompt has a **10-second auto-timeout** — if you don't respond, it silently disappears and the CLI continues normally.

The render interval is configurable:

```bash
# Show prompt every 5 renders instead of 15 (useful for testing)
HYPERFRAMES_FEEDBACK_INTERVAL=5 hyperframes render --output out.mp4
```

### Studio — session feedback bar

A thin 32px bar slides in at the bottom of the preview area periodically:

- Never on the first session — only starting from the 10th
- Then every 10 sessions (10th, 20th, 30th...)
- Slides in 3 seconds after page load to avoid flash
- Auto-dismisses after 20 seconds if ignored
- After any interaction (dismiss or submit), the session counter resets — next prompt after 10 more sessions

The session interval is configurable at build time:

```
VITE_HYPERFRAMES_FEEDBACK_INTERVAL=3
```

Invalid values (non-integer, zero, negative) fall back to the default.

**Note:** Disabling CLI telemetry (`hyperframes telemetry disable`) does not suppress the Studio bar — Studio feedback is gated separately. The submitted data is still sent through the same anonymous PostHog pipeline, so the same privacy guarantees apply.

### `hyperframes feedback` command

You can submit feedback manually at any time:

```bash
# Quick rating
hyperframes feedback --rating 10

# Rating with details
hyperframes feedback --rating 7 --comment "render succeeded but GSAP timeline didn't animate text overlay"
```

| Flag | Description |
|------|-------------|
| `--rating` | Recommendation score, 0–10 (required) |
| `--comment` | Optional free-text details |
| `--file-issue` | Also open a pre-filled GitHub issue with a published minimal repro (opt-in) |
| `--dir` | Project directory to publish as the repro (default: current directory) |
| `--yes` | Skip the publish + file-issue consent prompt (for scripts) |

This command collects a doctor summary automatically, flushes telemetry, and exits. It appears under the **Settings** group in `hyperframes --help`.

### Filing a GitHub issue (`--file-issue`)

When a render misbehaves, add `--file-issue` so maintainers can reproduce it:

```bash
hyperframes feedback --rating 3 --comment "GSAP timeline froze on seek" --file-issue
```

This is **opt-in** and **consented**. With `--file-issue` set, after the usual feedback is sent the CLI:

1. Asks you to confirm (interactive) or requires `--yes` in non-interactive shells, because it will **publicly publish** the project at `--dir`.
2. Publishes a minimal repro of the project and gets a public URL (the same upload as `hyperframes publish`).
3. Opens your browser with a **pre-filled** GitHub issue draft, labelled `bug`, containing the rating, your comment, the public repro link, and the environment summary. It also prints the URL so you can copy it if no browser opens.

The issue is **not auto-submitted**: you review and file it under your own GitHub account. There is no token, backend, or `gh` invocation; if publishing fails the issue still opens, just without a repro link.

## Agent Runtimes

When an AI agent is detected, HyperFrames **skips the interactive readline prompt** and prints a structured hint instead:

```
  [hyperframes] Agent feedback: hyperframes feedback --rating <0-10> --comment "..."
```

Agents can then submit feedback using the `hyperframes feedback` command above.

The same cadence gate applies: the hint only appears on the first render, then every 15th.

**Detected agents and their markers:**

| Agent | Environment markers |
|-------|---------------------|
| Claude Code | `CLAUDECODE` present, or `CLAUDE_CODE_ENTRYPOINT` present |
| Codex | `CODEX_THREAD_ID`, `CODEX_CI`, or `CODEX_SANDBOX_NETWORK_DISABLED` present |
| Cursor | `TERM_PROGRAM` equals `cursor` |
| GitHub Copilot Agent | `GITHUB_ACTIONS` equals `true` and (`COPILOT_AGENT_ID` present or `RUNNER_NAME` equals `Copilot`) |
| Replit | `REPL_ID` or `REPLIT_USER` present |
| Hermes | `HERMES_QUIET` present |
| openclaw | `OPENCLAW_STATE_DIR` or `OPENCLAW_CONFIG_PATH` present |
| Pi | `PI_CODING_AGENT` present |

Only the existence (or in some cases the value) of these variables is checked — API keys and secrets that happen to share a prefix are never read.

## What Is Collected

### CLI feedback

Event: `cli_render_feedback`

| Field | Value |
|-------|-------|
| `rating` | Raw rating (0–10) |
| `rating_scale` | `10` for the current recommendation scale |
| `comment` | Free-text comment (only when provided) |
| `render_duration_ms` | Time the render took in milliseconds |
| `doctor_summary` | System context (see below) |

The `doctor_summary` is a compact string with environment context — included automatically so you don't need to run `hyperframes doctor` when reporting a problem:

```
os=darwin/arm64 node=v22.11.0 cpu=10cores mem=32GB ffmpeg=yes
```

It may also include `wsl` or sandbox runtime flags when those environments are detected.

### Studio feedback

Event: `studio_feedback`

| Field | Value |
|-------|-------|
| `rating` | Raw rating (0–10) |
| `rating_scale` | `10` for the current recommendation scale |
| `comment` | Free-text comment (only when provided) |
| `source` | `studio` |
| `doctor_summary` | Browser context (platform, screen, CPU cores, device memory, network type) |

## What Is NOT Collected

- File paths or project names
- Composition content, HTML, or video files
- Environment variable values
- Personally identifiable information
- IP addresses or precise location

Feedback is anonymous. Each installation has a random UUID (`anonymousId`) — there is no account, login, or email association.

## Rating Scale Compatibility

New feedback stores the raw integer together with `rating_scale: 10`.

Feedback collected before this change remains on the historical 1–5 satisfaction scale. Historical events have no `rating_scale`, and historical Slack or GitHub records retain their `/5` denominator. Consumers must treat a missing scale as legacy 1–5 data and must not reinterpret those scores as NPS.

## Config File

The CLI persists feedback state in `~/.hyperframes/config.json`:

```json
{
  "telemetryEnabled": true,
  "anonymousId": "a1b2c3d4-...",
  "telemetryNoticeShown": true,
  "commandCount": 47,
  "renderSuccessCount": 14,
  "lastFeedbackPromptAt": 1
}
```

| Field | Description |
|-------|-------------|
| `renderSuccessCount` | Total successful renders across all sessions |
| `lastFeedbackPromptAt` | The `renderSuccessCount` value when the prompt last appeared — used to compute whether 15 renders have passed |

Studio stores the equivalent state in `localStorage` under the `hyperframes-studio:` prefix.

## Opting Out

### CLI — disable telemetry entirely

Disabling telemetry suppresses the CLI feedback prompt and all other CLI usage tracking:

```bash
# Via CLI command (persisted to ~/.hyperframes/config.json)
hyperframes telemetry disable

# Or via environment variable (per-session)
HYPERFRAMES_NO_TELEMETRY=1 hyperframes render --output out.mp4

# Or via DO_NOT_TRACK (respects the global standard)
DO_NOT_TRACK=1 hyperframes render --output out.mp4
```

Once disabled, the `hyperframes feedback` command will print `Telemetry is disabled. Feedback not sent.` and exit without sending anything.

### CLI — suppress output without disabling telemetry

```bash
# Quiet mode: renders without any post-render output (including the feedback prompt)
hyperframes render --quiet --output out.mp4
```

### CI environments

The CLI feedback prompt is automatically suppressed when the `CI` environment variable is set (GitHub Actions, CircleCI, etc. set this by default).

### Studio

The Studio feedback bar is not affected by the CLI telemetry setting. To disable it at build time, set:

```
VITE_HYPERFRAMES_NO_FEEDBACK=1
```

When set to `"1"`, the bar never shows — `shouldShowFeedback()` returns `false` unconditionally regardless of session count or `localStorage` state.

The session interval is still configurable independently:

```
VITE_HYPERFRAMES_FEEDBACK_INTERVAL=20
```

## Related

- [Telemetry](/packages/cli#telemetry) — full telemetry settings and what usage data is collected
- [`hyperframes feedback`](/packages/cli#feedback) — CLI command reference
- [Troubleshooting](/guides/troubleshooting) — if a prompt is blocking your pipeline unexpectedly
