dexterm-cli 0.1.7 → 0.2.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 (233) hide show
  1. package/dist/packages/agents/src/spectator.js +31 -3
  2. package/dist/packages/agents/src/tiers.js +12 -0
  3. package/dist/packages/agents/src/tools.js +13 -5
  4. package/dist/packages/autotrade/assets/limits.schema.json +569 -0
  5. package/dist/packages/autotrade/examples/executor/README.md +70 -0
  6. package/dist/packages/autotrade/examples/executor/jsonl-tail-executor.mjs +57 -0
  7. package/dist/packages/autotrade/examples/executor/kit.mjs +144 -0
  8. package/dist/packages/autotrade/examples/executor/signal-cmd-executor.mjs +25 -0
  9. package/dist/packages/autotrade/examples/executor/telegram-bot-recipe.md +47 -0
  10. package/dist/packages/autotrade/examples/executor/webhook-executor.mjs +47 -0
  11. package/dist/packages/autotrade/src/backtest.js +7 -2
  12. package/dist/packages/autotrade/src/chat/config.js +4 -2
  13. package/dist/packages/autotrade/src/chat/control.js +1 -0
  14. package/dist/packages/autotrade/src/chat/notify.js +16 -6
  15. package/dist/packages/autotrade/src/chat/secrets.js +25 -18
  16. package/dist/packages/autotrade/src/chat/service.js +3 -0
  17. package/dist/packages/autotrade/src/engine.js +16 -2
  18. package/dist/packages/autotrade/src/executor-health.js +217 -0
  19. package/dist/packages/autotrade/src/fleet.js +5 -2
  20. package/dist/packages/autotrade/src/forward.js +355 -0
  21. package/dist/packages/autotrade/src/index.js +21 -0
  22. package/dist/packages/autotrade/src/journey.js +477 -0
  23. package/dist/packages/autotrade/src/limits.js +682 -0
  24. package/dist/packages/autotrade/src/outbox.js +394 -0
  25. package/dist/packages/autotrade/src/paper-limits.js +87 -0
  26. package/dist/packages/autotrade/src/real-mode.js +688 -0
  27. package/dist/packages/autotrade/src/receipts.js +330 -0
  28. package/dist/packages/autotrade/src/report.js +168 -0
  29. package/dist/packages/autotrade/src/rugproof-probe.js +415 -0
  30. package/dist/packages/autotrade/src/rugproof.js +231 -0
  31. package/dist/packages/autotrade/src/runner.js +194 -28
  32. package/dist/packages/autotrade/src/service-guard.js +125 -0
  33. package/dist/packages/autotrade/src/service-install.js +215 -0
  34. package/dist/packages/autotrade/src/service-recover.js +232 -0
  35. package/dist/packages/autotrade/src/service.js +289 -0
  36. package/dist/packages/autotrade/src/sessions.js +16 -7
  37. package/dist/packages/autotrade/src/signal-channels.js +312 -0
  38. package/dist/packages/autotrade/src/signal.js +196 -0
  39. package/dist/packages/autotrade/src/strategy-stats.js +344 -0
  40. package/dist/packages/autotrade/src/strategy.js +15 -2
  41. package/dist/packages/autotrade/src/trade-ledger.js +2 -2
  42. package/dist/packages/classifier/src/calibrate.js +138 -0
  43. package/dist/packages/classifier/src/classify.js +107 -0
  44. package/dist/packages/classifier/src/config.js +220 -0
  45. package/dist/packages/classifier/src/dossier.js +95 -0
  46. package/dist/packages/classifier/src/hardware.js +63 -0
  47. package/dist/packages/classifier/src/index.js +18 -0
  48. package/dist/packages/classifier/src/models.js +111 -0
  49. package/dist/packages/classifier/src/providers/heuristic.js +77 -0
  50. package/dist/packages/classifier/src/providers/http.js +63 -0
  51. package/dist/packages/classifier/src/providers/jev-open.js +86 -0
  52. package/dist/packages/classifier/src/providers/llm.js +89 -0
  53. package/dist/packages/classifier/src/providers/systemone-http.js +95 -0
  54. package/dist/packages/classifier/src/questions.js +97 -0
  55. package/dist/packages/classifier/src/registry.js +42 -0
  56. package/dist/packages/classifier/src/snapshot.js +31 -0
  57. package/dist/packages/classifier/src/systemone.js +88 -0
  58. package/dist/packages/classifier/src/types.js +18 -0
  59. package/dist/packages/cli/assets/dash/dash.css +139 -0
  60. package/dist/packages/cli/assets/dash/dash.js +200 -0
  61. package/dist/packages/cli/assets/dash/icon.svg +1 -0
  62. package/dist/packages/cli/assets/dash/index.html +36 -0
  63. package/dist/packages/cli/src/analyst/backend.js +3 -2
  64. package/dist/packages/cli/src/analyst/codex.js +3 -2
  65. package/dist/packages/cli/src/app-help-gen.js +26 -2
  66. package/dist/packages/cli/src/autotrade-cmd/audit.js +19 -2
  67. package/dist/packages/cli/src/autotrade-cmd/backtest.js +21 -4
  68. package/dist/packages/cli/src/autotrade-cmd/executor.js +91 -0
  69. package/dist/packages/cli/src/autotrade-cmd/fleet.js +16 -5
  70. package/dist/packages/cli/src/autotrade-cmd/forward.js +283 -0
  71. package/dist/packages/cli/src/autotrade-cmd/journey.js +208 -0
  72. package/dist/packages/cli/src/autotrade-cmd/limits.js +393 -0
  73. package/dist/packages/cli/src/autotrade-cmd/receipt.js +63 -0
  74. package/dist/packages/cli/src/autotrade-cmd/report.js +79 -0
  75. package/dist/packages/cli/src/autotrade-cmd/run.js +268 -14
  76. package/dist/packages/cli/src/autotrade-cmd/service.js +873 -0
  77. package/dist/packages/cli/src/autotrade-cmd/signal.js +824 -0
  78. package/dist/packages/cli/src/autotrade-cmd.js +50 -4
  79. package/dist/packages/cli/src/classifier-cmd.js +353 -0
  80. package/dist/packages/cli/src/classifier-live.js +81 -0
  81. package/dist/packages/cli/src/dash/data.js +217 -0
  82. package/dist/packages/cli/src/dash/server.js +92 -0
  83. package/dist/packages/cli/src/dash-cmd.js +113 -0
  84. package/dist/packages/cli/src/doctor.js +34 -0
  85. package/dist/packages/cli/src/ledger-cmd.js +4 -2
  86. package/dist/packages/cli/src/live/screens/token-live.js +4 -0
  87. package/dist/packages/cli/src/live/signals.js +8 -0
  88. package/dist/packages/cli/src/main.js +98 -6
  89. package/dist/packages/cli/src/mcp-follow.js +21 -1
  90. package/dist/packages/cli/src/narratives-cmd.js +147 -0
  91. package/dist/packages/cli/src/narratives.js +114 -0
  92. package/dist/packages/cli/src/overlay/model.js +147 -0
  93. package/dist/packages/cli/src/overlay/page.js +146 -0
  94. package/dist/packages/cli/src/overlay/pnl.js +75 -0
  95. package/dist/packages/cli/src/overlay/server.js +170 -0
  96. package/dist/packages/cli/src/overlay-cmd.js +367 -0
  97. package/dist/packages/cli/src/pnl-card.js +4 -0
  98. package/dist/packages/cli/src/record-cmd.js +82 -11
  99. package/dist/packages/cli/src/rules-cmd.js +2 -1
  100. package/dist/packages/cli/src/rules.js +24 -4
  101. package/dist/packages/cli/src/screens/autotrade-journey.js +134 -0
  102. package/dist/packages/cli/src/screens/autotrade-keys.js +13 -0
  103. package/dist/packages/cli/src/screens/autotrade-screen.js +57 -6
  104. package/dist/packages/cli/src/screens/autotrade-ui.js +17 -7
  105. package/dist/packages/cli/src/screens/autotrade-worker.js +4 -2
  106. package/dist/packages/cli/src/screens/narrative.js +154 -2
  107. package/dist/packages/cli/src/state.js +1 -0
  108. package/dist/packages/cli/src/telegram-cmd.js +4 -1
  109. package/dist/packages/cli/src/version.js +1 -1
  110. package/dist/packages/custom/src/rules.js +5 -1
  111. package/dist/packages/data/src/trade/ledger/schema.js +1 -1
  112. package/dist/packages/mcp/assets/kb/app-help/autotrade-executor-kit.md +44 -0
  113. package/dist/packages/mcp/assets/kb/app-help/autotrade-journey.md +46 -0
  114. package/dist/packages/mcp/assets/kb/app-help/autotrade-limits.md +48 -0
  115. package/dist/packages/mcp/assets/kb/app-help/autotrade-real-signal.md +45 -0
  116. package/dist/packages/mcp/assets/kb/app-help/classification-models.md +41 -0
  117. package/dist/packages/mcp/assets/kb/app-help/live-trading.md +1 -1
  118. package/dist/packages/mcp/assets/kb/app-help/narratives-tracker.md +45 -0
  119. package/dist/packages/mcp/assets/kb/app-help/screen-autotrade.md +12 -0
  120. package/dist/packages/mcp/assets/kb/app-help/strategy-dashboard.md +38 -0
  121. package/dist/packages/mcp/assets/kb/app-help/streamer-overlay.md +36 -0
  122. package/dist/packages/mcp/assets/kb/app-help/trade-ledger.md +1 -1
  123. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-change-a-strategy-by-chat.md +3 -1
  124. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-on-the-q-screen.md +1 -0
  125. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-rug-proof-entries-experimental.md +52 -0
  126. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-running-it-all-day.md +2 -2
  127. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-stopping-it.md +2 -0
  128. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-always-on-service.md +59 -0
  129. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-strategy-dashboard-dexterm-dash.md +37 -0
  130. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-it-is-paper-self-directed.md +9 -2
  131. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-it-will-not-do.md +1 -1
  132. package/dist/packages/mcp/assets/kb/docs/docs-autotrade.md +3 -1
  133. package/dist/packages/mcp/assets/kb/docs/docs-beginners-before-any-experimental-trading.md +2 -2
  134. package/dist/packages/mcp/assets/kb/docs/docs-beginners-copy-and-paste-without-surprises.md +0 -1
  135. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-dexterm-says-command-not-found.md +2 -2
  136. package/dist/packages/mcp/assets/kb/docs/docs-beginners-reopen-dexterm-later.md +1 -1
  137. package/dist/packages/mcp/assets/kb/docs/docs-beginners-terminal-shell-prompt-command-output-and-path.md +2 -2
  138. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +1 -1
  139. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows.md +1 -1
  140. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-1-ask-for-a-strategy.md +27 -0
  141. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-2-backtest-it-held-out-split.md +31 -0
  142. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-3-forward-test-it-on-live-data.md +44 -0
  143. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-4-promote-it-to-always-on-paper.md +36 -0
  144. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-5-real-only-if-you-choose.md +36 -0
  145. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-the-ladder.md +41 -0
  146. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-the-report.md +31 -0
  147. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat-what-the-analyst-knows.md +30 -0
  148. package/dist/packages/mcp/assets/kb/docs/docs-build-a-strategy-by-chat.md +26 -0
  149. package/dist/packages/mcp/assets/kb/docs/docs-classifier-hosted-jev-with-your-own-key.md +34 -0
  150. package/dist/packages/mcp/assets/kb/docs/docs-classifier-how-they-measured-on-dexterm-s-own-history.md +52 -0
  151. package/dist/packages/mcp/assets/kb/docs/docs-classifier-set-up-kev-on-your-own-machine.md +39 -0
  152. package/dist/packages/mcp/assets/kb/docs/docs-classifier-settings.md +35 -0
  153. package/dist/packages/mcp/assets/kb/docs/docs-classifier-the-choices.md +36 -0
  154. package/dist/packages/mcp/assets/kb/docs/docs-classifier-where-it-plugs-in.md +29 -0
  155. package/dist/packages/mcp/assets/kb/docs/docs-classifier-which-model-for-which-machine.md +42 -0
  156. package/dist/packages/mcp/assets/kb/docs/docs-classifier.md +32 -0
  157. package/dist/packages/mcp/assets/kb/docs/docs-cli-invocations.md +1 -1
  158. package/dist/packages/mcp/assets/kb/docs/docs-configuration-headless-recorder-dexterm-record.md +3 -0
  159. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading.md +1 -1
  160. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-recorded-history-and-retention.md +1 -0
  161. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +3 -3
  162. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +2 -2
  163. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +2 -11
  164. package/dist/packages/mcp/assets/kb/docs/docs-getting-started.md +2 -2
  165. package/dist/packages/mcp/assets/kb/docs/docs-going-real-executor-health.md +38 -0
  166. package/dist/packages/mcp/assets/kb/docs/docs-going-real-paper-vs-real.md +33 -0
  167. package/dist/packages/mcp/assets/kb/docs/docs-going-real-the-digest.md +36 -0
  168. package/dist/packages/mcp/assets/kb/docs/docs-going-real-the-executor-kit.md +48 -0
  169. package/dist/packages/mcp/assets/kb/docs/docs-going-real-the-whole-path.md +37 -0
  170. package/dist/packages/mcp/assets/kb/docs/docs-going-real-what-dexterm-does-and-never-does.md +44 -0
  171. package/dist/packages/mcp/assets/kb/docs/docs-going-real-your-limits.md +77 -0
  172. package/dist/packages/mcp/assets/kb/docs/docs-going-real.md +24 -0
  173. package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +2 -2
  174. package/dist/packages/mcp/assets/kb/docs/docs-larp-paste-a-coin-on-the-web.md +1 -1
  175. package/dist/packages/mcp/assets/kb/docs/docs-larp-the-larp-score.md +1 -1
  176. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-changed-in-0-1-7.md +1 -1
  177. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-real-mode-your-strategy-s-trades-to-your.md +31 -0
  178. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-the-short-version.md +1 -1
  179. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-using-a-trading-bot-with-dexterm.md +0 -2
  180. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-what-dexterm-does-not-do.md +1 -1
  181. package/dist/packages/mcp/assets/kb/docs/docs-narratives-how-coins-are-grouped.md +39 -0
  182. package/dist/packages/mcp/assets/kb/docs/docs-narratives-limits.md +29 -0
  183. package/dist/packages/mcp/assets/kb/docs/docs-narratives-what-is-measured.md +44 -0
  184. package/dist/packages/mcp/assets/kb/docs/docs-narratives-what-testing-showed.md +43 -0
  185. package/dist/packages/mcp/assets/kb/docs/docs-narratives-where-to-find-it.md +37 -0
  186. package/dist/packages/mcp/assets/kb/docs/docs-narratives.md +29 -0
  187. package/dist/packages/mcp/assets/kb/docs/docs-overlay-before-you-start.md +33 -0
  188. package/dist/packages/mcp/assets/kb/docs/docs-overlay-limits.md +30 -0
  189. package/dist/packages/mcp/assets/kb/docs/docs-overlay-options.md +36 -0
  190. package/dist/packages/mcp/assets/kb/docs/docs-overlay-security-model.md +36 -0
  191. package/dist/packages/mcp/assets/kb/docs/docs-overlay-set-it-up-in-obs-step-by-step.md +49 -0
  192. package/dist/packages/mcp/assets/kb/docs/docs-overlay-the-pnl-scene-paper-and-live.md +34 -0
  193. package/dist/packages/mcp/assets/kb/docs/docs-overlay-the-three-scenes.md +35 -0
  194. package/dist/packages/mcp/assets/kb/docs/docs-overlay-what-is-redacted.md +31 -0
  195. package/dist/packages/mcp/assets/kb/docs/docs-overlay.md +25 -0
  196. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading.md +1 -1
  197. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-receipts-what-your-executor-did.md +42 -0
  198. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-safety.md +34 -0
  199. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-set-it-up.md +47 -0
  200. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-the-channels.md +42 -0
  201. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-the-signal.md +48 -0
  202. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-what-it-is.md +37 -0
  203. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-what-it-will-not-do.md +34 -0
  204. package/dist/packages/mcp/assets/kb/docs/docs-real-mode-where-you-see-it.md +34 -0
  205. package/dist/packages/mcp/assets/kb/docs/docs-real-mode.md +27 -0
  206. package/dist/packages/mcp/assets/kb/docs/docs-screens-bubble-map.md +1 -1
  207. package/dist/packages/mcp/assets/kb/docs/docs-spectator-streaming-it.md +1 -0
  208. package/dist/packages/mcp/assets/kb/docs/docs-telegram-what-it-is.md +1 -1
  209. package/dist/packages/mcp/assets/kb/docs/docs-voice-linux-and-windows.md +2 -2
  210. package/dist/packages/mcp/assets/kb/entries/autotrade.md +4 -2
  211. package/dist/packages/mcp/assets/kb/entries/narratives-tracker.md +45 -0
  212. package/dist/packages/mcp/src/autotrade-tools.js +168 -5
  213. package/dist/packages/mcp/src/engine/restrictions.js +3 -3
  214. package/dist/packages/mcp/src/index.js +1 -1
  215. package/dist/packages/mcp/src/ledger-tools.js +155 -7
  216. package/dist/packages/mcp/src/server.js +125 -10
  217. package/dist/packages/mcp/src/spectator-sink.js +27 -0
  218. package/dist/packages/narratives/src/cluster.js +193 -0
  219. package/dist/packages/narratives/src/embed.js +184 -0
  220. package/dist/packages/narratives/src/export.js +60 -0
  221. package/dist/packages/narratives/src/index.js +10 -0
  222. package/dist/packages/narratives/src/label.js +48 -0
  223. package/dist/packages/narratives/src/normalize.js +179 -0
  224. package/dist/packages/narratives/src/recorder.js +93 -0
  225. package/dist/packages/narratives/src/tracker.js +328 -0
  226. package/dist/packages/recorder/src/exit-probes.js +215 -0
  227. package/dist/packages/recorder/src/index.js +1 -0
  228. package/dist/packages/recorder/src/recorder.js +11 -1
  229. package/dist/packages/recorder/src/retention.js +4 -0
  230. package/dist/packages/recorder/src/schema.js +20 -1
  231. package/dist/packages/tui/src/keymap.js +12 -0
  232. package/package.json +3 -1
  233. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +0 -39
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: docs-real-mode-receipts-what-your-executor-did
3
+ title: Real mode (LIVE TRADE FIRE signals) › Receipts: what your executor did
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: Receipts: what your executor did
8
+ anchor: receipts-what-your-executor-did
9
+ url: https://dexterm.xyz/docs/real-mode#receipts-what-your-executor-did
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - receipts
14
+ - executor
15
+ - did
16
+ - real
17
+ - mode
18
+ - live
19
+ - trade
20
+ - fire
21
+ - signals
22
+ confidence: high
23
+ owner: maintainers
24
+ origin: docs-generated
25
+ reviewed_by: generated@2026-10-16
26
+ generated_from: dexterm/site content/docs (task-1420)
27
+ sources:
28
+ - site/content/docs/real-mode.md
29
+ date: 2026-10-16
30
+ ---
31
+
32
+ dexterm cannot see your executor's wallet trades, so a real position stays **unconfirmed** until a receipt arrives. A receipt is data only: it never makes dexterm buy, sell or change anything.
33
+
34
+ ```
35
+ dexterm autotrade receipt 42 executed --size-sol 0.049 --price 0.00121 --tokens 40500 --tx <signature>
36
+ dexterm autotrade receipt 43 rejected --reason "slippage too high"
37
+ dexterm autotrade receipt list
38
+ ```
39
+
40
+ Your executor can also append one line per signal to `~/.dexterm/autotrade/real/receipts.jsonl`: `{"schema":"dexterm-trade-receipt/1","signalId":"…","nonce":42,"accountId":"main","status":"executed","at":1792000004000,"fill":{"priceUsd":0.00121,"sizeSol":0.049,"tokens":40500,"txSig":"…"},"reason":null,"executor":"my-bot"}`. A receipt for an unknown nonce, another account or a mismatched id is counted and ignored.
41
+
42
+ The exits keep firing on dexterm's own view of the market whether or not a receipt came. A receipt with a fill also says how far the real fill landed from dexterm's paper fill (paper vs real (https://dexterm.xyz/docs/going-real#paper-vs-real)). The drift between signals and receipts (unconfirmed, rejected, failed, filled size and price against the signal) shows in `receipt list`, `signal status`, `dexterm autotrade audit` and the run file (receipt rows). `dexterm autotrade signal reconcile --wallet <your PUBLIC address>` reads that address's SOL balance and token holdings (two read-only calls) and lists the coins the real book holds that the wallet does not, and back. It never takes a key.
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-real-mode-safety
3
+ title: Real mode (LIVE TRADE FIRE signals) › Safety
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: Safety
8
+ anchor: safety
9
+ url: https://dexterm.xyz/docs/real-mode#safety
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - safety
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ - **Only you switch a strategy to real**, on your own terminal, with the typed phrase. A model cannot: the mode is on the list of fields only you may change, the agent's decisions have no such verb, no MCP tool arms, and a file edited by hand to `"mode": "real"` is not armed. Arming, an evidence override, disarming, caps and the kill switch are all journaled in `~/.dexterm/autotrade/real/journal.jsonl`.
31
+ - **The limits live outside the model** (all of them (https://dexterm.xyz/docs/going-real#your-limits)). A buy is cut to the per-trade, position, exposure and price-impact limits. A buy over the daily SOL, buys per day, per coin or open positions limit is refused (open positions means every real holding on this machine, whichever run opened it). So is a buy after a loss stop, the drawdown breaker or a loss streak, or while your executor is silent. Sells are never blocked by a limit unless you set the optional sell rate, so an exit always goes out.
32
+ - **The real-mode kill switch**: `dexterm autotrade signal kill` stops every trade-fire signal at once, sells included. It never closes a position: it prints the open ones, and a running real run halts at its next tick and sends one `halted` that lists them for your executor. `dexterm autotrade signal unkill` (typed confirmation) lifts it. The panic switch (`dexterm wallet panic`) halts real runs too: no new entries, exits keep going out.
33
+ - **Chat approvals stay paper.** A one-tap approval never authorises a real signal: a strategy that waits for a tap (`entry.decide: "agent+approve"`, or `dexterm telegram approvals on`) does not start in real mode. Your executor is the last gate.
34
+ - The prompt firewall, the strategy clamp and the session caps apply exactly as on paper.
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: docs-real-mode-set-it-up
3
+ title: Real mode (LIVE TRADE FIRE signals) › Set it up
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: Set it up
8
+ anchor: set-it-up
9
+ url: https://dexterm.xyz/docs/real-mode#set-it-up
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - set
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ 1. **A channel your executor can read** (one or more), saved next to your Telegram setup (https://dexterm.xyz/docs/telegram) in `connectors.json`:
31
+
32
+ ```
33
+ dexterm autotrade signal channels --webhook http://127.0.0.1:8787/fire
34
+ dexterm autotrade signal channels --signal-cmd '["/usr/local/bin/my-executor","--fast"]'
35
+ dexterm autotrade signal channels --jsonl on
36
+ dexterm autotrade signal channels --mcp on
37
+ dexterm autotrade signal channels --telegram on --ttl 60
38
+ ```
39
+
40
+ `off` turns one off. `dexterm telegram status` shows the channels too.
41
+ 2. **A webhook secret** (recommended for the webhook): `dexterm autotrade signal secret generate --out /path/for/your/executor.secret` makes a random secret, keeps it in your keychain (like the bot token) and writes it to that file (0600) for your executor. It is never printed. `secret set` reads one from a pipe; `secret remove` deletes it.
42
+ 3. **Your limits**: `dexterm autotrade limits set perTradeSol=0.25 dailySol=1 buysPerDay=20 maxOpenPositions=3 dailyLossSol=0.5`, and any of the others (Going real, safely (https://dexterm.xyz/docs/going-real#your-limits)): per trade in SOL or % of book, exposure, position size, per coin, loss stops, the drawdown breaker, max hold, floors, slippage, TTL, rate. You can set them globally, per mode, per strategy or per account, and the stricter wins. Raising any of them asks for a typed confirmation on your terminal; lowering does not. The numbers shown are placeholders. `signal caps set --per-trade-sol …` still sets the first four.
43
+ 4. **Arm the strategy** on your own terminal: `dexterm autotrade signal arm my-strategy [--account main]`. On a first arming it asks for your own limits (Enter keeps a placeholder). Then you see the evidence panel: the last backtest of this version, a forward-test report if there is one, the limits in force for this strategy and account, your executor's health and the channels. Then you type the phrase it shows, which confirms those limits, with its one-time code (`REAL my-strategy 7KQ4`). **The evidence floor**: arming needs a completed forward test of these exact rules with at least 10 closed paper trades (your limit `minForwardTrades`) and a backtest on record. Below it, or when arming now would skip a rung of the ladder (https://dexterm.xyz/docs/build-a-strategy-by-chat#the-ladder), arming refuses and says what is missing; only you can go on anyway, by first typing a separate phrase it shows (`OVERRIDE my-strategy 3HXR`, its own one-time code). The override is journaled. No model, tool, flag or pipe can give it. Arming saves the strategy as a new version in mode `real`, and the arming is bound to that exact version: any later edit disarms it. Presets cannot be armed; copy one with `dexterm autotrade new` first.
44
+ 5. **Test the channels**: `dexterm autotrade signal test` sends a `test` signal (`test: true`, no coin: nothing to trade) through each channel and shows, per channel, delivered or not, the latency, and your executor's receipt. The dry-run executor kit (https://dexterm.xyz/docs/going-real#the-executor-kit) answers it out of the box.
45
+ 6. **Run it**: `dexterm autotrade run my-strategy --real`. In 0.2.0 real mode runs **in the foreground only**: the always-on service runs paper strategies, never a real one. Real mode runs on live data only (a replay would send old prices to your executor). `--sol-usd N` fixes the SOL price for sizes in SOL; without it dexterm reads SOL/USD from DexScreener (keyless) and refuses to start without one.
46
+
47
+ `dexterm autotrade signal disarm my-strategy` puts it back on paper. `dexterm autotrade run my-strategy --paper` runs a real strategy's paper twin: no signal goes out. `run --all` stays paper: a real strategy runs on its own.
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: docs-real-mode-the-channels
3
+ title: Real mode (LIVE TRADE FIRE signals) › The channels
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: The channels
8
+ anchor: the-channels
9
+ url: https://dexterm.xyz/docs/real-mode#the-channels
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - channels
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ | Channel | How your executor gets it | What counts as delivered |
31
+ |---|---|---|
32
+ | webhook | `POST` of the line to `http://127.0.0.1`, `localhost` or `[::1]` on any port, or to an `https://` URL of yours. Headers `x-dexterm-signature`, `x-dexterm-nonce`, `idempotency-key`. Redirects are refused. | 2xx; 409 means "already have it". 408, 425, 429, 5xx or no answer is retried; any other 4xx is a rejection. |
33
+ | `--signal-cmd` | Your program is started with its argv (an absolute path; no shell, no PATH lookup), the line on stdin, a minimal environment (`DEXTERM_SIGNAL_NONCE`, `DEXTERM_SIGNAL_ID`, `DEXTERM_SIGNAL_SIGNATURE` when a secret is set; nothing else of dexterm's). 10 seconds per call. | exit 0; exit 3 means "already have it"; exit 2 is a rejection; anything else is retried. |
34
+ | JSONL stream | One line per signal appended to `~/.dexterm/autotrade/real/signals.jsonl` (0600), or the path you set. Tail it. | the line is written. |
35
+ | MCP | The read-only MCP tool `trade_fire_feed` returns the signals after a nonce, plus real mode's state. | the line is written to the feed. |
36
+ | Telegram | A `LIVE TRADE FIRE` message to your paired chat, as plain text. For you to read, not for your executor. | Telegram accepted it. |
37
+
38
+ **Delivery.** A signal is written to the outbox (`~/.dexterm/autotrade/real/outbox.jsonl`) before its fill is booked, so the book never holds anything a signal did not announce. Each channel gets the signals in nonce order, retried with backoff from 1 second up to 30, until it acks, rejects one, or the signal expires (then it is marked expired and never sent late). A restart picks the outbox up where it stopped; nothing is sent twice on purpose, and your executor dedupes the rest by nonce. One process writes the outbox at a time. `dexterm autotrade signal flush` delivers what is pending, and `signal tail` lists the newest signals with their delivery and receipt state.
39
+
40
+ **The dead-man.** Every signal carries its TTL. A run that ends, halts or is killed sends one final `halted` signal with its outstanding nonces. A runner that dies without one (a crash, a power cut) gets its `halted`, with the reason `runner-lost`, the next time the outbox opens: the next real run or `dexterm autotrade signal flush`.
41
+
42
+ **A run that ends holding a position.** Ending a real run (its time limit, Ctrl-C, a stop, the kill switch, a halt, a crash) does not sell anything: what is still open is carried. dexterm keeps its real holdings in `~/.dexterm/autotrade/real/held.json`, across runs. You cannot miss them: the run's last lines print the open coins (`REAL POSITIONS STILL OPEN`), the final `halted` signal lists them in `open`, and its Telegram copy says "these positions are still open: manage them in your executor". **When no real run is running, NO signals go out, sells included**: an open position gets no exit from dexterm until the next real run of its strategy, so manage it in your executor. The next real run of the same strategy and account takes them over and their exits keep firing, so a carried coin still gets its sell signal. A carried coin is never bought again while it is held, it counts against the open-position cap, and a coin another strategy holds is not bought. `dexterm autotrade signal held` lists the holdings; if you closed one yourself in your executor, `dexterm autotrade signal release <mint>` (typed confirmation) forgets it.
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: docs-real-mode-the-signal
3
+ title: Real mode (LIVE TRADE FIRE signals) › The signal
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: The signal
8
+ anchor: the-signal
9
+ url: https://dexterm.xyz/docs/real-mode#the-signal
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - signal
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ One line of JSON, the same bytes on every channel:
31
+
32
+ ```json
33
+ {"schema":"dexterm-trade-fire/1","type":"trade","id":"9f2c…(32 hex)","nonce":42,"issuedAt":1792000000000,"expiresAt":1792000060000,"ttlSec":60,"runId":"…","accountId":"main","strategy":{"id":"my-strategy","version":"1.0.1","hash":"…"},"paper":false,"side":"buy","mint":"…","symbol":"PEPE","sizeSol":0.05,"sizeUsd":10,"pctOfBook":2,"sellFraction":null,"price":{"usd":0.0012,"mcap":1200000,"liqUsd":48000,"solUsd":200},"exitReason":null,"slippageBps":300,"maxImpactPct":3,"positionId":"…"}
34
+ ```
35
+
36
+ - `type`: `trade`, `halted` (the run ended or stopped: `outstanding` lists the nonces it had sent that had not expired, `open` the coins dexterm still counts as held for the account) or `test`.
37
+ - `side` `buy` or `sell`. A buy states `sizeSol` (what to spend) and `pctOfBook`. A sell states `sellFraction`, the share of the position to sell (apply it to what you really hold), and `exitReason` (the exit rule that fired: `hard-stop`, `trail`, `tp-1`, `agent-exit`, `flatten` and so on); its `sizeSol` is dexterm's modelled proceeds and can be 0 for a coin that rugged.
38
+ - `nonce` only ever grows, across runs and restarts. `id` is the idempotency key (a hash of the account, the run and the nonce). `paper` is always `false`.
39
+ - **Firewall**: the only token-made text in a signal is the symbol, reduced to `A-Z a-z 0-9 . _ $ -` (16 characters). No name, no description, no link, no agent text, no path, no key.
40
+
41
+ **What a well-behaved executor does with each signal:**
42
+
43
+ 1. Check the HMAC (when you set a secret): `x-dexterm-signature: t=<unix seconds>,v1=<hex>`, where `v1` is HMAC-SHA256 of `<t>.<body>` with your secret. Refuse a timestamp more than 5 minutes off.
44
+ 2. Ignore it after `expiresAt`. A late signal is never acted on.
45
+ 3. Act once per `nonce` (delivery is at least once: a repeat is normal) and ignore a nonce lower than one already acted on.
46
+ 4. Act only on the `accountId` it was set up for.
47
+
48
+ `SignalReceiver` in `@dexterm/autotrade` does these four checks, if your executor is written in Node.
@@ -0,0 +1,37 @@
1
+ ---
2
+ id: docs-real-mode-what-it-is
3
+ title: Real mode (LIVE TRADE FIRE signals) › What it is
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: What it is
8
+ anchor: what-it-is
9
+ url: https://dexterm.xyz/docs/real-mode#what-it-is
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - real
14
+ - mode
15
+ - live
16
+ - trade
17
+ - fire
18
+ - signals
19
+ confidence: high
20
+ owner: maintainers
21
+ origin: docs-generated
22
+ reviewed_by: generated@2026-10-16
23
+ generated_from: dexterm/site content/docs (task-1420)
24
+ sources:
25
+ - site/content/docs/real-mode.md
26
+ date: 2026-10-16
27
+ ---
28
+
29
+ > **0.2.0, experimental.** Real mode can lead to real trades in a wallet you fund. dexterm never holds a key, never signs and never sends a transaction: your executor does, by its own rules. Not financial advice.
30
+
31
+ arming real mode, stopped at the typed phrase: nothing is armed in this frame
32
+
33
+ Every strategy runs on **paper** by default. In **real** mode the same strategy runs the same way: the same entry rules, the same clamp on every size, the same exits, the same monitor and the same run file as paper. The difference: every buy and sell it fills on its own model of the market also goes out, first, as a **LIVE TRADE FIRE** signal (`dexterm-trade-fire/1`) to the executor you chose.
34
+
35
+ - **Your executor** is a Telegram trading bot you trust, or any script of yours. It holds its own wallet and decides whether to act on a signal.
36
+ - **dexterm** holds no key, signs nothing and builds no transaction. It sends the signal, keeps it in an outbox until it is delivered, and records what your executor says it did.
37
+ - **A bot cannot read another bot's messages**, so the signal also goes over a channel your executor can read: a local webhook, a command, a stream file or MCP. The Telegram message to your own chat is the copy for you.
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-real-mode-what-it-will-not-do
3
+ title: Real mode (LIVE TRADE FIRE signals) › What it will not do
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: What it will not do
8
+ anchor: what-it-will-not-do
9
+ url: https://dexterm.xyz/docs/real-mode#what-it-will-not-do
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - will
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ - Hold, import or ask for a key or a seed phrase, sign, or send a transaction.
31
+ - Trade on a replay, or let a chat tap authorise a real trade.
32
+ - Promise a fill. Your executor decides, at its own price, with its own fees.
33
+ - Run more than one real strategy per machine at a time, run one inside `run --all`, or run one under the always-on service (in 0.2.0 real runs in the foreground only).
34
+ - Send any signal, sells included, while no real run is running, or close a position by itself.
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-real-mode-where-you-see-it
3
+ title: Real mode (LIVE TRADE FIRE signals) › Where you see it
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ heading: Where you see it
8
+ anchor: where-you-see-it
9
+ url: https://dexterm.xyz/docs/real-mode#where-you-see-it
10
+ tags:
11
+ - docs
12
+ - real-mode
13
+ - where
14
+ - real
15
+ - mode
16
+ - live
17
+ - trade
18
+ - fire
19
+ - signals
20
+ confidence: high
21
+ owner: maintainers
22
+ origin: docs-generated
23
+ reviewed_by: generated@2026-10-16
24
+ generated_from: dexterm/site content/docs (task-1420)
25
+ sources:
26
+ - site/content/docs/real-mode.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ - **The run**: every fill and closed trade row of a real run is tagged `real-signal` and names its nonce; the start line says REAL; receipts become rows; the end has a `real_halted` row.
31
+ - **The `Q` screen's runner view**: the mode, the account, the kill switch, the outbox depth, each channel's health, the unconfirmed positions, the limits in force (with a BUYS PAUSED line when a limit or a silent executor stops new buys) and your executor's health.
32
+ - **Telegram**: every message of a real run carries the LIVE badge. A closed trade is a text line (its numbers are dexterm's model, not your executor's fills), never a PnL card.
33
+ - **The trade ledger**: `dexterm ledger` lists a real run's trades with the mode `real` (`--mode real`), never `paper`. Their numbers are dexterm's model of each trade it signalled; your executor's receipts are the real fills, so there is no PnL card for them.
34
+ - **Shared views**: the spectator stream and saved files keep signals and receipts out.
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: docs-real-mode
3
+ title: Real mode (LIVE TRADE FIRE signals)
4
+ kind: docs
5
+ page: real-mode
6
+ page_title: Real mode (LIVE TRADE FIRE signals)
7
+ url: https://dexterm.xyz/docs/real-mode
8
+ tags:
9
+ - docs
10
+ - real-mode
11
+ - real
12
+ - mode
13
+ - live
14
+ - trade
15
+ - fire
16
+ - signals
17
+ confidence: high
18
+ owner: maintainers
19
+ origin: docs-generated
20
+ reviewed_by: generated@2026-10-16
21
+ generated_from: dexterm/site content/docs (task-1420)
22
+ sources:
23
+ - site/content/docs/real-mode.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ Run a strategy in real mode and every buy and sell it decides goes to your own executor (a Telegram trading bot of your choice, or any script) as a signed, numbered LIVE TRADE FIRE signal. dexterm still holds no key and signs nothing. Experimental; not financial advice.
@@ -25,7 +25,7 @@ date: 2026-10-16
25
25
 
26
26
  `M` on a token opens the holder graph. Each of the top token accounts (merged by owner) is a disc whose **area is its share of supply**, drawn on a half-row pixel grid so it is round in the terminal without any image protocol. **Colour is the rule that labelled the wallet, never a judgement:** yellow dev / dev-linked, magenta bundle, green linked by a shared funder (orange for a direct transfer), red sniper, cyan pool / LP / program-owned vault, grey exchange or multi-token whale, dim unlinked. Linked wallets sit inside a dotted ring with a tag like `B·C1 6w 12.0%`; `j`/`k` select a holder (phosphor, with dotted edges to its cluster mates), `m` flips to a treemap (share, not linkage), `z` zooms the selected cluster, `D` forces a deep scan, `r` rescans, `M` opens the popup window (https://dexterm.xyz/docs/popup-chart#bubble-map-popup).
27
27
 
28
- The rules (from the task-1286 spike, replay-tested against its recordings): **P1 pool** (the selling counterparty in ≥ 25 % of launch transactions), **D1 creator** (fee payer of the first transaction referencing the mint), **R1 funder** (two holders share a funding source; a shared exchange funder is a veto, not a link), **R1b** (a holder funded another holder), **R2 bundle** (same-slot buys **and** a shared funder; same-slot alone is a cohort), **R3 transfer** (a direct token move between two holders, pools excluded), **R4 dev-linked** (funded by the creator), **R5 same-slot-created** (weak, shown, never links), **S1 sniper** (bought in the first 3 slots after the first pool trade), **F1 fresh-at-buy** (the wallet's first transactions already move this token), **X1 multi-token-top20**, and **L0** static lists. The **WHY THIS LABEL** panel leads with the holder's class (POOL, CURVE, VAULT, LOCK, CEX, BURN, DEV, LINKED or UNLABELLED) and the on-chain reason, then prints each rule with its confidence (`on-chain`, `program-authority`, `derived`, `seed`, `weak`) and up to three evidence lines; exchange labels come from a typed seed list and always read **unverified**. Cabal-class labels (cabal-candidate, smart, bot, follower, call-group) are hidden until their precision is measured.
28
+ The rules (from the wallet-intel spike, replay-tested against its recordings): **P1 pool** (the selling counterparty in ≥ 25 % of launch transactions), **D1 creator** (fee payer of the first transaction referencing the mint), **R1 funder** (two holders share a funding source; a shared exchange funder is a veto, not a link), **R1b** (a holder funded another holder), **R2 bundle** (same-slot buys **and** a shared funder; same-slot alone is a cohort), **R3 transfer** (a direct token move between two holders, pools excluded), **R4 dev-linked** (funded by the creator), **R5 same-slot-created** (weak, shown, never links), **S1 sniper** (bought in the first 3 slots after the first pool trade), **F1 fresh-at-buy** (the wallet's first transactions already move this token), **X1 multi-token-top20**, and **L0** static lists. The **WHY THIS LABEL** panel leads with the holder's class (POOL, CURVE, VAULT, LOCK, CEX, BURN, DEV, LINKED or UNLABELLED) and the on-chain reason, then prints each rule with its confidence (`on-chain`, `program-authority`, `derived`, `seed`, `weak`) and up to three evidence lines; exchange labels come from a typed seed list and always read **unverified**. Cabal-class labels (cabal-candidate, smart, bot, follower, call-group) are hidden until their precision is measured.
29
29
 
30
30
  **HOLDER INSIGHTS** print their sample every time (`sample top 20 accts of 142.5K holders · 55% supply · funders 7/20 · launch 300 txs`): top-10 raw (by token account, the explorer number), **ex-pool** (POOL / CURVE / VAULT / LOCK / BURN owners dropped; the cluster-adjusted figure, with linked owners merged and exchanges dropped too, rides underneath), a red **main risk** line when a counted owner holds more than 30 %, snipers, bundled supply, dev share (an upper bound when the creator is outside the sample) and fresh wallets. The token screen's Snipers and Bundled supply rows, the new-pairs SNIPE / BUNDLE columns and the `I` token popup read the same scan.
31
31
 
@@ -29,4 +29,5 @@ date: 2026-10-16
29
29
  - **Keep secrets off screen.** Don't show `~/.dexterm/spectator.json`, the `DEXTERM_AGENT_TOKEN` line or `dexterm agent add` output (it prints the agent's token once). `agent serve` prints the token's file path, never the token.
30
30
  - **Use fixtures for a show.** `agent serve` without `--live` uses canned data, so no real coin names or market numbers appear. With `--live`, a capture shows whatever real coins the agent looks at.
31
31
  - **Record and replay.** Add `--record FILE` so you can share the session afterwards. The file is redacted, so you can attach it to a bug report.
32
+ - **Example.** The launch demo clip was made this way: Claude Code, connected with `dexterm mcp install claude-code` against the recorded fixture feed, screened, opened a coin and ran `larp_check`; the watch window showed each call and the user pressed **pause**. Its caption lines are scripted and tagged `✦ claude lines: demo text`, as all marketing footage of Claude lines is.
32
33
  - The window and the stream show model and agent activity, not advice. Whatever an agent concludes is its own reading of tool results.
@@ -30,4 +30,4 @@ It does three things, each one a tier you grant when you pair:
30
30
  - **Control** (https://dexterm.xyz/docs/telegram#control-the-commands): `/status`, `/positions`, `/pause`, `/resume`, `/kill`, `/flatten`, `/strategies`, `/use` and `/approvals on`. Chat can always make things **safer** and never less safe.
31
31
  - **Approve** (https://dexterm.xyz/docs/telegram#approve-one-tap-entries): every new entry waits for your tap, with [Approve] [Half size] [Skip] buttons. Only a button approves; a typed message never does.
32
32
 
33
- It runs on **paper**: an approved entry fills on the paper book, with no key, wallet or signer anywhere. This is also dexterm's part in live trading (https://dexterm.xyz/docs/live-trading): dexterm holds no key, and live trades happen in a separate Telegram trading bot of your choice, which holds its own wallet. dexterm sends the alerts and run control to your chat; in this version it does not place orders in that trading bot for you. Experimental, not financial advice.
33
+ It runs on **paper**: an approved entry fills on the paper book, with no key, wallet or signer anywhere. This is also dexterm's part in live trading (https://dexterm.xyz/docs/live-trading): dexterm holds no key, and live trades happen in a separate Telegram trading bot of your choice, which holds its own wallet. dexterm sends the alerts and run control to your chat; in this version it does not place orders in that trading bot for you. In real mode (https://dexterm.xyz/docs/real-mode) (0.2.0, experimental) your chat also gets a LIVE TRADE FIRE copy of each signal, and the channels your executor reads are set up in the same file as this bot (`dexterm autotrade signal channels`; `dexterm telegram status` shows them). Experimental, not financial advice.
@@ -24,9 +24,9 @@ sources:
24
24
  date: 2026-10-16
25
25
  ---
26
26
 
27
- **Linux is beta (since 0.1.2); Windows voice input is not built.** macOS is the platform voice mode was built and measured on. Off macOS the engines below exist on main, but no person has yet verified real speaker or microphone I/O on Linux hardware. Treat Linux voice as beta. Every voice action has a keyboard equivalent.
27
+ **Linux is beta (since 0.1.2); Windows is not supported.** macOS is the platform voice mode was built and measured on. Off macOS the engines below exist on main, but no person has yet verified real speaker or microphone I/O on Linux hardware. Treat Linux voice as beta. Every voice action has a keyboard equivalent.
28
28
 
29
29
  - **Speech out (Linux).** The neural Piper engine is the default when its prebuilt binary and the `en_GB-alan-medium` voice are installed (`dexterm voice download piper-voice` fetches the voice from Hugging Face, asks first and checks a pinned checksum). `espeak-ng` is the fallback. Both play their WAV through `aplay`, `paplay` or `ffplay`. Synthesis to WAV is verified in Docker on Linux, but real speaker output is not covered by the test suite. `dexterm doctor` names what is missing. Don't use `apt install piper`, which installs an unrelated tool.
30
30
  - **Speech in (Linux).** Apple Speech is macOS-only. The local whisper.cpp engine (`dexterm voice download whisper` fetches its `base.en` model) records with `sox`, `arecord` (alsa-utils) or `ffmpeg -f alsa`. Real microphone capture on Linux is not yet verified on hardware.
31
- - **Windows.** Untested. `espeak-ng` or Piper may speak through `ffplay`, but microphone capture has no Windows-specific input (the `ffmpeg` capture uses a macOS or Linux device), so treat push-to-talk on Windows as not built.
31
+ - **Windows.** dexterm does not support Windows, and voice is not built for it: microphone capture has no Windows input (the `ffmpeg` capture uses a macOS or Linux device).
32
32
  - **Unchanged everywhere.** The router, the clarify-never-guess rules and the hard limits above are platform-independent. Another platform adds engines, not powers: voice can never confirm, sign or raise a cap.
@@ -7,7 +7,7 @@ tags:
7
7
  - paper
8
8
  - backtest
9
9
  - proposal
10
- date: 2026-10-21
10
+ date: 2026-10-24
11
11
  confidence: high
12
12
  owner: maintainers
13
13
  origin: primary-doc
@@ -33,6 +33,8 @@ sources:
33
33
  - "stricter coins" → add a screen clause (`top10 <= 25`) or tighten `/entry/safety/*`.
34
34
  - "stop after a bad day" → lower `/risk/dailyLossHaltPct` or `/risk/drawdown/haltAtPct`.
35
35
 
36
- **Then measure.** `strategy_backtest {proposalId}` runs the current version and the proposal on the same recorded tape (days <= 14, read-only, rate-limited). Quote the trade count and the data limits: small n means little, fills are modelled, and early-entry rugs are often unsellable. A backtest is never a prediction and never financial advice.
36
+ **Then measure.** `strategy_backtest {proposalId}` runs the current version and the proposal on the same recorded tape (days <= 14, rate-limited; a proposal's backtest saves nothing). `strategy_backtest {id}` also runs the strategy on each half of the held-out split and records it as the strategy's backtest evidence. Quote the trade count and the data limits: small n means little, fills are modelled, and early-entry rugs are often unsellable. A backtest is never a prediction and never financial advice.
37
37
 
38
38
  **Status.** `autotrade_status` shows the paper runner (heartbeat, halt, candidates, sessions and spend, positions) and the proposals waiting for the user.
39
+
40
+ **The journey (one rung at a time).** draft → backtested (`strategy_backtest {id}`: held-out split recorded) → forward-tested (`strategy_forward_start {id, hours|trades}`: paper, live data, its own bankroll; read `strategy_forward_report` when it ends; an early stop never counts) → always-on → real (`strategy_promote_propose {id, to}`). `strategy_journey {id}` shows the rungs; evidence binds to the exact rules. Never skip a rung, apply a promotion, set or suggest caps, pick a bankroll or arm anything: say "I proposed it; you apply it". Claim gains only when `heldOut.claim` / `comparison.claim` is true (>= 20 trades in both halves, net above 0); otherwise "too few trades to claim anything".
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: narratives-tracker
3
+ title: The memes + narratives tracker (what its numbers mean, how to relay them)
4
+ tags:
5
+ - narrative
6
+ - meme
7
+ - lifecycle
8
+ - copycat
9
+ - heat
10
+ - trending
11
+ date: 2026-10-28
12
+ confidence: medium
13
+ owner: maintainers
14
+ origin: primary-doc
15
+ reviewed_by: none
16
+ status: experimental
17
+ sources:
18
+ - dexterm app packages/narratives (task-1818): normalize.ts, cluster.ts, tracker.ts (the rules below are the code's)
19
+ - dexterm research/narratives-2026-10/REPORT.md (replay study on the recorded history, TRAIN / VALID / HELD-OUT)
20
+ ---
21
+ **What it is.** `narratives_top`, `narrative_detail` and `narrative_of` read dexterm's own recorded history (last 26 h)
22
+ and group coins by the theme their name and ticker carry: a ticker pun, an animal, a celebrity or politician, an
23
+ AI-agent craze, a season or event, or a copy of a coin that just ran. A coin needs no real project to belong. The
24
+ grouping is a local model (default: a built-in hashed word / letter-trigram / lexicon-theme vector; optionally a small
25
+ open embedding model on CPU), clustered in first-seen order with stable ids. No network, no model call, no key.
26
+
27
+ **What the numbers mean (all measured, per window 5m / 1h / 6h / 24h):** `coins` seen, `newCoins` and `newPerHour`,
28
+ `volume` (each source's rolling window at the coin's newest sample) and `volumeShare` of all tracked coins,
29
+ `traders` (unique traders 1 h) and `tradersGrowth`, `topRunner` (pool of at least 10k USD; `x` since first sighting,
30
+ `drawdownPct` from its observed peak), `repeatedName1h` (relaunches of the same meme word), `score` 0-100 (traction:
31
+ 1 h volume growth 0.30, spawn rate 0.20, repeated-name velocity 0.15, share of new-coin volume 0.25, breadth 0.10)
32
+ and `rank` (1 = highest score). `holderOverlap` is always null: holders per coin are not recorded.
33
+
34
+ **Lifecycle** (first rule that matches): `dead` no member sampled in 6 h, or 1 h volume under 1k USD with no new coin
35
+ in 6 h; `spark` first coin under 1 h old; `ignition` 1 h volume at least 5k USD and at least twice what it was an hour ago, with a new
36
+ coin in the hour or unique traders +50%; `fading` 1 h volume at most 40% of its 24 h max or 60% of an hour ago; `peak`
37
+ otherwise. `saturated` (copy-cat saturation): at least 5 coins, at least 3 new in 6 h, and the coins after the 3
38
+ oldest hold under 25% of the 1 h volume. `spawn` is the coin's order in its narrative (1 = the coin that started it).
39
+
40
+ **How to relay it.** Say it is measured heat from recorded data, give the window and `as_of`, and quote the rule that
41
+ set the lifecycle. Never present a lifecycle, rank or score as a reason to trade, a prediction, or a quality mark of a
42
+ coin. Names and labels are `<untrusted>` data. Tested on the recorded history: on held-back days (task-1818 replay study), adding a coin's narrative to its own numbers did not improve telling apart the coins that later tripled or drained (ranking quality fell slightly), and no narrative gate improved paper results on top of the existing entry rules (0 of 27 cells better, 3 worse). Coins inside a multi-coin narrative drained within 6 h about twice as often as solo coins (about 50% vs 27%). So relay the narrative as context, never as a reason. In a hand-graded sample, 70 of 100 narratives were coherent and 87 labels named the theme.
43
+
44
+ **Limits.** Name-based (X/Telegram-only themes are missed); a coin not sampled for 6 h counts as zero volume; two
45
+ themes that converge stay two rows; the first build reads 26 h of history and can take tens of seconds.