description: "Free-text session feedback through a /feedback command, for users and maintainers choosing, composing, or debugging feedback capture."
English | 中文
dsh-command-feedback lets a user tell the harness what they think of a session: type /feedback plus a remark, and the remark is recorded and acknowledged. Recording is immediate and never starts model work, so it is safe at any point in a conversation — the model neither sees the remark nor is interrupted by it. The acknowledgement names the session and the anonymous user, and reports how the session is shared under the deployment's telemetry policy. The command ships with the Web client and needs no configuration; headless, ACP, and JSON-RPC entry points do not provide slash commands and cannot run it.
Users can record feedback from the Web client out of the box: the /feedback command ships with the standard dsh base, needs no configuration, and works in any conversation. A custom app gets the same command by mounting the command registry and this plugin together.
/feedback commandType /feedback followed by your remark and send it. A successful entry is acknowledged with the receiving session id, the anonymous user id, and the session-sharing policy:
| Input | Result |
|---|---|
/feedback the diff view is unreadable |
Record the remark and acknowledge: Feedback recorded for session {sessionId}, Anonymous user: {userId}, plus the sharing disclosure. |
/feedback |
A usage error: Feedback text is required. Usage: /feedback <text>. Whitespace-only input counts as empty. |
Surrounding whitespace is trimmed, but the remark is otherwise kept exactly as typed: no truncation, case folding, or command parsing — /feedback /plan felt slow records that literal text. Each command records its own entry; nothing is merged or replaced.
The acknowledgement also states how the session is shared under the deployment's telemetry policy:
| Disclosed status | Acknowledgement sentence |
|---|---|
full |
Session sharing is enabled. |
feedback-only |
Session sharing is feedback-gated; recording feedback uploads the session records not yet shared. |
disabled |
Session sharing is disabled. |
| no telemetry service | Session sharing is not configured. |
The sentence reports the current policy only; it never claims the feedback or the session was delivered anywhere. The disclosure records nothing itself and never reaches the model.
Feedback does not have to come from the slash command: any UI, hook, or host integration can record a remark directly, with the same guarantees and without a model turn. A custom app that wants the slash command mounts the command registry plus this plugin:
- id: commands
name: '@deepseek-ai/dsh-commands'
- id: command-feedback
name: '@deepseek-ai/dsh-command-feedback'
The Web client ships the command. Headless mode, ACP automation, and JSON-RPC provide no slash commands, so /feedback is unavailable there.
Read these pages when the package-level contract is not enough. They move from the sharing policy and command registry behind this capture path to the persistence and identity facts the acknowledgement relies on.
SessionTelemetrySharingStatus vocabulary and backend contract behind the disclosure.sharing member drives the acknowledgement sentence.recordInput semantics./feedback captureNothing. The slash input, feedback/record, and the acknowledgement are absent from model requests. The feedback event and registry lifecycle records are log-only and carry no surfaceOp, so they never reach the ordered surface, deriveMessages(), or a system prompt. Recording feedback during a turn does not change that turn's remaining requests.
Zero direct token effect. Neither an accepted entry nor a usage error adds model tokens, in the recording turn or any later one.
Independent of the model request path. Recording appends to the session log only, leaving an already-reusable request prefix untouched. Nothing this package contributes can invalidate cache reuse.
These limits define where /feedback is a poor fit or behaves differently than a user might expect. They are current package constraints, not a task backlog.
feedback/record.ctx.sessions.flush(session)./feedback on a still-blank session records the event but shows no acknowledgement row. Recording feedback after the first message renders normally./feedback is unavailable there.