Skip to content
1 change: 1 addition & 0 deletions docs/src/content/docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ cli/
│ │ ├── dashboard/ # add, create, delete, edit, list, restore, revisions, view
│ │ ├── debug-files/ # bundle-jvm, bundle-sources, check, find, print-sources, upload
│ │ ├── event/ # list, send, view
│ │ ├── feedback/ # list, view
│ │ ├── issue/ # archive, events, explain, list, merge, plan, resolve, unresolve, view
│ │ ├── local/ # run, serve
│ │ ├── log/ # list, view
Expand Down
56 changes: 56 additions & 0 deletions docs/src/fragments/commands/feedback.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
## Examples

### List User Feedback

Modern User Feedback is stored as Feedback issues. The command always limits
issue searches to `issue.category:feedback`; it does not use the legacy User
Reports API.

```bash
# Auto-detect the organization from the current project
sentry feedback list

# List Feedback for one project
sentry feedback list my-org/frontend

# List Feedback across every project in an organization
sentry feedback list my-org/

# Search for a project across accessible organizations
sentry feedback list frontend
```

The unresolved inbox from the last 14 days is shown by default. Select another
mailbox or expand the time range with flags:

```bash
sentry feedback list my-org/frontend --status resolved
sentry feedback list my-org/frontend --status spam
sentry feedback list my-org/frontend --status all --period 90d
sentry feedback list my-org/frontend --query "message:*checkout*"
```

Use `--json` for the standard paginated envelope. Navigate pages in either
direction with `--cursor next` and `--cursor prev`.

### View User Feedback

```bash
# Short ID or numeric ID
sentry feedback view FRONTEND-2SDJ
sentry feedback view 5146636313

# Explicit organization
sentry feedback view my-org/FRONTEND-2SDJ

# `view` is the default command; `show` is an alias
sentry feedback my-org/FRONTEND-2SDJ
sentry feedback show my-org/FRONTEND-2SDJ

# Open the Feedback item in Sentry
sentry feedback view my-org/FRONTEND-2SDJ --web
```

The detail view includes the complete message and, when available, its latest
event, linked error, Session Replays, and attachment metadata. If the supplied
ID belongs to another issue category, use `sentry issue view` instead.
9 changes: 9 additions & 0 deletions plugins/sentry-cli/skills/sentry-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,15 @@ Query aggregate event data (Explore)

→ Full flags and examples: `references/explore.md`

### Feedback

Search and inspect User Feedback

- `sentry feedback list <org/project>` — List and search User Feedback
- `sentry feedback view <org/project/feedback-id>` — View a User Feedback item

→ Full flags and examples: `references/feedback.md`

### Log

View Sentry logs
Expand Down
133 changes: 133 additions & 0 deletions plugins/sentry-cli/skills/sentry-cli/references/feedback.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
---
name: sentry-cli-feedback
version: 0.39.0-dev.0
description: Search and inspect User Feedback
requires:
bins: ["sentry"]
auth: true
---

# Feedback Commands

Search and inspect User Feedback

### `sentry feedback list <org/project>`

List and search User Feedback

**Flags:**
- `--status <value> - Mailbox: unresolved, resolved, spam, or all - (default: "unresolved")`
- `-n, --limit <value> - Number of feedback items (1-1000) - (default: "25")`
- `-q, --query <value> - Search query (Sentry issue search syntax)`
- `-t, --period <value> - Time range: "7d", "2026-06-01..2026-07-01", ">=2026-06-01" - (default: "14d")`
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
- `-c, --cursor <value> - Navigate pages: "next", "prev", "first" (or raw cursor string)`

**JSON Fields** (use `--json --fields` to select specific fields):

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Numeric issue ID |
| `shortId` | string | Human-readable short ID (e.g. PROJ-ABC) |
| `title` | string | Issue title |
| `culprit` | string \| null | Culprit string |
| `count` | string | Total event count |
| `userCount` | number | Number of affected users |
| `firstSeen` | string \| null | First occurrence (ISO 8601) |
| `lastSeen` | string \| null | Most recent occurrence (ISO 8601) |
| `level` | string | Severity level |
| `status` | string | Issue status |
| `permalink` | string | URL to the issue in Sentry |
| `project` | object | Project info |
| `metadata` | object | Feedback metadata |
| `assignedTo` | object \| null | Assigned user or team |
| `priority` | string | Triage priority |
| `platform` | string | Platform |
| `substatus` | string \| null | Issue substatus |
| `isUnhandled` | boolean | Whether the issue is unhandled |
| `seerFixabilityScore` | number \| null | Seer AI fixability score (0-1) |
| `issueCategory` | string | Issue category discriminator |
| `issueType` | string | Issue type discriminator |
| `hasSeen` | boolean | Whether the feedback has been read |
| `latestEventHasAttachments` | boolean | Whether the latest event has attachments |

**Examples:**

```bash
# Auto-detect the organization from the current project
sentry feedback list

# List Feedback for one project
sentry feedback list my-org/frontend

# List Feedback across every project in an organization
sentry feedback list my-org/

# Search for a project across accessible organizations
sentry feedback list frontend

sentry feedback list my-org/frontend --status resolved
sentry feedback list my-org/frontend --status spam
sentry feedback list my-org/frontend --status all --period 90d
sentry feedback list my-org/frontend --query "message:*checkout*"
```

### `sentry feedback view <org/project/feedback-id>`

View a User Feedback item

**Flags:**
- `-w, --web - Open in browser`
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`

**JSON Fields** (use `--json --fields` to select specific fields):

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Numeric issue ID |
| `shortId` | string | Human-readable short ID (e.g. PROJ-ABC) |
| `title` | string | Issue title |
| `culprit` | string \| null | Culprit string |
| `count` | string | Total event count |
| `userCount` | number | Number of affected users |
| `firstSeen` | string \| null | First occurrence (ISO 8601) |
| `lastSeen` | string \| null | Most recent occurrence (ISO 8601) |
| `level` | string | Severity level |
| `status` | string | Issue status |
| `permalink` | string | URL to the issue in Sentry |
| `project` | object | Project info |
| `metadata` | object | Feedback metadata |
| `assignedTo` | object \| null | Assigned user or team |
| `priority` | string | Triage priority |
| `platform` | string | Platform |
| `substatus` | string \| null | Issue substatus |
| `isUnhandled` | boolean | Whether the issue is unhandled |
| `seerFixabilityScore` | number \| null | Seer AI fixability score (0-1) |
| `issueCategory` | string | Issue category discriminator |
| `issueType` | string | Issue type discriminator |
| `hasSeen` | boolean | Whether the feedback has been read |
| `latestEventHasAttachments` | boolean | Whether the latest event has attachments |
| `org` | string \| null | Organization slug |
| `event` | unknown \| null | Latest feedback event |
| `replayIds` | array | Related Session Replay IDs |
| `attachments` | array | Attachments on the latest feedback event |

**Examples:**

```bash
# Short ID or numeric ID
sentry feedback view FRONTEND-2SDJ
sentry feedback view 5146636313

# Explicit organization
sentry feedback view my-org/FRONTEND-2SDJ

# `view` is the default command; `show` is an alias
sentry feedback my-org/FRONTEND-2SDJ
sentry feedback show my-org/FRONTEND-2SDJ

# Open the Feedback item in Sentry
sentry feedback view my-org/FRONTEND-2SDJ --web
```

All commands also support `--json`, `--fields`, `--help`, `--log-level`, and `--verbose` flags.
2 changes: 2 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { debugFilesRoute } from "./commands/debug-files/index.js";
import { eventRoute } from "./commands/event/index.js";
import { listCommand as eventListCommand } from "./commands/event/list.js";
import { exploreCommand } from "./commands/explore.js";
import { feedbackRoute } from "./commands/feedback/index.js";
import { helpCommand } from "./commands/help.js";
import { infoCommand } from "./commands/info.js";
import { initCommand } from "./commands/init.js";
Expand Down Expand Up @@ -119,6 +120,7 @@ export const routes = buildRouteMap({
event: eventRoute,
events: eventListCommand,
explore: exploreCommand,
feedback: feedbackRoute,
log: logRoute,
monitor: monitorRoute,
snapshots: snapshotsRoute,
Expand Down
26 changes: 26 additions & 0 deletions src/commands/feedback/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* sentry feedback
*
* Search and inspect modern Sentry User Feedback.
*/

import { buildRouteMap } from "../../lib/route-map.js";
import { listCommand } from "./list.js";
import { viewCommand } from "./view.js";

export const feedbackRoute = buildRouteMap({
routes: {
list: listCommand,
view: viewCommand,
},
defaultCommand: "view",
docs: {
brief: "Search and inspect User Feedback",
fullDescription:
"Search and inspect modern User Feedback from your Sentry organization.\n\n" +
"Commands:\n" +
" list List and search feedback\n" +
" view View feedback with its latest event context",
hideRoute: {},
},
});
Loading
Loading