Dashboard › cli › Distillation
ab002ef5-d7fd-446d-8f19-d08c9e4280a6["lore_tm_v1_OTkRQ8-bH8dh3Htu4b851Io0imTRnriBZdOHWm6O_8I","lore_tm_v1_36nxhEyR23ym43zbYekX1onHWzu9ArxtH0jBZw_0Pwc","lore_tm_v1_X0agvaAAkUgQWwZqHwseRXSDQCkNI14uJxvyR-n8dA8","lore_tm_v1_e0_2t_VuqFczx538fqWvU2sNgm_1uW9-QCUyCV3tjG8","lore_tm_v1_LmSxZPHAwXcFRsH_97sv3it8yIlGjM5rf_rq7Vs8p1s","lore_tm_v1_WHoFHMFxvWTVuCwQuhyDgpTovR5D5zmcRA58rrdpD5U","lore_tm_v1_6H9a8O9lNSmwWWdUDrgTAKHO8w_7yYotASVTy45cl3M","lore_tm_v1_NAGaSVH4U2R6Ogj08RmRPZgXGDoSOtziyu2vW9poTE0"]
π΄ (09:41) /home/byk/Code/getsentry/cli-pr-1558/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md has frontmatter name: sentry-cli-agent-conversation, version: 0.45.0-dev.0, description "List and view agent conversations", requires binary "sentry", and requires authentication.
π΄ (09:41) The agent-conversation reference documents sentry agent-conversation list [<org>] with flags -n, --limit <value> (1β1000, default "25"), -q, --query <value>, -t, --period <value> (examples "7d", "2026-08-01..2026-09-01", ">=2026-08-01"; default "7d"), -f, --fresh, and -c, --cursor <value> ("next", "prev", "first", or a raw cursor).
π΄ (09:41) The documented JSON fields for sentry agent-conversation list are conversationId, title, flow, errors, llmCalls, toolCalls, totalTokens, totalCost, startTimestamp, endTimestamp, traceCount, traceIds, firstInput, lastOutput, user, toolNames, and toolErrors.
π΄ (09:41) The agent-conversation list examples, in order, are: 1. sentry agent-conversation list; 2. sentry agent-conversation list my-org; 3. sentry agent-conversation list --limit 50 --period 24h; 4. sentry agent-conversation list -q "has:errors"; 5. sentry agent-conversation list my-org -c next.
π΄ (09:41) The agent-conversation reference documents sentry agent-conversation view [<org>/]<conversation-id> with -f, --fresh; its examples, in order, are: 1. sentry agent-conversation view conv-123; 2. sentry agent-conversation view my-org/conv-123; 3. sentry agent-conversation view my-org/conv-123 --json.
π΄ (09:41) All documented agent-conversation commands also support --json, --fields, --help, --log-level, and --verbose.
π΄ (09:41) User stated the buildListCommand rule: βAlways inject --fresh unless the command already defines it.β In packages/cli/src/lib/list-command.ts:570-573, missing fresh is populated with FRESH_FLAG.
π΄ (09:41) buildListCommand automatically injects --cursor via LIST_CURSOR_FLAG unless options.noCursorFlag is set or cursor already exists; it injects alias -f β fresh unless options.noFreshAlias is set or alias key f exists, and alias -c β cursor unless cursor is opted out or alias key c exists (packages/cli/src/lib/list-command.ts:575-588).
π΄ (09:41) buildListCommand wraps the original command function, calls applyFreshFlag(flags as unknown as { readonly fresh: boolean }), then passes the first positional argument through interceptSubcommand() using this.stderr and routeName before invoking originalFunc (packages/cli/src/lib/list-command.ts:596-615).
π΄ (09:41) User stated that the first positional argument in buildListCommand is βalways the target (org/project pattern).β The wrapper intercepts it when args.length > 0 and args[0] is a string or undefined (packages/cli/src/lib/list-command.ts:601-613).
π΄ (09:41) ListCommandOptions has noCursorFlag?: boolean to suppress --cursor and -c, and noFreshAlias?: boolean to suppress only the -f alias because commands such as log list use -f for --follow; --fresh itself remains mandatory unless already defined (packages/cli/src/lib/list-command.ts:519-524).
π΄ (09:41) buildOrgListCommand() in packages/cli/src/lib/list-command.ts:686-732 delegates to buildListCommand(routeName, ...), uses LIST_TARGET_POSITIONAL, adds limit: buildListLimitFlag(config.entityPlural) and LIST_BASE_ALIASES, parses target with parseOrgProjectArg(target), and calls dispatchOrgScopedList() with orgSlugMatchBehavior: "redirect".
π΄ (09:41) buildOrgListCommand() yields new CommandOutput(result) and forwards result.hint as a footer only when result.items.length > 0; empty-result hint text is rendered inside the human formatter. Its JSON output uses jsonTransformListResult(result, fields), while human output uses formatListHuman(result, config).
π΄ (09:41) User stated the buildDeleteCommand rule: βAlways inject --yes unless the command already defines it.β In packages/cli/src/lib/mutate-command.ts:353-356, missing yes is populated with YES_FLAG.
π΄ (09:41) buildDeleteCommand injects --force unless options.noForceFlag or an existing force flag prevents it; injects --dry-run unless options.noDryRunFlag or an existing dry-run flag prevents it; and injects aliases -y β yes, -f β force, and -n β dry-run when their alias keys are available and corresponding options permit them (packages/cli/src/lib/mutate-command.ts:358-381).
π΄ (09:41) DeleteCommandOptions includes noDryRunFlag?: boolean and noNonInteractiveGuard?: boolean; the builder documentation also identifies noForceFlag as the force opt-out. The wrapped function calls guardNonInteractive() unless noNonInteractiveGuard is set (packages/cli/src/lib/mutate-command.ts:280-283, 389-402).
π΄ (09:41) The destructive-command safety policy refuses non-TTY execution unless --yes or --force is passed; --dry-run bypasses the guard because it makes no changes. Commands retain responsibility for data-dependent prompts through confirmByTyping() and isConfirmationBypassed().
π΄ (09:41) Search results found customUsage handling in packages/cli/src/lib/command.ts at lines 107 and 464, customUsage: ["[<org>/]<name>:<platform>..."] in packages/cli/src/commands/project/create.ts:609, and customUsage: [USAGE] in packages/cli/src/commands/agent-conversation/view.ts:63.
π΄ (09:42) getPositionalString() is defined in packages/cli/src/lib/introspect.ts:195; introspection uses cmd.__primaryUsage ?? getPositionalString(cmd.parameters.positional) at line 301, and top-level help has a corresponding fallback in packages/cli/src/lib/help.ts:121-124.
π΄ (09:42) generateCommands() in packages/cli/src/lib/help.ts:94-136 dynamically reads visible routes from routes cast as RouteMap; route groups list visible subcommand names joined by " | ", while direct commands prefer entry.target.__primaryUsage over getPositionalString(entry.target.parameters.positional).
π΄ (09:42) Direct-command top-level help usage is formed as sentry ${routeName}${usageSuffix}, where usageSuffix is the selected public syntax placeholder prefixed by a space when nonempty; this allows customUsage/__primaryUsage to override raw positional syntax (packages/cli/src/lib/help.ts:119-128).
π΄ (09:42) Tests covering getPositionalString() exist in packages/cli/test/lib/introspect.test.ts and packages/cli/test/lib/introspect.property.test.ts; packages/cli/src/commands/agent-conversation/list.ts:75 defines USAGE_HINT as sentry ${COMMAND_NAME} ${getPositionalString(POSITIONAL)}.