feedback.signal
LiveCustomer-side feedback signal. modification_delta live; other kinds preview (V1.1+).
Description
MVP supports signal_kind="modification_delta" end-to-end (mirrors the trigger.complete executed_modified path). Other signal_kind values return feature_not_available. Per ADR-0021 §learning-channel.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
target_id | string | yes | decision_id, action_id, rule_id, or trigger_id. |
signal_kind | 'modification_delta' | 'rule_correction' | 'trust_correction' | 'voice_correction' | yes | Only modification_delta is implemented at MVP. |
payload | object | no | Shape varies per signal_kind. For modification_delta, same as the original action payload. |
source | 'user' | 'customer_inference' | 'system' | yes | Where the signal originated. |
Output shape
typescript
{ signal_id: string; ok: true }Example call
JSON-RPC tools/call request body (omit the JSON-RPC envelope when using an SDK; the SDK adds it for you):
jsontools/call params
{
"name": "feedback.signal",
"arguments": {
"target_id": "act_01HX...",
"signal_kind": "modification_delta",
"payload": { "body_draft": "Hey Marcus — actually, let's push to next week." },
"source": "user"
}
}Example response
Tool results are always wrapped as content[0].text with a stringified JSON body. The shape below is what you get back from JSON.parse(result.content[0].text):
jsonparsed result body
{ "signal_id": "fbsig_01H...", "ok": true }Errors this tool can return
| Code | Meaning |
|---|---|
invalid_arguments | Tool input failed Zod validation. |
unauthorized | Missing or invalid bearer token. |
quota_exceeded | Per-minute, daily call, or daily inference budget exceeded. |
feature_not_available | The tool is registered but the underlying capability is not wired in this build. |
See the full error catalog for resolution steps on each code, plus the standard transport-layer responses (401, 429).