@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.
- package/LICENSE +21 -0
- package/README.md +91 -0
- package/dist/index.js +220545 -0
- package/dist/package.json +4 -0
- package/dist/skills/builtin/briefing/SKILL.md +77 -0
- package/dist/skills/builtin/clawhub/SKILL.md +50 -0
- package/dist/skills/builtin/event-judge/SKILL.md +122 -0
- package/dist/skills/builtin/market-intel/SKILL.md +160 -0
- package/dist/skills/builtin/position-monitor/SKILL.md +84 -0
- package/dist/skills/builtin/pre-trade-advisory/SKILL.md +203 -0
- package/dist/skills/builtin/risk-manager/SKILL.md +124 -0
- package/dist/skills/builtin/skill-creator/SKILL.md +68 -0
- package/dist/skills/builtin/skill-creator/references/guide.md +158 -0
- package/dist/skills/builtin/skill-creator/scripts/init_skill.py +378 -0
- package/dist/skills/builtin/skill-creator/scripts/package_skill.py +154 -0
- package/dist/skills/builtin/skill-creator/scripts/quick_validate.py +213 -0
- package/dist/skills/builtin/skills-sh/SKILL.md +56 -0
- package/dist/skills/builtin/technical-analysis/SKILL.md +242 -0
- package/dist/skills/builtin/trade-executor/SKILL.md +179 -0
- package/dist/templates/SOUL.md +73 -0
- package/dist/web/dist/assets/Chart-DwirCj9o.js +1 -0
- package/dist/web/dist/assets/Config-Csnvaqpn.js +1 -0
- package/dist/web/dist/assets/Cost-BSD_2GYX.js +6 -0
- package/dist/web/dist/assets/Cron-BVKdKUFN.js +16 -0
- package/dist/web/dist/assets/Dashboard-Ccr5J95V.js +21 -0
- package/dist/web/dist/assets/Logs-CUgA7IGb.js +21 -0
- package/dist/web/dist/assets/Memory-C_Q_iNlN.js +12 -0
- package/dist/web/dist/assets/SF-Pro-Display-Bold-CkqE-6tD.otf +0 -0
- package/dist/web/dist/assets/SF-Pro-Display-Medium-DSttQARu.otf +0 -0
- package/dist/web/dist/assets/SF-Pro-Display-Regular-DF_3XEGl.otf +0 -0
- package/dist/web/dist/assets/SF-Pro-Display-Semibold-Dg2-djaL.otf +0 -0
- package/dist/web/dist/assets/Sessions-KDhnYDnX.js +11 -0
- package/dist/web/dist/assets/Skills-BK-V7HFa.js +1 -0
- package/dist/web/dist/assets/Tools-a3aqqugu.js +1 -0
- package/dist/web/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/web/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/web/dist/assets/activity-DsxRdk-G.js +6 -0
- package/dist/web/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/web/dist/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/web/dist/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/web/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/web/dist/assets/apex-D8_7TLub.js +1 -0
- package/dist/web/dist/assets/apl-dKokRX4l.js +1 -0
- package/dist/web/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/web/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/web/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/web/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/web/dist/assets/astro-CbQHKStN.js +1 -0
- package/dist/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/web/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/web/dist/assets/bat-BkioyH1T.js +1 -0
- package/dist/web/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/web/dist/assets/berry-uYugtg8r.js +1 -0
- package/dist/web/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/web/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/web/dist/assets/bird2-DPOp833l.js +1 -0
- package/dist/web/dist/assets/blade-D4QpJJKB.js +1 -0
- package/dist/web/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/web/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/web/dist/assets/c3-eo99z4R2.js +1 -0
- package/dist/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/web/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/web/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/web/dist/assets/clarity-D53aC0YG.js +1 -0
- package/dist/web/dist/assets/clock-DCbfDkWu.js +6 -0
- package/dist/web/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/web/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/web/dist/assets/cobol-nwyudZeR.js +1 -0
- package/dist/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/web/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/web/dist/assets/coq-DkFqJrB1.js +1 -0
- package/dist/web/dist/assets/cpp-CofmeUqb.js +1 -0
- package/dist/web/dist/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/web/dist/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/web/dist/assets/css-DPfMkruS.js +1 -0
- package/dist/web/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/web/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/web/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/web/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/web/dist/assets/dart-CF10PKvl.js +1 -0
- package/dist/web/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/web/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/web/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/web/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/web/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/web/dist/assets/edge-BkV0erSs.js +1 -0
- package/dist/web/dist/assets/elixir-CDX3lj18.js +1 -0
- package/dist/web/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/web/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/web/dist/assets/erb-B12qg9BL.js +1 -0
- package/dist/web/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/web/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/web/dist/assets/fish-BvzEVeQv.js +1 -0
- package/dist/web/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/web/dist/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/web/dist/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/web/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/web/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/web/dist/assets/ghost-symbol-xItVvoCA.svg +5 -0
- package/dist/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/web/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/web/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/web/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/web/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/web/dist/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/web/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/web/dist/assets/gn-n2N0HUVH.js +1 -0
- package/dist/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/web/dist/assets/go-CxLEBnE3.js +1 -0
- package/dist/web/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/web/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/web/dist/assets/hack-CaT9iCJl.js +1 -0
- package/dist/web/dist/assets/haml-B8DHNrY2.js +1 -0
- package/dist/web/dist/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/web/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/web/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/web/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/web/dist/assets/highlighted-body-OFNGDK62-C8yP3qbm.js +1 -0
- package/dist/web/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/web/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/web/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/web/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/web/dist/assets/html-GMplVEZG.js +1 -0
- package/dist/web/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/web/dist/assets/http-jrhK8wxY.js +1 -0
- package/dist/web/dist/assets/hurl-irOxFIW8.js +1 -0
- package/dist/web/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/web/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/web/dist/assets/hyperliquid-logo-Blr66fIk.svg +9 -0
- package/dist/web/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/web/dist/assets/index-3q7g734D.js +54 -0
- package/dist/web/dist/assets/index-DRvGorcf.css +1 -0
- package/dist/web/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/web/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/web/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/web/dist/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/web/dist/assets/jison-wvAkD_A8.js +1 -0
- package/dist/web/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/web/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/web/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/web/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/web/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/web/dist/assets/julia-CxzCAyBv.js +1 -0
- package/dist/web/dist/assets/just-Cw27pwNe.js +1 -0
- package/dist/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/web/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/web/dist/assets/kdl-DV7GczEv.js +1 -0
- package/dist/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/web/dist/assets/kusto-DZf3V79B.js +1 -0
- package/dist/web/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/web/dist/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/web/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/web/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/web/dist/assets/liquid-DYVedYrR.js +1 -0
- package/dist/web/dist/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/web/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/web/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/web/dist/assets/lua-BaeVxFsk.js +1 -0
- package/dist/web/dist/assets/luau-C-HG3fhB.js +1 -0
- package/dist/web/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/web/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/web/dist/assets/marko-CnJfTvn9.js +1 -0
- package/dist/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/web/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/web/dist/assets/mdc-BMNejdWA.js +1 -0
- package/dist/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/web/dist/assets/mermaid-GHXKKRXX-CbzD1Jp7.js +282 -0
- package/dist/web/dist/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/web/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/web/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/web/dist/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/web/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/web/dist/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/web/dist/assets/move-IF9eRakj.js +1 -0
- package/dist/web/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/web/dist/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/web/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/web/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/web/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/web/dist/assets/nim-CVrawwO9.js +1 -0
- package/dist/web/dist/assets/nix-CwoSXNpI.js +1 -0
- package/dist/web/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/web/dist/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/web/dist/assets/odin-BBf5iR-q.js +1 -0
- package/dist/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/web/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/web/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/web/dist/assets/perl-C0TMdlhV.js +1 -0
- package/dist/web/dist/assets/php-Dhbhpdrm.js +1 -0
- package/dist/web/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/web/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/web/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/web/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/web/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/web/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/web/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/web/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/web/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/web/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/web/dist/assets/pug-CGlum2m_.js +1 -0
- package/dist/web/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/web/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/web/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/web/dist/assets/qml-3beO22l8.js +1 -0
- package/dist/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/web/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/web/dist/assets/r-Dspwwk_N.js +1 -0
- package/dist/web/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/web/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/web/dist/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/web/dist/assets/red-bN70gL4F.js +1 -0
- package/dist/web/dist/assets/refresh-cw-B9ZNJZIb.js +6 -0
- package/dist/web/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/web/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/web/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/web/dist/assets/ron-D8l8udqQ.js +1 -0
- package/dist/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/web/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/web/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/web/dist/assets/rst-BrH8l1NY.js +1 -0
- package/dist/web/dist/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/web/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/web/dist/assets/sas-cz2c8ADy.js +1 -0
- package/dist/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/web/dist/assets/scala-C151Ov-r.js +1 -0
- package/dist/web/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/web/dist/assets/scss-OYdSNvt2.js +1 -0
- package/dist/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/web/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/web/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/web/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/web/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/web/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/web/dist/assets/solidity-rGO070M0.js +1 -0
- package/dist/web/dist/assets/soy-Brmx7dQM.js +1 -0
- package/dist/web/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/web/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/web/dist/assets/sql-BLtJtn59.js +1 -0
- package/dist/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/web/dist/assets/stata-BH5u7GGu.js +1 -0
- package/dist/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/web/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/web/dist/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/web/dist/assets/swift-D82vCrfD.js +1 -0
- package/dist/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/web/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/web/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/web/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/web/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/web/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/web/dist/assets/templ-P3uqSqPl.js +1 -0
- package/dist/web/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/web/dist/assets/tex-idrVyKtj.js +1 -0
- package/dist/web/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/web/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/web/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/web/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/web/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/web/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/web/dist/assets/twig-DNn4PbVi.js +1 -0
- package/dist/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/web/dist/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/web/dist/assets/typst-DHCkPAjA.js +1 -0
- package/dist/web/dist/assets/v-BcVCzyr7.js +1 -0
- package/dist/web/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/web/dist/assets/vb-D17OF-Vu.js +1 -0
- package/dist/web/dist/assets/vendor-charts-CfOL2F-E.js +6 -0
- package/dist/web/dist/assets/vendor-react-B0mWfPOm.js +60 -0
- package/dist/web/dist/assets/vendor-viem-wp7lz4Hc.js +22 -0
- package/dist/web/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/web/dist/assets/vesper-DU1UobuO.js +1 -0
- package/dist/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/web/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/web/dist/assets/vue-DN_0RTcg.js +1 -0
- package/dist/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/web/dist/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/web/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/web/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/web/dist/assets/welcome-illustration-B8_SJ7In.svg +319 -0
- package/dist/web/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/web/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/web/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/web/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/web/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/web/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/web/dist/favicon.svg +4 -0
- package/dist/web/dist/index.html +18 -0
- package/package.json +73 -0
|
@@ -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
|
+
```
|