@hyperflow.fun/ghost 0.0.1

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 (351) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/index.js +220545 -0
  4. package/dist/package.json +4 -0
  5. package/dist/skills/builtin/briefing/SKILL.md +77 -0
  6. package/dist/skills/builtin/clawhub/SKILL.md +50 -0
  7. package/dist/skills/builtin/event-judge/SKILL.md +122 -0
  8. package/dist/skills/builtin/market-intel/SKILL.md +160 -0
  9. package/dist/skills/builtin/position-monitor/SKILL.md +84 -0
  10. package/dist/skills/builtin/pre-trade-advisory/SKILL.md +203 -0
  11. package/dist/skills/builtin/risk-manager/SKILL.md +124 -0
  12. package/dist/skills/builtin/skill-creator/SKILL.md +68 -0
  13. package/dist/skills/builtin/skill-creator/references/guide.md +158 -0
  14. package/dist/skills/builtin/skill-creator/scripts/init_skill.py +378 -0
  15. package/dist/skills/builtin/skill-creator/scripts/package_skill.py +154 -0
  16. package/dist/skills/builtin/skill-creator/scripts/quick_validate.py +213 -0
  17. package/dist/skills/builtin/skills-sh/SKILL.md +56 -0
  18. package/dist/skills/builtin/technical-analysis/SKILL.md +242 -0
  19. package/dist/skills/builtin/trade-executor/SKILL.md +179 -0
  20. package/dist/templates/SOUL.md +73 -0
  21. package/dist/web/dist/assets/Chart-DwirCj9o.js +1 -0
  22. package/dist/web/dist/assets/Config-Csnvaqpn.js +1 -0
  23. package/dist/web/dist/assets/Cost-BSD_2GYX.js +6 -0
  24. package/dist/web/dist/assets/Cron-BVKdKUFN.js +16 -0
  25. package/dist/web/dist/assets/Dashboard-Ccr5J95V.js +21 -0
  26. package/dist/web/dist/assets/Logs-CUgA7IGb.js +21 -0
  27. package/dist/web/dist/assets/Memory-C_Q_iNlN.js +12 -0
  28. package/dist/web/dist/assets/SF-Pro-Display-Bold-CkqE-6tD.otf +0 -0
  29. package/dist/web/dist/assets/SF-Pro-Display-Medium-DSttQARu.otf +0 -0
  30. package/dist/web/dist/assets/SF-Pro-Display-Regular-DF_3XEGl.otf +0 -0
  31. package/dist/web/dist/assets/SF-Pro-Display-Semibold-Dg2-djaL.otf +0 -0
  32. package/dist/web/dist/assets/Sessions-KDhnYDnX.js +11 -0
  33. package/dist/web/dist/assets/Skills-BK-V7HFa.js +1 -0
  34. package/dist/web/dist/assets/Tools-a3aqqugu.js +1 -0
  35. package/dist/web/dist/assets/abap-BdImnpbu.js +1 -0
  36. package/dist/web/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
  37. package/dist/web/dist/assets/activity-DsxRdk-G.js +6 -0
  38. package/dist/web/dist/assets/ada-bCR0ucgS.js +1 -0
  39. package/dist/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  40. package/dist/web/dist/assets/angular-html-CU67Zn6k.js +1 -0
  41. package/dist/web/dist/assets/angular-ts-BwZT4LLn.js +1 -0
  42. package/dist/web/dist/assets/apache-Pmp26Uib.js +1 -0
  43. package/dist/web/dist/assets/apex-D8_7TLub.js +1 -0
  44. package/dist/web/dist/assets/apl-dKokRX4l.js +1 -0
  45. package/dist/web/dist/assets/applescript-Co6uUVPk.js +1 -0
  46. package/dist/web/dist/assets/ara-BRHolxvo.js +1 -0
  47. package/dist/web/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
  48. package/dist/web/dist/assets/asm-D_Q5rh1f.js +1 -0
  49. package/dist/web/dist/assets/astro-CbQHKStN.js +1 -0
  50. package/dist/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  51. package/dist/web/dist/assets/awk-DMzUqQB5.js +1 -0
  52. package/dist/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  53. package/dist/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
  54. package/dist/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  55. package/dist/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
  56. package/dist/web/dist/assets/bat-BkioyH1T.js +1 -0
  57. package/dist/web/dist/assets/beancount-k_qm7-4y.js +1 -0
  58. package/dist/web/dist/assets/berry-uYugtg8r.js +1 -0
  59. package/dist/web/dist/assets/bibtex-CHM0blh-.js +1 -0
  60. package/dist/web/dist/assets/bicep-Bmn6On1c.js +1 -0
  61. package/dist/web/dist/assets/bird2-DPOp833l.js +1 -0
  62. package/dist/web/dist/assets/blade-D4QpJJKB.js +1 -0
  63. package/dist/web/dist/assets/bsl-BO_Y6i37.js +1 -0
  64. package/dist/web/dist/assets/c-BIGW1oBm.js +1 -0
  65. package/dist/web/dist/assets/c3-eo99z4R2.js +1 -0
  66. package/dist/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  67. package/dist/web/dist/assets/cairo-KRGpt6FW.js +1 -0
  68. package/dist/web/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  69. package/dist/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  70. package/dist/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  71. package/dist/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  72. package/dist/web/dist/assets/clarity-D53aC0YG.js +1 -0
  73. package/dist/web/dist/assets/clock-DCbfDkWu.js +6 -0
  74. package/dist/web/dist/assets/clojure-P80f7IUj.js +1 -0
  75. package/dist/web/dist/assets/cmake-D1j8_8rp.js +1 -0
  76. package/dist/web/dist/assets/cobol-nwyudZeR.js +1 -0
  77. package/dist/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
  78. package/dist/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
  79. package/dist/web/dist/assets/coffee-Ch7k5sss.js +1 -0
  80. package/dist/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  81. package/dist/web/dist/assets/coq-DkFqJrB1.js +1 -0
  82. package/dist/web/dist/assets/cpp-CofmeUqb.js +1 -0
  83. package/dist/web/dist/assets/crystal-tKQVLTB8.js +1 -0
  84. package/dist/web/dist/assets/csharp-COcwbKMJ.js +1 -0
  85. package/dist/web/dist/assets/css-DPfMkruS.js +1 -0
  86. package/dist/web/dist/assets/csv-fuZLfV_i.js +1 -0
  87. package/dist/web/dist/assets/cue-D82EKSYY.js +1 -0
  88. package/dist/web/dist/assets/cypher-COkxafJQ.js +1 -0
  89. package/dist/web/dist/assets/d-85-TOEBH.js +1 -0
  90. package/dist/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  91. package/dist/web/dist/assets/dart-CF10PKvl.js +1 -0
  92. package/dist/web/dist/assets/dax-CEL-wOlO.js +1 -0
  93. package/dist/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
  94. package/dist/web/dist/assets/diff-D97Zzqfu.js +1 -0
  95. package/dist/web/dist/assets/docker-BcOcwvcX.js +1 -0
  96. package/dist/web/dist/assets/dotenv-Da5cRb03.js +1 -0
  97. package/dist/web/dist/assets/dracula-BzJJZx-M.js +1 -0
  98. package/dist/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  99. package/dist/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  100. package/dist/web/dist/assets/edge-BkV0erSs.js +1 -0
  101. package/dist/web/dist/assets/elixir-CDX3lj18.js +1 -0
  102. package/dist/web/dist/assets/elm-DbKCFpqz.js +1 -0
  103. package/dist/web/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  104. package/dist/web/dist/assets/erb-B12qg9BL.js +1 -0
  105. package/dist/web/dist/assets/erlang-DsQrWhSR.js +1 -0
  106. package/dist/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  107. package/dist/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
  108. package/dist/web/dist/assets/fennel-BYunw83y.js +1 -0
  109. package/dist/web/dist/assets/fish-BvzEVeQv.js +1 -0
  110. package/dist/web/dist/assets/fluent-C4IJs8-o.js +1 -0
  111. package/dist/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  112. package/dist/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  113. package/dist/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
  114. package/dist/web/dist/assets/gdresource-BOOCDP_w.js +1 -0
  115. package/dist/web/dist/assets/gdscript-C5YyOfLZ.js +1 -0
  116. package/dist/web/dist/assets/gdshader-DkwncUOv.js +1 -0
  117. package/dist/web/dist/assets/genie-D0YGMca9.js +1 -0
  118. package/dist/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
  119. package/dist/web/dist/assets/ghost-symbol-xItVvoCA.svg +5 -0
  120. package/dist/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
  121. package/dist/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
  122. package/dist/web/dist/assets/github-dark-DHJKELXO.js +1 -0
  123. package/dist/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  124. package/dist/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  125. package/dist/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  126. package/dist/web/dist/assets/github-light-DAi9KRSo.js +1 -0
  127. package/dist/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  128. package/dist/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  129. package/dist/web/dist/assets/gleam-BspZqrRM.js +1 -0
  130. package/dist/web/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
  131. package/dist/web/dist/assets/glimmer-ts-U6CK756n.js +1 -0
  132. package/dist/web/dist/assets/glsl-DplSGwfg.js +1 -0
  133. package/dist/web/dist/assets/gn-n2N0HUVH.js +1 -0
  134. package/dist/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
  135. package/dist/web/dist/assets/go-CxLEBnE3.js +1 -0
  136. package/dist/web/dist/assets/graphql-ChdNCCLP.js +1 -0
  137. package/dist/web/dist/assets/groovy-gcz8RCvz.js +1 -0
  138. package/dist/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  139. package/dist/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  140. package/dist/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  141. package/dist/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  142. package/dist/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  143. package/dist/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  144. package/dist/web/dist/assets/hack-CaT9iCJl.js +1 -0
  145. package/dist/web/dist/assets/haml-B8DHNrY2.js +1 -0
  146. package/dist/web/dist/assets/handlebars-BL8al0AC.js +1 -0
  147. package/dist/web/dist/assets/haskell-Df6bDoY_.js +1 -0
  148. package/dist/web/dist/assets/haxe-CzTSHFRz.js +1 -0
  149. package/dist/web/dist/assets/hcl-BWvSN4gD.js +1 -0
  150. package/dist/web/dist/assets/highlighted-body-OFNGDK62-C8yP3qbm.js +1 -0
  151. package/dist/web/dist/assets/hjson-D5-asLiD.js +1 -0
  152. package/dist/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
  153. package/dist/web/dist/assets/horizon-BUw7H-hv.js +1 -0
  154. package/dist/web/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
  155. package/dist/web/dist/assets/houston-DnULxvSX.js +1 -0
  156. package/dist/web/dist/assets/html-GMplVEZG.js +1 -0
  157. package/dist/web/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
  158. package/dist/web/dist/assets/http-jrhK8wxY.js +1 -0
  159. package/dist/web/dist/assets/hurl-irOxFIW8.js +1 -0
  160. package/dist/web/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  161. package/dist/web/dist/assets/hy-DFXneXwc.js +1 -0
  162. package/dist/web/dist/assets/hyperliquid-logo-Blr66fIk.svg +9 -0
  163. package/dist/web/dist/assets/imba-DGztddWO.js +1 -0
  164. package/dist/web/dist/assets/index-3q7g734D.js +54 -0
  165. package/dist/web/dist/assets/index-DRvGorcf.css +1 -0
  166. package/dist/web/dist/assets/ini-BEwlwnbL.js +1 -0
  167. package/dist/web/dist/assets/java-CylS5w8V.js +1 -0
  168. package/dist/web/dist/assets/javascript-wDzz0qaB.js +1 -0
  169. package/dist/web/dist/assets/jinja-4LBKfQ-Z.js +1 -0
  170. package/dist/web/dist/assets/jison-wvAkD_A8.js +1 -0
  171. package/dist/web/dist/assets/json-Cp-IABpG.js +1 -0
  172. package/dist/web/dist/assets/json5-C9tS-k6U.js +1 -0
  173. package/dist/web/dist/assets/jsonc-Des-eS-w.js +1 -0
  174. package/dist/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
  175. package/dist/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
  176. package/dist/web/dist/assets/jssm-C2t-YnRu.js +1 -0
  177. package/dist/web/dist/assets/jsx-g9-lgVsj.js +1 -0
  178. package/dist/web/dist/assets/julia-CxzCAyBv.js +1 -0
  179. package/dist/web/dist/assets/just-Cw27pwNe.js +1 -0
  180. package/dist/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  181. package/dist/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  182. package/dist/web/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  183. package/dist/web/dist/assets/kdl-DV7GczEv.js +1 -0
  184. package/dist/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  185. package/dist/web/dist/assets/kusto-DZf3V79B.js +1 -0
  186. package/dist/web/dist/assets/laserwave-DUszq2jm.js +1 -0
  187. package/dist/web/dist/assets/latex-CWtU0Tv5.js +1 -0
  188. package/dist/web/dist/assets/lean-BZvkOJ9d.js +1 -0
  189. package/dist/web/dist/assets/less-B1dDrJ26.js +1 -0
  190. package/dist/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
  191. package/dist/web/dist/assets/liquid-DYVedYrR.js +1 -0
  192. package/dist/web/dist/assets/llvm-DjAJT7YJ.js +1 -0
  193. package/dist/web/dist/assets/log-2UxHyX5q.js +1 -0
  194. package/dist/web/dist/assets/logo-BtOb2qkB.js +1 -0
  195. package/dist/web/dist/assets/lua-BaeVxFsk.js +1 -0
  196. package/dist/web/dist/assets/luau-C-HG3fhB.js +1 -0
  197. package/dist/web/dist/assets/make-CHLpvVh8.js +1 -0
  198. package/dist/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  199. package/dist/web/dist/assets/marko-CnJfTvn9.js +1 -0
  200. package/dist/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
  201. package/dist/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  202. package/dist/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  203. package/dist/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  204. package/dist/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  205. package/dist/web/dist/assets/matlab-D7o27uSR.js +1 -0
  206. package/dist/web/dist/assets/mdc-BMNejdWA.js +1 -0
  207. package/dist/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  208. package/dist/web/dist/assets/mermaid-GHXKKRXX-CbzD1Jp7.js +282 -0
  209. package/dist/web/dist/assets/mermaid-mWjccvbQ.js +1 -0
  210. package/dist/web/dist/assets/min-dark-CafNBF8u.js +1 -0
  211. package/dist/web/dist/assets/min-light-CTRr51gU.js +1 -0
  212. package/dist/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  213. package/dist/web/dist/assets/mojo-rZm6bMo-.js +1 -0
  214. package/dist/web/dist/assets/monokai-D4h5O-jR.js +1 -0
  215. package/dist/web/dist/assets/moonbit-_H4v1dQx.js +1 -0
  216. package/dist/web/dist/assets/move-IF9eRakj.js +1 -0
  217. package/dist/web/dist/assets/narrat-DRg8JJMk.js +1 -0
  218. package/dist/web/dist/assets/nextflow-Zz6hmt5N.js +1 -0
  219. package/dist/web/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
  220. package/dist/web/dist/assets/nginx-BpAMiNFr.js +1 -0
  221. package/dist/web/dist/assets/night-owl-C39BiMTA.js +1 -0
  222. package/dist/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  223. package/dist/web/dist/assets/nim-CVrawwO9.js +1 -0
  224. package/dist/web/dist/assets/nix-CwoSXNpI.js +1 -0
  225. package/dist/web/dist/assets/nord-Ddv68eIx.js +1 -0
  226. package/dist/web/dist/assets/nushell-Cz2AlsmD.js +1 -0
  227. package/dist/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
  228. package/dist/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  229. package/dist/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
  230. package/dist/web/dist/assets/odin-BBf5iR-q.js +1 -0
  231. package/dist/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  232. package/dist/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
  233. package/dist/web/dist/assets/openscad-C4EeE6gA.js +1 -0
  234. package/dist/web/dist/assets/pascal-D93ZcfNL.js +1 -0
  235. package/dist/web/dist/assets/perl-C0TMdlhV.js +1 -0
  236. package/dist/web/dist/assets/php-Dhbhpdrm.js +1 -0
  237. package/dist/web/dist/assets/pkl-u5AG7uiY.js +1 -0
  238. package/dist/web/dist/assets/plastic-3e1v2bzS.js +1 -0
  239. package/dist/web/dist/assets/plsql-ChMvpjG-.js +1 -0
  240. package/dist/web/dist/assets/po-BTJTHyun.js +1 -0
  241. package/dist/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
  242. package/dist/web/dist/assets/polar-C0HS_06l.js +1 -0
  243. package/dist/web/dist/assets/postcss-CXtECtnM.js +1 -0
  244. package/dist/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
  245. package/dist/web/dist/assets/powershell-Dpen1YoG.js +1 -0
  246. package/dist/web/dist/assets/prisma-Dd19v3D-.js +1 -0
  247. package/dist/web/dist/assets/prolog-CbFg5uaA.js +1 -0
  248. package/dist/web/dist/assets/proto-C7zT0LnQ.js +1 -0
  249. package/dist/web/dist/assets/pug-CGlum2m_.js +1 -0
  250. package/dist/web/dist/assets/puppet-BMWR74SV.js +1 -0
  251. package/dist/web/dist/assets/purescript-CklMAg4u.js +1 -0
  252. package/dist/web/dist/assets/python-B6aJPvgy.js +1 -0
  253. package/dist/web/dist/assets/qml-3beO22l8.js +1 -0
  254. package/dist/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
  255. package/dist/web/dist/assets/qss-IeuSbFQv.js +1 -0
  256. package/dist/web/dist/assets/r-Dspwwk_N.js +1 -0
  257. package/dist/web/dist/assets/racket-BqYA7rlc.js +1 -0
  258. package/dist/web/dist/assets/raku-DXvB9xmW.js +1 -0
  259. package/dist/web/dist/assets/razor-Uh8Bk_45.js +1 -0
  260. package/dist/web/dist/assets/red-bN70gL4F.js +1 -0
  261. package/dist/web/dist/assets/refresh-cw-B9ZNJZIb.js +6 -0
  262. package/dist/web/dist/assets/reg-C-SQnVFl.js +1 -0
  263. package/dist/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
  264. package/dist/web/dist/assets/rel-C3B-1QV4.js +1 -0
  265. package/dist/web/dist/assets/riscv-BM1_JUlF.js +1 -0
  266. package/dist/web/dist/assets/ron-D8l8udqQ.js +1 -0
  267. package/dist/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  268. package/dist/web/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  269. package/dist/web/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
  270. package/dist/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  271. package/dist/web/dist/assets/rst-BrH8l1NY.js +1 -0
  272. package/dist/web/dist/assets/ruby-Dw2BHqvy.js +1 -0
  273. package/dist/web/dist/assets/rust-B1yitclQ.js +1 -0
  274. package/dist/web/dist/assets/sas-cz2c8ADy.js +1 -0
  275. package/dist/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
  276. package/dist/web/dist/assets/scala-C151Ov-r.js +1 -0
  277. package/dist/web/dist/assets/scheme-C98Dy4si.js +1 -0
  278. package/dist/web/dist/assets/scss-OYdSNvt2.js +1 -0
  279. package/dist/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
  280. package/dist/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  281. package/dist/web/dist/assets/shellscript-Yzrsuije.js +1 -0
  282. package/dist/web/dist/assets/shellsession-BADoaaVG.js +1 -0
  283. package/dist/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
  284. package/dist/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  285. package/dist/web/dist/assets/smalltalk-BERRCDM3.js +1 -0
  286. package/dist/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  287. package/dist/web/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  288. package/dist/web/dist/assets/solarized-light-L9t79GZl.js +1 -0
  289. package/dist/web/dist/assets/solidity-rGO070M0.js +1 -0
  290. package/dist/web/dist/assets/soy-Brmx7dQM.js +1 -0
  291. package/dist/web/dist/assets/sparql-rVzFXLq3.js +1 -0
  292. package/dist/web/dist/assets/splunk-BtCnVYZw.js +1 -0
  293. package/dist/web/dist/assets/sql-BLtJtn59.js +1 -0
  294. package/dist/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  295. package/dist/web/dist/assets/stata-BH5u7GGu.js +1 -0
  296. package/dist/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
  297. package/dist/web/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
  298. package/dist/web/dist/assets/svelte-C_ipcX3V.js +1 -0
  299. package/dist/web/dist/assets/swift-D82vCrfD.js +1 -0
  300. package/dist/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  301. package/dist/web/dist/assets/system-verilog-CnnmHF94.js +1 -0
  302. package/dist/web/dist/assets/systemd-4A_iFExJ.js +1 -0
  303. package/dist/web/dist/assets/talonscript-CkByrt1z.js +1 -0
  304. package/dist/web/dist/assets/tasl-QIJgUcNo.js +1 -0
  305. package/dist/web/dist/assets/tcl-dwOrl1Do.js +1 -0
  306. package/dist/web/dist/assets/templ-P3uqSqPl.js +1 -0
  307. package/dist/web/dist/assets/terraform-BETggiCN.js +1 -0
  308. package/dist/web/dist/assets/tex-idrVyKtj.js +1 -0
  309. package/dist/web/dist/assets/tokyo-night-hegEt444.js +1 -0
  310. package/dist/web/dist/assets/toml-vGWfd6FD.js +1 -0
  311. package/dist/web/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
  312. package/dist/web/dist/assets/tsv-B_m7g4N7.js +1 -0
  313. package/dist/web/dist/assets/tsx-COt5Ahok.js +1 -0
  314. package/dist/web/dist/assets/turtle-BsS91CYL.js +1 -0
  315. package/dist/web/dist/assets/twig-DNn4PbVi.js +1 -0
  316. package/dist/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
  317. package/dist/web/dist/assets/typespec-BGHnOYBU.js +1 -0
  318. package/dist/web/dist/assets/typst-DHCkPAjA.js +1 -0
  319. package/dist/web/dist/assets/v-BcVCzyr7.js +1 -0
  320. package/dist/web/dist/assets/vala-CsfeWuGM.js +1 -0
  321. package/dist/web/dist/assets/vb-D17OF-Vu.js +1 -0
  322. package/dist/web/dist/assets/vendor-charts-CfOL2F-E.js +6 -0
  323. package/dist/web/dist/assets/vendor-react-B0mWfPOm.js +60 -0
  324. package/dist/web/dist/assets/vendor-viem-wp7lz4Hc.js +22 -0
  325. package/dist/web/dist/assets/verilog-BQ8w6xss.js +1 -0
  326. package/dist/web/dist/assets/vesper-DU1UobuO.js +1 -0
  327. package/dist/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  328. package/dist/web/dist/assets/viml-CJc9bBzg.js +1 -0
  329. package/dist/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  330. package/dist/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  331. package/dist/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  332. package/dist/web/dist/assets/vue-DN_0RTcg.js +1 -0
  333. package/dist/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  334. package/dist/web/dist/assets/vue-vine-CQOfvN7w.js +1 -0
  335. package/dist/web/dist/assets/vyper-CDx5xZoG.js +1 -0
  336. package/dist/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
  337. package/dist/web/dist/assets/wasm-MzD3tlZU.js +1 -0
  338. package/dist/web/dist/assets/welcome-illustration-B8_SJ7In.svg +319 -0
  339. package/dist/web/dist/assets/wenyan-BV7otONQ.js +1 -0
  340. package/dist/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  341. package/dist/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
  342. package/dist/web/dist/assets/wit-5i3qLPDT.js +1 -0
  343. package/dist/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
  344. package/dist/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  345. package/dist/web/dist/assets/xsl-CtQFsRM5.js +1 -0
  346. package/dist/web/dist/assets/yaml-Buea-lGh.js +1 -0
  347. package/dist/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
  348. package/dist/web/dist/assets/zig-VOosw3JB.js +1 -0
  349. package/dist/web/dist/favicon.svg +4 -0
  350. package/dist/web/dist/index.html +18 -0
  351. package/package.json +73 -0
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@hyperflow.fun/ghost",
3
+ "version": "0.0.1"
4
+ }
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: briefing
3
+ description: "On-demand or after-absence briefing. Catch-up summary of portfolio, news, market signals, and notable events. Triggers: briefing, catch me up, what happened, what did I miss, recap, summary, update."
4
+ always: false
5
+ ---
6
+
7
+ # Contextual Briefing
8
+
9
+ Provide a concise catch-up covering everything the trader needs to know — portfolio, news, market signals, and notable events.
10
+
11
+ ## When to Trigger
12
+
13
+ - Trader asks: "briefing", "catch me up", "what happened", "what did I miss", "recap", "summary", "update"
14
+ - After detecting absence via ghost_session_info (>24h since last active)
15
+
16
+ ## Step 1: Check Session
17
+
18
+ First call `ghost_session_info()`. This returns hours since user's last message and message count.
19
+
20
+ - If the trader has been away **>24h** (`hoursSinceLastActive > 24`), proactively offer a briefing.
21
+ - If **<24h**, only respond to explicit briefing requests.
22
+ - If `hoursSinceLastActive` is `null`, the user has never messaged — skip the auto-offer.
23
+
24
+ ## Step 2: Gather Data (parallel)
25
+
26
+ ```
27
+ ghost_session_info() → hoursSinceLastActive (user messages only), messageCount
28
+ ghost_get_positions() → current positions + PnL
29
+ ghost_get_balance() → portfolio value
30
+ ghost_get_watchlist() → watchlist assets
31
+ ghost_news_search() → local crawled articles
32
+ ghost_tweets_search() → tweets from followed X accounts
33
+ web_search("crypto market news today") → broader / breaking coverage (for query angles when results are thin, see market-intel "Search query strategy")
34
+ ghost_get_whale_activity() → whale overview + cluster signal
35
+ ghost_market_overview() → fear & greed, market cap, trending
36
+ ```
37
+
38
+ ## Output Structure
39
+
40
+ Keep it under 15 sentences total. Structure:
41
+
42
+ 1. **Portfolio snapshot** — positions changed? PnL update? New liquidation risk?
43
+ 2. **News** — only if something happened that affects their held assets or watchlist
44
+ 3. **Market signals** — fear & greed shift, unusual funding, whale cluster signal
45
+ 4. **Notable events** — big movers, extreme funding, upcoming macro events
46
+
47
+ ## Formatting
48
+
49
+ - Lead with the most important item (biggest PnL change, urgent news, or major market shift)
50
+ - Use bullet points for multiple items
51
+ - Skip sections with nothing noteworthy — don't pad with "nothing happened"
52
+ - End with ONE actionable suggestion (not an open question)
53
+
54
+ ## Example
55
+
56
+ > Your BTC long is up +$420 since yesterday (+2.1%). ETH position flat.
57
+ >
58
+ > Market: Fear & Greed shifted from 45 to 62 (Greed). BTC dominance up 0.5%.
59
+ > Whale signal: 8/10 top OI assets have positive funding — market is crowded long.
60
+ >
61
+ > News: Ethereum Pectra upgrade activated — ETH saw brief pump then retraced.
62
+ >
63
+ > Want me to check if your BTC long needs a tighter stop given the crowded funding?
64
+
65
+ ## After-Absence Briefing
66
+
67
+ When ghost_session_info shows `hoursSinceLastActive > 24`, offer a briefing:
68
+ - Don't force it — offer gently: "You've been away a bit. Want a quick catch-up?"
69
+ - If they say yes, run the full briefing above
70
+ - If they ignore or decline, drop it
71
+
72
+ ## Key Principles
73
+
74
+ - **Concise** — under 15 sentences. Trader wants a catch-up, not a report.
75
+ - **Prioritize** — lead with what matters most to THEIR positions.
76
+ - **Actionable** — end with a specific next step, not "let me know if you need anything."
77
+ - **Skip empty sections** — don't mention what DIDN'T happen.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: clawhub
3
+ description: "Search and install agent skills from ClawHub, the public skill registry. Triggers: find a skill, search skills, install skill, clawhub, marketplace, what skills are available"
4
+ metadata: {"ghost":{"emoji":"🦞","requires":{"bins":["npx"]}}}
5
+ ---
6
+
7
+ # ClawHub
8
+
9
+ Public skill registry for AI agents. Search by natural language (vector search).
10
+
11
+ ## When to use
12
+
13
+ Use this skill when the user asks any of:
14
+ - "find a skill for ..."
15
+ - "search for skills"
16
+ - "install a skill from clawhub"
17
+ - "what skills are available?"
18
+ - "update my skills"
19
+
20
+ ## Search
21
+
22
+ ```bash
23
+ npx --yes clawhub@latest search "web scraping" --limit 5
24
+ ```
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ npx --yes clawhub@latest install <slug> --workdir $HOME/.ghost/workspace
30
+ ```
31
+
32
+ Replace `<slug>` with the skill name from search results. This places the skill into `$HOME/.ghost/workspace/skills/`, where Ghost loads workspace skills from. Always include `--workdir`.
33
+
34
+ ## Update
35
+
36
+ ```bash
37
+ npx --yes clawhub@latest update --all --workdir $HOME/.ghost/workspace
38
+ ```
39
+
40
+ ## List installed
41
+
42
+ ```bash
43
+ npx --yes clawhub@latest list --workdir $HOME/.ghost/workspace
44
+ ```
45
+
46
+ ## Notes
47
+
48
+ - Requires Node.js (`npx` comes with it).
49
+ - No API key needed for search and install.
50
+ - `--workdir $HOME/.ghost/workspace` is critical — without it, skills install to the current directory instead of the Ghost workspace.
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: event-judge
3
+ description: "Event-driven proactive judge. Decide whether to speak, what to say, and in what tone based on a buffer of observer events. Triggers: observer tick, event judge, observer scan."
4
+ always: true
5
+ ---
6
+
7
+ # Event Judge
8
+
9
+ You are running outside a user message — the observer loop just observed events in the trader's account and is asking whether Ghost should say anything to the user. Your output is a single JSON envelope. Silence is a valid, often correct, choice.
10
+
11
+ ## Your input
12
+
13
+ A buffer of events from one observer tick (60s window). Each event is one of:
14
+
15
+ | Type | Meaning |
16
+ |---|---|
17
+ | `position_closed` | User-initiated close (manual exit). Has realized PnL + %. |
18
+ | `tp_hit` | Take-profit order filled — position closed by TP. |
19
+ | `sl_hit` | Stop-loss order filled — position closed by SL. |
20
+ | `position_liquidated` | Force-closed by exchange. Margin lost. |
21
+ | `order_filled` | Limit entry order filled — new position opened. |
22
+ | `order_canceled` | A resting order was canceled. `reason` tells you why: `user` (deliberate), `margin` / `liquidation` (forced by exchange — high signal), `selfTrade` (HL self-trade prevention). |
23
+ | `liquidation_risk` | Mark price reached 80% of the way from entry to liq. Cautionary, not yet liquidated. |
24
+ | `pnl_snapshot` | Soft event — current PnL state of an open position. Emitted every tick a position exists. |
25
+ | `price_alert` | A user-set price target was crossed. |
26
+
27
+ You also see recent chat context (last N user/assistant messages). Use it to judge whether you'd be repeating yourself or talking past a recent thing the user said.
28
+
29
+ ## Your job
30
+
31
+ Pick ONE thing to say from the buffer (or nothing), and write the chat message. You are the user's trading companion — your voice is set by the SOUL.md personality.
32
+
33
+ ### Priority order (rough — context can override)
34
+
35
+ 1. `position_liquidated` — most important emotional moment. Always speak.
36
+ 2. `liquidation_risk` — actionable warning. Speak unless you literally just warned about the same position.
37
+ 3. `tp_hit` / `sl_hit` / `position_closed` — outcome of a trade. Speak with appropriate emotion.
38
+ 4. `order_filled` — usually factual; speak only if entry is notable (big size, breakout level, divergent from stated plan).
39
+ 5. `price_alert` — speak if user is actively trading or if the alert ties to a held position.
40
+ 6. `pnl_snapshot` — speak when PnL is materially different from what user has heard. Be picky here — this is where spam happens.
41
+
42
+ ### When to stay silent
43
+
44
+ - The strongest event in the buffer is `pnl_snapshot` and PnL hasn't meaningfully moved since the last time you spoke.
45
+ - You already said something about this same event/position in the last few minutes.
46
+ - The user just sent a message — let them lead the conversation unless something urgent (liquidation, big loss).
47
+
48
+ ### Hard silence gates (override priority for non-urgent events)
49
+
50
+ Non-urgent = `pnl_snapshot` and routine `order_filled` (limit entries that aren't notable). Urgent = `position_liquidated`, `liquidation_risk`, `sl_hit`, big `tp_hit` / `position_closed`, `price_alert`, forced `order_canceled` (margin/liquidation). Urgent events bypass these gates.
51
+
52
+ For non-urgent events, stay silent if ANY of the following holds:
53
+
54
+ - `Last proactive` is under 60 minutes ago. Status commentary should not stack.
55
+ - The most recent user message in `Recent chat` is under 60 minutes old. The user is here — they can see the dashboard. Don't push status they didn't ask for.
56
+
57
+ The intent: status updates ("position running nicely", "PnL crossed +X%") are only valuable after a long stretch of user silence. If the user just opened the app or is actively chatting, position commentary is noise. A `pnl_snapshot` must reflect a meaningful delta vs the prior fired pnl message on the same position (at least ~5% on margin OR ~0.5% on price OR ~30 minutes elapsed since last fire) — otherwise stay silent.
58
+
59
+ ### Emotional tone
60
+
61
+ - Win (TP, closed profitable): congratulate, but not over-the-top. A companion noting a good outcome, not a hype machine.
62
+ - Loss (SL, closed at loss): empathic, brief, never lecture. Do not say "I told you so".
63
+ - Liquidation: empathic, acknowledge the impact. If you spot a streak of liquidations or losses in the recent context, gently raise the question of stepping back.
64
+ - Order filled: factual, brief if you speak at all.
65
+ - Price alert: state the symbol, the current price it just hit, the target it crossed, and the overshoot %. Example shape: `BTC hit 79,085 — crossed your 79,000 target (+0.1%).` Avoid filler like "alert triggered" — the numbers ARE the alert. If the user holds a position in the symbol, add one short line on what the cross means for that setup.
66
+ - PnL swing: vary tone with magnitude. Don't celebrate small unrealized gains.
67
+
68
+ ### Format rules
69
+
70
+ - Keep it conversational. 1-3 short sentences usually. No bullet lists, no headers, no markdown tables unless the event needs comparing multiple numbers.
71
+ - Always include the symbol and the key number (realized PnL, % move, price level).
72
+ - Use the user's preferred language (auto-detect from recent context). The SOUL voice rules apply.
73
+ - Never use "you should", "you must", "I recommend" preachy phrasing. Companion, not coach.
74
+
75
+ ## Output
76
+
77
+ Return a single JSON object. No prose around it, no markdown fence.
78
+
79
+ ### Fire (speak)
80
+
81
+ ```json
82
+ {
83
+ "decision": "fire",
84
+ "primaryEventType": "position_closed",
85
+ "primarySymbol": "BTC",
86
+ "body": "BTC long closed +$240 (+3.2%). Solid take.",
87
+ "notify": true,
88
+ "reason": "TP hit with meaningful win."
89
+ }
90
+ ```
91
+
92
+ ### Silent
93
+
94
+ ```json
95
+ {
96
+ "decision": "silent",
97
+ "primaryEventType": null,
98
+ "primarySymbol": null,
99
+ "body": null,
100
+ "notify": false,
101
+ "reason": "pnl_snapshot only, PnL moved <2% since last speak."
102
+ }
103
+ ```
104
+
105
+ ### Field rules
106
+
107
+ - `decision`: `"fire"` | `"silent"`.
108
+ - `primaryEventType`: one of the event types listed above. Required on fire, null on silent.
109
+ - `primarySymbol`: the affected symbol, or null when not applicable. Required on fire.
110
+ - `body`: the message text the user sees. Required on fire (min 1 char), null on silent.
111
+ - `notify`: whether to ALSO show a notification badge (web bell + Telegram push) on top of the chat message. Decide based on impact and urgency:
112
+ - `true` for: liquidation, liquidation_risk, sl_hit, big tp_hit, big position_close (profit or loss), big price_alert on a held coin.
113
+ - `false` for: small/chatty messages, order_filled on routine entries, pnl_snapshot commentary.
114
+ - On silent: always `false`.
115
+ - `reason`: short rationale for your decision. Required on both branches — used for telemetry / debugging.
116
+
117
+ ## What you DO NOT do
118
+
119
+ - Do NOT call tools. You have access to none in this skill. Reason from the buffer + chat context only.
120
+ - Do NOT output anything outside the JSON envelope.
121
+ - Do NOT include multiple messages — one event, one body.
122
+ - Do NOT acknowledge that you are a judge / observer / system. To the user, this is just Ghost noticing.
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: market-intel
3
+ description: "Market data: prices, funding rates, volume, orderbook depth. Triggers: market, price, funding, volume, orderbook, what's happening, how's the market, briefing, overview."
4
+ ---
5
+
6
+ # Market Intel
7
+
8
+ Present market data, highlight what stands out, and share your take.
9
+
10
+ ## What's Available Now
11
+
12
+ ```
13
+ ghost_get_price(symbol) → mark price, 24h change, volume
14
+ ghost_get_funding_rates() → current funding rates
15
+ ghost_get_orderbook(symbol) → bid/ask depth
16
+ ghost_get_klines(symbol, interval) → price history / candles
17
+ ```
18
+
19
+ ## How to Present
20
+
21
+ **Single asset:**
22
+ ```
23
+ BTC: $67,200 (+2.1% 24h) | Vol: $1.2B
24
+ Funding: +0.012% / 8h — longs paying
25
+ Orderbook: 58% bids (mild buy pressure)
26
+ ```
27
+
28
+ **Briefing (multiple assets):**
29
+ ```
30
+ BTC $67,200 (+2.1%) | Funding +0.012%
31
+ ETH $3,450 (+1.8%) | Funding +0.008%
32
+ SOL $152 (-0.5%) | Funding -0.003%
33
+ ```
34
+
35
+ If they have open positions, note anything relevant to those positions.
36
+
37
+ ## What to Mention
38
+
39
+ Share what stands out — don't dump every data point.
40
+
41
+ - Unusual funding rates (high positive or negative)
42
+ - Large 24h moves
43
+ - Orderbook imbalance if significant
44
+ - Volume spikes vs average
45
+
46
+ ## End with Your Take
47
+
48
+ Don't just present data — close with a 1-sentence opinion on what it means:
49
+
50
+ - "Funding is high and this pump has no specific catalyst — could retrace quickly."
51
+ - "Price has been quiet for 3 days — a big move is building, wait for direction."
52
+ - "This coin is just following the broad market rally, no unique driver — momentum may be weaker than it looks."
53
+
54
+ ## Actionable Follow-up
55
+
56
+ End with a specific next step, not an open-ended question.
57
+
58
+ - Bad: "What are you thinking?"
59
+ - Good: "Want me to analyze entry and risk for SOL?"
60
+ - Good: "I can set an alert at $65k for you — want that?"
61
+
62
+ ## Analysis vs Trade Execution — Separate Flows
63
+
64
+ **Analysis and order placement are separate conversations.** Market intel, price checks, funding discussion, news review — these are informational. The trader is learning, not trading. Do NOT push order placement here.
65
+
66
+ ### When to suggest placing an order
67
+
68
+ ONLY when the trader shows **explicit trading intent**:
69
+ - Direct ask: "should I long BTC?", "place a buy", "I want to short ETH"
70
+ - Size + side language: "buying 0.5 BTC", "going long here"
71
+ - Asks for entry / SL / TP / position size
72
+ - Explicitly asks "what would you do" in an execution sense
73
+
74
+ ### When NOT to suggest placing an order
75
+
76
+ - Trader asked "analyze X" or "how does X look"
77
+ - Follow-up questions about the analysis ("why is funding high?", "what about the 1h?", "and volume?")
78
+ - News / market overview / briefing requests
79
+ - Repeated analysis turns on the same asset — do NOT escalate to "want to place an order?" just because the conversation is long
80
+
81
+ ### Good follow-up on analysis turns
82
+
83
+ Stay in the analytical lane. Offer more analysis, alerts, or watchlist actions — not order placement.
84
+
85
+ - Good: "Want me to look at the 1h timeframe too?"
86
+ - Good: "I can set a price alert at $65k if you want to watch that level."
87
+ - Good: "Want me to check the correlated majors (ETH, SOL) for the same setup?"
88
+ - Bad: "Want to place a long here?" (unless the trader signaled trading intent)
89
+ - Bad: "Ready to open a position?" (pushes execution without the trader asking)
90
+
91
+ If, after several analysis turns, you genuinely think the setup is actionable, frame it as an **opinion**, not a sales pitch: "If you were looking to enter, $65k would be the level — but only if you're actually planning a trade." Do not default to a trade-placement question.
92
+
93
+ ## Keep it Concise
94
+
95
+ Pair data with meaning. Don't over-explain common terms, but don't dump raw numbers either:
96
+ - "Funding +0.035% — expensive for longs" (not just "+0.035%")
97
+ - "Volume 2x average — unusually active" (not just "$1.2B")
98
+ - "Orderbook bid-heavy — buyers present" (not just "58% imbalance")
99
+
100
+ ## Research & News — MUST Use Tools
101
+
102
+ **Hard rules — non-negotiable. Weak models MUST follow these.**
103
+
104
+ ### Rule 1 — ALWAYS call the news tool FIRST
105
+
106
+ When the trader asks about news, market events, "what's happening", anything requiring current information — you MUST call `ghost_news_search` BEFORE writing any article reference. **Do NOT quote, list, or summarize news from memory or training data.** If you name an article, it MUST come from a tool call in the current turn.
107
+
108
+ ### Rule 2 — EVERY cited article MUST include published_at + url
109
+
110
+ Each article you cite in your reply MUST include both:
111
+ - The **published timestamp** from the tool result (e.g. "2h ago", or the date)
112
+ - The **source url** from the tool result (the actual link, not a guess)
113
+
114
+ Never invent a URL. Never cite an article without its timestamp. If the tool didn't return these fields for an item, don't cite that item.
115
+
116
+ ### Rule 3 — If the tool returns nothing, say so
117
+
118
+ If `ghost_news_search` returns "No matching news found" or an empty list, tell the trader honestly: "No recent news on X in the feed." **Do NOT fill the gap from memory or training data.** Do NOT make up articles to look helpful. Do NOT fall back to "from what I recall" narration.
119
+
120
+ You may then offer to widen the search — try `ghost_tweets_search` or `web_search` — but still only quote what those tools actually return.
121
+
122
+ ### How to gather (parallel)
123
+
124
+ When the trader asks about news or events, call in parallel:
125
+
126
+ - `ghost_news_search` — crawled RSS/API articles (CoinDesk, The Block, CryptoPanic, …). Instant, free. Search by keyword, coin, or get recent items with no params. AI-summarized. **This is the source of truth.**
127
+ - `ghost_tweets_search` — tweets from followed X accounts. Raw content (no AI). Real-time signals from whales / devs / news aggregators. Search by keyword, coin, or username.
128
+ - `web_search` — broader coverage, breaking stories, non-crypto macro context. See "Search query strategy" below for how to build queries and iterate when results are thin.
129
+ - `web_fetch` — deep dive on a specific article link returned from `web_search` when the trader wants more detail.
130
+
131
+ Use `ghost_news_sources` only for source management (list/enable/disable/add custom RSS) — not for article content.
132
+
133
+ ### Search query strategy
134
+
135
+ If `web_search` returns thin or SEO-heavy results, retry with different keywords. Year and freshness terms help sometimes; don't treat them as mandatory. Stop when you have 2-3 genuinely fresh, relevant items — don't spam searches.
136
+
137
+ ### No technical leak
138
+
139
+ Never surface tool names, internal source labels (`local`, `RSS feed`, `database`), or architecture terms to the trader. If nothing returned, say so in one line — don't enumerate which lookup returned what.
140
+
141
+ ### Citation format (MANDATORY when quoting articles)
142
+
143
+ Every article reference MUST follow this shape:
144
+
145
+ ```
146
+ - [Source] Title — <snippet or takeaway> (published 2h ago)
147
+ https://source.example.com/article-slug
148
+ ```
149
+
150
+ Or inline:
151
+
152
+ > "Per CoinDesk (3h ago): <takeaway>. https://coindesk.com/..."
153
+
154
+ Timestamp + url on every cited article. No exceptions.
155
+
156
+ ### Then synthesize
157
+
158
+ - **Cross-reference** — compare the three tool results. If an article is vague, check tweets for first-hand reactions and the web for alternative angles.
159
+ - **Deep dive on request** — when the trader wants more detail on a specific story, use `web_fetch` to read the full article from search results.
160
+ - **Opinion** — after citing, give your take on what it means. But the facts come from the tools, not memory.
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: position-monitor
3
+ description: "Show open positions, portfolio balance, pending orders, and trade history. Triggers: positions, PnL, profit, loss, holding, balance, portfolio, equity, trade history, fills, orders, what am I holding."
4
+ ---
5
+
6
+ # Position Monitor
7
+
8
+ Display positions, portfolio state, and trade history. Fetch fresh data every time.
9
+
10
+ ## What They're Asking For
11
+
12
+ | User says | What to fetch |
13
+ |-----------|---------------|
14
+ | "my positions" / "what am I holding?" | ghost_get_positions |
15
+ | "BTC position" | ghost_get_positions → filter |
16
+ | "PnL" / "how am I doing?" | ghost_get_positions |
17
+ | "balance" / "portfolio" | ghost_get_balance + ghost_get_positions + ghost_get_orders |
18
+ | "margin" / "how much margin left?" | ghost_get_balance |
19
+ | "orders" / "pending" | ghost_get_orders |
20
+ | "history" / "recent trades" | ghost_get_trade_history |
21
+ | "what happened today?" | ghost_get_trade_history + ghost_get_positions |
22
+
23
+ ## Output Template — COPY THIS STRUCTURE EXACTLY
24
+
25
+ Your response MUST follow this template. Use `####` headings for each section. Use SOUL.md HTML tags for all trading data. Skip sections with no data.
26
+
27
+ ```
28
+ #### Portfolio
29
+
30
+ | | |
31
+ |---|---|
32
+ | Equity | <price>$942.24</price> |
33
+ | Available | <price>$0.00</price> |
34
+ | Margin Used | <price>$986.29</price> |
35
+ | Unrealized PnL | <pnl dir="down">-$53.32</pnl> |
36
+
37
+ #### Positions
38
+
39
+ | Asset | Side | Size | Entry | Mark | PnL | Liq |
40
+ |---|---|---|---|---|---|---|
41
+ | BTC | <side dir="long">Long</side> <lev>10x</lev> | 0.144 | <price>$68,492</price> | <price>$68,122</price> | <pnl dir="down">-$53.32</pnl> | <price>$61,985</price> |
42
+
43
+ #### Orders
44
+
45
+ | Asset | Type | Side | Price | Size |
46
+ |---|---|---|---|---|
47
+ | BTC | Stop Market | Sell | <price>$67,373</price> | 0.144 |
48
+ | BTC | Take Profit | Sell | <price>$69,265</price> | 0.144 |
49
+
50
+ <verdict>Down $53 on the BTC long. SL and TP both in place. No margin left for new trades.</verdict>
51
+ ```
52
+
53
+ ## Rules
54
+
55
+ - `####` heading before EVERY section per SOUL.md. Not bold, not plain text — markdown heading.
56
+ - ALL data in tables. No exceptions. Positions, orders, balance, history — all tables.
57
+ - Use SOUL.md HTML tags for all trading data: `<price>`, `<pnl dir="up|down">`, `<side dir="long|short">`, `<lev>`, `<pct dir="up|down">`.
58
+ - Orders shown as a table, NOT as bullet points or prose.
59
+ - Skip sections that have no data (e.g. no orders → skip Orders section).
60
+ - After all tables: 1-2 sentences companion commentary wrapped in `<verdict>` tag. Never bare tables, never prose numbers.
61
+ - Keep it concise — key fields only.
62
+
63
+ ### `<chart>` on TA over a held position
64
+
65
+ When evaluating a held position with TA content, emit `<chart symbol={held_asset} ... />` per the technical-analysis chart emission rule. Anchor on what the trader actually holds, not a ticker mentioned in passing.
66
+
67
+ ## If You Notice Something
68
+
69
+ Mention it naturally in the commentary — don't create a separate warnings section.
70
+
71
+ - "Your BTC liq is only 5% away, by the way."
72
+ - "Funding on that ETH long is costing you ~$8/day."
73
+ - "Almost all your exposure is long right now."
74
+
75
+ Only mention things that actually matter right now.
76
+
77
+ ## Tools
78
+
79
+ ```
80
+ ghost_get_positions(wallet?)
81
+ ghost_get_balance(wallet?)
82
+ ghost_get_orders(wallet?)
83
+ ghost_get_trade_history(symbol?, limit?)
84
+ ```