@agent-native/core 0.203.0 → 0.203.1-nightly-20261007154213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/action.d.ts +34 -0
  2. package/dist/agent/clip-text.d.ts +4 -0
  3. package/dist/agent/clip-text.js +17 -0
  4. package/dist/agent/follow-up-suggestions.d.ts +16 -2
  5. package/dist/agent/follow-up-suggestions.js +69 -1
  6. package/dist/agent/production-agent.d.ts +20 -2
  7. package/dist/agent/production-agent.js +322 -132
  8. package/dist/agent/provider-model-selection.d.ts +21 -2
  9. package/dist/agent/provider-model-selection.js +19 -2
  10. package/dist/agent/run-loop-with-resume.js +2 -16
  11. package/dist/agent/tool-search.d.ts +31 -1
  12. package/dist/agent/tool-search.js +196 -15
  13. package/dist/agent/write-receipts.d.ts +27 -0
  14. package/dist/agent/write-receipts.js +181 -0
  15. package/dist/automation/index.d.ts +1 -1
  16. package/dist/collab/routes.d.ts +2 -2
  17. package/dist/collab/struct-routes.d.ts +1 -1
  18. package/dist/jobs/actions/manage-recurring-job.d.ts +1 -1
  19. package/dist/observability/routes.d.ts +10 -10
  20. package/dist/observability/trace-error.d.ts +5 -3
  21. package/dist/observability/trace-error.js +29 -4
  22. package/dist/observability/traces.js +6 -0
  23. package/dist/org/handlers.d.ts +2 -2
  24. package/dist/provider-api/actions/provider-api.d.ts +2 -2
  25. package/dist/resources/handlers.d.ts +1 -1
  26. package/dist/secrets/routes.d.ts +5 -5
  27. package/dist/server/action-routes.js +3 -0
  28. package/dist/server/agent-chat/prompt-resources.d.ts +13 -0
  29. package/dist/server/agent-chat/prompt-resources.js +21 -12
  30. package/dist/server/agent-chat-plugin.js +25 -9
  31. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  32. package/dist/server/agent-engine-default-model-route.d.ts +2 -2
  33. package/dist/server/agent-engine-ollama-models-route.d.ts +2 -2
  34. package/dist/server/embed-route.js +2 -1
  35. package/dist/server/index.d.ts +3 -3
  36. package/dist/server/index.js +3 -3
  37. package/dist/server/realtime-voice.js +2 -4
  38. package/dist/shared/embed-auth.d.ts +1 -0
  39. package/dist/shared/embed-auth.js +1 -0
  40. package/dist/sharing/actions/list-resource-shares.d.ts +1 -1
  41. package/dist/templates/chat/.agents/skills/actions/SKILL.md +25 -0
  42. package/dist/templates/default/.agents/skills/actions/SKILL.md +25 -0
  43. package/dist/templates/headless/.agents/skills/actions/SKILL.md +25 -0
  44. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +25 -0
  45. package/dist/triggers/actions/manage-automation.d.ts +7 -7
  46. package/package.json +3 -3
  47. package/src/templates/chat/.agents/skills/actions/SKILL.md +25 -0
  48. package/src/templates/default/.agents/skills/actions/SKILL.md +25 -0
  49. package/src/templates/headless/.agents/skills/actions/SKILL.md +25 -0
  50. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +25 -0
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -13,6 +13,8 @@ declare const _default: import("../../action.js").ActionDefinition<{
13
13
  executionEngine?: string;
14
14
  executionCwd?: string;
15
15
  }, {
16
+ deleted?: undefined;
17
+ enabled?: undefined;
16
18
  created: boolean;
17
19
  name: string;
18
20
  scope: "organization" | "personal";
@@ -23,33 +25,31 @@ declare const _default: import("../../action.js").ActionDefinition<{
23
25
  reasoningEffort: "auto" | "high" | "low" | "max" | "medium" | "minimal" | "none" | "xhigh";
24
26
  webhookPath: string;
25
27
  nextRun: string;
26
- deleted?: undefined;
27
- enabled?: undefined;
28
28
  executionHostId?: undefined;
29
29
  executionEngine?: undefined;
30
30
  executionCwd?: undefined;
31
31
  } | {
32
- created?: undefined;
33
32
  scope?: undefined;
33
+ enabled?: undefined;
34
+ nextRun?: undefined;
35
+ created?: undefined;
34
36
  triggerType?: undefined;
35
37
  event?: undefined;
36
38
  deleted: boolean;
37
39
  name: string;
38
- enabled?: undefined;
39
40
  schedule?: undefined;
40
41
  timezone?: undefined;
41
42
  reasoningEffort?: undefined;
42
43
  executionHostId?: undefined;
43
44
  executionEngine?: undefined;
44
45
  executionCwd?: undefined;
45
- nextRun?: undefined;
46
46
  webhookPath?: undefined;
47
47
  } | {
48
- created?: undefined;
49
48
  scope?: undefined;
49
+ deleted?: undefined;
50
+ created?: undefined;
50
51
  triggerType?: undefined;
51
52
  event?: undefined;
52
- deleted?: undefined;
53
53
  name: string;
54
54
  enabled: boolean;
55
55
  schedule: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.203.0",
3
+ "version": "0.203.1-nightly-20261007154213",
4
4
  "description": "The agentic application framework for building autonomous agents with intuitive UIs",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -682,7 +682,7 @@
682
682
  "yaml": "^2.9.0",
683
683
  "yjs": "^13.6.33",
684
684
  "zod": "^4.3.6",
685
- "@agent-native/agentkit": "^0.203.0",
685
+ "@agent-native/agentkit": "^0.203.1-nightly-20261007154213",
686
686
  "@agent-native/recap-cli": "^0.5.64"
687
687
  },
688
688
  "devDependencies": {
@@ -753,7 +753,7 @@
753
753
  "xlsx": "^0.18.5"
754
754
  },
755
755
  "peerDependencies": {
756
- "@agent-native/core-corpus": ">=0.196.0",
756
+ "@agent-native/core-corpus": "0.203.1-nightly-20261007154213",
757
757
  "@ai-sdk/anthropic": ">=3",
758
758
  "@ai-sdk/cohere": ">=3",
759
759
  "@ai-sdk/google": ">=3",
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad
@@ -107,6 +107,31 @@ An action that hands control back to the user (question form, intake dialog) set
107
107
 
108
108
  Reach for `outputSchema` (validate the return), `_agentImages` (attach images the agent can see), `authorize` (gate who may call it), or `needsApproval` (require human sign-off per call) only when the action needs that guarantee — examples in `references/action-fields.md`.
109
109
 
110
+ ### Write receipts
111
+
112
+ A write action that can check its own effect returns a plain-object result with a reserved `_receipt`, so the final answer is reconciled with what the write did, not with the model's reading of a JSON string that may be truncated:
113
+
114
+ ```ts
115
+ import type { WriteReceipt } from "@agent-native/core/action";
116
+
117
+ const _receipt: WriteReceipt = {
118
+ changed: true,
119
+ verified: false,
120
+ summary: "Saved; panel 3 returned no rows.",
121
+ checks: [{ id: "panel-3", ok: false, detail: "0 rows" }],
122
+ };
123
+ return { id, _receipt };
124
+ ```
125
+
126
+ `verified` is `true` (the effect was observed), `false` (checked and did not hold), or `"unverified"` (could not be checked); `checks` and `warnings` are optional. The agent loop reads the receipt before the result is stringified and truncated (summary 200 chars, 8 checks, 5 warnings):
127
+
128
+ - `verified: false` or `changed: false` forces one honest-reconciliation retry per turn: the model must say what the receipt shows and may not call the change visible or working. If the retry is spent, the answer is prefixed with the receipt block.
129
+ - `verified: "unverified"` only prefixes that note; no retry.
130
+ - A receipt that is present but malformed counts as `unverified`, never clean. `changed: false` also records the call as `completedSideEffect: false`.
131
+ - Set `subject` (the stable target, such as a dashboard id) so a later `changed: true, verified: true` receipt for the same subject can supersede an earlier flagged one in the same turn. When the earlier receipt had failing or unverified `checks`, the later receipts (from this action or another that writes the same subject) must carry an `ok: true` check with the same `id` for each; a receipt without checks never clears one that had them. A flagged receipt with no failing checks is superseded only by the same action. Receipts without a `subject` are never superseded.
132
+
133
+ A receipt is not an error channel. A write that did not achieve the requested state throws (`fail()`); return `changed: false` only for a benign no-op, such as the record already being in the requested state.
134
+
110
135
  ## Frontend Hooks
111
136
 
112
137
  Import from focused `@agent-native/core/client/*` entry points; the broad