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
@@ -3,7 +3,8 @@ export const FIELDS = {
3
3
  vol5m: (r) => r.vol5m, vol1h: (r) => r.vol1h, vol24: (r) => r.vol24,
4
4
  holders: (r) => r.holders, org: (r) => r.org, top10: (r) => r.top10, dev: (r) => r.dev,
5
5
  lplocked: (r) => r.lpLocked, bundled: (r) => r.bundled, snipers: (r) => r.snipers,
6
- cluster: (r) => r.cluster, larp: (r) => r.larp, devrugs: (r) => r.devRugs,
6
+ cluster: (r) => r.cluster, larp: (r) => r.larp, devrugs: (r) => r.devRugs, rugp: (r) => r.rugP,
7
+ narrative_rank: (r) => r.narrativeRank, narrative_score: (r) => r.narrativeScore,
7
8
  fresh: (r) => r.fresh, mintable: (r) => r.mintable, freezable: (r) => r.freezable,
8
9
  age: (r) => r.ageMin, m5: (r) => r.chg?.m5, h1: (r) => r.chg?.h1, h6: (r) => r.chg?.h6, h24: (r) => r.chg?.h24,
9
10
  buys: (r) => r.buys, sells: (r) => r.sells, bonding: (r) => r.bonding,
@@ -16,6 +17,9 @@ const TAGS = {
16
17
  flag: (r, v) => (v === 'clean' ? (r.flags ?? []).length === 0 : (r.flags ?? []).map((f) => f.toLowerCase()).includes(v.toLowerCase())),
17
18
  verified: (r, v) => (v === 'yes') === !!r.verified,
18
19
  sus: (r, v) => (v === 'yes') === !!r.sus,
20
+ // task-1818: `narrative:ignition` (or spark / peak / fading / dead) = the coin's narrative is in that lifecycle state;
21
+ // `narrative:saturated` = copy-cat saturated. An untracked coin matches nothing (so `!narrative:dead` is true for it).
22
+ narrative: (r, v) => { const k = v.toLowerCase(); return k === 'saturated' ? r.narrativeSaturated === true : !!r.narrativeLifecycle && r.narrativeLifecycle === k; },
19
23
  };
20
24
  export const TAG_NAMES = Object.keys(TAGS);
21
25
  export const ACTIONS = ['alert', 'ticket', 'ask', 'popup', 'tag', 'sound', 'watch'];
@@ -23,7 +23,7 @@ export const LEDGER_SCHEMA = 'dexterm-ledger/1';
23
23
  export const LEDGER_VERSION = 1;
24
24
  export const GENESIS = 'genesis';
25
25
  export const LEDGER_SOURCES = ['paper', 'desk', 'autotrade', 'live'];
26
- export const WALLET_MODES = ['paper', 'devnet', 'live'];
26
+ export const WALLET_MODES = ['paper', 'devnet', 'live', 'real'];
27
27
  // ───────────────────────────── hygiene ─────────────────────────────
28
28
  /** A base58 secret key (64 bytes ≈ 87-88 chars) or a 64-number byte array: never stored, whatever field it is in. */
29
29
  const KEY_SHAPED = /(?:[1-9A-HJ-NP-Za-km-z]{85,90})|(?:\[(?:\s*\d{1,3}\s*,){63}\s*\d{1,3}\s*\])/g;
@@ -0,0 +1,44 @@
1
+ ---
2
+ id: autotrade-executor-kit
3
+ title: Wire up a test executor, check it is alive, and get the digest (dexterm autotrade executor, signal test, report)
4
+ kind: app-help
5
+ screen: all
6
+ feature: autotrade-executor-kit
7
+ tags:
8
+ - app-help
9
+ - executor
10
+ - kit
11
+ - example
12
+ - heartbeat
13
+ - alive
14
+ - silent
15
+ - health
16
+ - test
17
+ - webhook
18
+ - receiver
19
+ - dry
20
+ - run
21
+ - digest
22
+ - report
23
+ - daily
24
+ - weekly
25
+ - divergence
26
+ - slippage
27
+ - latency
28
+ commands:
29
+ - autotrade
30
+ confidence: high
31
+ owner: maintainers
32
+ origin: app-help-generated
33
+ reviewed_by: generated@2026-10-16
34
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
35
+ sources:
36
+ - packages/tui/src/keymap.ts
37
+ - packages/cli/src/main.ts
38
+ - packages/mcp/src/server.ts
39
+ date: 2026-10-16
40
+ ---
41
+
42
+ `dexterm autotrade executor kit --out ~/my-executor` copies the reference executors: a webhook receiver, a `--signal-cmd` hook and a JSONL tail. Each verifies the HMAC, dedupes by nonce, honours the TTL, writes a receipt and a heartbeat, and is DRY RUN: it only logs what it would do, with no wallet code in it. Start one, point a channel at it (`dexterm autotrade signal channels --webhook http://127.0.0.1:8787/signal`), then `dexterm autotrade signal test` sends a test signal (`test: true`, no coin, nothing to trade) and shows, per channel, whether it was delivered, how long it took and the executor's receipt. `dexterm autotrade executor status` shows the last heartbeat, the last receipt and the lag; a real run pauses new buy signals (exits still go out) when nothing is heard for longer than your `executorSilenceMin` limit, and tells you. With receipts that carry fills, `signal status`, `autotrade audit` and `dexterm autotrade report` show paper vs real: slippage against dexterm's own paper fill, latency, partial fills and rejections. `report [--period day|week] [--telegram]` is the digest per strategy and mode with the win rate's interval and a small-sample note; `report --schedule daily|weekly` makes a run with your bot on send it.
43
+
44
+ CLI: `dexterm autotrade`.
@@ -0,0 +1,46 @@
1
+ ---
2
+ id: autotrade-journey
3
+ title: Build a strategy by chat, back-test it, forward-test it, then promote it (paper, then real)
4
+ kind: app-help
5
+ screen: all
6
+ feature: autotrade-journey
7
+ tags:
8
+ - app-help
9
+ - autotrade
10
+ - strategy
11
+ - build
12
+ - chat
13
+ - journey
14
+ - ladder
15
+ - backtest
16
+ - held-out
17
+ - forward
18
+ - test
19
+ - promote
20
+ - promotion
21
+ - always-on
22
+ - real
23
+ - evidence
24
+ commands:
25
+ - autotrade
26
+ tools:
27
+ - strategy_journey
28
+ - strategy_forward_start
29
+ - strategy_forward_stop
30
+ - strategy_forward_report
31
+ - strategy_promote_propose
32
+ confidence: high
33
+ owner: maintainers
34
+ origin: app-help-generated
35
+ reviewed_by: generated@2026-10-16
36
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
37
+ sources:
38
+ - packages/tui/src/keymap.ts
39
+ - packages/cli/src/main.ts
40
+ - packages/mcp/src/server.ts
41
+ date: 2026-10-16
42
+ ---
43
+
44
+ A strategy climbs one ladder, one rung at a time: draft → backtested → forward-tested → always-on (paper) → real. Each rung needs evidence measured on that strategy's exact rules; any rule change starts it again (a rename or arming keeps it). Ask the analyst to build one ("build me a strategy that buys young pairs on a 5-minute push and takes profit at 2x"): it proposes a copy of a preset with changes (strategy_propose_new), you apply it on the Q screen. BACKTESTED: `dexterm autotrade backtest <id>` or strategy_backtest runs it on recorded history and on each half of the held-out split (the newest 30% of coins); verdict rule 6 allows gain wording only with at least 20 trades in both halves and a held-out net above 0. FORWARD-TESTED: `dexterm autotrade forward start <id> --hours 24` (or `--trades N`, or strategy_forward_start from the chat) runs the same version on the LIVE tape, on paper, with its own bankroll and run file, in the background next to the always-on service; `forward status`, `forward stop` and `forward report` (the forward numbers next to the backtest: trades, win rate with its interval, net, drawdown, rug rate, fill cost drift, and a plain line when a sample is too small). Only a test that ran its whole window on live data counts. ALWAYS-ON: the analyst can propose it (strategy_promote_propose), you apply it with `dexterm autotrade promote apply <pp-id>` (y on your own terminal) or on the Q screen journey view (`J`, then `y`); it joins autotrade.json and the always-on service runs it on paper. REAL: you set your own limits (`dexterm autotrade limits set`; `signal caps set` sets four of them), then `dexterm autotrade promote <id> --to real` hands over to `signal arm` (evidence panel, typed phrase with a one-time code). No tool or model can apply a promotion, skip a rung, set a cap, pick a bankroll or arm real mode. `dexterm autotrade journey <id>` shows where a strategy stands. Paper by default; not financial advice.
45
+
46
+ CLI: `dexterm autotrade`.
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: autotrade-limits
3
+ title: Set your own real-mode limits: per trade, per day, open positions, loss stops, the breaker (dexterm autotrade limits)
4
+ kind: app-help
5
+ screen: all
6
+ feature: autotrade-limits
7
+ tags:
8
+ - app-help
9
+ - limits
10
+ - limit
11
+ - caps
12
+ - cap
13
+ - size
14
+ - sizing
15
+ - per
16
+ - trade
17
+ - daily
18
+ - loss
19
+ - drawdown
20
+ - breaker
21
+ - streak
22
+ - exposure
23
+ - slippage
24
+ - ttl
25
+ - rate
26
+ - raise
27
+ - lower
28
+ - scope
29
+ commands:
30
+ - autotrade
31
+ tools:
32
+ - trading_limits
33
+ - limits_propose
34
+ confidence: high
35
+ owner: maintainers
36
+ origin: app-help-generated
37
+ reviewed_by: generated@2026-10-16
38
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
39
+ sources:
40
+ - packages/tui/src/keymap.ts
41
+ - packages/cli/src/main.ts
42
+ - packages/mcp/src/server.ts
43
+ date: 2026-10-16
44
+ ---
45
+
46
+ Every limit real mode enforces is yours to set, in one file (`~/.dexterm/autotrade/real/limits.json`, schema `dexterm-limits/1`): per trade as SOL or as % of the book (the smaller wins), SOL and buys per day, open positions, exposure, min and max position, per coin per day, a daily loss stop, a drawdown breaker, a loss-streak pause, max hold time, the evidence floor for arming (`minForwardTrades`: closed paper trades in a completed forward test, placeholder 10), min liquidity and market cap, max slippage and price impact, the signal TTL, a buy rate limit, an optional sell rate (sells are never capped unless you set one) and how long a silent executor may stay silent. `dexterm autotrade limits show [--strategy ID] [--account ID]` lists what is in force and where each number comes from; `limits set perTradeSol=0.5 dailyLossSol=0.3` (or `--scope real|paper|strategy:ID|account:ID`) changes them: a global number replaces the placeholder default, every other scope can only tighten, and the stricter always wins. Paper runs ignore them unless you add a `paper` scope; then a single paper run (not `run --all`) obeys them on its own state (a replay then needs `--sol-usd N`). Daily counters cover the whole home (every strategy and account), so a strategy or account number can only stop buys sooner. Lowering is immediate, even for a running real run; raising shows the old -> new diff and needs the typed phrase on your own terminal, and applies from the next run. `limits diff`, `limits accept` (a hand-edited file), `limits reset`, `limits breaker reset` (typed) and `limits explain` do the rest. The defaults (0.25 SOL a trade, 1 SOL a day, 20 buys, 3 open, stop at -0.5 SOL a day) are placeholders: arming asks for your own numbers first. The analyst can read and explain them (`trading_limits`) and propose a change as a diff card (`limits_propose`); it can never apply one.
47
+
48
+ CLI: `dexterm autotrade`.
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: autotrade-real-signal
3
+ title: Real mode: send a strategy's trades to your own executor as LIVE TRADE FIRE signals (dexterm autotrade signal)
4
+ kind: app-help
5
+ screen: all
6
+ feature: autotrade-real-signal
7
+ tags:
8
+ - app-help
9
+ - real
10
+ - mode
11
+ - live
12
+ - trade
13
+ - fire
14
+ - signal
15
+ - signals
16
+ - executor
17
+ - webhook
18
+ - hook
19
+ - jsonl
20
+ - receipt
21
+ - receipts
22
+ - arm
23
+ - caps
24
+ - kill
25
+ - outbox
26
+ - nonce
27
+ commands:
28
+ - autotrade
29
+ tools:
30
+ - trade_fire_feed
31
+ confidence: high
32
+ owner: maintainers
33
+ origin: app-help-generated
34
+ reviewed_by: generated@2026-10-16
35
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
36
+ sources:
37
+ - packages/tui/src/keymap.ts
38
+ - packages/cli/src/main.ts
39
+ - packages/mcp/src/server.ts
40
+ date: 2026-10-16
41
+ ---
42
+
43
+ Real mode runs a strategy exactly like paper (the same clamp, exits, monitor and run file) and sends every buy and sell it fills, first, as a LIVE TRADE FIRE signal (`dexterm-trade-fire/1`: buy or sell, mint, symbol, size in SOL and % of book, the sell fraction and exit reason, strategy, run, account, an always-growing nonce, an idempotency id and an expiry) to YOUR executor: a Telegram trading bot of your choice or any script. dexterm holds no key and signs nothing. Set channels with `dexterm autotrade signal channels --webhook URL | --signal-cmd '["/abs/path"]' | --jsonl on | --mcp on | --telegram on` (they live in connectors.json next to the Telegram setup; a bot cannot read another bot, so the Telegram copy alone is not enough), a webhook HMAC secret with `signal secret generate --out FILE`, hard caps with `signal caps set` (raising needs a typed confirmation), then arm on your own terminal with `dexterm autotrade signal arm <id>` (evidence panel + a typed phrase with a one-time code; any later edit disarms; below the evidence floor, a completed forward test with your `minForwardTrades` closed paper trades and a backtest of these exact rules, or past a missing rung of the ladder, it refuses unless you first type a separate OVERRIDE phrase, which is journaled) and run `dexterm autotrade run <id> --real` (live data only, in the foreground: in 0.2.0 the always-on service runs paper strategies only). Delivery is at least once from a restart-safe outbox, in nonce order, retried until acked or expired; the executor dedupes by nonce, ignores expired signals and acts only on its own account. Every run ends with a `halted` signal that lists the positions still open; the run's last lines and the Telegram copy name them too. Open positions are carried to the next real run of the same strategy and account, whose exits keep firing; while no real run is running NO signal goes out, sells included, so manage them in your executor. Positions stay unconfirmed until `dexterm autotrade receipt <nonce> executed|rejected|failed` (data only). `signal kill` stops every signal; `signal status`, `signal tail`, `receipt list` and `autotrade audit` show the outbox, receipts and drift; agents can read the MCP feed with trade_fire_feed. No model, tool or chat tap can arm real mode, raise a cap or lift the kill switch. Experimental; not financial advice.
44
+
45
+ CLI: `dexterm autotrade`.
@@ -0,0 +1,41 @@
1
+ ---
2
+ id: classification-models
3
+ title: Pick a classification model (Kev, hosted Jev, or the built-in scores)
4
+ kind: app-help
5
+ screen: all
6
+ feature: classifier
7
+ tags:
8
+ - app-help
9
+ - classifier
10
+ - classification
11
+ - kev
12
+ - jev
13
+ - model
14
+ - probability
15
+ - rug
16
+ - drain
17
+ - llama
18
+ - calibrated
19
+ - typesafe
20
+ - experimental
21
+ commands:
22
+ - classifier
23
+ tools:
24
+ - classify_coin
25
+ - classify_batch
26
+ - classifier_status
27
+ confidence: high
28
+ owner: maintainers
29
+ origin: app-help-generated
30
+ reviewed_by: generated@2026-10-16
31
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
32
+ sources:
33
+ - packages/tui/src/keymap.ts
34
+ - packages/cli/src/main.ts
35
+ - packages/mcp/src/server.ts
36
+ date: 2026-10-16
37
+ ---
38
+
39
+ EXPERIMENTAL. A classification model answers typed questions about one coin with a probability per answer: p(drain within 6 h) and RUG / WIN / DUD over 6 h, or a narrative category. `dexterm classifier list` shows the choices: `heuristic` (the built-in H1 rug score and LARP link score; the default, no download), `kev-local` (an open Kev decision model on your own machine through llama.cpp: `dexterm classifier pull kev-4b-q4` shows the size and source and asks first, verifies the sha256, then `dexterm classifier pick kev-local kev-4b-q4` and `dexterm classifier serve`), `jev-hosted` (TypeSafe's hosted Jev with your own API key: `dexterm classifier key set`; per-call cost and a daily call cap), `jev-open` (the open JEV students on a vLLM server), and `claude` / `ollama-llm` zero-shot baselines. `dexterm classifier doctor` reads RAM, CPU and GPU/VRAM and recommends a tier. If the picked model is unreachable the built-in scores answer and say so. Agents use the `classify_coin`, `classify_batch` (triage: flag / pass / escalate) and `classifier_status` MCP tools; a watch rule can use `rugp` (e.g. `when rugp > 0.8 then alert(warn, "...")`). How each model scored on dexterm's own labelled history is on the docs page. Every answer is a model estimate with the model id, never advice. Docs: https://dexterm.xyz/docs/classifier/
40
+
41
+ CLI: `dexterm classifier`.
@@ -33,6 +33,6 @@ sources:
33
33
  date: 2026-10-16
34
34
  ---
35
35
 
36
- dexterm never holds a key and never signs or sends a transaction: there is no trading wallet, no signer and no live order in dexterm. Live trading happens in a Telegram trading bot of your choice, which holds its own wallet; you act in that bot. dexterm's part is the Telegram connector to your OWN bot (`dexterm telegram setup`): alerts, signals and run control for your paper runs. dexterm 0.1.7 does not place orders in a trading bot for you. Paper trading (the ticket, paper accounts, paper autotrade) is local. `dexterm wallet link` keeps a Phantom public key for display only. Not financial advice. Full docs: https://dexterm.xyz/docs/live-trading/
36
+ dexterm never holds a key and never signs or sends a transaction: there is no trading wallet, no signer and no live order in dexterm. Live trading happens in a Telegram trading bot of your choice, which holds its own wallet; you act in that bot. dexterm's part is the Telegram connector to your OWN bot (`dexterm telegram setup`): alerts, signals and run control for your paper runs. dexterm does not place orders in a trading bot for you: in real mode (0.2.0, experimental) a strategy you armed on your own terminal sends a signal for each trade to an executor you run, and your executor places the order by its own rules (`dexterm autotrade signal`, https://dexterm.xyz/docs/real-mode/). Paper trading (the ticket, paper accounts, paper autotrade) is local. `dexterm wallet link` keeps a Phantom public key for display only. Not financial advice. Full docs: https://dexterm.xyz/docs/live-trading/
37
37
 
38
38
  CLI: `dexterm telegram`, `dexterm wallet`, `dexterm live`.
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: narratives-tracker
3
+ title: Track memes and narratives (dexterm narratives, experimental)
4
+ kind: app-help
5
+ screen: narrative
6
+ feature: narratives
7
+ tags:
8
+ - app-help
9
+ - narratives
10
+ - narrative
11
+ - memes
12
+ - meme
13
+ - copycat
14
+ - lifecycle
15
+ - ignition
16
+ - heat
17
+ - saturated
18
+ - experimental
19
+ keys:
20
+ - n
21
+ - enter
22
+ actions:
23
+ - narrative.view
24
+ - narrative.drill
25
+ commands:
26
+ - narratives
27
+ tools:
28
+ - narratives_top
29
+ - narrative_detail
30
+ - narrative_of
31
+ confidence: high
32
+ owner: maintainers
33
+ origin: app-help-generated
34
+ reviewed_by: generated@2026-10-16
35
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
36
+ sources:
37
+ - packages/tui/src/keymap.ts
38
+ - packages/cli/src/main.ts
39
+ - packages/mcp/src/server.ts
40
+ date: 2026-10-16
41
+ ---
42
+
43
+ EXPERIMENTAL. The narratives tracker groups coins by the theme their name and ticker carry (ticker puns, animals, celebrities, AI agents, seasonal events, copy-cats of a runner) and measures each theme per window: coins, new-coin rate, volume share, unique-trader growth, top runner and drawdown, a lifecycle state (spark / ignition / peak / fading / dead, with the rule that set it) and a copy-cat saturation flag. On the N screen, n flips the board into the NARRATIVES table (the first switch reads the last 26 h of recorded history and takes tens of seconds), enter to see a narrative's coins in spawn order, esc to go back. `dexterm narratives [top|detail ID|of MINT|export]` prints the same from the recorder; the analyst uses narratives_top, narrative_detail and narrative_of. Rules can use narrative_rank, narrative_score and the tags narrative:ignition / narrative:saturated. Keyless and local; measured heat, not advice.
44
+
45
+ Keys: `n` (narrative), `⏎` (narrative). CLI: `dexterm narratives`.
@@ -79,6 +79,10 @@ keys:
79
79
  - !
80
80
  - f
81
81
  - o
82
+ - J
83
+ - F
84
+ - X
85
+ - A
82
86
  actions:
83
87
  - quit
84
88
  - screen.screener
@@ -141,6 +145,10 @@ actions:
141
145
  - autotrade.pause
142
146
  - autotrade.flatten
143
147
  - autotrade.proposal
148
+ - autotrade.journey
149
+ - autotrade.forward
150
+ - autotrade.forwardstop
151
+ - autotrade.promote
144
152
  tools:
145
153
  - strategy_list
146
154
  - autotrade_status
@@ -214,4 +222,8 @@ Keys on this screen:
214
222
  `p` — pause new entries
215
223
  `f` — flatten (confirm)
216
224
  `o` — review chat proposal
225
+ `J` — journey (ladder)
226
+ `F` — forward test (paper)
227
+ `X` — stop forward test
228
+ `A` — review promotion
217
229
  `?` — this help
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: strategy-dashboard
3
+ title: Track how your autotrade strategies perform in a browser, on this machine only (dexterm dash)
4
+ kind: app-help
5
+ screen: all
6
+ tags:
7
+ - app-help
8
+ - dash
9
+ - dashboard
10
+ - performance
11
+ - strategies
12
+ - track
13
+ - equity
14
+ - drawdown
15
+ - compare
16
+ - baseline
17
+ - rugs
18
+ - stuck
19
+ - browser
20
+ - web
21
+ - phone
22
+ commands:
23
+ - dash
24
+ confidence: high
25
+ owner: maintainers
26
+ origin: app-help-generated
27
+ reviewed_by: generated@2026-10-16
28
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
29
+ sources:
30
+ - packages/tui/src/keymap.ts
31
+ - packages/cli/src/main.ts
32
+ - packages/mcp/src/server.ts
33
+ date: 2026-10-16
34
+ ---
35
+
36
+ `dexterm dash` reads your own autotrade run ledgers ($DEXTERM_HOME/autotrade/runs) and serves a dashboard on http://127.0.0.1:4317/ (loopback only; no account, no cloud, nothing leaves the machine; read-only). Views: Overview (every strategy side by side with an equity sparkline), Strategy (equity curve, drawdown, exit reasons, open positions with the engine mark and the realizable value from the last cached pool read, every trade), Rugs & stuck (closed at -80% or worse and stuck positions written off at what they actually sold), Compare (each strategy minus a --baseline with the 95% interval of the difference) and Live status; it refreshes every 30 s. Every number carries its sample size; under 20 closed trades a strategy is exploratory. Flags: --port, --home (repeat for several homes), --baseline ID, --books FILE (your own script's books), --allow-host NAME (a private proxy in front), --json, --export DIR [--redact-mints] (a static read-only snapshot). PAPER results are simulated. Not financial advice.
37
+
38
+ CLI: `dexterm dash`.
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: streamer-overlay
3
+ title: Streamer overlay for OBS (dexterm overlay)
4
+ kind: app-help
5
+ screen: all
6
+ feature: streamer-overlay
7
+ tags:
8
+ - app-help
9
+ - overlay
10
+ - obs
11
+ - stream
12
+ - streamer
13
+ - browser source
14
+ - scene
15
+ - twitch
16
+ - spectator
17
+ - pnl
18
+ - coin card
19
+ - activity
20
+ commands:
21
+ - overlay
22
+ confidence: high
23
+ owner: maintainers
24
+ origin: app-help-generated
25
+ reviewed_by: generated@2026-10-16
26
+ generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
27
+ sources:
28
+ - packages/tui/src/keymap.ts
29
+ - packages/cli/src/main.ts
30
+ - packages/mcp/src/server.ts
31
+ date: 2026-10-16
32
+ ---
33
+
34
+ Put the agent session on a live stream. `dexterm overlay` serves three transparent scenes for an OBS Browser source on 127.0.0.1: the agent activity feed, the coin card the agent is on (name, LARP evidence and the deterministic verdict, a top-10 holder bar, the live holder/rug signals) and the PnL card (the same renderer as the H key; stamped PAPER for the agent's simulated fills, or PAPER / LIVE by wallet mode with `--ledger <tradeId>`). `--scene all` puts all three in one source, `--theme cyberspace|ice|neon` picks a preset. It watches the read-only spectator stream a running `dexterm --spectate-mcp` (or `dexterm agent serve --spectate`) opens; `--replay FILE` plays a saved session and every scene then says SAMPLE DATA. Each printed URL works once (a single-use ticket, 10 minutes to paste it; press n for fresh ones). Addresses are always shortened, every scene shows the age of its data, and the overlay can only watch: it sends nothing back and cannot pause, trade, arm or sign. Full docs: https://dexterm.xyz/docs/overlay/
35
+
36
+ CLI: `dexterm overlay`.
@@ -49,6 +49,6 @@ sources:
49
49
  date: 2026-10-16
50
50
  ---
51
51
 
52
- `dexterm ledger trades` lists every round trip dexterm booked, from the paper ticket, the agent paper desk and autotrade runs, newest first: strategy version, the exit profile and entry reason it was opened with (marked * when not declared with the fill), the exit reason, size and % of book, entry and exit market cap, P/L, hold and MFE/MAE. `positions` shows the open ones. `summary` gives the win rate with its 95% interval, P/L, profit factor, drawdown and rug rate by profile, exit reason, strategy, source and mode; `equity` the realized equity curve; `compare` strategy versions side by side (for strategies run in parallel); `export csv|json|parquet-lite [--out FILE]`; `card <tradeId>` a PnL card from a row. Filters: --source, --mode paper|devnet|live, --strategy id[@version], --profile, --exit, --mint, --run, --days, --status. Reads never write; `dexterm ledger sync` appends to ~/.dexterm/ledger/trades.jsonl (sha256-chained) and `dexterm ledger verify` names the first edited line. Agents read the same rows with the read-only ledger_* tools; `trading_status` and `telegram_status` show settings and state, never a key, address, exact balance, bot token or chat id. A backtest an agent asks for (backtest_request) only runs when you run it: `dexterm autotrade requests`. PAPER rows are simulated; filter by --mode before comparing. Not financial advice. Full docs: https://dexterm.xyz/docs/paper-trading/#the-trade-ledger
52
+ `dexterm ledger trades` lists every round trip dexterm booked, from the paper ticket, the agent paper desk and autotrade runs, newest first: strategy version, the exit profile and entry reason it was opened with (marked * when not declared with the fill), the exit reason, size and % of book, entry and exit market cap, P/L, hold and MFE/MAE. `positions` shows the open ones. `summary` gives the win rate with its 95% interval, P/L, profit factor, drawdown and rug rate by profile, exit reason, strategy, source and mode; `equity` the realized equity curve; `compare` strategy versions side by side (for strategies run in parallel); `export csv|json|parquet-lite [--out FILE]`; `card <tradeId>` a PnL card from a row. Filters: --source, --mode paper|devnet|live|real (real = a real-mode run: dexterm's model of the trades it signalled), --strategy id[@version], --profile, --exit, --mint, --run, --days, --status. Reads never write; `dexterm ledger sync` appends to ~/.dexterm/ledger/trades.jsonl (sha256-chained) and `dexterm ledger verify` names the first edited line. Agents read the same rows with the read-only ledger_* tools; `trading_status` and `telegram_status` show settings and state, never a key, address, exact balance, bot token or chat id. A backtest an agent asks for (backtest_request) only runs when you run it: `dexterm autotrade requests`. PAPER rows are simulated; filter by --mode before comparing. Not financial advice. Full docs: https://dexterm.xyz/docs/paper-trading/#the-trade-ledger
53
53
 
54
54
  CLI: `dexterm ledger`.
@@ -42,8 +42,10 @@ Applying checks the proposal again from scratch: if the strategy changed since i
42
42
 
43
43
  **What the analyst can never change.** The mode (so it can never switch a strategy to live), the book, the daily session budget and the exit-liquidity floor are yours only: a proposal that touches them, directly or by replacing the section around them, is refused before it reaches you. It cannot apply a proposal or skip the second key either. A shipped preset is read-only, so the analyst proposes a copy under a new id instead, always on paper.
44
44
 
45
- **A backtest next to it.** The analyst can backtest a proposal next to the current version on the same window of your recorded history (up to 14 days). That backtest is read-only (nothing is saved), runs one at a time and is rate-limited, and it carries the limits above (https://dexterm.xyz/docs/autotrade#backtests-and-their-limits): read the number of trades before the totals.
45
+ **A backtest next to it.** The analyst can backtest a proposal next to the current version on the same window of your recorded history (up to 14 days). A proposal's backtest saves nothing (a backtest of a strategy itself is recorded as its evidence for the journey (https://dexterm.xyz/docs/build-a-strategy-by-chat)), runs one at a time and is rate-limited, and it carries the limits above (https://dexterm.xyz/docs/autotrade#backtests-and-their-limits): read the number of trades before the totals.
46
46
 
47
47
  An agent you connect over MCP (`dexterm mcp`) gets the same seven tools under the same rules: `strategy_list`, `strategy_get`, `strategy_validate`, `strategy_propose_edit`, `strategy_propose_new`, `strategy_backtest` and `autotrade_status`. An AI scan (https://dexterm.xyz/docs/scan) session cannot propose at all.
48
48
 
49
+ **From a chat to an always-on strategy.** Building a whole strategy by chat, backtesting it with the held-out split, forward-testing it on live data on paper and promoting it one rung at a time (always-on, then real, each applied only by you) has its own page: build a strategy by chat (https://dexterm.xyz/docs/build-a-strategy-by-chat).
50
+
49
51
  Paper only. Not financial advice.
@@ -33,5 +33,6 @@ Press `Q` on any screen for AUTOTRADE, paper only. `tab` moves between its views
33
33
  - **Compare**: `c` on two strategies in the list shows them side by side with the fields that differ first, and `b` backtests both on the same window of recorded history.
34
34
  - **Backtest**: `b` backtests the selected strategy on the last 14 days of your recorded history and shows the report: trades, win rate with its interval, net, drawdown, the tail numbers, an equity line, results by exit rule, profile and trigger, the size clamps that fired, the refused entries and the limits box. `w` runs a sweep around the default exit profile's own settings with the held-out check described below; its verdict is printed as is. Both run in the background, so the app stays live.
35
35
  - **Runner**: a running paper runner's heartbeat, any halt, its candidates, sessions, positions and the last lines of its run file; a runner whose heartbeat is more than 30 seconds old shows as stale. `!` stops it, `p` pauses and resumes new entries, and `f` then `y` flattens it (see Stopping it (https://dexterm.xyz/docs/autotrade#stopping-it)).
36
+ - **Journey**: `J` on a strategy shows its ladder (draft, backtested, forward-tested, always-on, real) with the evidence for each rung, the forward test running or its report next to the backtest, and any promotion waiting for you. `b` backtests it with the held-out split, `F` starts a 24-hour paper forward test on live data and `X` stops it, `A` then `y` applies a pending always-on promotion. Real is never applied from a key (see build a strategy by chat (https://dexterm.xyz/docs/build-a-strategy-by-chat)).
36
37
 
37
38
  Nothing on this screen can switch a strategy to live, arm a mandate or touch a wallet or a key: the mode is not an editable field, an import is always paper, and a strategy that says live is refused for backtests.
@@ -0,0 +1,52 @@
1
+ ---
2
+ id: docs-autotrade-rug-proof-entries-experimental
3
+ title: Autotrade (paper) › Rug-proof entries (experimental)
4
+ kind: docs
5
+ page: autotrade
6
+ page_title: Autotrade (paper)
7
+ heading: Rug-proof entries (experimental)
8
+ anchor: rug-proof-entries-experimental
9
+ url: https://dexterm.xyz/docs/autotrade#rug-proof-entries-experimental
10
+ tags:
11
+ - docs
12
+ - autotrade
13
+ - rug-proof
14
+ - entries
15
+ - experimental
16
+ - paper
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/autotrade.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ Most of the losses in our own paper testing were creator liquidity pulls on hand-made pools: one transaction, no warning, nothing to sell into afterwards. A pull cannot be front-run, so the main defense is to refuse those pools before entering. Turn it on per strategy with `entry.safety.rugproof` (the defaults below are what `{}` gives you):
28
+
29
+ ```json
30
+ "entry": { "safety": { "rugproof": {
31
+ "minPoolAgeMin": 10, "requireSafePool": true, "maxHolderLpPct": 10,
32
+ "maxWithdraws": 0, "withdrawScanTx": 25,
33
+ "liquidityRecheck": { "afterSec": 60, "floorX": 2, "maxDropPct": 15 },
34
+ "routeX": 2, "youngPool": { "underMin": 30, "maxSizePct": 50 },
35
+ "drainGuard": { "pollSec": 10, "liqDropPct": 25, "exitOnNoRoute": true, "minReserveSol": 0.5 }
36
+ } } }
37
+ ```
38
+
39
+ Before an entry, cheapest first, and **fail closed** (a gate that cannot be read refuses the coin as `-unknown` and looks again in 5 minutes):
40
+
41
+ - **pool age**: the pool itself is at least `minPoolAgeMin` minutes old. On our paper record this one gate refused all 8 pools that were later pulled and none of the 5 coins that later ran;
42
+ - **holders**: top-10 and dev shares under the strategy's own safety limits;
43
+ - **a second liquidity read** `afterSec` apart, both well above the exit floor and not falling fast;
44
+ - **pool structure**: a pump.fun migration, or a pool whose LP is verifiably burned or locked; a hand-made pool (wrapped SOL as the base mint) is refused, and so is LP held by its creator or by any one wallet over `maxHolderLpPct`;
45
+ - **withdraw history**: no liquidity `Withdraw` among the pool's newest transactions (a scan that cannot read every transaction refuses);
46
+ - **sell route**: Jupiter returns a token-to-SOL route for `routeX` times the position size.
47
+
48
+ Young or partly verified pools get at most `youngPool.maxSizePct` of the strategy's size. After an entry, the **drain guard** polls the pool every `pollSec` seconds and sells the whole position at once when liquidity falls more than `liqDropPct` from the entry read, the reserve is near zero, or Jupiter finds no route. Every refusal and exit has a named rule (`rugproof:<gate>`) in the run file and the ledger.
49
+
50
+ `execution.stuckWriteOffMin` (paper only, refused in any other mode) closes a paper bag that has been unsellable for that many minutes at what could actually be realized, so a dead coin stops holding a slot. In real mode the bag is still in your wallet and keeps its exit signals.
51
+
52
+ A backtest evaluates only the tick gates (pool age, holders, liquidity) and a pump.fun-mint proxy; the pool, LP, withdraw and route gates need live data. On the history so far, rug-proofing cut the losses a lot and **was still negative per entry**: it loses money more slowly, it does not make a strategy profitable.
@@ -27,5 +27,5 @@ date: 2026-10-16
27
27
  `dexterm autotrade run` is a headless process: start it in a terminal (or a terminal multiplexer such as `tmux`) and it works until you stop it (https://dexterm.xyz/docs/autotrade#stopping-it), `--max-minutes` runs out, or you press Ctrl+C. A two-hour run is measured under What it costs (https://dexterm.xyz/docs/autotrade#what-it-costs-claude-usage-per-session). Screening uses no model at all, so a runner that is only watching costs no Claude usage; usage starts when a coin matches.
28
28
 
29
29
  - **One runner per machine.** A second `run` is refused while one is working. A lock left by a runner that crashed is taken over once its process is gone.
30
- - **Each run has its own paper book.** It starts from the strategy's `bankroll`, and a new run starts a fresh one. A run that ends with positions still open says how many on its last line and in its run file; nothing carries them into the next run.
31
- - **Leave the terminal open.** The runner stops when its terminal session ends, and the computer's sleep pauses it. A background service that starts it with your login and keeps it going is still to come.
30
+ - **Each run has its own paper book.** It starts from the strategy's `bankroll`, and a new run starts a fresh one. A run that ends with positions still open says how many on its last line and in its run file; nothing carries them into the next run (the always-on service (https://dexterm.xyz/docs/autotrade#the-always-on-service) carries them over after a crash).
31
+ - **In a terminal, leave it open.** A runner started by hand stops when its terminal session ends, and the computer's sleep pauses it. The always-on service below starts it with your login instead.
@@ -32,4 +32,6 @@ Three switches, from soft to hard. You use them; your agent cannot. A session ha
32
32
 
33
33
  `p` on the `Q` screen pauses new entries, and `p` again resumes them; open positions keep their exits either way.
34
34
 
35
+ Under the always-on service (https://dexterm.xyz/docs/autotrade#the-always-on-service), a stop or flatten from any of these (or `dexterm autotrade service stop`) also keeps the service stopped until `dexterm autotrade service start`; a pause does not stop it.
36
+
35
37
  With several strategies at once (https://dexterm.xyz/docs/autotrade#several-strategies-at-once), these switches act on every strategy, and `--strategy ID` on `stop`, `flatten`, `pause` and `resume` acts on one. An agent you connect over MCP can stop or pause one strategy you listed there, never all of them and never the panic.
@@ -0,0 +1,59 @@
1
+ ---
2
+ id: docs-autotrade-the-always-on-service
3
+ title: Autotrade (paper) › Running it all day › The always-on service
4
+ kind: docs
5
+ page: autotrade
6
+ page_title: Autotrade (paper)
7
+ heading: The always-on service
8
+ anchor: the-always-on-service
9
+ url: https://dexterm.xyz/docs/autotrade#the-always-on-service
10
+ tags:
11
+ - docs
12
+ - autotrade
13
+ - always-on
14
+ - service
15
+ - running
16
+ - all
17
+ - day
18
+ - paper
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/autotrade.md
26
+ date: 2026-10-16
27
+ ---
28
+
29
+ Install it once and the strategies in your `autotrade.json` (https://dexterm.xyz/docs/autotrade#the-autotradejson-file) keep running: they start when you log in, start again after a crash, never run twice, stop at once on any kill switch, and tell you when they cannot run.
30
+
31
+ dexterm autotrade service status: three paper strategies on the always-on service
32
+
33
+ ```
34
+ dexterm autotrade service install --dry-run # shows exactly what it would write; writes nothing
35
+ dexterm autotrade service install --load # writes it and loads it
36
+ dexterm autotrade service status # running?, guard, crashes, each strategy
37
+ dexterm autotrade service stop # no new entries now; exits keep running; stays stopped
38
+ dexterm autotrade service start # start again (lifts a stop)
39
+ dexterm autotrade service logs # the end of its log
40
+ dexterm autotrade service uninstall # stop, unload, remove exactly what install wrote
41
+ ```
42
+
43
+ - **What install writes.** One small job that runs `dexterm autotrade service ensure` every minute and at login: a LaunchAgent in `~/Library/LaunchAgents/` on macOS (no `KeepAlive`), a systemd user timer in `~/.config/systemd/user/` on Linux (Windows is not supported). Install prints every file in full and checks that it parses before writing anything; `--dry-run` stops there, and without `--load` nothing is loaded. It runs while you are logged in (on Linux, `loginctl enable-linger` is your choice for after logout). Each `DEXTERM_HOME` gets its own job, so a test home never replaces your real one.
44
+ - **What a tick does.** `ensure` does nothing while the service's heartbeat is fresh, and otherwise starts it. The service runs `dexterm autotrade run --all --paper` for every strategy you listed, with the same lock, run files, `Q` screen and switches as a run you start by hand. Flags for it go in `~/.dexterm/autotrade/service.json` (`{ "schema": "dexterm-autotrade-service-config/1", "runArgs": ["--model", "sonnet"] }`; only `--model`, `--sol-usd`, `--config`, `--replay`, `--ms-per-tick`, `--max-minutes` and `--stub`).
45
+ - **After a crash or a restart.** A crash costs at most a minute. The new run checks the crashed run's file, takes over the paper positions it left open (their stops, take-profits, trails and maximum hold keep running from the original entry), and never buys a coin the crashed run already took. An order that had not filled never happened, and it is never sent again.
46
+ - **A crash loop gives up.** Restarts after a crash wait 0, 0, 1, 2 and 4 minutes; the sixth crash within an hour leaves the service down with one notification. `dexterm autotrade service status --clear` lets it start again once you have read the log.
47
+ - **A stop stays a stop.** `service stop`, `dexterm autotrade stop`, `!` on the `Q` screen, `/kill` from your Telegram bot, `dexterm wallet panic`, or simply creating the file `~/.dexterm/autotrade/service/STOP`: new entries halt on the next step, open positions keep their exits until they close (`service stop --flatten --yes` sells them), and the service stays stopped until `dexterm autotrade service start`. Logging out or shutting down is not a stop: it starts again at your next login.
48
+ - **The guard.** Every 10 seconds the service checks the machine and the data. These pause new entries until they clear, and never the exits on what you hold:
49
+
50
+ | guard | when |
51
+ |---|---|
52
+ | disk low | free space under `runner.json` `disk.minFreeGb` (5 GB by default); it lifts 1 GB above that |
53
+ | load high | the 1-minute load above `load.pauseAboveLoad1m` for `load.sustainSec`; it lifts below `load.resumeBelowLoad1m` |
54
+ | busy process | a `load.busyProcs` pattern is running (a render, a test suite) |
55
+ | stale data | no strategy has seen a market tick for 5 minutes |
56
+
57
+ It also tells you, without pausing anything, when the usage guard or a day cap holds new sessions back, when a strategy halts itself on its loss limits, when the strategies' heartbeat goes quiet, and when your market history has stopped growing (`dexterm record install` sets that up; the service trades without it, your backtests need it).
58
+ - **Your bot.** When your Telegram bot (https://dexterm.xyz/docs/telegram) is set up, the service runs it: every strategy's alerts, `/status`, `/pause` and `/kill`, plus a message when the service is down, gives up after a crash loop, a guard trips, a strategy halts on its caps, or the data goes stale.
59
+ - **Light on the machine.** It runs at low priority (nice 10, low IO priority), with a 512 MB memory cap (a leak ends in a restart, not a slow machine), and its logs in `~/.dexterm/autotrade/logs/` are capped at a few MB each.
@@ -0,0 +1,37 @@
1
+ ---
2
+ id: docs-autotrade-the-strategy-dashboard-dexterm-dash
3
+ title: Autotrade (paper) › Several strategies at once › The strategy dashboard (dexterm dash)
4
+ kind: docs
5
+ page: autotrade
6
+ page_title: Autotrade (paper)
7
+ heading: The strategy dashboard (dexterm dash)
8
+ anchor: the-strategy-dashboard-dexterm-dash
9
+ url: https://dexterm.xyz/docs/autotrade#the-strategy-dashboard-dexterm-dash
10
+ tags:
11
+ - docs
12
+ - autotrade
13
+ - strategy
14
+ - dashboard
15
+ - dexterm
16
+ - dash
17
+ - several
18
+ - strategies
19
+ - once
20
+ - paper
21
+ confidence: high
22
+ owner: maintainers
23
+ origin: docs-generated
24
+ reviewed_by: generated@2026-10-16
25
+ generated_from: dexterm/site content/docs (task-1420)
26
+ sources:
27
+ - site/content/docs/autotrade.md
28
+ date: 2026-10-16
29
+ ---
30
+
31
+ ```
32
+ dexterm dash # http://127.0.0.1:4317/ until Ctrl-C
33
+ dexterm dash --json # the same numbers, printed
34
+ dexterm dash --export DIR --redact-mints # a static read-only snapshot (the page + data.json)
35
+ ```
36
+
37
+ The same run files, in a browser: an overview of every strategy, one strategy in detail (its book over time, drawdown, closed trades), rugs and stuck bags, a comparison against a baseline strategy you pick (`--baseline ID`) with a 95% interval, and live status, refreshed every 30 seconds. `--home DIR` reads another dexterm home (repeat it for several), `--books FILE` adds books your own scripts wrote (`dexterm-dash-books/1`). The server listens on 127.0.0.1 only, makes no network request, loads nothing from the internet and changes nothing; `--allow-host NAME` lets a private proxy you run in front of it answer. Paper results are simulated.