@oracle-agent/oracle 0.13.0 → 0.14.0

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 (629) hide show
  1. package/CONTRIBUTING.md +99 -0
  2. package/README.md +531 -13
  3. package/SECURITY.md +112 -0
  4. package/SETUP.md +317 -0
  5. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  6. package/artifacts/inscription/oracle-was-here.svg +1 -0
  7. package/artifacts/specialist-packs/oracle-full-crypto.json +298 -0
  8. package/bin/desk-server.mjs +473 -0
  9. package/bin/oracle-data-mcp.mjs +1252 -0
  10. package/bin/oracle-equities.mjs +168 -0
  11. package/bin/oracle-init.mjs +525 -0
  12. package/bin/oracle-public-server.mjs +36 -0
  13. package/bin/oracle-route.mjs +254 -0
  14. package/bin/oracle-scan.mjs +192 -0
  15. package/bin/oracle-upgrade.mjs +42 -0
  16. package/bin/oracle.mjs +28 -19
  17. package/docs/adding-a-chain.md +229 -0
  18. package/docs/architecture.md +139 -0
  19. package/docs/buzz-integration.md +115 -0
  20. package/docs/cli.md +143 -0
  21. package/docs/connectors.md +13 -0
  22. package/docs/hyperliquid-builder-code.md +50 -0
  23. package/docs/locals-only-fee-waiver.md +34 -0
  24. package/docs/oracle-pack-standard.md +29 -0
  25. package/docs/profiles.md +151 -0
  26. package/docs/public-surface.md +206 -0
  27. package/examples/add-a-chain.mjs +65 -0
  28. package/examples/oracle-pack-template.mjs +38 -0
  29. package/examples/research-a-token.mjs +70 -0
  30. package/package.json +110 -14
  31. package/plugins/oracle-owner-gate/__init__.py +288 -0
  32. package/plugins/oracle-owner-gate/plugin.yaml +9 -0
  33. package/profiles/_template/SOUL.md +54 -0
  34. package/profiles/_template/profile.json +22 -0
  35. package/profiles/bitcoin-agent/SOUL.md +31 -0
  36. package/profiles/bitcoin-agent/profile.json +32 -0
  37. package/profiles/hyperliquid-agent/SOUL.md +34 -0
  38. package/profiles/hyperliquid-agent/profile.json +38 -0
  39. package/profiles/oracle/SOUL.md +120 -0
  40. package/profiles/oracle/profile.json +40 -0
  41. package/profiles/polymarket-agent/SOUL.md +35 -0
  42. package/profiles/polymarket-agent/profile.json +34 -0
  43. package/profiles/profile.schema.json +90 -0
  44. package/profiles/protocol-builder/SOUL.md +57 -0
  45. package/profiles/protocol-builder/profile.json +39 -0
  46. package/profiles/robinhood-agent/SOUL.md +53 -0
  47. package/profiles/robinhood-agent/profile.json +41 -0
  48. package/profiles/solana-agent/SOUL.md +37 -0
  49. package/profiles/solana-agent/profile.json +38 -0
  50. package/profiles/stable-agent/SOUL.md +43 -0
  51. package/profiles/stable-agent/profile.json +38 -0
  52. package/protocols/templates/safe-erc20/SECURITY.md +16 -0
  53. package/protocols/templates/safe-erc20/foundry.toml +12 -0
  54. package/protocols/templates/safe-erc20/remappings.txt +2 -0
  55. package/protocols/templates/safe-erc20/src/SafeERC20.sol +53 -0
  56. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +72 -0
  57. package/public/agent-connect/app.js +84 -0
  58. package/public/agent-connect/index.html +83 -0
  59. package/public/agent-connect/styles.css +70 -0
  60. package/public/index.html +12 -0
  61. package/public/oracle-console/app.js +272 -0
  62. package/public/oracle-console/bitcoin-wallets.js +206 -0
  63. package/public/oracle-console/index.html +91 -0
  64. package/public/oracle-console/styles.css +239 -0
  65. package/public/oracle-splash/_variants/ice.html +2073 -0
  66. package/public/oracle-splash/_variants/ivory.html +2075 -0
  67. package/public/oracle-splash/assets/agents/claude.png +0 -0
  68. package/public/oracle-splash/assets/agents/codex.png +0 -0
  69. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  70. package/public/oracle-splash/assets/desktop-app.jpg +0 -0
  71. package/public/oracle-splash/assets/hero/cli-session-poster.jpg +0 -0
  72. package/public/oracle-splash/assets/hero/cli-session.mp4 +0 -0
  73. package/public/oracle-splash/assets/hero/cli-session.webm +0 -0
  74. package/public/oracle-splash/assets/hero/orb-poster.jpg +0 -0
  75. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  76. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  77. package/public/oracle-splash/assets/hero/risk-session-poster.jpg +0 -0
  78. package/public/oracle-splash/assets/hero/risk-session.mp4 +0 -0
  79. package/public/oracle-splash/assets/hero/risk-session.webm +0 -0
  80. package/public/oracle-splash/assets/hero/route-session-poster.jpg +0 -0
  81. package/public/oracle-splash/assets/hero/route-session.mp4 +0 -0
  82. package/public/oracle-splash/assets/hero/route-session.webm +0 -0
  83. package/public/oracle-splash/assets/llms/claude.svg +1 -0
  84. package/public/oracle-splash/assets/llms/codex-icon.svg +1 -0
  85. package/public/oracle-splash/assets/llms/codex.svg +1 -0
  86. package/public/oracle-splash/assets/llms/cursor-icon.svg +12 -0
  87. package/public/oracle-splash/assets/llms/cursor.svg +17 -0
  88. package/public/oracle-splash/assets/llms/deepseek.svg +1 -0
  89. package/public/oracle-splash/assets/llms/gemini-icon.svg +1 -0
  90. package/public/oracle-splash/assets/llms/gemini.svg +1 -0
  91. package/public/oracle-splash/assets/llms/grok.svg +8 -0
  92. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  93. package/public/oracle-splash/assets/llms/kimi-icon.svg +1 -0
  94. package/public/oracle-splash/assets/llms/kimi.svg +1 -0
  95. package/public/oracle-splash/assets/llms/manus.svg +18 -0
  96. package/public/oracle-splash/assets/llms/openclaw.svg +22 -0
  97. package/public/oracle-splash/assets/llms/perplexity.svg +1 -0
  98. package/public/oracle-splash/assets/llms/qwen.svg +1 -0
  99. package/public/oracle-splash/assets/llms/windsurf.svg +1 -0
  100. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  101. package/public/oracle-splash/assets/protocols/across.png +0 -0
  102. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  103. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  104. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  105. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  106. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  107. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  108. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  109. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  110. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  111. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  112. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  113. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  114. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  115. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  116. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  117. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  118. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  119. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  120. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  121. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  122. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  123. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  124. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  125. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  126. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  127. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  128. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  129. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  130. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  131. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  132. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  133. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  134. package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
  135. package/public/oracle-splash/assets/wordmarks/across.svg +4 -0
  136. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +23 -0
  137. package/public/oracle-splash/assets/wordmarks/balancer.svg +3 -0
  138. package/public/oracle-splash/assets/wordmarks/cowswap.svg +1 -0
  139. package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
  140. package/public/oracle-splash/assets/wordmarks/gmx.svg +13 -0
  141. package/public/oracle-splash/assets/wordmarks/hop-icon.webp +0 -0
  142. package/public/oracle-splash/assets/wordmarks/hyena.svg +7 -0
  143. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +21 -0
  144. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +13 -0
  145. package/public/oracle-splash/assets/wordmarks/jupiter.svg +35 -0
  146. package/public/oracle-splash/assets/wordmarks/kinetiq.svg +1 -0
  147. package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
  148. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  149. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +1 -0
  150. package/public/oracle-splash/assets/wordmarks/markets.svg +1 -0
  151. package/public/oracle-splash/assets/wordmarks/morpho.svg +1 -0
  152. package/public/oracle-splash/assets/wordmarks/odos.svg +3 -0
  153. package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
  154. package/public/oracle-splash/assets/wordmarks/oneinch.svg +6 -0
  155. package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +17 -0
  156. package/public/oracle-splash/assets/wordmarks/opensea.svg +1 -0
  157. package/public/oracle-splash/assets/wordmarks/outcome.svg +16 -0
  158. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +18 -0
  159. package/public/oracle-splash/assets/wordmarks/paragon.svg +9 -0
  160. package/public/oracle-splash/assets/wordmarks/paraswap.svg +16 -0
  161. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  162. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  163. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  164. package/public/oracle-splash/assets/wordmarks/relay.svg +8 -0
  165. package/public/oracle-splash/assets/wordmarks/satflow-icon.png +0 -0
  166. package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
  167. package/public/oracle-splash/assets/wordmarks/stargate.svg +15 -0
  168. package/public/oracle-splash/assets/wordmarks/uniswap.svg +18 -0
  169. package/public/oracle-splash/assets/wordmarks/velodrome.svg +84 -0
  170. package/public/oracle-splash/assets/wordmarks/xyz.svg +12 -0
  171. package/public/oracle-splash/assets/wordmarks/zerox-icon.webp +0 -0
  172. package/public/oracle-splash/brand/aave.webp +0 -0
  173. package/public/oracle-splash/brand/aavev2.webp +0 -0
  174. package/public/oracle-splash/brand/aborean.webp +0 -0
  175. package/public/oracle-splash/brand/across.webp +0 -0
  176. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  177. package/public/oracle-splash/brand/afi.webp +0 -0
  178. package/public/oracle-splash/brand/arcus.webp +0 -0
  179. package/public/oracle-splash/brand/aster.webp +0 -0
  180. package/public/oracle-splash/brand/avant.webp +0 -0
  181. package/public/oracle-splash/brand/balancer.webp +0 -0
  182. package/public/oracle-splash/brand/beefy.webp +0 -0
  183. package/public/oracle-splash/brand/benqi.webp +0 -0
  184. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  185. package/public/oracle-splash/brand/bitfi.webp +0 -0
  186. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  187. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  188. package/public/oracle-splash/brand/camelot.webp +0 -0
  189. package/public/oracle-splash/brand/compound.webp +0 -0
  190. package/public/oracle-splash/brand/concrete.webp +0 -0
  191. package/public/oracle-splash/brand/cow.webp +0 -0
  192. package/public/oracle-splash/brand/curve.webp +0 -0
  193. package/public/oracle-splash/brand/derive.webp +0 -0
  194. package/public/oracle-splash/brand/dolomite.webp +0 -0
  195. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  196. package/public/oracle-splash/brand/ekubo.webp +0 -0
  197. package/public/oracle-splash/brand/ethena.webp +0 -0
  198. package/public/oracle-splash/brand/etherfi.webp +0 -0
  199. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  200. package/public/oracle-splash/brand/felix.webp +0 -0
  201. package/public/oracle-splash/brand/fluid.webp +0 -0
  202. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  203. package/public/oracle-splash/brand/folks.webp +0 -0
  204. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  205. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  206. package/public/oracle-splash/brand/gassss.webp +0 -0
  207. package/public/oracle-splash/brand/gmx.webp +0 -0
  208. package/public/oracle-splash/brand/harmonix.webp +0 -0
  209. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  210. package/public/oracle-splash/brand/hlp.webp +0 -0
  211. package/public/oracle-splash/brand/hop.webp +0 -0
  212. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  213. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  214. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  215. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  216. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  217. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  218. package/public/oracle-splash/brand/hypha.webp +0 -0
  219. package/public/oracle-splash/brand/joedex.webp +0 -0
  220. package/public/oracle-splash/brand/jupiter.webp +0 -0
  221. package/public/oracle-splash/brand/kelp.webp +0 -0
  222. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  223. package/public/oracle-splash/brand/kmhype.webp +0 -0
  224. package/public/oracle-splash/brand/kona.webp +0 -0
  225. package/public/oracle-splash/brand/konalend.webp +0 -0
  226. package/public/oracle-splash/brand/lfj.webp +0 -0
  227. package/public/oracle-splash/brand/lido.webp +0 -0
  228. package/public/oracle-splash/brand/lifi.webp +0 -0
  229. package/public/oracle-splash/brand/lighter.webp +0 -0
  230. package/public/oracle-splash/brand/lista.webp +0 -0
  231. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  232. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  233. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  234. package/public/oracle-splash/brand/magiceden.webp +0 -0
  235. package/public/oracle-splash/brand/mempool.png +0 -0
  236. package/public/oracle-splash/brand/meteora.webp +0 -0
  237. package/public/oracle-splash/brand/morpho.webp +0 -0
  238. package/public/oracle-splash/brand/myriad.webp +0 -0
  239. package/public/oracle-splash/brand/noxa.webp +0 -0
  240. package/public/oracle-splash/brand/odos.webp +0 -0
  241. package/public/oracle-splash/brand/oneinch.webp +0 -0
  242. package/public/oracle-splash/brand/openbook.webp +0 -0
  243. package/public/oracle-splash/brand/opensea.webp +0 -0
  244. package/public/oracle-splash/brand/orca.webp +0 -0
  245. package/public/oracle-splash/brand/ordinals.png +0 -0
  246. package/public/oracle-splash/brand/ostium.webp +0 -0
  247. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  248. package/public/oracle-splash/brand/pendle.webp +0 -0
  249. package/public/oracle-splash/brand/perena.webp +0 -0
  250. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  251. package/public/oracle-splash/brand/phoenix.webp +0 -0
  252. package/public/oracle-splash/brand/polymarket.webp +0 -0
  253. package/public/oracle-splash/brand/polynomial.webp +0 -0
  254. package/public/oracle-splash/brand/projectx.webp +0 -0
  255. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  256. package/public/oracle-splash/brand/quickswap.webp +0 -0
  257. package/public/oracle-splash/brand/rain.webp +0 -0
  258. package/public/oracle-splash/brand/raydium.webp +0 -0
  259. package/public/oracle-splash/brand/relay.webp +0 -0
  260. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  261. package/public/oracle-splash/brand/saber.webp +0 -0
  262. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  263. package/public/oracle-splash/brand/sanctum.webp +0 -0
  264. package/public/oracle-splash/brand/satflow.png +0 -0
  265. package/public/oracle-splash/brand/sierra.webp +0 -0
  266. package/public/oracle-splash/brand/sky.webp +0 -0
  267. package/public/oracle-splash/brand/solv.webp +0 -0
  268. package/public/oracle-splash/brand/spark.webp +0 -0
  269. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  270. package/public/oracle-splash/brand/sphere.webp +0 -0
  271. package/public/oracle-splash/brand/ssv.webp +0 -0
  272. package/public/oracle-splash/brand/stabble.webp +0 -0
  273. package/public/oracle-splash/brand/stableswap.webp +0 -0
  274. package/public/oracle-splash/brand/stakewise.webp +0 -0
  275. package/public/oracle-splash/brand/stargate.webp +0 -0
  276. package/public/oracle-splash/brand/sthype.webp +0 -0
  277. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  278. package/public/oracle-splash/brand/unisat.png +0 -0
  279. package/public/oracle-splash/brand/uniswap.webp +0 -0
  280. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  281. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  282. package/public/oracle-splash/brand/unit.webp +0 -0
  283. package/public/oracle-splash/brand/velodrome.webp +0 -0
  284. package/public/oracle-splash/brand/velora.webp +0 -0
  285. package/public/oracle-splash/brand/venus.webp +0 -0
  286. package/public/oracle-splash/brand/wbeth.webp +0 -0
  287. package/public/oracle-splash/brand/xsy.webp +0 -0
  288. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  289. package/public/oracle-splash/brand/zerobase.webp +0 -0
  290. package/public/oracle-splash/brand/zerox.webp +0 -0
  291. package/public/oracle-splash/downloads/index.html +52 -0
  292. package/public/oracle-splash/favicon.ico +0 -0
  293. package/public/oracle-splash/favicon.svg +6 -0
  294. package/public/oracle-splash/index.html +2537 -0
  295. package/public/oracle-splash/mesh-graph.png +0 -0
  296. package/public/oracle-splash/mesh-graph.svg +216 -0
  297. package/scripts/adversarial-bench.mjs +114 -0
  298. package/scripts/build-dist.mjs +119 -0
  299. package/scripts/build-inscription.py +230 -0
  300. package/scripts/check-doc-drift.mjs +123 -0
  301. package/scripts/check-test-count.mjs +105 -0
  302. package/scripts/e2e-hl-markets.mjs +21 -0
  303. package/scripts/e2e-hl-perps.mjs +48 -0
  304. package/scripts/e2e-hypercore-staking.mjs +128 -0
  305. package/scripts/e2e-solana-bitcoin.mjs +183 -0
  306. package/scripts/guard-publish.mjs +22 -0
  307. package/scripts/protocol-template-gate.mjs +15 -0
  308. package/scripts/public-api-scan.mjs +23 -0
  309. package/scripts/publish-dist.mjs +67 -0
  310. package/scripts/record-hero-cli.sh +80 -0
  311. package/scripts/secret-scan.mjs +168 -0
  312. package/scripts/smoke-dist-bins.mjs +89 -0
  313. package/scripts/verify-dist.mjs +29 -0
  314. package/scripts/verify-v3-venues.mjs +233 -0
  315. package/skills/balance/SKILL.md +176 -0
  316. package/skills/bitcoin-l1.md +33 -0
  317. package/skills/chain-defi-ecosystem-profiling.md +27 -0
  318. package/skills/evm-contract-research.md +27 -0
  319. package/skills/hyperliquid.md +26 -0
  320. package/skills/multichain-exec-desk.md +33 -0
  321. package/skills/oracle-action-semantics/SKILL.md +40 -0
  322. package/skills/oracle-best-execution/SKILL.md +127 -0
  323. package/skills/oracle-best-execution.md +27 -0
  324. package/skills/oracle-bitcoin/SKILL.md +53 -0
  325. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +59 -0
  326. package/skills/oracle-chat/SKILL.md +61 -0
  327. package/skills/oracle-chat/chain.SKILL.md +31 -0
  328. package/skills/oracle-chat/setup.SKILL.md +37 -0
  329. package/skills/oracle-circuit-breaker/SKILL.md +51 -0
  330. package/skills/oracle-contract-research/SKILL.md +55 -0
  331. package/skills/oracle-desk/SKILL.md +58 -0
  332. package/skills/oracle-desk.md +27 -0
  333. package/skills/oracle-dex-launch/SKILL.md +38 -0
  334. package/skills/oracle-equities/SKILL.md +62 -0
  335. package/skills/oracle-grants/SKILL.md +69 -0
  336. package/skills/oracle-hypercore-staking/SKILL.md +57 -0
  337. package/skills/oracle-hyperliquid/SKILL.md +56 -0
  338. package/skills/oracle-meme-token-sniper/SKILL.md +73 -0
  339. package/skills/oracle-multichain-nft-launch/SKILL.md +338 -0
  340. package/skills/oracle-multichain-token-launch/SKILL.md +300 -0
  341. package/skills/oracle-nft-gacha-launch/SKILL.md +48 -0
  342. package/skills/oracle-nft-mint-gas-war/SKILL.md +63 -0
  343. package/skills/oracle-polymarket/SKILL.md +60 -0
  344. package/skills/oracle-protocol-builder/SKILL.md +59 -0
  345. package/skills/oracle-protocol-security/SKILL.md +60 -0
  346. package/skills/oracle-public-product/SKILL.md +44 -0
  347. package/skills/oracle-receipts/SKILL.md +52 -0
  348. package/skills/oracle-receipts.md +29 -0
  349. package/skills/oracle-rfq-tokenized-assets/SKILL.md +69 -0
  350. package/skills/oracle-smart-wallet-scanner/SKILL.md +49 -0
  351. package/skills/oracle-solana/SKILL.md +65 -0
  352. package/skills/oracle-solana-nft/SKILL.md +54 -0
  353. package/skills/oracle-token-research/SKILL.md +67 -0
  354. package/skills/solana.md +22 -0
  355. package/skins/oracle.yaml +56 -0
  356. package/src/action-receipts.mjs +265 -0
  357. package/src/action-semantics.mjs +62 -0
  358. package/src/address-book.mjs +208 -0
  359. package/src/agent-auth.mjs +206 -0
  360. package/src/approval-guard.mjs +282 -0
  361. package/src/attestation-secret.mjs +94 -0
  362. package/src/audit-log.mjs +196 -0
  363. package/src/auth/oauth.mjs +672 -0
  364. package/src/auto-slippage.mjs +378 -0
  365. package/src/capability-posture.mjs +125 -0
  366. package/src/cards.mjs +422 -0
  367. package/src/chains.mjs +62 -0
  368. package/src/cli/chain-catalog.mjs +215 -0
  369. package/src/cli/chain-state.mjs +74 -0
  370. package/src/cli/commands/auth.mjs +193 -0
  371. package/src/cli/commands/bootstrap.mjs +87 -0
  372. package/src/cli/commands/chain.mjs +143 -0
  373. package/src/cli/commands/chat.mjs +465 -0
  374. package/src/cli/commands/credential.mjs +9 -0
  375. package/src/cli/commands/data-mcp.mjs +18 -0
  376. package/src/cli/commands/data.mjs +75 -0
  377. package/src/cli/commands/doctor.mjs +136 -0
  378. package/src/cli/commands/equities.mjs +41 -0
  379. package/src/cli/commands/farm.mjs +129 -0
  380. package/src/cli/commands/fees.mjs +109 -0
  381. package/src/cli/commands/follow.mjs +130 -0
  382. package/src/cli/commands/harness.mjs +63 -0
  383. package/src/cli/commands/help.mjs +7 -0
  384. package/src/cli/commands/init.mjs +27 -0
  385. package/src/cli/commands/mcp.mjs +154 -0
  386. package/src/cli/commands/model.mjs +106 -0
  387. package/src/cli/commands/plugins.mjs +241 -0
  388. package/src/cli/commands/prepare.mjs +12 -0
  389. package/src/cli/commands/public.mjs +20 -0
  390. package/src/cli/commands/resolve.mjs +64 -0
  391. package/src/cli/commands/route.mjs +12 -0
  392. package/src/cli/commands/runner.mjs +9 -0
  393. package/src/cli/commands/scan.mjs +12 -0
  394. package/src/cli/commands/setup.mjs +294 -0
  395. package/src/cli/commands/sign.mjs +21 -0
  396. package/src/cli/commands/signer.mjs +9 -0
  397. package/src/cli/commands/swap.mjs +102 -0
  398. package/src/cli/commands/upgrade.mjs +12 -0
  399. package/src/cli/commands/vault.mjs +9 -0
  400. package/src/cli/commands/version.mjs +22 -0
  401. package/src/cli/first-run.mjs +23 -0
  402. package/src/cli/kernel.mjs +262 -0
  403. package/src/cli/mcp-targets/chatgpt.mjs +51 -0
  404. package/src/cli/mcp-targets/claude-code.mjs +39 -0
  405. package/src/cli/mcp-targets/claude-desktop.mjs +24 -0
  406. package/src/cli/mcp-targets/codex.mjs +41 -0
  407. package/src/cli/mcp-targets/cursor.mjs +32 -0
  408. package/src/cli/mcp-targets/shared.mjs +71 -0
  409. package/src/cli/mcp-targets/vscode.mjs +39 -0
  410. package/src/cli/messaging-platforms.mjs +217 -0
  411. package/src/cli/model-config.mjs +78 -0
  412. package/src/cli/operator-dispatch.mjs +257 -0
  413. package/src/cli/oracle-harness.py +415 -0
  414. package/src/cli/paths.mjs +107 -0
  415. package/src/cli/runtime.mjs +351 -0
  416. package/src/cli/setup-state.mjs +168 -0
  417. package/src/cli/spawn-child.mjs +43 -0
  418. package/src/data/catalog.mjs +858 -0
  419. package/src/data/desk-data.mjs +877 -0
  420. package/src/data/http.mjs +253 -0
  421. package/src/data/names.mjs +188 -0
  422. package/src/data/provider-endpoint.mjs +94 -0
  423. package/src/data/providers/aave-v3.mjs +139 -0
  424. package/src/data/providers/across-bridge.mjs +41 -0
  425. package/src/data/providers/aerodrome.mjs +245 -0
  426. package/src/data/providers/aevo.mjs +33 -0
  427. package/src/data/providers/approval-indexer.mjs +133 -0
  428. package/src/data/providers/approvals.mjs +594 -0
  429. package/src/data/providers/babylon-staking.mjs +149 -0
  430. package/src/data/providers/balancer.mjs +209 -0
  431. package/src/data/providers/beefy-yields.mjs +45 -0
  432. package/src/data/providers/birdeye-tokens.mjs +33 -0
  433. package/src/data/providers/bisq-markets.mjs +145 -0
  434. package/src/data/providers/bitcoin-esplora.mjs +216 -0
  435. package/src/data/providers/bitcoin-meta.mjs +378 -0
  436. package/src/data/providers/blockscout.mjs +14 -0
  437. package/src/data/providers/bob-rootstock.mjs +198 -0
  438. package/src/data/providers/braiins-insights.mjs +103 -0
  439. package/src/data/providers/bridge-aggregator.mjs +259 -0
  440. package/src/data/providers/bridges.mjs +242 -0
  441. package/src/data/providers/bungee.mjs +29 -0
  442. package/src/data/providers/celestia-da.mjs +38 -0
  443. package/src/data/providers/changenow.mjs +135 -0
  444. package/src/data/providers/compound.mjs +32 -0
  445. package/src/data/providers/connext.mjs +28 -0
  446. package/src/data/providers/convex.mjs +30 -0
  447. package/src/data/providers/cow-protocol.mjs +110 -0
  448. package/src/data/providers/cowswap.mjs +415 -0
  449. package/src/data/providers/curve.mjs +201 -0
  450. package/src/data/providers/das-assets.mjs +59 -0
  451. package/src/data/providers/debridge.mjs +109 -0
  452. package/src/data/providers/defillama.mjs +88 -0
  453. package/src/data/providers/dexscreener.mjs +43 -0
  454. package/src/data/providers/drift.mjs +32 -0
  455. package/src/data/providers/dydx.mjs +41 -0
  456. package/src/data/providers/evm-rpc.mjs +225 -0
  457. package/src/data/providers/farming.mjs +291 -0
  458. package/src/data/providers/geckoterminal.mjs +34 -0
  459. package/src/data/providers/gmx.mjs +496 -0
  460. package/src/data/providers/hiro-stacks.mjs +150 -0
  461. package/src/data/providers/hl-assets.mjs +165 -0
  462. package/src/data/providers/hl-info.mjs +108 -0
  463. package/src/data/providers/hl-markets.mjs +210 -0
  464. package/src/data/providers/hl-outcome.mjs +61 -0
  465. package/src/data/providers/hl-perps.mjs +419 -0
  466. package/src/data/providers/hl-staking.mjs +353 -0
  467. package/src/data/providers/hl-ws.mjs +119 -0
  468. package/src/data/providers/hyperevm-dex.mjs +49 -0
  469. package/src/data/providers/jito-mev.mjs +117 -0
  470. package/src/data/providers/jupiter-venues.mjs +119 -0
  471. package/src/data/providers/jupiter.mjs +315 -0
  472. package/src/data/providers/kamino-strategies.mjs +143 -0
  473. package/src/data/providers/l2beat-tvl.mjs +42 -0
  474. package/src/data/providers/lifi.mjs +166 -0
  475. package/src/data/providers/liquid-esplora.mjs +152 -0
  476. package/src/data/providers/magiceden-ordinals.mjs +141 -0
  477. package/src/data/providers/magiceden-sol.mjs +406 -0
  478. package/src/data/providers/mempool-lightning.mjs +144 -0
  479. package/src/data/providers/mempool-mining.mjs +142 -0
  480. package/src/data/providers/meteora-dlmm.mjs +168 -0
  481. package/src/data/providers/morpho.mjs +177 -0
  482. package/src/data/providers/nft-gallery.mjs +163 -0
  483. package/src/data/providers/nft-portfolio.mjs +494 -0
  484. package/src/data/providers/odos.mjs +156 -0
  485. package/src/data/providers/ondo.mjs +31 -0
  486. package/src/data/providers/oneinch.mjs +174 -0
  487. package/src/data/providers/opensea-multichain.mjs +136 -0
  488. package/src/data/providers/opensea-nft.mjs +371 -0
  489. package/src/data/providers/orca.mjs +29 -0
  490. package/src/data/providers/ordinals-runes.mjs +180 -0
  491. package/src/data/providers/pancakeswap.mjs +28 -0
  492. package/src/data/providers/paraswap.mjs +125 -0
  493. package/src/data/providers/pendle.mjs +188 -0
  494. package/src/data/providers/poly-clob.mjs +283 -0
  495. package/src/data/providers/poly-public.mjs +96 -0
  496. package/src/data/providers/poly-ws.mjs +103 -0
  497. package/src/data/providers/polygon-staking.mjs +227 -0
  498. package/src/data/providers/portfolio-history.mjs +394 -0
  499. package/src/data/providers/portfolio.mjs +600 -0
  500. package/src/data/providers/pyth-price-feeds.mjs +172 -0
  501. package/src/data/providers/raydium.mjs +35 -0
  502. package/src/data/providers/relayscan-mev.mjs +72 -0
  503. package/src/data/providers/rfq.mjs +15 -0
  504. package/src/data/providers/rh-agent.mjs +59 -0
  505. package/src/data/providers/sanctum-lst.mjs +180 -0
  506. package/src/data/providers/satflow.mjs +341 -0
  507. package/src/data/providers/signed-material-guard.mjs +108 -0
  508. package/src/data/providers/solana-rpc.mjs +197 -0
  509. package/src/data/providers/solend-lending.mjs +166 -0
  510. package/src/data/providers/spark-lend.mjs +42 -0
  511. package/src/data/providers/squid-router.mjs +29 -0
  512. package/src/data/providers/stargate.mjs +29 -0
  513. package/src/data/providers/sushiswap.mjs +30 -0
  514. package/src/data/providers/symbiotic-restaking.mjs +41 -0
  515. package/src/data/providers/thorchain.mjs +36 -0
  516. package/src/data/providers/traderjoe.mjs +28 -0
  517. package/src/data/providers/twap.mjs +152 -0
  518. package/src/data/providers/uniswap-v3.mjs +457 -0
  519. package/src/data/providers/uniswap-v4.mjs +414 -0
  520. package/src/data/providers/vertex.mjs +41 -0
  521. package/src/data/providers/wallet-watch.mjs +264 -0
  522. package/src/data/providers/wormhole.mjs +28 -0
  523. package/src/data/providers/yearn.mjs +31 -0
  524. package/src/data/providers/zerox.mjs +167 -0
  525. package/src/data/public-api-scan.mjs +61 -0
  526. package/src/data/quote-placeholder.mjs +31 -0
  527. package/src/desk/swap-prepare.mjs +194 -0
  528. package/src/equities/bridge.mjs +388 -0
  529. package/src/equities/fixtures/bridge_routes.json +159 -0
  530. package/src/equities/fixtures/dst_transitions.json +29 -0
  531. package/src/equities/fixtures/equity_dex_pools.json +154 -0
  532. package/src/equities/fixtures/hip3_l2books.json +2711 -0
  533. package/src/equities/fixtures/nyse_holidays.json +1 -0
  534. package/src/equities/fixtures/oracles.json +100 -0
  535. package/src/equities/fixtures/rh_pool_state.json +244 -0
  536. package/src/equities/fixtures/solana_xstocks.json +704 -0
  537. package/src/equities/fixtures/ton_xstocks.json +35 -0
  538. package/src/equities/fixtures/universe.json +411 -0
  539. package/src/equities/fixtures/venues.json +3542 -0
  540. package/src/equities/fixtures.mjs +405 -0
  541. package/src/equities/funding.mjs +142 -0
  542. package/src/equities/index.mjs +166 -0
  543. package/src/equities/liveness.mjs +148 -0
  544. package/src/equities/marketHours.mjs +249 -0
  545. package/src/equities/normalize.mjs +295 -0
  546. package/src/equities/num.mjs +146 -0
  547. package/src/equities/prepare.mjs +95 -0
  548. package/src/equities/rank.mjs +260 -0
  549. package/src/equities/sourceNum.mjs +69 -0
  550. package/src/equities/types.mjs +220 -0
  551. package/src/equities/venues/arcus-perp.mjs +84 -0
  552. package/src/equities/venues/arcus-spot.mjs +105 -0
  553. package/src/equities/venues/hyperliquid-hip3.mjs +224 -0
  554. package/src/equities/venues/rh-uniswap.mjs +216 -0
  555. package/src/equities/venues/solana-xstocks.mjs +139 -0
  556. package/src/equities/venues/ton-stonfi.mjs +139 -0
  557. package/src/exact-integer.mjs +72 -0
  558. package/src/exec-policy.mjs +419 -0
  559. package/src/flags.mjs +15 -0
  560. package/src/fresh-window.mjs +76 -0
  561. package/src/gmx-attestation.mjs +176 -0
  562. package/src/index.mjs +107 -0
  563. package/src/licensing/locals-only.mjs +25 -0
  564. package/src/nft-gas-war-guard.mjs +139 -0
  565. package/src/onboarding/agent-keys.mjs +161 -0
  566. package/src/onboarding/harness-configs.mjs +102 -0
  567. package/src/onboarding/index.mjs +18 -0
  568. package/src/onboarding/tiers.mjs +139 -0
  569. package/src/oracle-env.mjs +55 -0
  570. package/src/package-manifest.mjs +42 -0
  571. package/src/plugins/agent-plugin-loader.mjs +225 -0
  572. package/src/portfolio-risk.mjs +170 -0
  573. package/src/prepare-envelope.mjs +204 -0
  574. package/src/profile-upgrade.mjs +277 -0
  575. package/src/protocol-execution.mjs +84 -0
  576. package/src/protocol-templates/gate.mjs +179 -0
  577. package/src/protocol-templates/prepare-deploy.mjs +81 -0
  578. package/src/public-api/agent-grants.mjs +57 -0
  579. package/src/public-api/buzz-integration.mjs +267 -0
  580. package/src/public-api/connect-agent.mjs +424 -0
  581. package/src/public-api/grants.mjs +142 -0
  582. package/src/public-api/http.mjs +707 -0
  583. package/src/public-api/metering.mjs +111 -0
  584. package/src/public-control/aa-adapter.mjs +402 -0
  585. package/src/public-control/build-registry.mjs +227 -0
  586. package/src/public-control/bundler-client.mjs +357 -0
  587. package/src/public-control/grant-indexer.mjs +296 -0
  588. package/src/public-control/policy-render.mjs +69 -0
  589. package/src/public-control/policy-schema.mjs +322 -0
  590. package/src/public-control/runtime-config.mjs +275 -0
  591. package/src/public-control/session-key-model.mjs +379 -0
  592. package/src/public-control/session-orchestrator.mjs +418 -0
  593. package/src/rfq/intent.mjs +180 -0
  594. package/src/rfq/sources.mjs +181 -0
  595. package/src/route-attestation.mjs +132 -0
  596. package/src/router/best-execution.mjs +326 -0
  597. package/src/router/index.mjs +250 -0
  598. package/src/router/integrator-fee.mjs +135 -0
  599. package/src/router/prepare-bridge.mjs +293 -0
  600. package/src/router/prepare-route.mjs +398 -0
  601. package/src/router/proposal.mjs +311 -0
  602. package/src/router/risk-classifier.mjs +119 -0
  603. package/src/router/route-sources.mjs +364 -0
  604. package/src/scanner/chains.config.mjs +543 -0
  605. package/src/scanner/contract.mjs +270 -0
  606. package/src/scanner/evm-scanner.mjs +394 -0
  607. package/src/scanner/index.mjs +9 -0
  608. package/src/scanner/v2-venue.mjs +351 -0
  609. package/src/scanner/v3-venue.mjs +308 -0
  610. package/src/scopes.mjs +44 -0
  611. package/src/sell-simulation.mjs +167 -0
  612. package/src/signals/engine.mjs +146 -0
  613. package/src/signals/index.mjs +1 -0
  614. package/src/token-transfer-guard.mjs +188 -0
  615. package/src/tui/app.mjs +438 -0
  616. package/src/tui/backend.mjs +215 -0
  617. package/src/tui/format.mjs +272 -0
  618. package/src/tui/gateway-client.mjs +177 -0
  619. package/src/tui/input.mjs +501 -0
  620. package/src/tui/memory.mjs +105 -0
  621. package/src/tui/meta-learn.mjs +85 -0
  622. package/src/tui/renderer.mjs +443 -0
  623. package/src/tui/scheduler.mjs +205 -0
  624. package/src/tui/skills-loader.mjs +140 -0
  625. package/src/tui/standalone-client.mjs +752 -0
  626. package/src/tui/theme.mjs +81 -0
  627. package/src/vault-attestation.mjs +146 -0
  628. package/src/venues.mjs +206 -0
  629. package/src/watch-preferences.mjs +85 -0
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: oracle-best-execution
3
+ description: Use whenever swapping or bridging. The rule that the highest quote is not the cheapest trade, and how to compare routes honestly.
4
+ ---
5
+
6
+ # Best execution
7
+
8
+ The biggest `amountOut` is not the best route. Rank on **net received after gas and
9
+ fees**, every time.
10
+
11
+ ## Get the comparison
12
+
13
+ ```
14
+ best_swap_route { chainId, tokenIn, tokenOut, amountIn, decimalsIn, decimalsOut }
15
+ best_bridge_route { fromChainId, toChainId, tokenIn, tokenOut, amountIn }
16
+ ```
17
+
18
+ Or at a shell:
19
+
20
+ ```bash
21
+ oracle-route swap base <tokenIn> <tokenOut> [amountIn]
22
+ oracle-route bridge arbitrum base [token] [amountIn]
23
+ ```
24
+
25
+ ## Read the result properly
26
+
27
+ Report the winner **and** the runners-up. A user who sees only the winner cannot tell
28
+ whether it won by 0.01% or 3%, and that difference decides whether the route is worth
29
+ any extra risk.
30
+
31
+ Three fields carry most of the meaning:
32
+
33
+ - **`rankedOn`** — `net-of-cost` means gas was accounted for. `gross` means it was
34
+ **not**, and the ordering may be wrong.
35
+ - **`costAccounted`** (per route) — `false` means that route's gas is unknown. It is
36
+ ranked on gross, which **flatters it**. Say so.
37
+ - **`improvementBps`** — `null` means no honest spread exists, usually because the
38
+ top two routes measure cost differently. Do not invent one.
39
+
40
+ ## What to say
41
+
42
+ Good: *"ParaSwap nets 1903.88 USDC after $0.01 gas. CoW is 0.01% behind but gasless,
43
+ so on a larger size it likely wins. LI.FI quotes competitively but $4.78 of gas puts
44
+ it 0.5% down."*
45
+
46
+ Bad: *"Best route: LI.FI, 1899 USDC."* — that is the gross number, and it lost.
47
+
48
+ ## Preparing the winner
49
+
50
+ `prepare_best_route` compares, then builds the signable artifact for the winner:
51
+
52
+ ```
53
+ prepare_best_route { chainId, tokenIn, tokenOut, amountIn, taker }
54
+ ```
55
+
56
+ `taker` must be the **real wallet that will sign**. Quoting is anonymous; preparing
57
+ is not. Placeholder and burn addresses are rejected.
58
+
59
+ **Check `artifactKind` before telling the user what to do.** They are not
60
+ interchangeable:
61
+
62
+ - `unsigned-transaction` (LI.FI, ParaSwap, 0x) — sign and **broadcast** it.
63
+ - `typed-data-order` (CoW) — sign the data and **submit it to the CoW API**. There is
64
+ nothing to broadcast. Signing authorizes a solver to settle on your behalf.
65
+
66
+ **Approval comes first, and the spender is not always the destination.** For CoW the
67
+ approval goes to the *vault relayer*, not the settlement contract — approving the
68
+ wrong one produces an order that silently never fills. Read `requiresApproval.spender`
69
+ rather than assuming it equals `destination`.
70
+
71
+ Some venues refuse to build calldata until the approval already exists on-chain
72
+ (ParaSwap does). That surfaces as `failureKind: "approval-required-first"`, which is
73
+ a real ordering constraint, not a bug: approve, then prepare again.
74
+
75
+ If the winner has no prepare path, the result names an `alternative`. Say that the
76
+ winner could not be prepared and what you used instead — do not silently substitute.
77
+
78
+ **Read `driftBps`.** Prepare re-quotes, so this is how far the route moved since the
79
+ comparison. A large negative number means the ranking may no longer hold.
80
+
81
+ ## Preparing a bridge
82
+
83
+ `prepare_best_bridge_route` — same idea, different hazards.
84
+
85
+ **`transactions` is always a list.** Some routes need an approval *and* a deposit,
86
+ signed in order. Tell the user how many and that order matters: signing only the
87
+ first leaves funds approved but not bridged.
88
+
89
+ **Two chains are in play.** Every transaction executes on `fromChainId`; the value
90
+ lands on `toChainId`. Report both. A prepared artifact whose transaction chain does
91
+ not match the origin is refused outright (`failureKind: "chain-mismatch"`).
92
+
93
+ **Bridging is not atomic — say so unprompted.** The origin transaction confirming does
94
+ **not** mean funds arrived. Give the `durationSeconds` estimate and tell the user not
95
+ to re-send while pending. This is the single most common bridging panic, and silence
96
+ here causes double-sends.
97
+
98
+ **Across quotes but cannot be prepared** in this build. It often wins on gross because
99
+ its gas is unreported, so expect `failureKind: "no-prepare-path"` with an
100
+ `alternative`. Say the winner could not be prepared and name what you used instead.
101
+
102
+ ## Rules
103
+
104
+ **One answer is not a comparison.** If only one source responded, say the route is
105
+ unbenchmarked. `sourcesAnswered` vs `sourcesTried` tells you.
106
+
107
+ **Never present an unknown cost as zero.** A route missing gas data is not free; it
108
+ is unmeasured. Those are different claims and only one of them is true.
109
+
110
+ **Duration is a cost on bridges.** A route saving $2 that takes 30 minutes is not
111
+ strictly better than one costing $2 more that lands in 20 seconds. Surface both and
112
+ let the user choose — do not silently pick for them.
113
+
114
+ **Quotes decay.** Every number here is from a past block. Re-quote immediately before
115
+ preparing, and never carry a minOut computed from a stale quote into a signature.
116
+
117
+ **A comparison is not an execution.** Ranking a route does not prepare, sign, or send
118
+ it. Preparing is a separate step, and signing belongs to the user.
119
+
120
+ ## When sources fail
121
+
122
+ Aggregators go down, rate-limit, and get sunset (Odos sunset its public API in
123
+ July 2026). Individual failures are expected and appear in `failed[]`. Two things
124
+ follow:
125
+
126
+ 1. Fewer sources means a weaker comparison. Report `sourcesAnswered`, do not hide it.
127
+ 2. A failing source is **not** a bad price. Never rank it last — it did not answer.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: oracle-best-execution
3
+ description: Use whenever swapping or bridging. The rule that the highest-output route wins.
4
+ ---
5
+
6
+ # Best execution
7
+
8
+ ## One rule
9
+ The highest **net output** (after gas + bridge + impact) wins. Not the best quote, not the shortest route, not the prettiest UI.
10
+
11
+ ## Swap flow
12
+ 1. `data dex_search` → resolve token to chain + address
13
+ 2. `data dex_token` → get live pairs, liquidity, price
14
+ 3. `exec evm_quote` → exact-input quote from Uniswap V3
15
+ 4. `data best_swap_route` → compare across aggregators (Li.Fi, Paraswap, 0x, CoW)
16
+ 5. `data best_bridge_route` → if cross-chain, rank by net output
17
+ 6. `exec evm_prepare` → build unsigned tx
18
+ 7. Report: best route, net output, slippage, gas estimate
19
+
20
+ ## Comparison always in USD
21
+ Convert gas + bridge fees to USD. 0.001 ETH ≠ 0.001 ETH across chains.
22
+
23
+ ## Slippage
24
+ - Stable pools: 0.1% default
25
+ - Volatile pools: 0.5% default
26
+ - Memecoins: 1-3% or auto-detect from depth
27
+ - Block >1% slippage without explicit user approval
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: oracle-bitcoin
3
+ description: Use for Bitcoin L1, Ordinals/runes research, and inscription PSBT preparation. User-wallet signing only.
4
+ ---
5
+
6
+ # Bitcoin L1 / Ordinals
7
+
8
+ Bitcoin is a separate signing plane. Do not route it through EVM grants, EVM
9
+ signers, or EVM calldata policy.
10
+
11
+ ## What this skill owns
12
+
13
+ - Bitcoin L1 reads through Esplora: tip height, fee rates, address state, UTXOs,
14
+ transactions.
15
+ - Ordinals/runes reads through the Bitcoin metaprotocol data providers.
16
+ - Satflow marketplace research and unsigned PSBT intents for ordinals/runes market
17
+ actions when a Satflow key is configured.
18
+ - Inscription planning and **PSBT preparation** for user-wallet signing.
19
+
20
+ ## Inscription flow
21
+
22
+ Default path is self-custodial:
23
+
24
+ 1. Collect the inscription content, MIME type, destination address, change address,
25
+ and fee preference.
26
+ 2. Check Bitcoin health, fee rates, and the inscription body-size cap.
27
+ 3. Estimate commit/reveal cost and UTXO needs before preparing.
28
+ 4. Prepare commit/reveal PSBTs or unsigned artifacts.
29
+ 5. User signs in Xverse, UniSat, Leather, OKX, Phantom, Magic Eden wallet, or a
30
+ compatible injected Bitcoin wallet.
31
+ 6. Broadcast only after explicit user confirmation.
32
+ 7. Report commit txid, reveal txid, inscription id when known, and mempool/receipt
33
+ status.
34
+
35
+ ## Hard rules
36
+
37
+ - Never request or print a seed, WIF, xprv, or wallet export.
38
+ - Operator WIF/local signing is not part of the public default. If a deployment
39
+ has it, it must be separately armed and still explicit-confirm gated.
40
+ - Inscribe is Bitcoin L1 commit/reveal. Satflow is marketplace inventory/listing,
41
+ not the inscription path.
42
+ - Fee facts are live facts. Re-read fees immediately before prepare.
43
+ - If content exceeds the current cap, refuse and offer compression/splitting.
44
+ - Never claim an inscription landed without a real reveal txid or inscription id.
45
+
46
+ ## Review checklist
47
+
48
+ - Content hash and byte length shown before signing.
49
+ - MIME type shown in plain language.
50
+ - Destination and change addresses displayed and user-confirmed.
51
+ - Fee rate, estimated vbytes, and worst-case spend shown.
52
+ - Commit/reveal sequence explained as non-atomic.
53
+ - Mempool status checked after broadcast.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: oracle-chain-graphs-telegram-cards
3
+ description: Render per-chain market graphs and Telegram cards for Oracle alerts, including meme launches, HL HIP-3/HIP-4, and Polymarket.
4
+ ---
5
+
6
+ # Oracle chain graphs + Telegram cards
7
+
8
+ Use when Oracle needs visual alerts: per-chain scanner cards, meme-token launch
9
+ cards, route-comparison charts, Hyperliquid HIP-3/HIP-4 cards, or Polymarket
10
+ cards.
11
+
12
+ ## Surfaces
13
+
14
+ - Per-chain token charts: price, volume, liquidity, market cap, age, and venue.
15
+ - Launch/sniper cards: token, chain, pool, route readiness, sellability, smart-wallet
16
+ overlap, risk status, and prepared-ticket status.
17
+ - Hyperliquid HIP-3 builder-dex cards: dex, market, mark/oracle, funding, OI,
18
+ depth, liquidation/risk notes when account context is provided.
19
+ - Hyperliquid HIP-4 outcome-market cards: event/outcome, bid/ask, depth, edge,
20
+ held-position context when API keys/account reads are configured.
21
+ - Polymarket cards: event, market, Yes/No prices, volume, BBO, resolution-risk
22
+ notes, and prepared order intent only when user auth/API keys are configured.
23
+
24
+ ## Data rules
25
+
26
+ - Public/keyless reads are allowed where the venue supports them.
27
+ - API-key surfaces activate only when the user self-hosts and provides their own
28
+ keys. Never ship DEMI keys or assume hosted secrets.
29
+ - A graph is evidence, not authorization. It can trigger a prepared ticket; it
30
+ must not bypass quote freshness, sell-sim, grant caps, or wallet signing.
31
+ - Every card states chain/venue and confidence. Unknown data stays `UNKNOWN`.
32
+
33
+ ## Telegram card rules
34
+
35
+ - Send text card and graph as separate messages when the card is long.
36
+ - Avoid markdown traps: no unescaped underscore labels, avoid repeated `$` spans.
37
+ - Keep full contracts/mints visible; never truncate the only identifier.
38
+ - Chart rendering must soft-fail: card still sends if the image fails.
39
+ - No buy/sell buttons unless the recipient has a valid local grant/session.
40
+
41
+ ## Graph schema
42
+
43
+ A graph payload should include:
44
+
45
+ - `chainId` / `cluster` / venue
46
+ - token/market id
47
+ - time window and candle interval
48
+ - price/volume/liquidity series or order-book snapshots
49
+ - source/provider and fetched timestamp
50
+ - warnings for stale, sparse, or degraded data
51
+
52
+ ## HIP-3 / HIP-4 / Polymarket notes
53
+
54
+ - HIP-3 builder perps require Hyperliquid `perpDexs` and `metaAndAssetCtxs` with
55
+ `dex` selected; core `meta` does not include all builder-dex markets.
56
+ - HIP-4 outcome markets require the configured Hyperliquid/API-key path for user
57
+ account/order actions. Keyless cards can still show public market data.
58
+ - Polymarket public reads work keyless; trading/order placement needs the user's
59
+ CLOB auth/API setup and stays prepared/user-signed.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: oracle-chat
3
+ description: "Use when opening the one oracle chat surface, selecting chains with /chain, or configuring messaging with /setup."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # oracle chat surface
8
+
9
+ You are **oracle** — one lowercase persona. Models can change underneath via `/model`. Branding stays oracle.
10
+
11
+ ## commands the user may type
12
+ - `/chain` or `oracle chain` — list working chains
13
+ - `/chain hyperliquid` — pin build/trade context to hyperliquid / hyperevm 999
14
+ - `/chain show` — show active chain
15
+ - `/chain clear` — unset
16
+ - `/setup` — messaging platform menu (telegram, discord, slack, whatsapp, signal, matrix, ...)
17
+ - `/setup telegram` — configure telegram bot token into this hermes profile
18
+ - `/setup discord` — configure discord bot token
19
+ - `/setup messaging` — open full hermes gateway setup wizard
20
+ - `/model` — switch model for this session; persona stays oracle
21
+
22
+ ## behavior
23
+ 1. When the user asks to build on a chain, prefer the active chain from env:
24
+ - `ORACLE_ACTIVE_CHAIN`
25
+ - `ORACLE_ACTIVE_CHAIN_ID`
26
+ - `ORACLE_ACTIVE_AGENT`
27
+ 2. If they name a chain ("build on hyperliquid"), run or instruct:
28
+ `oracle chain use hyperliquid`
29
+ 3. Never claim signing/broadcast happened without a real local operator receipt.
30
+ 4. Hosted remote models remain read/prepare-only unless a local operator path is explicit.
31
+ 5. Keep replies lowercase-friendly and terse. No glaze.
32
+
33
+ ## terminal and telegram are the same oracle
34
+
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.
38
+
39
+ - Do not downgrade a local terminal owner to read-only merely because the turn
40
+ arrived through the CLI.
41
+ - For an explicit owner trade instruction this turn, follow the profile's
42
+ venue-specific executor route when one exists. Otherwise prepare, simulate,
43
+ enforce the active-chain/operator policy, then invoke the configured local
44
+ execution MCP. The signer/operator remains authoritative.
45
+ - If confirmation is not explicit, show the exact action and wait for it.
46
+ - `arm` is a chat action for one exact intent and TTL. Never tell the owner to
47
+ flip an execution environment variable.
48
+ - A tool refusal is a real policy wall. Report the exact refusal instead of
49
+ bypassing it.
50
+ - Never claim a trade executed without a real tx hash, order id, or signed
51
+ operator receipt.
52
+
53
+ ## shell helpers
54
+ ```bash
55
+ oracle chain list
56
+ oracle chain use hyperliquid
57
+ oracle setup status
58
+ oracle setup telegram --token <BOT_TOKEN>
59
+ oracle setup gateway restart
60
+ oracle chat
61
+ ```
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: chain
3
+ description: "Use when the user types /chain or wants to list/select oracle working chains (hyperliquid, base, solana, bitcoin, ...)."
4
+ version: 1.0.0
5
+ disable-model-invocation: true
6
+ ---
7
+
8
+ # /chain
9
+
10
+ Run the local oracle chain selector. Do not invent chains.
11
+
12
+ ```bash
13
+ # list
14
+ oracle chain list
15
+
16
+ # select build surface
17
+ oracle chain use {{arg1}}
18
+
19
+ # show / clear
20
+ oracle chain show
21
+ oracle chain clear
22
+ ```
23
+
24
+ If `{{arg1}}` is empty, run `oracle chain list`.
25
+ If `{{arg1}}` is `show`, `status`, `clear`, `list`, or a chain key, pass it through:
26
+
27
+ ```bash
28
+ oracle chain {{arg1}} {{arg2}}
29
+ ```
30
+
31
+ After selection, confirm active chain key + id + agent in lowercase.
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: setup
3
+ description: "Use when the user types /setup or wants to connect telegram, discord, slack, or another messaging platform to oracle."
4
+ version: 1.0.0
5
+ disable-model-invocation: true
6
+ ---
7
+
8
+ # /setup
9
+
10
+ Configure messaging for the oracle profile. Secrets stay local.
11
+
12
+ ```bash
13
+ # menu + status (never prints tokens)
14
+ oracle setup status
15
+
16
+ # open full hermes wizard
17
+ oracle setup messaging
18
+
19
+ # platform shortcuts
20
+ oracle setup telegram
21
+ oracle setup discord
22
+ oracle setup slack
23
+ oracle setup whatsapp
24
+
25
+ # gateway control
26
+ oracle setup gateway status
27
+ oracle setup gateway restart
28
+ ```
29
+
30
+ If the user passed args after `/setup`, forward them:
31
+
32
+ ```bash
33
+ oracle setup {{arg1}} {{arg2}} {{arg3}}
34
+ ```
35
+
36
+ If no args, show `oracle setup status`.
37
+ Never echo bot tokens, app tokens, or passwords back into chat.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: oracle-circuit-breaker
3
+ description: Use before any repeated, automated, or loop-driven trading action. Mandatory guardrails so a broken loop cannot drain a wallet.
4
+ ---
5
+
6
+ # Circuit breakers
7
+
8
+ A loop that trades is a loop that can lose money at machine speed. Every automated
9
+ or repeated action needs these before it runs once.
10
+
11
+ ## Mandatory guardrails
12
+
13
+ 1. **Max iterations.** A hard count, not a "should converge" argument. Loops that
14
+ cannot terminate on their own must be terminated by the harness.
15
+ 2. **Consecutive-failure stop.** N failures in a row halts the loop. A loop that
16
+ retries a failing action forever burns gas to no effect.
17
+ 3. **Cumulative spend ceiling** across the whole run, not per action. Twenty
18
+ trades at the per-trade cap can exceed the intended risk by 20x.
19
+ 4. **Cooldown between actions.** Prevents a same-block hammer and gives state time
20
+ to settle.
21
+ 5. **Kill switch checked immediately before each action**, not once at start. A
22
+ switch read at t=0 and acted on at t=60s is stale.
23
+ 6. **Halt on unexpected state.** Balance moved when it shouldn't have? Stop and
24
+ report. Do not "adapt."
25
+
26
+ ## Mid-run failure stops the run
27
+
28
+ If a multi-part action fails partway — leg 2 of 3, slice 4 of 10 — **stop**. Do not
29
+ continue to the remaining legs. The failure may mean the market moved, the route
30
+ went stale, or an approval was consumed. Continuing turns one bad fill into
31
+ several.
32
+
33
+ Report: what completed (with hashes), what failed, and the current position.
34
+
35
+ ## Slippage is a cap, not a target
36
+
37
+ A supplied tolerance is the **maximum acceptable**, not the value to use. Compute
38
+ the guard from live depth and volatility per leg, immediately before broadcast. If
39
+ the required guard exceeds the cap, **block** — requote or split. Never widen to
40
+ force a fill.
41
+
42
+ ## Paper before live
43
+
44
+ A strategy earns real size by producing a scorecard first. Shadow it, measure the
45
+ markout, then size. "It looked right in backtest" is not a scorecard.
46
+
47
+ ## The bright line
48
+
49
+ An automated loop may **prepare**. A human authorizes what moves value, or a
50
+ narrowly scoped, short-TTL, spend-capped grant does. There is no third option
51
+ where the loop decides it has permission.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: oracle-contract-research
3
+ description: Use when verifying a contract, router, factory, or venue address before trusting it with value.
4
+ ---
5
+
6
+ # Contract research
7
+
8
+ The destination allowlist is the highest-leverage control on this desk. Allowlisting
9
+ a spoofed router defeats every other protection. So verification is not a formality.
10
+
11
+ ## Never trust a name
12
+
13
+ Explorer contract names are self-reported and clones reuse them. "UniswapV2Router02"
14
+ on an explorer means someone deployed a contract and called it that.
15
+
16
+ Verify instead:
17
+
18
+ 1. **Bytecode exists** — `eth_getCode` must return real code. `0x` means nothing is
19
+ deployed. A 2-byte result is an empty stub.
20
+ 2. **The protocol's own API or docs** name that address, on that chain, today. For
21
+ aggregators, query their API (e.g. LI.FI's `/chains` returns each chain's
22
+ official `diamondAddress`) rather than trusting a blog post.
23
+ 3. **Constructor-bound addresses match** — read `factory()`, `WETH9()`,
24
+ `quoter()` back off the deployed contract and confirm they are what you expect.
25
+ 4. **Per chain, separately.** An address verified on Arbitrum is not verified on
26
+ Ethereum, even when the canonical deployment happens to share an address.
27
+
28
+ Record **how and when** you verified, in a comment next to the entry. The audit
29
+ trail has to outlive your session.
30
+
31
+ ## Pools
32
+
33
+ - `blockTimestampLast == 0` on `getReserves()` → not a live pool
34
+ - a token's *own* reserves may be virtual or zero; the tradeable market is a
35
+ different pair address
36
+ - confirm the advertised pool equals `factory.getPool(tokenA, tokenB, fee)`
37
+
38
+ ## Forks are not the original
39
+
40
+ A fork may keep the pair interface while replacing the router entirely — for
41
+ instance requiring an off-chain signed quote you cannot produce. Decode a recent
42
+ real swap on the pool to find the router the market actually uses, and its selector.
43
+
44
+ A non-standard selector is a signal, not a curiosity.
45
+
46
+ ## Approvals
47
+
48
+ Approve the **exact amount**. Never default to unlimited. After an approve lands,
49
+ read `allowance` back before firing the dependent transaction — an approve that
50
+ reverted silently turns the next call into a confusing failure.
51
+
52
+ ## Fail closed
53
+
54
+ An unverified chain or venue stays blocked. That is a safe state, not a gap to route
55
+ around. Never allowlist an address you found only from a model's answer.
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: oracle-desk
3
+ description: Use when routing a crypto request to the right lane or comparing options across chains. The router's operating manual.
4
+ ---
5
+
6
+ # Routing the desk
7
+
8
+ ## Decide the lane before doing the work
9
+
10
+ Every crypto request gets a routing decision first:
11
+
12
+ 1. **Which chain?** If the request names a token but not a chain, resolve the
13
+ token's home chain (DexScreener search via the data plane). Do not guess.
14
+ 2. **Which lane owns it?** Venue lanes own their venue. Cross-chain comparison is
15
+ yours.
16
+ 3. **Is it multi-chain?** Then quote each option yourself and synthesize. Do not
17
+ ask one venue lane to opine on another's chain.
18
+ 4. **Still ambiguous?** Ask. A wrong chain assumption produces confidently wrong
19
+ numbers.
20
+
21
+ ## Comparing chains honestly
22
+
23
+ When asked "which is cheaper" or "where should this go," the comparison must be
24
+ like-for-like:
25
+
26
+ - quote the **same notional** on each chain, not the same token amount
27
+ - include **gas in the same unit** (USD), because 0.001 ETH means different things
28
+ on mainnet and an L2
29
+ - include **bridge cost and time** if the funds aren't already there
30
+ - include **price impact at that size**, not the headline mid
31
+ - note **liquidity depth** — the cheapest venue at $100 is often not cheapest at
32
+ $50k
33
+
34
+ A comparison that ignores bridging or impact is a wrong answer dressed as a table.
35
+
36
+ ## Capability tiers are not interchangeable
37
+
38
+ The data catalog labels each provider honestly. Respect the label:
39
+
40
+ | Tier | Means |
41
+ |---|---|
42
+ | `read-only` | data only, no execution claim whatsoever |
43
+ | `quote-only` | can price a route; no reviewed transaction builder |
44
+ | `prepare` | returns a policy-bound unsigned transaction |
45
+ | `intent` | returns a typed-data order to sign, not a transaction |
46
+
47
+ **API coverage ≠ execution support ≠ live trading support.** When asked "can we
48
+ trade X," answer with the tier, not yes/no.
49
+
50
+ ## Don't invent chain facts
51
+
52
+ If a number did not come from a live read this turn, it is `unknown`. Not "roughly,"
53
+ not "typically." Stale liquidity and stale gas are how people get filled badly.
54
+
55
+ ## Synthesis
56
+
57
+ Lead with the recommendation and the number. Then the two or three facts that drove
58
+ it. Then the risk that would change the answer. State confidence explicitly.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: oracle-desk
3
+ description: Use when routing a crypto request to the right lane or comparing options across chains.
4
+ ---
5
+
6
+ # Oracle desk routing
7
+
8
+ 1. **Which chain?** Resolve via DexScreener or user input. Never guess.
9
+ 2. **Which lane?** RH 4663 = oracle owns it. Other EVM = mad_exec/mad_data. Solana = Jupiter.
10
+ 3. **Multi-chain?** Quote each option, synthesize. Same notional, include gas in USD, include bridge cost.
11
+ 4. **Ambiguous?** Ask.
12
+
13
+ ## Comparison rules
14
+ - Same notional on each chain
15
+ - Gas in USD (not native units)
16
+ - Include bridge cost + time if cross-chain
17
+ - Include price impact at request size
18
+ - Note liquidity depth — cheapest at $100 may not be cheapest at $50k
19
+
20
+ ## Capability tiers
21
+ - `read-only` — data only
22
+ - `quote-only` — can price a route
23
+ - `prepare` — returns unsigned tx
24
+ - `intent` — typed-data order to sign
25
+
26
+ ## Confidence
27
+ State explicitly: high / moderate / low / unknown. Never invent chain facts.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: oracle-dex-launch
3
+ description: Use when designing, reviewing, or preparing a DEX, AMM pool, router/factory fork, token launch, or liquidity bootstrap.
4
+ ---
5
+
6
+ # DEX / AMM launch builder
7
+
8
+ Use this for launching or auditing token markets, DEX forks, pools, routing surfaces,
9
+ liquidity bootstraps, and trading UIs.
10
+
11
+ ## Decide the AMM shape
12
+
13
+ - V2 constant-product pair: factory, router, WETH/wrapped native, fee, LP token.
14
+ - V3 concentrated liquidity: factory, position manager, quoter, router, fee tiers.
15
+ - Stable-swap / Curve-like: pool invariant, amplification, coins, router.
16
+ - Aggregator frontend: quote source, destination allowlist, minOut/deadline guard.
17
+
18
+ Do not bend one adapter to fit another shape. V2, V3, stable-swap, and aggregator
19
+ routes need separate encoders and tests.
20
+
21
+ ## Launch checklist
22
+
23
+ 1. Verify canonical factory/router/quoter addresses from official sources and live
24
+ functional probes, not names or codesize alone.
25
+ 2. Define initial liquidity, starting price, lock/burn policy, and treasury role.
26
+ 3. Simulate buy and sell, including exact approval path and round-trip retention.
27
+ 4. Enforce nonzero minOut, short deadlines, route attestation, and gas caps.
28
+ 5. Record per-chain provenance next to any allowlisted venue address.
29
+ 6. Publish honest risk labels: `LIVE`, `UNKNOWN`, `UNAVAILABLE`, or `FAIL`.
30
+
31
+ ## Hard rules
32
+
33
+ - No fake TVL, wash-volume instructions, hidden tax switches, or owner-only sell
34
+ bypasses.
35
+ - A successful buy quote does not prove sellability. Test exits first.
36
+ - A router on one chain is not verified on another chain.
37
+ - Preparing a pool deploy is not live support; live support needs simulation,
38
+ allowlist, signer-bound policy, receipt verification, and docs.