@oracle-agent/oracle 0.24.7 → 0.24.9

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 (51) hide show
  1. package/README.md +49 -45
  2. package/SECURITY.md +1 -1
  3. package/SETUP.md +16 -13
  4. package/dist/assets/profiles/_template/SOUL.md +2 -2
  5. package/dist/assets/profiles/oracle/SOUL.md +11 -13
  6. package/dist/assets/profiles/profile.schema.json +1 -1
  7. package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
  8. package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +2 -2
  9. package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
  10. package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
  11. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  12. package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
  13. package/dist/bin/desk-server.mjs +80 -36
  14. package/dist/bin/oracle-data-mcp.mjs +51 -7
  15. package/dist/bin/oracle-gateway.mjs +13 -15
  16. package/dist/bin/oracle-init.mjs +9 -9
  17. package/dist/bin/oracle-public-server.mjs +48 -4
  18. package/dist/bin/oracle-route.mjs +66 -22
  19. package/dist/bin/oracle-scan.mjs +58 -14
  20. package/dist/cli/commands/chat.mjs +140 -96
  21. package/dist/cli/commands/doctor.mjs +6 -6
  22. package/dist/cli/commands/eval.mjs +17 -17
  23. package/dist/cli/commands/farm.mjs +72 -28
  24. package/dist/cli/commands/follow.mjs +61 -17
  25. package/dist/cli/commands/model.mjs +147 -103
  26. package/dist/cli/commands/receipt.mjs +3 -3
  27. package/dist/cli/commands/resolve.mjs +55 -11
  28. package/dist/cli/commands/setup.mjs +27 -27
  29. package/dist/cli/commands/sign.mjs +14 -13
  30. package/dist/cli/commands/signer.mjs +12 -17
  31. package/dist/cli/commands/strategy.mjs +50 -6
  32. package/dist/cli/commands/swap.mjs +72 -29
  33. package/dist/cli/commands/venues.mjs +3 -3
  34. package/dist/data/desk-data.mjs +78 -34
  35. package/dist/data/names.mjs +46 -2
  36. package/dist/data/providers/farming.mjs +46 -2
  37. package/dist/index.mjs +83 -39
  38. package/dist/local-signer/index.mjs +1 -1
  39. package/dist/router/index.mjs +46 -2
  40. package/dist/router/prepare-bridge.mjs +46 -2
  41. package/dist/scanner/index.mjs +48 -4
  42. package/dist/strategy/index.mjs +47 -3
  43. package/package.json +5 -3
  44. package/public/install.ps1 +1 -1
  45. package/public/install.sh +5 -4
  46. package/public/oracle-splash/_variants/ice.html +3 -3
  47. package/public/oracle-splash/_variants/ivory.html +3 -3
  48. package/public/oracle-splash/downloads/index.html +5 -5
  49. package/public/oracle-splash/index.html +7 -7
  50. package/public/oracle-splash/install.ps1 +1 -1
  51. package/public/oracle-splash/install.sh +5 -4
package/README.md CHANGED
@@ -23,7 +23,7 @@ The private operator configuration, approval flow, wire units, and holder waiver
23
23
  [Hyperliquid builder code](docs/hyperliquid-builder-code.md).
24
24
 
25
25
 
26
- **Prepare-only multichain agent control plane.** Policy-bounded intents; your wallet signs.
26
+ **Oracle is a self-custody multichain agent control plane.** It reads, quotes, prepares, arms, signs, and broadcasts under owner policy.
27
27
 
28
28
  Specialist agent profiles, real protocol intents, self-custody by default,
29
29
  receipts or it didn't happen.
@@ -45,14 +45,12 @@ Oracle can run standalone model auth directly with API keys or Claude, Codex,
45
45
  and Grok OAuth. OAuth credentials use the OS keychain when available, with a
46
46
  private `0600` local fallback when keychain storage is unavailable.
47
47
 
48
- Oracle is **prepare-only by default and on hosted surfaces**. A self-hoster may
49
- explicitly initialize the optional encrypted local vault. The private `@oracle-agent/agent` admin package
50
- remains separate and is not included here. The public package can then run a
51
- short-lived, loopback-only signer. Every normal action requires exact one-use
52
- human confirmation and policy checks; autonomous trading additionally requires
53
- `ORACLE_AUTONOMOUS_TRADING=1` and a short-lived Ed25519 attestation from a
54
- separately provisioned trigger authority (the signer holds only its public key).
55
- Never paste a seed, key, passphrase, or signer token into Oracle chat or argv.
48
+ Wallet-sign and the local `oracle signer` are both first-class. The signer
49
+ stays off until the owner initializes an encrypted vault and sealed policy.
50
+ Every sign needs one-use confirmation. Autonomous trading additionally requires
51
+ `ORACLE_AUTONOMOUS_TRADING=1`. Never paste a seed, key, passphrase, or signer
52
+ token into Oracle chat or argv. The private `@oracle-agent/agent` package is
53
+ not included here.
56
54
 
57
55
  ---
58
56
 
@@ -98,17 +96,17 @@ decides what may even be asked.
98
96
 
99
97
  Three properties define it:
100
98
 
101
- 1. **Self-custody by default.** Hosted/public-plane code never accepts your
102
- private key. Oracle builds unsigned transactions and typed-data intents; your
103
- wallet signs them. A self-hoster may separately import their key into the
104
- encrypted local vault; it never reaches the model or public HTTP process.
99
+ 1. **Self-custody by default.** Hosted and default Oracle never accept your
100
+ private key. They build unsigned transactions and typed-data intents; your
101
+ wallet signs them. An explicit self-host setup may import a key into the
102
+ encrypted local vault and sign through `oracle signer`.
105
103
  2. **Bound grants.** A grant is a signed, scoped, expiring permission: max
106
104
  value, chain, venue, destination allowlist, TTL. Oracle canonicalizes it,
107
105
  renders it for review, and refuses to prepare anything outside it. Runtime
108
- enforcement is the wallet's, smart account's, or self-hosted local signer's
109
- job. Every local signer action still requires the exact policy-bound artifact.
106
+ enforcement is the wallet's or smart account's job, or the optional local
107
+ signer's sealed policy when that signer is explicitly enabled.
110
108
  3. **Receipts or it didn't happen.** A claim without a transaction hash, a
111
- receipt, and a balance delta is not a result.
109
+ receipt is not a result. If a transport cannot verify a balance delta, the receipt must say `balanceDeltaVerified: false`.
112
110
 
113
111
  Default posture is `DISARMED`.
114
112
 
@@ -123,7 +121,7 @@ loop.
123
121
  | Authority | prompt-level "be careful" | signed grant: chain, spend, targets, TTL — enforced by your wallet, not by us |
124
122
  | Destinations | whatever the model emits | reviewed per-chain allowlist, fail-closed |
125
123
  | Slippage | fixed % | live guard recomputed per leg, hard 100 bps cap |
126
- | Proof | model says "done" | hash + verified successful on-chain receipt + expected balance delta or it failed |
124
+ | Proof | model says "done" | hash + verified successful on-chain receipt, with `balanceDeltaVerified` true only when snapshots prove the expected delta |
127
125
  | Surface | swap only | swaps, bridges, perps, vaults, yield, NFTs, intents |
128
126
 
129
127
  ## Architecture
@@ -151,14 +149,14 @@ Three planes, and the boundary between them is mechanically enforced:
151
149
  - **Policy plane** (public) — destination allowlists, slippage guards, route and
152
150
  vault attestations, grant schema. Holds no keys; constrains what a signer may
153
151
  be asked to do.
154
- - **Exec plane** (self-hosted, optional) — the public package can run an
155
- encrypted, short-lived loopback signer for the user's own key. It is isolated
156
- from the public HTTP/data plane and requires exact confirmation plus policy
157
- checks. The broader Admin executor remains a separate private package.
152
+ - **Exec plane** (self-hosted, optional) — signing and broadcast live only in an
153
+ explicitly initialized loopback local signer using the user's keys, or in
154
+ separately operated owner infrastructure. Hosted/default Oracle has no active
155
+ signer. The local-signer module ships inert and grants no holder privilege.
158
156
 
159
- `test/custody-boundary.test.mjs` walks the public-plane import graph and fails if
160
- it reaches local vault material, private Admin modules, or a house signer. The
161
- split is a test, not a promise.
157
+ `test/custody-boundary.test.mjs` walks the import graph and fails if any public
158
+ module reaches wallet key material or a house signer. The split is a test, not a
159
+ promise.
162
160
 
163
161
  ## Coverage
164
162
 
@@ -304,14 +302,15 @@ npm test
304
302
  owner-local source lane.** The short version:
305
303
 
306
304
  - Reads and quotes need **no keys**.
307
- - Hosted public surfaces expose no signer, key vault, or house-key broadcast path.
308
- - The self-hosted public package includes an optional encrypted, loopback-only
309
- local signer for the user's own key. Once its vault exists, user-initiated
310
- swaps and bridges are armed equally; exact one-use confirmation, sealed policy
311
- rails, caps, and non-empty allowlists still gate every broadcast.
312
- - User wallets may instead authorize prepared transaction sequences directly.
313
- - The separate private Admin package adds operator-only venue surfaces and is
314
- not published on npm.
305
+ - Hosted/default Oracle exposes no active signer, key vault, or broadcast path.
306
+ - User wallets authorize prepared actions outside the public data plane.
307
+ - The npm package includes an optional self-hosted loopback signer for the user's
308
+ own keys. It stays inert until local initialization and sealed policy setup.
309
+ Private Administrator modules remain separate and are not published on npm.
310
+ - The documented `oracle signer` path permits built-in bounded native EVM
311
+ transfers, recognized approvals, decoded EVM swaps and bridges, EVM NFT mint
312
+ envelopes, Bitcoin PSBTs, and Solana messages under the user's encrypted local
313
+ vault and sealed policy. `hl` and `poly` are not public local-signer families.
315
314
 
316
315
  ### Action vocabulary and execution planes
317
316
 
@@ -320,17 +319,16 @@ Oracle keeps capability and authorization separate:
320
319
  - Public Oracle reads, quotes, simulates, and prepares unsigned artifacts.
321
320
  - **Path A:** owner/main, browser, smart-account, hardware, or protocol-native
322
321
  wallets sign the prepared artifact. This is the default self-custody path.
323
- - **Path B:** a self-hoster may initialize the public package's encrypted local
324
- vault and short-lived loopback signer. Key presence arms both swaps and bridges;
325
- policy decides what is allowed, and exact human confirmation remains mandatory.
326
- - **Path C:** the separate private Admin package may sign additional bounded
327
- venue actions on the owner's machine. It must never expose a vault passphrase
328
- or signer credential to the model process.
329
- - The generic unattended signer exposes six bounded surfaces: `hl`, `poly`,
330
- `evm-swap`, `evm-bridge`, `btc`, `sol`. Each surface decodes its own
331
- envelope, enforces its caps, and refuses while its allowlists are empty.
332
- - Ordinary EVM preparation remains user-wallet signed unless the self-hoster has
333
- initialized and unlocked their own local signer. No Oracle-hosted key exists.
322
+ - **Path B:** the optional public local signer may sign on the same host after
323
+ explicit init, sealed policy, and loopback start. Private Administrator
324
+ modules remain unpublished and are not a holder install.
325
+ - The optional local signer decodes and binds bounded native EVM transfers,
326
+ recognized approvals, strict EVM swap/bridge calldata, EVM NFT mint envelopes,
327
+ Bitcoin PSBTs, and Solana messages. It refuses while required allowlists,
328
+ local keys, RPC URLs, simulation, signed-byte verification, receipt binding,
329
+ or ledger accounting are missing.
330
+ - Ordinary EVM preparation remains user-wallet signed unless a trusted
331
+ owner-controlled direct-exec process is explicitly installed and armed.
334
332
  - `ORACLE_AUTONOMOUS_TRADING=1` is direct execution for trusted owner-controlled
335
333
  local code only. It is never model/agent authority and should not be framed as
336
334
  equivalent to the `oracle-signer` agent-process path.
@@ -518,6 +516,10 @@ overall winner so a quote-only mid is never presented as actionable.
518
516
 
519
517
  ## Examples
520
518
 
519
+ These run from a **repo clone**, not from the installed npm package: they import
520
+ `../src/` directly, and the published tarball ships the bundled `dist/` instead of
521
+ `src/`. Clone the repo, `npm install`, then:
522
+
521
523
  ```bash
522
524
  node examples/add-a-chain.mjs # register an unseen chain, no code
523
525
  node examples/research-a-token.mjs # honest token research on live data
@@ -535,9 +537,11 @@ oracle-data-mcp
535
537
 
536
538
  ## Security
537
539
 
538
- - Oracle never receives private keys.
540
+ - Hosted/default Oracle never receives private keys. An explicit self-host
541
+ import writes only to the local encrypted vault.
539
542
  - The router can propose, simulate, explain, and draft. It cannot authorize.
540
- - Public modules may not import signer or executor code (enforced by test).
543
+ - Public default modules may not import house-signer or executor code
544
+ (enforced by test). The optional `./local-signer` export is the self-host path.
541
545
  - Destination allowlists are per-chain and fail-closed: an empty allowlist
542
546
  refuses everything rather than allowing everything.
543
547
  - Report vulnerabilities per [SECURITY.md](SECURITY.md). Please do not open a
package/SECURITY.md CHANGED
@@ -102,7 +102,7 @@ still apply after the public boundary hardening:
102
102
  caller-supplied public facts; `recordAudit()` is a process-local, best-effort
103
103
  file helper. Neither authorizes execution or proves settlement. Report
104
104
  success only after independently verifying the successful chain receipt,
105
- expected destination/events, and expected balance delta.
105
+ expected destination/events, and `balanceDeltaVerified` when balance snapshots are available.
106
106
  7. **Repository-host controls are not the custody boundary.** Dependabot alerts
107
107
  may be enabled independently, while branch protection, CodeQL, and hosted
108
108
  secret scanning depend on repository visibility and account tier. Verify the
package/SETUP.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # Oracle setup
2
2
 
3
- Oracle's public CLI is prepare-only unless a user deliberately enables its
4
- self-hosted signer. The optional signer uses an AES-256-GCM/scrypt encrypted
5
- vault on the user's machine, listens only on loopback, and signs only exact
6
- confirmed artifacts within configured policy. Hosted Oracle remains
7
- prepare-only. The private `@oracle-agent/agent` admin package is not imported.
3
+ Oracle's public CLI reads, prepares, arms, signs, and broadcasts under owner
4
+ policy. Signing is the user wallet or `oracle signer` after an encrypted local
5
+ vault and sealed policy exist. Hosted web stays keyless. The private
6
+ `@oracle-agent/agent` package is not imported.
8
7
 
9
8
  ## Requirements
10
9
 
@@ -255,9 +254,11 @@ const prepared = await data.call("hl-perps", "prepareOrder", {
255
254
  ```
256
255
 
257
256
  Review the chain, destination, calldata or typed data, amount, minimum output,
258
- expiry, approvals, and fees in the user's wallet. Oracle's public package stops
259
- before signing. Report success only after a real transaction hash, successful
260
- receipt, and expected balance or state change.
257
+ expiry, approvals, and fees. Hosted/default Oracle stops before signing and
258
+ hands the artifact to a user-controlled wallet. A self-hoster who initialized
259
+ `oracle signer` may sign that same reviewed artifact locally. Report success
260
+ only after a real transaction hash, successful receipt, and expected balance or
261
+ state change.
261
262
 
262
263
  ## Locals Only fee waiver
263
264
 
@@ -292,8 +293,9 @@ A clean standalone install can legitimately show warnings for:
292
293
  - `agent_runtime` when optional Hermes is not installed;
293
294
  - `hermes_lanes` before optional `oracle init --apply`.
294
295
 
295
- A Node-version failure is blocking. Signing warnings are irrelevant to the
296
- public package because signing is not installed there.
296
+ A Node-version failure is blocking. Signing warnings from `oracle doctor`
297
+ refer to signer setup, not hosted web. Hosted web never signs.
298
+ `oracle sign doctor` and `oracle signer` are the local sign path.
297
299
 
298
300
  ## Upgrade
299
301
 
@@ -357,9 +359,10 @@ the API is live based on the static site or source code alone.
357
359
 
358
360
  ### A prepared action cannot be signed
359
361
 
360
- That is expected in the public package. Hand the reviewed artifact to a
361
- user-controlled wallet. Do not install or request private owner infrastructure
362
- as a workaround.
362
+ Hosted/default Oracle is prepare-only: hand the reviewed artifact to a
363
+ user-controlled wallet. Do not install private Administrator infrastructure
364
+ as a workaround. A self-hoster who already initialized `oracle sign` /
365
+ `oracle signer` signs locally under that policy.
363
366
 
364
367
  ## References
365
368
 
@@ -22,8 +22,8 @@ Keep these. They are the desk's invariants, not suggestions:
22
22
  1. **You do not sign.** Transactions are prepared for the user's wallet.
23
23
  2. **A grant is authorization; your reasoning is not.** Outside the grant's chain,
24
24
  venue, destination, spend cap, or TTL → refuse, and say which bound broke.
25
- 3. **Receipts or it didn't happen.** No hash, no receipt, no balance delta → it
26
- did not succeed.
25
+ 3. **Receipts or it didn't happen.** No hash or receipt → it did not succeed.
26
+ Report balance delta only when verified.
27
27
  4. **Never invent chain facts.** Not from a live read → `unknown`.
28
28
 
29
29
  Then add rules specific to your venue.
@@ -58,14 +58,12 @@ the data plane). If it stays ambiguous, ask. Do not guess a chain.
58
58
  margin call for different decisions. If `rankedOn` is `gross`, gas was NOT
59
59
  accounted for — say so. See the `oracle-best-execution` skill.
60
60
 
61
- 1. **The public package never signs.** It reads, simulates, and prepares wallet-signable
62
- artifacts. It does not import keys, expose a signer or vault, arm an executor, or
63
- broadcast transactions. A separately provisioned owner-controlled executor may
64
- consume a prepared artifact, but it is outside this package. Never describe one as
65
- available without live verification and explicit owner authorization.
66
- `watch`, `watch this`, and `ping me` always mean `actionMode: alert_only`.
67
- An explicit `arm` requests one exact, bounded action for wallet or external-executor
68
- confirmation. It does not arm anything inside this package.
61
+ 1. **Sign only through a confirmed path.** Reads and prepares are always
62
+ available. Signing and broadcast use the user wallet or `oracle signer`
63
+ after vault init, sealed policy, and one-use confirmation. Verify signer
64
+ status before claiming it is live. Never paste a key. `watch`, `watch this`,
65
+ and `ping me` always mean `actionMode: alert_only`. An explicit `arm`
66
+ requests one exact bounded action for confirmation. Lanes start DISARMED.
69
67
 
70
68
  **Autonomous trading is the one opt-in.** A trigger that fires a trade with
71
69
  nobody watching requires `ORACLE_AUTONOMOUS_TRADING=1`. Until then such an
@@ -80,11 +78,11 @@ the data plane). If it stays ambiguous, ask. Do not guess a chain.
80
78
  not. Resolve exact token/chain, sell-sim when possible, quote net of gas,
81
79
  cap spend/fees, and prepare a user-signed ticket.
82
80
  5. **Terminal and messaging are transports, not different authority models.**
83
- Bare `oracle` launches this same prepare-only profile. Terminal, messaging, and
84
- installed MCP targets can read, simulate, and prepare, but none can discover or
85
- invoke a signer through this package. A separate executor keeps its own owner
86
- authentication, grants, allowlists, caps, simulations, and receipt verification.
87
- Changing `/model` never changes those walls.
81
+ Bare `oracle` launches this same default prepare-only profile. Terminal,
82
+ messaging, and installed MCP targets can read, simulate, and prepare.
83
+ Signing is a separate explicit `oracle signer` path, not something this
84
+ profile can discover or invoke on its own. Changing `/model` never changes
85
+ those walls.
88
86
  6. **A grant is authorization; your reasoning is not.** If an action falls
89
87
  outside the active grant — chain, venue, destination, spend cap, TTL — refuse
90
88
  and say which bound it broke.
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "signing": {
79
79
  "enum": ["none", "user-wallet"],
80
- "description": "Never 'house'. Oracle holds no keys."
80
+ "description": "Lane default is none or user-wallet. Local signing is oracle signer, not a lane house key."
81
81
  },
82
82
  "rationale": {
83
83
  "type": "string",
@@ -103,11 +103,11 @@ marketplace sell are different paths with different approvals.
103
103
  2. **Never size against stale or virtual reserves.**
104
104
  3. **A fuzzy ticker match is not confirmation.** Surface the CA.
105
105
  4. **The public lane does not sign.** Ordinary swaps are prepared for the user's
106
- wallet. The generic unattended signer exposes six bounded surfaces (`hl`, `poly`,
107
- `evm-swap`, `evm-bridge`, `btc`, `sol`), each fail-closed on its own policy. A
108
- separately installed, owner-gated EVM executor may handle one exact bounded
109
- Robinhood Chain action after explicit `arm`. Verify that executor before claiming
110
- it is available.
106
+ wallet. The optional self-hosted local signer accepts bounded native EVM
107
+ transfers and recognized approvals, but rejects swap and bridge calldata until
108
+ its economics are decoded. A separately installed, owner-gated EVM executor may
109
+ handle one exact bounded Robinhood Chain action after explicit `arm`. Verify that
110
+ executor before claiming it is available.
111
111
  5. **Watch is alert-only.** `watch`, `watch this`, and `ping me` persist as
112
112
  `active: true, actionMode: alert_only`. Only explicit `arm` can produce
113
113
  `actionMode: execute`; never infer execution from a watch or legacy `status: armed`.
@@ -8,11 +8,11 @@ description: Use when building prepare-only cross-venue rank surfaces.
8
8
 
9
9
  # Multi-venue prepare-only ranking
10
10
 
11
- Class of product: compare quotes across venues, rank honestly, prepare unsigned artifacts only. Worked repo: `/home/demi/work/oracle-equities` (298 offline tests as of 2026-08-04).
11
+ Class of product: compare quotes across venues, rank honestly, prepare unsigned artifacts only. Reference implementation passed 298 offline tests as of 2026-08-04.
12
12
 
13
13
  ## Product law
14
14
 
15
- - Prepare-only. No keys, no sign, no broadcast in the public package.
15
+ - This ranking workflow prepares only. Sign and broadcast with the user wallet or `oracle signer`.
16
16
  - Rank on **net received after fees/gas/impact** when costs are known; otherwise `rankedOn: "gross"` and say so.
17
17
  - **Unknown is not zero.** Missing gas/impact/funding => field `null` and `costAccounted: false`.
18
18
  - **Adapters report truth. Liveness filters.** Never "repair" crossed books or drop dormant venues inside an adapter.
@@ -7,10 +7,10 @@ description: Use for watch, ping, prepare, arm, sign, send, or execution-capabil
7
7
 
8
8
  Keep these planes distinct:
9
9
 
10
- 1. **Public prepare plane**: reads, quotes, simulates, and prepares unsigned artifacts. It never signs or broadcasts.
11
- 2. **Generic Oracle signer**: the unattended daemon exposes six *bounded* surfaces — `hl`, `poly`, `evm-swap`, `evm-bridge`, `btc`, `sol`. Bounded is not generic chain authority: each surface decodes and validates its own envelope shape and refuses while its allowlists are empty. Enablement is never authority; every signature still needs one exact owner-confirmed grant.
12
- 3. **User-wallet EVM**: ordinary EVM preparations require the user's wallet signature.
13
- 4. **Optional bounded EVM execution**: a deployment may expose a separate same-host, owner-gated EVM executor such as MAD. Verify its status and policy before saying it is available. Never infer it from the public package or the generic signer.
10
+ 1. **Public prepare plane**: reads, quotes, simulates, and prepares unsigned artifacts. Signing and broadcast happen through the wallet, `oracle signer`, or a verified execution lane.
11
+ 2. **Generic Oracle signer**: the documented unattended daemon exposes built-in public surfaces: `evm`, `evm-swap`, `evm-bridge`, `evm-nft`, `btc`, and `sol`. Bounded is not generic chain authority: each surface decodes and validates its envelope shape and refuses while allowlists, local keys, RPC URLs, simulation, signed-byte verification, receipt binding, or ledger accounting are missing. Enablement is never authority; every signature still needs one exact owner-confirmed grant.
12
+ 3. **User-wallet execution**: ordinary preparations can still be signed by the user's wallet instead of the local signer.
13
+ 4. **Optional extra execution**: a deployment may expose a separate same-host, owner-gated executor such as MAD. Verify its status and policy before saying it is available. Never infer extra `hl`/`poly` authority from the public package or the generic signer.
14
14
 
15
15
  Do not turn a deployment fact into a universal claim. If no bounded EVM executor is installed or healthy, say the current deployment cannot execute EVM. Do not say Oracle can never execute EVM.
16
16
 
@@ -35,6 +35,6 @@ Report each state separately:
35
35
  - `signingReady`
36
36
  - `broadcastReady`
37
37
 
38
- A quote is not a preparation. A preparation is not a signature. A signature is not a broadcast. A broadcast is not mined execution. Claim success only after a transaction hash, successful receipt, and expected balance delta.
38
+ A quote is not a preparation. A preparation is not a signature. A signature is not a broadcast. A broadcast is not mined execution. Claim success only after a transaction hash, successful receipt. Report balance delta only when `balanceDeltaVerified` is true.
39
39
 
40
40
  ERC-20 approval is a separate transaction. Use an exact bounded amount unless the user explicitly authorizes another cap. Never silently create an unlimited approval.
@@ -26,25 +26,25 @@ You are **oracle** — one lowercase persona. Models can change underneath via `
26
26
  - `ORACLE_ACTIVE_AGENT`
27
27
  2. If they name a chain ("build on hyperliquid"), run or instruct:
28
28
  `oracle chain use hyperliquid`
29
- 3. Never claim signing or broadcast happened. This public package cannot perform either.
30
- 4. Every model and transport remains read/prepare-only.
29
+ 3. Never claim signing or broadcast happened unless the owner used the explicit
30
+ self-host `oracle signer` path and you have a receipt.
31
+ 4. Default chat, MCP, and hosted transports stay read/prepare-only. Do not
32
+ invoke `oracle signer` from this profile.
31
33
  5. Keep replies lowercase-friendly and terse. No glaze.
32
34
 
33
35
  ## terminal and telegram are the same oracle
34
36
 
35
- `oracle` in a TTY launches Hermes with `-p oracle`. Telegram is wired to that
36
- same profile. The interface changes; the profile, tools, memory, model routing,
37
- wallet/data MCPs, and custody policy do not.
37
+ `oracle` in a TTY starts the native standalone Oracle runtime by default. Hermes is an explicit backend choice, not the automatic TTY path. Telegram can be wired to the same Oracle profile, but the terminal interface may use native model auth, local config, and the standalone loop unless `ORACLE_CHAT_BACKEND=hermes` is set.
38
38
 
39
39
  - Terminal and messaging can both read, simulate, and prepare unsigned actions.
40
40
  - For an explicit trade instruction, enforce the active-chain policy, prepare
41
41
  the exact unsigned artifact, and present it for wallet review.
42
- - Do not discover or invoke a signer, vault, control MCP, or broadcaster.
42
+ - Default chat does not discover or invoke a signer, vault, control MCP, or broadcaster.
43
43
  - `arm` means prepare the exact bounded action for external wallet review. It
44
- does not enable execution inside this package.
44
+ does not enable execution inside this default profile.
45
45
  - A tool refusal is a real policy wall. Report the exact refusal instead of
46
46
  bypassing it.
47
- - Never claim a trade executed from this package.
47
+ - Never claim a trade executed from this default profile.
48
48
 
49
49
  ## shell helpers
50
50
  ```bash
@@ -97,7 +97,7 @@ does not prove npm users receive it. A locally hosted model/data/policy loop doe
97
97
  a bundled signer. A merged feature is not public until the npm artifact containing it is
98
98
  published and inspected.
99
99
 
100
- **Candidate release in this source tree:** public package `@oracle-agent/oracle@0.24.7`
100
+ **Candidate release in this source tree:** public package `@oracle-agent/oracle@0.24.9`
101
101
  ships the optional encrypted local vault + short-lived loopback signer. Hosted/default
102
102
  Oracle stays prepare-only. Self-host after `oracle sign init|import` is **auto-armed**
103
103
  for user-initiated actions. Public still charges the disclosed fee card; Administrator
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oracle-receipts
3
- description: Use whenever reporting the outcome of any on-chain action. Enforces that a claim of success carries a hash, a receipt, and a balance delta.
3
+ description: Use whenever reporting the outcome of any on-chain action. Enforces that a claim of success carries a hash and a receipt, and reports balance delta only when verified.
4
4
  ---
5
5
 
6
6
  # Receipts or it didn't happen
@@ -16,7 +16,7 @@ A money-moving action is **complete** only when you can show:
16
16
  1. **transaction hash** — the real one, from the broadcast response
17
17
  2. **receipt status** — `1`. A receipt with status `0` is a *failed* transaction
18
18
  that still consumed gas; that is not success
19
- 3. **balance delta** — the output token balance actually changed, read back after
19
+ 3. **balance delta when verified** — the output token balance actually changed, read back after
20
20
  the receipt
21
21
  4. **the log** proving the intended event fired (`Swap`, `Transfer` to the right
22
22
  recipient, `OrderFilled`)