description: "Session feedback: the /feedback command, the sessionFeedback Host Remote behind the Web feedback dialog, and the fixed category taxonomy; 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. Typing /feedback plus a remark records it and acknowledges the session and anonymous user ids; the Web feedback dialog records a category and an optional description through the sessionFeedback Host Remote. Recording is immediate and never starts model work: the model neither sees the remark nor is interrupted by it. The package also owns the fixed category taxonomy every feedback surface files under. It ships with the standard dsh base and needs no configuration; headless, ACP, and JSON-RPC entry points provide no slash commands.
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 and the anonymous user id:
| Input | Result |
|---|---|
/feedback the diff view is unreadable |
Record the remark and acknowledge with two lines: Feedback recorded for session {sessionId} and Anonymous user: {userId}. |
/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.
In the Web client a bare /feedback — picked from the composer menu or typed and sent without text — opens the feedback dialog instead of the usage error. The dialog offers the seven categories below and a free-text box; every field is optional and an empty submission is accepted, and the conversation log travels with the recorded event as with every feedback event. It records through sessionFeedback.record, which appends the same feedback/record event without command bookkeeping and without an acknowledgement row; the dialog shows a toast instead.
| Category id | Meaning |
|---|---|
task-result |
The outcome of the task |
instruction-following |
Understanding and following instructions |
product-interaction |
Product features and interaction |
service-stability |
Service stability |
resource-cost |
Resource usage and cost |
security-privacy-permission |
Security, privacy, and permissions |
other |
Anything else |
The ids are durable log vocabulary shared with per-message feedback; each surface owns its localized labels.
Feedback does not have to come from the slash command or the dialog: any UI, hook, or host integration can record a remark directly through recordFeedback or the sessionFeedback Remote, with the same guarantees and without a model turn. A custom app that wants the slash command mounts the Session store, the command registry, and this plugin; the Session store is what the sessionFeedback Remote resolves live Sessions from:
- id: session
name: '@deepseek-ai/dsh-session'
- 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 cover the command registry, persistence, and identity facts this capture path relies on.
recordInput semantics.sessionFeedback Remote./feedback captureNothing. The slash input, the dialog, 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 session feedback is a poor fit or behaves differently than a user might expect. They are current package constraints, not a task backlog.
feedback/record.sessionFeedback.record answers session-not-found for a Session no live owner carries; the Web dialog reports that failure when its Session retires while it is open.ctx.sessions.flush(session)./feedback <text> on a still-blank session records the event but shows no acknowledgement row; the dialog's toast does not depend on the transcript./feedback is unavailable there.