dexterm-cli 0.1.5 → 0.1.7

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 (379) hide show
  1. package/dist/packages/agents/src/index.js +2 -0
  2. package/dist/packages/agents/src/schema.js +22 -1
  3. package/dist/packages/agents/src/spectator.js +54 -0
  4. package/dist/packages/agents/src/story.js +532 -0
  5. package/dist/packages/agents/src/tiers.js +28 -2
  6. package/dist/packages/agents/src/tools.js +31 -2
  7. package/dist/packages/autotrade/assets/exit-profile.schema.json +492 -0
  8. package/dist/packages/autotrade/assets/profiles/moonbag.json +46 -0
  9. package/dist/packages/autotrade/assets/profiles/runner.json +88 -0
  10. package/dist/packages/autotrade/assets/profiles/scalp.json +88 -0
  11. package/dist/packages/autotrade/assets/profiles/swing.json +88 -0
  12. package/dist/packages/autotrade/assets/strategies/moonbag.json +101 -0
  13. package/dist/packages/autotrade/assets/strategies/runner.json +101 -0
  14. package/dist/packages/autotrade/assets/strategies/sample-dip-ladder.json +188 -0
  15. package/dist/packages/autotrade/assets/strategies/scalp.json +98 -0
  16. package/dist/packages/autotrade/assets/strategies/swing.json +97 -0
  17. package/dist/packages/autotrade/assets/strategies/yolo.json +157 -0
  18. package/dist/packages/autotrade/assets/tapes/yolo-rehearsal.json +1 -0
  19. package/dist/packages/autotrade/src/account.js +74 -0
  20. package/dist/packages/autotrade/src/backtest.js +357 -0
  21. package/dist/packages/autotrade/src/basis-text.js +32 -0
  22. package/dist/packages/autotrade/src/chat/approvals.js +484 -0
  23. package/dist/packages/autotrade/src/chat/audit.js +140 -0
  24. package/dist/packages/autotrade/src/chat/config.js +93 -0
  25. package/dist/packages/autotrade/src/chat/connector.js +24 -0
  26. package/dist/packages/autotrade/src/chat/control.js +103 -0
  27. package/dist/packages/autotrade/src/chat/fake.js +100 -0
  28. package/dist/packages/autotrade/src/chat/format.js +71 -0
  29. package/dist/packages/autotrade/src/chat/hub.js +187 -0
  30. package/dist/packages/autotrade/src/chat/index.js +18 -0
  31. package/dist/packages/autotrade/src/chat/notify.js +292 -0
  32. package/dist/packages/autotrade/src/chat/pairing.js +46 -0
  33. package/dist/packages/autotrade/src/chat/redact.js +48 -0
  34. package/dist/packages/autotrade/src/chat/secrets.js +99 -0
  35. package/dist/packages/autotrade/src/chat/service.js +248 -0
  36. package/dist/packages/autotrade/src/chat/telegram.js +290 -0
  37. package/dist/packages/autotrade/src/desk-executor.js +188 -0
  38. package/dist/packages/autotrade/src/engine.js +387 -0
  39. package/dist/packages/autotrade/src/execution-port.js +97 -0
  40. package/dist/packages/autotrade/src/fleet-config.js +169 -0
  41. package/dist/packages/autotrade/src/fleet-control.js +276 -0
  42. package/dist/packages/autotrade/src/fleet.js +639 -0
  43. package/dist/packages/autotrade/src/index.js +53 -0
  44. package/dist/packages/autotrade/src/ledger.js +108 -0
  45. package/dist/packages/autotrade/src/live-source.js +182 -0
  46. package/dist/packages/autotrade/src/monitor-daemon.js +715 -0
  47. package/dist/packages/autotrade/src/monitor.js +190 -0
  48. package/dist/packages/autotrade/src/ollama-sessions.js +137 -0
  49. package/dist/packages/autotrade/src/paper-accounts.js +72 -0
  50. package/dist/packages/autotrade/src/replay.js +198 -0
  51. package/dist/packages/autotrade/src/runner-config.js +99 -0
  52. package/dist/packages/autotrade/src/runner.js +872 -0
  53. package/dist/packages/autotrade/src/safety.js +243 -0
  54. package/dist/packages/autotrade/src/session.js +269 -0
  55. package/dist/packages/autotrade/src/sessions.js +503 -0
  56. package/dist/packages/autotrade/src/store.js +250 -0
  57. package/dist/packages/autotrade/src/strategy.js +256 -0
  58. package/dist/packages/autotrade/src/trade-ledger.js +241 -0
  59. package/dist/packages/autotrade/src/yolo.js +140 -0
  60. package/dist/packages/cli/assets/claude/analyst-system.md +4 -4
  61. package/dist/packages/cli/assets/claude/plugin/skills/REGISTRY.json +1 -1
  62. package/dist/packages/cli/assets/claude/plugin/skills/larp-check/SKILL.md +15 -8
  63. package/dist/packages/cli/assets/claude/plugin/skills/token-dossier/SKILL.md +1 -1
  64. package/dist/packages/cli/src/agent-cmd.js +6 -4
  65. package/dist/packages/cli/src/agent-spectator.js +17 -1
  66. package/dist/packages/cli/src/ai-cmd.js +412 -0
  67. package/dist/packages/cli/src/analyst/backend.js +105 -15
  68. package/dist/packages/cli/src/analyst/codex.js +14 -9
  69. package/dist/packages/cli/src/analyst/larp-gauge.js +60 -0
  70. package/dist/packages/cli/src/analyst/ollama.js +263 -0
  71. package/dist/packages/cli/src/analyst/session.js +17 -3
  72. package/dist/packages/cli/src/app-help-gen.js +51 -15
  73. package/dist/packages/cli/src/autotrade-cmd/audit.js +57 -0
  74. package/dist/packages/cli/src/autotrade-cmd/backtest.js +199 -0
  75. package/dist/packages/cli/src/autotrade-cmd/flatten.js +64 -0
  76. package/dist/packages/cli/src/autotrade-cmd/fleet.js +397 -0
  77. package/dist/packages/cli/src/autotrade-cmd/requests.js +79 -0
  78. package/dist/packages/cli/src/autotrade-cmd/run.js +413 -0
  79. package/dist/packages/cli/src/autotrade-cmd/stop.js +76 -0
  80. package/dist/packages/cli/src/autotrade-cmd/strategies.js +198 -0
  81. package/dist/packages/cli/src/autotrade-cmd/strategy-control.js +174 -0
  82. package/dist/packages/cli/src/autotrade-cmd/telegram-host.js +101 -0
  83. package/dist/packages/cli/src/autotrade-cmd.js +168 -0
  84. package/dist/packages/cli/src/backtest-cmd.js +13 -2
  85. package/dist/packages/cli/src/display.js +208 -23
  86. package/dist/packages/cli/src/doctor.js +62 -3
  87. package/dist/packages/cli/src/export.js +10 -2
  88. package/dist/packages/cli/src/index.js +1 -1
  89. package/dist/packages/cli/src/ledger-cmd.js +288 -0
  90. package/dist/packages/cli/src/live/chart-fills.js +46 -0
  91. package/dist/packages/cli/src/live/dev-history.js +31 -15
  92. package/dist/packages/cli/src/live/index.js +28 -90
  93. package/dist/packages/cli/src/live/screens/newpairs-live.js +1 -1
  94. package/dist/packages/cli/src/live/screens/token-live.js +48 -15
  95. package/dist/packages/cli/src/live/screens/watchlist-live.js +1 -1
  96. package/dist/packages/cli/src/live/trade.js +30 -453
  97. package/dist/packages/cli/src/live/watchlist.js +1 -1
  98. package/dist/packages/cli/src/main.js +290 -199
  99. package/dist/packages/cli/src/mcp-cmd.js +7 -1
  100. package/dist/packages/cli/src/mcp-follow.js +103 -6
  101. package/dist/packages/cli/src/plan-cmd.js +15 -5
  102. package/dist/packages/cli/src/pnl-app.js +31 -21
  103. package/dist/packages/cli/src/pnl-card.js +158 -21
  104. package/dist/packages/cli/src/popup.js +38 -6
  105. package/dist/packages/cli/src/record-cmd.js +141 -20
  106. package/dist/packages/cli/src/scan/ui.js +7 -1
  107. package/dist/packages/cli/src/screens/agent-hud.js +773 -0
  108. package/dist/packages/cli/src/screens/analyst-session.js +11 -4
  109. package/dist/packages/cli/src/screens/analyst.js +3 -2
  110. package/dist/packages/cli/src/screens/autotrade-keys.js +169 -0
  111. package/dist/packages/cli/src/screens/autotrade-proposals.js +123 -0
  112. package/dist/packages/cli/src/screens/autotrade-screen.js +725 -0
  113. package/dist/packages/cli/src/screens/autotrade-ui.js +640 -0
  114. package/dist/packages/cli/src/screens/autotrade-worker.js +89 -0
  115. package/dist/packages/cli/src/screens/brain.js +634 -0
  116. package/dist/packages/cli/src/screens/newpairs.js +1 -1
  117. package/dist/packages/cli/src/screens/overlay.js +5 -2
  118. package/dist/packages/cli/src/screens/plans.js +5 -17
  119. package/dist/packages/cli/src/screens/pnl-chip.js +144 -0
  120. package/dist/packages/cli/src/screens/positions.js +6 -28
  121. package/dist/packages/cli/src/screens/screener.js +1 -0
  122. package/dist/packages/cli/src/screens/ticket.js +38 -205
  123. package/dist/packages/cli/src/screens/token.js +18 -9
  124. package/dist/packages/cli/src/screens/trending.js +1 -1
  125. package/dist/packages/cli/src/state.js +88 -18
  126. package/dist/packages/cli/src/telegram-cmd.js +451 -0
  127. package/dist/packages/cli/src/trade.js +3 -128
  128. package/dist/packages/cli/src/version.js +1 -1
  129. package/dist/packages/cli/src/wallet-cmd.js +39 -340
  130. package/dist/packages/cli/src/wallet-command.js +8 -11
  131. package/dist/packages/cli/src/widgets.js +0 -12
  132. package/dist/packages/custom/src/config.js +20 -2
  133. package/dist/packages/custom/src/schema.js +41 -10
  134. package/dist/packages/custom/src/workspace.js +3 -3
  135. package/dist/packages/data/src/basis.js +191 -0
  136. package/dist/packages/data/src/detail.js +53 -2
  137. package/dist/packages/data/src/index.js +2 -14
  138. package/dist/packages/data/src/larp/score.js +220 -0
  139. package/dist/packages/data/src/larp/x-account.js +316 -0
  140. package/dist/packages/data/src/store.js +14 -5
  141. package/dist/packages/data/src/trade/agent/paper-desk.js +300 -23
  142. package/dist/packages/data/src/trade/agent/rendezvous.js +3 -2
  143. package/dist/packages/data/src/trade/bridge.js +4 -102
  144. package/dist/packages/data/src/trade/ledger/export.js +101 -0
  145. package/dist/packages/data/src/trade/ledger/file.js +135 -0
  146. package/dist/packages/data/src/trade/ledger/fold.js +191 -0
  147. package/dist/packages/data/src/trade/ledger/index.js +9 -0
  148. package/dist/packages/data/src/trade/ledger/schema.js +83 -0
  149. package/dist/packages/data/src/trade/ledger/sources.js +307 -0
  150. package/dist/packages/data/src/trade/ledger/stats.js +123 -0
  151. package/dist/packages/data/src/trade/ledger/tags.js +116 -0
  152. package/dist/packages/data/src/trade/ledger/view.js +51 -0
  153. package/dist/packages/data/src/trade/plans/engine.js +7 -0
  154. package/dist/packages/data/src/trade/plans/index.js +0 -1
  155. package/dist/packages/data/src/trade/plans/mandate.js +28 -15
  156. package/dist/packages/data/src/trade/plans/service.js +4 -28
  157. package/dist/packages/mcp/assets/kb/app-help/autotrade-chat.md +48 -0
  158. package/dist/packages/mcp/assets/kb/app-help/autotrade-parallel.md +42 -0
  159. package/dist/packages/mcp/assets/kb/app-help/autotrade-runner.md +35 -0
  160. package/dist/packages/mcp/assets/kb/app-help/autotrade-stop.md +37 -0
  161. package/dist/packages/mcp/assets/kb/app-help/autotrade-strategies.md +35 -0
  162. package/dist/packages/mcp/assets/kb/app-help/autotrade-telegram.md +40 -0
  163. package/dist/packages/mcp/assets/kb/app-help/chart-trade-markers.md +42 -0
  164. package/dist/packages/mcp/assets/kb/app-help/dev-history.md +1 -1
  165. package/dist/packages/mcp/assets/kb/app-help/larp-check.md +5 -1
  166. package/dist/packages/mcp/assets/kb/app-help/link-a-wallet.md +4 -10
  167. package/dist/packages/mcp/assets/kb/app-help/live-trading.md +38 -0
  168. package/dist/packages/mcp/assets/kb/app-help/live-yolo.md +34 -0
  169. package/dist/packages/mcp/assets/kb/app-help/order-plans.md +1 -1
  170. package/dist/packages/mcp/assets/kb/app-help/price-or-marketcap.md +5 -2
  171. package/dist/packages/mcp/assets/kb/app-help/scan-mode.md +1 -1
  172. package/dist/packages/mcp/assets/kb/app-help/screen-analyst.md +3 -0
  173. package/dist/packages/mcp/assets/kb/app-help/screen-autotrade.md +217 -0
  174. package/dist/packages/mcp/assets/kb/app-help/screen-kol.md +3 -0
  175. package/dist/packages/mcp/assets/kb/app-help/screen-newpairs.md +3 -0
  176. package/dist/packages/mcp/assets/kb/app-help/screen-positions.md +3 -0
  177. package/dist/packages/mcp/assets/kb/app-help/screen-screener.md +3 -0
  178. package/dist/packages/mcp/assets/kb/app-help/screen-token.md +6 -0
  179. package/dist/packages/mcp/assets/kb/app-help/screen-trending.md +3 -0
  180. package/dist/packages/mcp/assets/kb/app-help/screen-watchlist.md +3 -0
  181. package/dist/packages/mcp/assets/kb/app-help/spectate-an-agent.md +2 -1
  182. package/dist/packages/mcp/assets/kb/app-help/standing-mandates.md +1 -1
  183. package/dist/packages/mcp/assets/kb/app-help/trade-ledger.md +54 -0
  184. package/dist/packages/mcp/assets/kb/app-help/use-local-model.md +38 -0
  185. package/dist/packages/mcp/assets/kb/docs/docs-agents-agent-paper-trading.md +7 -3
  186. package/dist/packages/mcp/assets/kb/docs/docs-agents-reading-your-trade-ledger.md +31 -0
  187. package/dist/packages/mcp/assets/kb/docs/docs-agents-untrusted-by-default.md +1 -1
  188. package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +1 -1
  189. package/dist/packages/mcp/assets/kb/docs/docs-analyst-starting-a-run.md +2 -0
  190. package/dist/packages/mcp/assets/kb/docs/docs-analyst-use-a-local-model-instead.md +27 -0
  191. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-sees.md +2 -0
  192. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-backtests-and-their-limits.md +56 -0
  193. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-change-a-strategy-by-chat.md +49 -0
  194. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-checking-the-record-of-a-run.md +28 -0
  195. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-comparing-them.md +41 -0
  196. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-exits-and-wakes.md +76 -0
  197. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-how-a-stop-reaches-the-runner.md +32 -0
  198. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-on-the-q-screen.md +37 -0
  199. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-one-strategy-or-all-of-them.md +35 -0
  200. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-paper-accounts.md +50 -0
  201. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-presets.md +37 -0
  202. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-running-it-all-day.md +31 -0
  203. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-sessions-and-their-limits.md +31 -0
  204. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-several-strategies-at-once.md +33 -0
  205. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-stopping-it.md +35 -0
  206. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-strategies-and-presets.md +34 -0
  207. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-autotrade-json-file.md +48 -0
  208. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-heartbeat.md +27 -0
  209. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-run-file-and-the-heartbeat.md +34 -0
  210. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-the-runner-and-candidate-sessions.md +45 -0
  211. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-each-session-shows-first.md +31 -0
  212. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-it-costs-claude-usage-per-session.md +58 -0
  213. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-it-is-paper-self-directed.md +43 -0
  214. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-what-it-will-not-do.md +31 -0
  215. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-which-account-day-caps-and-the-usage-guard.md +44 -0
  216. package/dist/packages/mcp/assets/kb/docs/docs-autotrade-your-strategies.md +37 -0
  217. package/dist/packages/mcp/assets/kb/docs/docs-autotrade.md +22 -0
  218. package/dist/packages/mcp/assets/kb/docs/docs-beginners-before-any-experimental-trading.md +2 -2
  219. package/dist/packages/mcp/assets/kb/docs/docs-beginners.md +1 -1
  220. package/dist/packages/mcp/assets/kb/docs/docs-configuration-chart-markers.md +30 -0
  221. package/dist/packages/mcp/assets/kb/docs/docs-configuration-chart-y-axis.md +32 -0
  222. package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +4 -1
  223. package/dist/packages/mcp/assets/kb/docs/docs-configuration-files-on-disk.md +1 -0
  224. package/dist/packages/mcp/assets/kb/docs/docs-configuration-headless-recorder-dexterm-record.md +3 -1
  225. package/dist/packages/mcp/assets/kb/docs/docs-configuration-price-display-mode.md +9 -7
  226. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-2-the-one-key-mirror-ticket-a-proposal.md +1 -1
  227. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-3-capped-auto-mirror-default-off-less.md +1 -1
  228. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-what-is-proven-what-is-not.md +1 -1
  229. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading.md +1 -1
  230. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-recorded-history-and-retention.md +36 -0
  231. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-sources.md +1 -0
  232. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-first-run.md +1 -1
  233. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +3 -3
  234. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +1 -1
  235. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-running-the-tests.md +1 -1
  236. package/dist/packages/mcp/assets/kb/docs/docs-getting-started.md +1 -1
  237. package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +1 -0
  238. package/dist/packages/mcp/assets/kb/docs/docs-larp-the-larp-score.md +60 -0
  239. package/dist/packages/mcp/assets/kb/docs/docs-larp-the-verdict.md +0 -2
  240. package/dist/packages/mcp/assets/kb/docs/docs-larp-what-it-looks-at.md +4 -1
  241. package/dist/packages/mcp/assets/kb/docs/docs-larp.md +1 -1
  242. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-changed-in-0-1-7.md +26 -0
  243. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-stopping.md +28 -0
  244. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-the-short-version.md +34 -0
  245. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-using-a-trading-bot-with-dexterm.md +33 -0
  246. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-what-dexterm-does-not-do.md +30 -0
  247. package/dist/packages/mcp/assets/kb/docs/docs-live-trading-what-dexterm-does.md +29 -0
  248. package/dist/packages/mcp/assets/kb/docs/docs-live-trading.md +23 -0
  249. package/dist/packages/mcp/assets/kb/docs/docs-ollama-another-machine.md +28 -0
  250. package/dist/packages/mcp/assets/kb/docs/docs-ollama-autotrade-on-a-local-model.md +29 -0
  251. package/dist/packages/mcp/assets/kb/docs/docs-ollama-check-your-model-dexterm-ai-probe.md +38 -0
  252. package/dist/packages/mcp/assets/kb/docs/docs-ollama-how-we-checked.md +27 -0
  253. package/dist/packages/mcp/assets/kb/docs/docs-ollama-models-without-tool-calling.md +32 -0
  254. package/dist/packages/mcp/assets/kb/docs/docs-ollama-pick-the-engine-globally-or-per-surface.md +43 -0
  255. package/dist/packages/mcp/assets/kb/docs/docs-ollama-restriction-profiles.md +35 -0
  256. package/dist/packages/mcp/assets/kb/docs/docs-ollama-set-it-up-in-two-minutes.md +39 -0
  257. package/dist/packages/mcp/assets/kb/docs/docs-ollama-troubleshooting.md +35 -0
  258. package/dist/packages/mcp/assets/kb/docs/docs-ollama-what-runs-on-a-local-model.md +39 -0
  259. package/dist/packages/mcp/assets/kb/docs/docs-ollama-what-stays-outside-the-model.md +36 -0
  260. package/dist/packages/mcp/assets/kb/docs/docs-ollama-which-model.md +38 -0
  261. package/dist/packages/mcp/assets/kb/docs/docs-ollama-your-own-agent-on-the-local-model.md +28 -0
  262. package/dist/packages/mcp/assets/kb/docs/docs-ollama.md +28 -0
  263. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-letting-an-agent-paper-trade-experimental.md +3 -4
  264. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-link-a-wallet-read-only.md +30 -0
  265. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-order-plans-and-standing-mandates.md +4 -13
  266. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-panic.md +4 -7
  267. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-paper-only-mandates.md +40 -0
  268. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-pnl-cards.md +7 -7
  269. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-safety-model.md +34 -0
  270. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-ticket.md +3 -4
  271. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-trade-ledger.md +42 -0
  272. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-wallet.md +4 -5
  273. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-trade-moments.md +4 -5
  274. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading.md +4 -5
  275. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-buy-and-sell-markers.md +37 -0
  276. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-market-cap-axis.md +1 -1
  277. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-what-it-shows.md +3 -1
  278. package/dist/packages/mcp/assets/kb/docs/docs-scan-the-read.md +2 -0
  279. package/dist/packages/mcp/assets/kb/docs/docs-screens-autotrade-paper.md +26 -0
  280. package/dist/packages/mcp/assets/kb/docs/docs-screens-dev-history.md +10 -7
  281. package/dist/packages/mcp/assets/kb/docs/docs-screens-order-plans.md +1 -1
  282. package/dist/packages/mcp/assets/kb/docs/docs-screens-token-screen.md +2 -0
  283. package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +1 -1
  284. package/dist/packages/mcp/assets/kb/docs/docs-spectator-limits.md +2 -0
  285. package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-agent-hud-spectator-v2.md +58 -0
  286. package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-brain-view-and-the-pnl-chip.md +46 -0
  287. package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-three-surfaces.md +1 -1
  288. package/dist/packages/mcp/assets/kb/docs/docs-spectator.md +1 -1
  289. package/dist/packages/mcp/assets/kb/docs/docs-telegram-approve-one-tap-entries.md +50 -0
  290. package/dist/packages/mcp/assets/kb/docs/docs-telegram-control-the-commands.md +43 -0
  291. package/dist/packages/mcp/assets/kb/docs/docs-telegram-if-something-goes-wrong.md +30 -0
  292. package/dist/packages/mcp/assets/kb/docs/docs-telegram-notify-what-reaches-your-phone.md +41 -0
  293. package/dist/packages/mcp/assets/kb/docs/docs-telegram-set-it-up.md +47 -0
  294. package/dist/packages/mcp/assets/kb/docs/docs-telegram-the-record.md +26 -0
  295. package/dist/packages/mcp/assets/kb/docs/docs-telegram-what-it-is.md +33 -0
  296. package/dist/packages/mcp/assets/kb/docs/docs-telegram-what-it-will-not-do.md +31 -0
  297. package/dist/packages/mcp/assets/kb/docs/docs-telegram.md +23 -0
  298. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-common-questions.md +1 -1
  299. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +4 -0
  300. package/dist/packages/mcp/assets/kb/docs/docs-voice-linux-and-windows.md +1 -1
  301. package/dist/packages/mcp/assets/kb/docs/docs-voice.md +1 -1
  302. package/dist/packages/mcp/assets/kb/docs/docs-yolo-1-replay-it-on-your-own-history.md +42 -0
  303. package/dist/packages/mcp/assets/kb/docs/docs-yolo-2-run-it-on-paper.md +34 -0
  304. package/dist/packages/mcp/assets/kb/docs/docs-yolo-3-watch-it-and-stop-it.md +32 -0
  305. package/dist/packages/mcp/assets/kb/docs/docs-yolo-the-rules.md +37 -0
  306. package/dist/packages/mcp/assets/kb/docs/docs-yolo-what-it-is.md +34 -0
  307. package/dist/packages/mcp/assets/kb/docs/docs-yolo-what-it-will-not-do.md +31 -0
  308. package/dist/packages/mcp/assets/kb/docs/docs-yolo.md +26 -0
  309. package/dist/packages/mcp/assets/kb/entries/autotrade.md +38 -0
  310. package/dist/packages/mcp/src/app-help.js +1 -1
  311. package/dist/packages/mcp/src/autotrade-tools.js +944 -0
  312. package/dist/packages/mcp/src/backtest-requests.js +71 -0
  313. package/dist/packages/mcp/src/engine/config.js +159 -0
  314. package/dist/packages/mcp/src/engine/index.js +10 -0
  315. package/dist/packages/mcp/src/engine/loop.js +101 -0
  316. package/dist/packages/mcp/src/engine/mcp-client.js +123 -0
  317. package/dist/packages/mcp/src/engine/ollama.js +258 -0
  318. package/dist/packages/mcp/src/engine/probe.js +110 -0
  319. package/dist/packages/mcp/src/engine/reason.js +35 -0
  320. package/dist/packages/mcp/src/engine/restrictions.js +111 -0
  321. package/dist/packages/mcp/src/index.js +7 -1
  322. package/dist/packages/mcp/src/ledger-tools.js +346 -0
  323. package/dist/packages/mcp/src/paper-agent.js +5 -2
  324. package/dist/packages/mcp/src/server.js +285 -36
  325. package/dist/packages/mcp/src/spectator-sink.js +85 -0
  326. package/dist/packages/packs/src/backtest.js +3 -1
  327. package/dist/packages/packs/src/index.js +1 -0
  328. package/dist/packages/packs/src/larp-score-backtest.js +119 -0
  329. package/dist/packages/popup/src/pages/chart-lib.js +169 -35
  330. package/dist/packages/popup/src/pages/chart.css +18 -0
  331. package/dist/packages/popup/src/pages/chart.html +6 -1
  332. package/dist/packages/popup/src/pages/chart.js +136 -10
  333. package/dist/packages/popup/src/pages/spectator.css +45 -0
  334. package/dist/packages/popup/src/pages/spectator.html +1 -0
  335. package/dist/packages/popup/src/pages/spectator.js +69 -0
  336. package/dist/packages/popup/src/protocol.js +4 -0
  337. package/dist/packages/popup/src/server.js +9 -1
  338. package/dist/packages/recorder/src/dev-history.js +7 -3
  339. package/dist/packages/recorder/src/index.js +2 -0
  340. package/dist/packages/recorder/src/recorder.js +63 -6
  341. package/dist/packages/recorder/src/retention.js +100 -0
  342. package/dist/packages/recorder/src/schema.js +34 -1
  343. package/dist/packages/recorder/src/ticks.js +237 -0
  344. package/dist/packages/tui/src/canvas.js +7 -0
  345. package/dist/packages/tui/src/fmt.js +53 -0
  346. package/dist/packages/tui/src/index.js +1 -0
  347. package/dist/packages/tui/src/keymap.js +25 -1
  348. package/dist/packages/tui/src/markers.js +219 -0
  349. package/dist/packages/tui/src/widgets.js +158 -6
  350. package/package.json +2 -1
  351. package/dist/packages/data/src/trade/caps.js +0 -323
  352. package/dist/packages/data/src/trade/executor.js +0 -933
  353. package/dist/packages/data/src/trade/plans/executor-live.js +0 -220
  354. package/dist/packages/data/src/trade/rpc-exec.js +0 -229
  355. package/dist/packages/data/src/trade/signer/client.js +0 -197
  356. package/dist/packages/data/src/trade/signer/fast-wallet.js +0 -154
  357. package/dist/packages/data/src/trade/signer/host.js +0 -97
  358. package/dist/packages/data/src/trade/signer/main.js +0 -121
  359. package/dist/packages/data/src/trade/signer/probe-builder.js +0 -85
  360. package/dist/packages/data/src/trade/signer/protocol.js +0 -92
  361. package/dist/packages/data/src/trade/signer/service.js +0 -400
  362. package/dist/packages/data/src/trade/signer/sol-usd-feed.js +0 -98
  363. package/dist/packages/data/src/trade/sol-usd.js +0 -86
  364. package/dist/packages/data/src/trade/swap-build.js +0 -108
  365. package/dist/packages/data/src/trade/token-delta.js +0 -201
  366. package/dist/packages/data/vendor/solana-web3/LICENSE +0 -20
  367. package/dist/packages/data/vendor/solana-web3/NOTICE.md +0 -13
  368. package/dist/packages/data/vendor/solana-web3/index.iife.min.js +0 -20
  369. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-a-live-ticket.md +0 -42
  370. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-before-you-press-size-vs-caps.md +0 -34
  371. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-devnet-signer-mainnet-token.md +0 -35
  372. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-jupiter-rate-limits.md +0 -33
  373. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-link-a-wallet.md +0 -32
  374. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-live-trading-devnet-first.md +0 -30
  375. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-mainnet.md +0 -31
  376. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-live-fire-path-devnet-the-fast-wallet.md +0 -41
  377. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-signer-process.md +0 -34
  378. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +0 -37
  379. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-your-first-live-trade.md +0 -41
@@ -0,0 +1,43 @@
1
+ ---
2
+ id: docs-ollama-pick-the-engine-globally-or-per-surface
3
+ title: Use a local model with Ollama › Pick the engine, globally or per surface
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Pick the engine, globally or per surface
8
+ anchor: pick-the-engine-globally-or-per-surface
9
+ url: https://dexterm.xyz/docs/ollama#pick-the-engine-globally-or-per-surface
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - pick
14
+ - engine
15
+ - globally
16
+ - per
17
+ - surface
18
+ - use
19
+ - local
20
+ - model
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/ollama.md
28
+ date: 2026-10-16
29
+ ---
30
+
31
+ `dexterm ai engine <auto|claude|codex|ollama>` sets the engine for everything; add `--surface analyst|autotrade|agent` to set one surface only (for example the analyst on Claude and paper autotrade on the local model). `dexterm ai status` shows the engine for each surface, the local model, the profile and a quick probe; `dexterm ai status --parity` adds the full list of what runs where.
32
+
33
+ For the analyst the order is: `--analyst-engine`, then `DEXTERM_ANALYST_ENGINE`, then `analyst.engine` in `config.json`, then `ai.json`, then `auto`. **`auto` is unchanged**: Claude Code when it is installed, else Codex, else the local model once you set one up (or Ollama is installed). With none of them, the analyst says how to set up an AI backend, and `dexterm doctor` lists all three ways.
34
+
35
+ The settings live in `~/.dexterm/ai.json` (mode 0600). Only you write it, with `dexterm ai …` or by hand. No MCP tool, chat message, Telegram command or model output can change it.
36
+
37
+ | setting | how |
38
+ |---|---|
39
+ | engine | `dexterm ai engine ollama` · `DEXTERM_AI_PROVIDER` · per surface `--surface S` |
40
+ | model | `dexterm ai model <name>` · `DEXTERM_OLLAMA_MODEL` (when none is set dexterm picks the first suggested model you pulled) |
41
+ | host | `dexterm ai host <url>` · `DEXTERM_OLLAMA_HOST` (default `http://127.0.0.1:11434`) |
42
+ | context | `dexterm ai ctx <tokens>` |
43
+ | profile | `dexterm ai restrictions observe|propose|paper` · `dexterm ai engine ollama --full` · `DEXTERM_AI_RESTRICTIONS` can only lower it |
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: docs-ollama-restriction-profiles
3
+ title: Use a local model with Ollama › Restriction profiles
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Restriction profiles
8
+ anchor: restriction-profiles
9
+ url: https://dexterm.xyz/docs/ollama#restriction-profiles
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - restriction
14
+ - profiles
15
+ - use
16
+ - local
17
+ - model
18
+ confidence: high
19
+ owner: maintainers
20
+ origin: docs-generated
21
+ reviewed_by: generated@2026-10-16
22
+ generated_from: dexterm/site content/docs (task-1420)
23
+ sources:
24
+ - site/content/docs/ollama.md
25
+ date: 2026-10-16
26
+ ---
27
+
28
+ | profile | the local engine may |
29
+ |---|---|
30
+ | `observe` | analyse only: the read tools, no UI actions, no proposals, no orders |
31
+ | `propose` | everything the analyst does on Claude: the read tools, the UI actions (open a coin, the screener, the watchlist, a feed, and open a PAPER ticket that you confirm), and strategy proposals you apply with a key. No orders. |
32
+ | `paper` | `propose`, plus paper orders: the AUTOTRADE runner's paper sessions, agent paper trading (https://dexterm.xyz/docs/agents) inside a mandate you armed, starting or stopping one of your parallel strategies (https://dexterm.xyz/docs/autotrade#several-strategies-at-once), paper journal tags and backtest requests |
33
+ | `full` | everything the Claude path may do, inside the same caps, mandate tiers and kill switch |
34
+
35
+ **A new local setup starts at `propose`.** `paper` is one command: `dexterm ai restrictions paper`. **`full` needs a typed confirmation** on a real terminal: `dexterm ai engine ollama --full` explains the small-model risk and asks you to type `ENABLE FULL`. It is recorded for that one model: change the model and the engine runs at `paper` until you confirm again. Going back to a lower profile forgets the confirmation. It needs you at a real terminal: a pipe cannot confirm it.
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: docs-ollama-set-it-up-in-two-minutes
3
+ title: Use a local model with Ollama › Set it up in two minutes
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Set it up in two minutes
8
+ anchor: set-it-up-in-two-minutes
9
+ url: https://dexterm.xyz/docs/ollama#set-it-up-in-two-minutes
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - set
14
+ - two
15
+ - minutes
16
+ - use
17
+ - local
18
+ - model
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/ollama.md
26
+ date: 2026-10-16
27
+ ---
28
+
29
+ ```
30
+ 1. install Ollama https://ollama.com/download (open it once so it runs)
31
+ 2. ollama pull qwen3:8b about 5 GB, once
32
+ 3. dexterm ai engine ollama run dexterm's AI on the local engine
33
+ 4. dexterm ai model qwen3:8b
34
+ 5. dexterm doctor the "Ollama (local AI)" line should be a ✓
35
+ ```
36
+
37
+ Then press `a` on a coin, or type a question, as usual. The panel title says `ANALYST · ollama` and the caption under an answer shows `local $0`. In the chat box, `/engine ollama` switches new conversations to the local model and `/engine claude` switches back.
38
+
39
+ dexterm never downloads or ships a model: you pull the one you want with Ollama.
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: docs-ollama-troubleshooting
3
+ title: Use a local model with Ollama › Troubleshooting
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Troubleshooting
8
+ anchor: troubleshooting
9
+ url: https://dexterm.xyz/docs/ollama#troubleshooting
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - troubleshooting
14
+ - use
15
+ - local
16
+ - model
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/ollama.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ | message | fix |
28
+ |---|---|
29
+ | `ollama is not running` | open the Ollama app or run `ollama serve`, then `dexterm doctor` |
30
+ | `no local model pulled` | `ollama pull qwen3:8b` then `dexterm ai model qwen3:8b` |
31
+ | `ollama model … is not pulled` | `ollama pull <model>` |
32
+ | `the local model took too long` | a smaller model answers faster; `dexterm ai status` lists yours |
33
+ | `… did not return the structured verdict` | ask again, or pull a larger tool-capable model |
34
+ | `the local engine's restriction profile is propose; an autotrade run needs paper` | `dexterm ai restrictions paper` |
35
+ | `full was confirmed for …, not …` | `dexterm ai engine ollama --full` again for the new model |
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: docs-ollama-what-runs-on-a-local-model
3
+ title: Use a local model with Ollama › What runs on a local model
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: What runs on a local model
8
+ anchor: what-runs-on-a-local-model
9
+ url: https://dexterm.xyz/docs/ollama#what-runs-on-a-local-model
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - runs
14
+ - local
15
+ - model
16
+ - use
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/ollama.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ | surface | on the local model |
28
+ |---|---|
29
+ | analyst chat and follow-ups | the same dexterm MCP server and tools, the same firewalled context, answers streamed word by word |
30
+ | structured skills (dossier, rug-check, larp-check, trench-scan) | the same playbook, then Ollama's structured output on the same schema |
31
+ | AI scan mode (https://dexterm.xyz/docs/scan) | observe-only, at the tool list, the MCP server and the app |
32
+ | Jarvis voice questions | asked through the same analyst, on whichever engine `/engine` picked |
33
+ | `dexterm ask "…"` | a headless question on the analyst's engine |
34
+ | tune by chat | `strategy_propose_edit` / `strategy_propose_new` at `propose`; you apply with `y` as always |
35
+ | AUTOTRADE runner sessions | `dexterm autotrade run <strategy> --paper --engine ollama`: the same DOSSIER, DELTA and EVENT messages and the same typed decision, at `paper` |
36
+ | an agent on the dexterm tools | `dexterm ai agent "<goal>"`, tools by profile |
37
+ | Telegram approvals, the agent bus | engine-independent: approvals are your taps; bus agents bring their own model |
38
+
39
+ The Claude usage guard does not apply to a local model (no plan limit, $0); the runner's day caps on sessions and turns still do.
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: docs-ollama-what-stays-outside-the-model
3
+ title: Use a local model with Ollama › What stays outside the model
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: What stays outside the model
8
+ anchor: what-stays-outside-the-model
9
+ url: https://dexterm.xyz/docs/ollama#what-stays-outside-the-model
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - stays
14
+ - outside
15
+ - model
16
+ - use
17
+ - local
18
+ confidence: high
19
+ owner: maintainers
20
+ origin: docs-generated
21
+ reviewed_by: generated@2026-10-16
22
+ generated_from: dexterm/site content/docs (task-1420)
23
+ sources:
24
+ - site/content/docs/ollama.md
25
+ date: 2026-10-16
26
+ ---
27
+
28
+ Whatever profile you pick, and whichever engine runs:
29
+
30
+ - your strategy and runner caps, and the kill switch (command, hotkey, the panic file);
31
+ - mandate tiers: arming a mandate is a physical keypress, and no model or agent can arm one;
32
+ - the strategy clamp: every size a model asks for is cut to your strategy and your runner caps, exactly as for Claude;
33
+ - Telegram approvals, when you use them: a one-time button, bound to a nonce, a hash and an expiry and to your account, tapped by you;
34
+ - the prompt firewall: token names, socials and page text reach a local model wrapped as `<untrusted>` data, byte for byte as they reach Claude.
35
+
36
+ A model can only ask. It cannot raise a cap, arm a mandate or change its own profile. There is no live mode for it to turn on: dexterm trades on paper only.
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: docs-ollama-which-model
3
+ title: Use a local model with Ollama › Which model
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Which model
8
+ anchor: which-model
9
+ url: https://dexterm.xyz/docs/ollama#which-model
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - which
14
+ - model
15
+ - use
16
+ - local
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/ollama.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ These are tool-capable models from Ollama's library, a good place to start. They are suggestions, not a dexterm benchmark: `dexterm ai probe` checks the copy you pulled.
28
+
29
+ | model | download | note |
30
+ |---|---|---|
31
+ | `qwen3:8b` | ~5 GB | a good default on a 16 GB machine |
32
+ | `qwen3:14b` | ~9 GB | steadier tool use, needs about 16 GB free |
33
+ | `llama3.1:8b` | ~5 GB | a widely used tool caller |
34
+ | `mistral-small3.2` | ~15 GB | strong tool use on a 32 GB machine |
35
+
36
+ Smaller models answer faster and make more mistakes. A model with no tool calling still works for questions (see models without tool calling (https://dexterm.xyz/docs/ollama#models-without-tool-calling)).
37
+
38
+ dexterm asks Ollama for a 32,768-token context window, or the model's own maximum when that is smaller. On a small machine lower it with `dexterm ai ctx 16384`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: docs-ollama-your-own-agent-on-the-local-model
3
+ title: Use a local model with Ollama › Your own agent, on the local model
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ heading: Your own agent, on the local model
8
+ anchor: your-own-agent-on-the-local-model
9
+ url: https://dexterm.xyz/docs/ollama#your-own-agent-on-the-local-model
10
+ tags:
11
+ - docs
12
+ - ollama
13
+ - own
14
+ - agent
15
+ - local
16
+ - model
17
+ - use
18
+ confidence: high
19
+ owner: maintainers
20
+ origin: docs-generated
21
+ reviewed_by: generated@2026-10-16
22
+ generated_from: dexterm/site content/docs (task-1420)
23
+ sources:
24
+ - site/content/docs/ollama.md
25
+ date: 2026-10-16
26
+ ---
27
+
28
+ `dexterm ai agent "<goal>"` runs the local model as an agent on the dexterm MCP server, the way `claude -p` connected to `dexterm mcp` would: the read tools at every profile, proposals at `propose`, and the paper tools at `paper` (the server still refuses them unless you armed a mandate and turned on agent paper trading in the app). `--thoughts FILE` writes its words for the spectator (https://dexterm.xyz/docs/spectator)'s thought ribbon (`--spectate-thoughts FILE`).
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: docs-ollama
3
+ title: Use a local model with Ollama
4
+ kind: docs
5
+ page: ollama
6
+ page_title: Use a local model with Ollama
7
+ url: https://dexterm.xyz/docs/ollama
8
+ tags:
9
+ - docs
10
+ - ollama
11
+ - use
12
+ - local
13
+ - model
14
+ confidence: high
15
+ owner: maintainers
16
+ origin: docs-generated
17
+ reviewed_by: generated@2026-10-16
18
+ generated_from: dexterm/site content/docs (task-1420)
19
+ sources:
20
+ - site/content/docs/ollama.md
21
+ date: 2026-10-16
22
+ ---
23
+
24
+ Run the analyst, your agents and paper autotrade on a free model on your own machine, with no login and no key, behind a restriction profile you choose.
25
+
26
+ dexterm can run its AI on **a model on your own computer** through Ollama (https://ollama.com), instead of your Claude or Codex login. There is no account, no key and no bill: the model runs on your machine and every answer costs $0. dexterm talks to Ollama on `http://127.0.0.1:11434` by default, so your questions, the screen context and the tool results stay on this machine.
27
+
28
+ A local engine can do everything the Claude path does: the analyst and its skills, tune-by-chat strategy proposals, the AUTOTRADE runner's sessions, and an agent on the dexterm tools. You decide how far it may go with a **restriction profile**. The limits that protect money are not part of that choice: they are enforced outside the model and are the same for every engine (see what stays outside the model (https://dexterm.xyz/docs/ollama#what-stays-outside-the-model)).
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: docs-paper-trading-letting-an-agent-paper-trade-experimental
3
- title: Paper trading, live trading and the safety model › Letting an agent paper trade (experimental)
3
+ title: Paper trading and the safety model › Letting an agent paper trade (experimental)
4
4
  kind: docs
5
5
  page: paper-trading
6
- page_title: Paper trading, live trading and the safety model
6
+ page_title: Paper trading and the safety model
7
7
  heading: Letting an agent paper trade (experimental)
8
8
  anchor: letting-an-agent-paper-trade-experimental
9
9
  url: https://dexterm.xyz/docs/paper-trading#letting-an-agent-paper-trade-experimental
@@ -16,7 +16,6 @@ tags:
16
16
  - trade
17
17
  - experimental
18
18
  - trading
19
- - live
20
19
  - safety
21
20
  - model
22
21
  confidence: high
@@ -29,4 +28,4 @@ sources:
29
28
  date: 2026-10-16
30
29
  ---
31
30
 
32
- If you want to, you can let an agent connected over `dexterm mcp` run the whole PAPER loop (open, size, confirm and close) inside a **trading mandate** you armed, by starting `dexterm --spectate-mcp --agent-paper <mandate-id>`. It is paper only. The agent can never sign, send a real transaction, touch keys or raise a cap, a size over your caps is refused, and you can pause, take over or stop it at any time. See Agent paper trading (https://dexterm.xyz/docs/agents#agent-paper-trading). It is experimental and off by default, and simulated figures are not a result.
31
+ If you want to, you can let an agent connected over `dexterm mcp` run the whole PAPER loop (open, size, confirm and close) inside a **trading mandate** you armed, by starting `dexterm --spectate-mcp --agent-paper <mandate-id>`. It is paper only. The agent can never sign, send a transaction, touch keys or raise a cap, a size over your caps is refused, and you can pause, take over or stop it at any time. See Agent paper trading (https://dexterm.xyz/docs/agents#agent-paper-trading). It is experimental and off by default, and simulated figures are not a result.
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: docs-paper-trading-link-a-wallet-read-only
3
+ title: Paper trading and the safety model › Link a wallet (read-only)
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading and the safety model
7
+ heading: Link a wallet (read-only)
8
+ anchor: link-a-wallet-read-only
9
+ url: https://dexterm.xyz/docs/paper-trading#link-a-wallet-read-only
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - link
14
+ - wallet
15
+ - read-only
16
+ - paper
17
+ - trading
18
+ - safety
19
+ - model
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/paper-trading.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ `dexterm wallet link` (or `/wallet link` typed on the screener's `/` line or in the chat box) starts a one-shot server on `127.0.0.1:41291` (a fixed loopback port; a random one only if it is busy, and the page then says so) with a single-use token, and opens your browser to it. The page asks Phantom to **connect** and **sign a message** (a dexterm nonce): no transaction, no approval of funds. dexterm verifies the Ed25519 proof and stores **only your public key** in `~/.dexterm/wallet-link.json`, to show your address. `dexterm wallet status`, `unlink`, `/wallet`, `/wallet unlink` show or remove it. No private key, seed or password ever reaches dexterm; it has no code that could hold one, and it never asks Phantom to sign a transaction.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: docs-paper-trading-order-plans-and-standing-mandates
3
- title: Paper trading, live trading and the safety model › Order plans and standing mandates
3
+ title: Paper trading and the safety model › Order plans and standing mandates
4
4
  kind: docs
5
5
  page: paper-trading
6
- page_title: Paper trading, live trading and the safety model
6
+ page_title: Paper trading and the safety model
7
7
  heading: Order plans and standing mandates
8
8
  anchor: order-plans-and-standing-mandates
9
9
  url: https://dexterm.xyz/docs/paper-trading#order-plans-and-standing-mandates
@@ -16,7 +16,6 @@ tags:
16
16
  - mandates
17
17
  - paper
18
18
  - trading
19
- - live
20
19
  - safety
21
20
  - model
22
21
  confidence: high
@@ -29,16 +28,8 @@ sources:
29
28
  date: 2026-10-16
30
29
  ---
31
30
 
32
- Merged 2026-10-11 (`task-1355`) and labelled **in progress**: the engine, the typed and spoken proposal paths, the `O` screen, the popup and the audit journal are on main and every default run is **paper**. Since 2026-10-12 (`task-1363`) a **live fire path on devnet** exists behind a held keypress: fills go through the signer process and a separate capped fast wallet, described in the live fire path (https://dexterm.xyz/docs/paper-trading#the-live-fire-path-devnet-the-fast-wallet) below. No plan has moved mainnet funds; there is no mainnet fast wallet.
31
+ Labelled **in progress**: the engine, the typed and spoken proposal paths, the `O` screen, the popup and the audit journal are on main, and every plan fills on **paper**. There is no live fire path: plans never sign or send anything.
33
32
 
34
33
  An **order plan** is "buy this coin if it dips to 300k market cap, sell half at 600k, keep the rest as a moon bag", written down once: one entry trigger (market cap or price, below or above, or immediate), a ladder of take-profit tranches (each an above-trigger with a fraction; whatever the fractions leave is the moon bag), an optional stop (a below-trigger, below the entry), slippage and impact ceilings and an expiry (4 h by default, 7 days at most). `dexterm plan propose --mint M --size 20 --entry mc-below:300k --tp mc-above:600k:50% --stop mc-below:150k` writes one; so does saying it to Jarvis (https://dexterm.xyz/docs/voice) or an agent's `propose_order_plan` tool. All three produce the same thing: an **inert proposal** with a SHA-256 hash of its material fields and a plain-language read-back. A proposal fires nothing.
35
34
 
36
- A **standing mandate** is the budget a set of plans may spend: a total, a per-trade cap, a per-coin cap, a daily-loss cap, the highest confirmation tier it accepts and a time-to-live. Every cap is clamped to a hard ceiling ($2000 total, $500 per trade, $1000 per coin, $2000 daily loss, 24 h) and nothing is ever coerced upward: there is no "raise cap" anywhere; a different cap is a new draft that needs a new arming gesture. `dexterm mandate draft --total 100 --per-trade 20 --ttl-hours 4` writes one.
37
-
38
- **Arming** a plan under a mandate is the only step that lets anything fire, and it is a physical gesture: a key held at the terminal on the `O` screen (`a`) or `dexterm plan arm <id> --mandate <id>` on a real TTY, which refuses a pipe or a subprocess. The gesture proof is bound to the plan hash, single-use and expiring, so an edited plan voids every earlier confirmation. Once armed, a monitor fed by the prices the terminal already shows (the screener rows, the watchlist, the open token; never fixture data) fires the entry, each take-profit tranche and the stop **only inside the armed plan and only through the executor**, which re-checks the mandate caps on every fill (and, on the live path, the signer re-checks its own caps, allow-lists and the panic marker on top). `dexterm plan amend <id> --size 25 --entry mc-below:280k` edits a **proposed** plan: the edit is a new plan with a new hash, the old proposal is superseded and every earlier confirmation is void, so arming it is a new keypress; an armed plan cannot be edited (cancel it first). Cancel (`c`), revoke (`r`) and panic (`!`, or `dexterm wallet panic`) stop a plan at once; nothing resumes a paused plan without a new keypress.
39
-
40
- Two **confirmation tiers** beyond the keypress exist in the model and are off by default: `ptt-held` (push-to-talk held while you speak the confirmation) fires at 0.5× the per-trade cap and `hands-free` at 0.25×, and neither can arm a mandate or a batch. Turning hands-free on is the only "less safe" switch in dexterm: `G` on the `O` screen raises a prompt that says so, it is accepted by a keypress only (a spoken, agent or Phantom "yes" is refused), it is journaled, it expires after 24 h and `G` again restores the gate.
41
-
42
- The **journal** (`~/.dexterm/plans.journal`) is append-only and hash-chained; every proposal, arm, fire, fill, cancel, revoke, gate change and refusal is a row, `dexterm plan journal --verify` recomputes the chain and `--export` dumps it, and it is the source the service recovers from after a crash. The popup is a read-only HUD fed view models only (never a key, a secret or an arm capability); its single write is "cancel this plan", re-validated at the server allow-list and again at the terminal.
43
-
44
- What is proven, on fixtures and a fake clock: the north-star plan fills end to end on the paper executor; a replayed price stream fires each leg once; and a compromised-model suite shows that spoken text, agent text, a forged proof, a replayed proof, a widened mandate and an edited plan with an old confirmation all fail to arm, raise a cap, widen a mandate, resume a paused plan, accept the risk prompt or switch the fire path.
35
+ A **standing mandate** is the budget a set of plans may spend: a total, a per-trade cap, a per-coin cap, a daily-loss cap, the highest confirmation tier it accepts and a time-to-live. Every cap is clamped to a hard ceiling ($2000 total, $500 per trade, $1000 per coin, $2000 daily loss, 24 h) and nothing is ever coerced upward: there is no "raise cap" anywhere; a different cap is a new draft that needs a new arming gesture. `dexterm mandate draft --total 100 --per-trade 20 --ttl-hours 4` writes one; `--max-open N` and `--max-impact PCT` set the open-position and price-impact limits (clamped the same way).
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: docs-paper-trading-panic
3
- title: Paper trading, live trading and the safety model › Live trading (devnet first) › Panic
3
+ title: Paper trading and the safety model › Panic
4
4
  kind: docs
5
5
  page: paper-trading
6
- page_title: Paper trading, live trading and the safety model
6
+ page_title: Paper trading and the safety model
7
7
  heading: Panic
8
8
  anchor: panic
9
9
  url: https://dexterm.xyz/docs/paper-trading#panic
@@ -11,11 +11,8 @@ tags:
11
11
  - docs
12
12
  - paper-trading
13
13
  - panic
14
- - live
15
- - trading
16
- - devnet
17
- - first
18
14
  - paper
15
+ - trading
19
16
  - safety
20
17
  - model
21
18
  confidence: high
@@ -28,4 +25,4 @@ sources:
28
25
  date: 2026-10-16
29
26
  ---
30
27
 
31
- `/wallet panic` in the app, or `dexterm wallet panic` from any shell, any time: it writes a kill-switch file every signer re-reads on every plan and confirm, locks the shared cap ledger so no reservation can be taken, tells the running signer to forget its plans and flips an open LIVE ticket to refused. The only way back is `dexterm wallet resume` in a real terminal: it needs a physical keypress on a TTY and refuses piped input.
28
+ `/wallet panic` in the app, or `dexterm wallet panic` from any shell, any time: it writes a kill-switch file that every autotrade runner and the paper agent desk re-read on every step, so they halt at once. The only way back is `dexterm wallet resume` in a real terminal: it needs a physical keypress on a TTY and refuses piped input.
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: docs-paper-trading-paper-only-mandates
3
+ title: Paper trading and the safety model › Order plans and standing mandates › Paper-only mandates
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading and the safety model
7
+ heading: Paper-only mandates
8
+ anchor: paper-only-mandates
9
+ url: https://dexterm.xyz/docs/paper-trading#paper-only-mandates
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - paper-only
14
+ - mandates
15
+ - order
16
+ - plans
17
+ - standing
18
+ - paper
19
+ - trading
20
+ - safety
21
+ - model
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/paper-trading.md
29
+ date: 2026-10-16
30
+ ---
31
+
32
+ `dexterm mandate draft --paper` drafts a **paper-only** mandate for agent paper trading (https://dexterm.xyz/docs/agents#agent-paper-trading). It has its own, higher paper ceilings ($10,000 total, $2000 per trade, $2000 per coin, $10,000 daily loss, 10% price impact) so an agent can practise at a realistic size, and it still needs your physical keypress to arm. Only the agent paper desk reads it: the plan engine refuses to arm a plan into it, fire a plan under it or run copy trading through it, and every other mandate keeps the ceilings above. The agent still gets a quarter of its per-trade cap, and every fill is priced on a live quote, so a bigger simulated size pays its real price impact.
33
+
34
+ **Arming** a plan under a mandate is the only step that lets anything fire, and it is a physical gesture: a key held at the terminal on the `O` screen (`a`) or `dexterm plan arm <id> --mandate <id>` on a real TTY, which refuses a pipe or a subprocess. The gesture proof is bound to the plan hash, single-use and expiring, so an edited plan voids every earlier confirmation. Once armed, a monitor fed by the prices the terminal already shows (the screener rows, the watchlist, the open token; never fixture data) fires the entry, each take-profit tranche and the stop **only inside the armed plan and only through the paper executor**, which re-checks the mandate caps and the panic marker on every fill. `dexterm plan amend <id> --size 25 --entry mc-below:280k` edits a **proposed** plan: the edit is a new plan with a new hash, the old proposal is superseded and every earlier confirmation is void, so arming it is a new keypress; an armed plan cannot be edited (cancel it first). Cancel (`c`), revoke (`r`) and panic (`!`, or `dexterm wallet panic`) stop a plan at once; nothing resumes a paused plan without a new keypress.
35
+
36
+ Two **confirmation tiers** beyond the keypress exist in the model and are off by default: `ptt-held` (push-to-talk held while you speak the confirmation) fires at 0.5× the per-trade cap and `hands-free` at 0.25×, and neither can arm a mandate or a batch. Turning hands-free on is the only "less safe" switch in dexterm: `G` on the `O` screen raises a prompt that says so, it is accepted by a keypress only (a spoken or agent "yes" is refused), it is journaled, it expires after 24 h and `G` again restores the gate.
37
+
38
+ The **journal** (`~/.dexterm/plans.journal`) is append-only and hash-chained; every proposal, arm, fire, fill, cancel, revoke, gate change and refusal is a row, `dexterm plan journal --verify` recomputes the chain and `--export` dumps it, and it is the source the service recovers from after a crash. The popup is a read-only HUD fed view models only (never a key, a secret or an arm capability); its single write is "cancel this plan", re-validated at the server allow-list and again at the terminal.
39
+
40
+ What is proven, on fixtures and a fake clock: the north-star plan fills end to end on the paper executor; a replayed price stream fires each leg once; and a compromised-model suite shows that spoken text, agent text, a forged proof, a replayed proof, a widened mandate and an edited plan with an old confirmation all fail to arm, raise a cap, widen a mandate, resume a paused plan, or accept the risk prompt.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: docs-paper-trading-pnl-cards
3
- title: Paper trading, live trading and the safety model › PnL cards
3
+ title: Paper trading and the safety model › PnL cards
4
4
  kind: docs
5
5
  page: paper-trading
6
- page_title: Paper trading, live trading and the safety model
6
+ page_title: Paper trading and the safety model
7
7
  heading: PnL cards
8
8
  anchor: pnl-cards
9
9
  url: https://dexterm.xyz/docs/paper-trading#pnl-cards
@@ -14,7 +14,6 @@ tags:
14
14
  - cards
15
15
  - paper
16
16
  - trading
17
- - live
18
17
  - safety
19
18
  - model
20
19
  confidence: high
@@ -27,11 +26,12 @@ sources:
27
26
  date: 2026-10-16
28
27
  ---
29
28
 
30
- `H` on a token, on the positions screen (`P`) or on the followed-wallets screen (`U`) opens a preview of a **PnL card** for a coin you have fills for: ticker and image, average entry and exit (or the mark for an open position), the PnL %, hold time, size, the dates, and a dexterm footer. It is saved as a 1200×675 PNG (the X card size), a 1080×1080 PNG and a text file in `~/.dexterm/exports/`.
29
+ `H` on a token, on the positions screen (`P`) or on the followed-wallets screen (`U`) opens a preview of a **PnL card** for a coin you have fills for: ticker and image, entry and exit as the coin's **market cap** (or the mark for an open position), the PnL %, hold time, size, the dates, and a dexterm footer. It is saved as a 1200×675 PNG (the X card size), a 1080×1080 PNG and a text file in `~/.dexterm/exports/`.
31
30
 
32
- - **The stamp cannot be removed.** A card says where its numbers came from: **PAPER** (the simulated wallet, no real funds), **LIVE** (transactions your own wallet signed, confirmed on chain; a devnet fill says *DEVNET TEST FUNDS*) or **TRACKED WALLET** (a followed wallet's public history, read-only). The stamp is a solid block, the frame colour and a repeating strip, and no option hides it.
31
+ - **The stamp cannot be removed.** A card says where its numbers came from: **PAPER** (the simulated wallet, no real funds) or **TRACKED WALLET** (a followed wallet's public history, read-only). The stamp is a solid block, the frame colour and a repeating strip, and no option hides it.
33
32
  - **Numbers come only from the records.** The PnL is computed from the fills, net of fees (realized for a closed position; realized plus unrealized at the latest price mark for an open one, which waits for a mark). You cannot type a number into a card. Each card prints its time window, the fee basis, what it leaves out (a tracked wallet's token-to-token swaps, transfers or airdrops) and the age of its data.
34
- - **Private by default.** The wallet address and LIVE transaction signatures are hidden, and the size shows as a band (`0.5-1 SOL`). `a` shows the wallet and signatures, `z` the exact size; no balance or key is ever on a card.
33
+ - **Market cap or price.** When dexterm knows the coin's supply, entry and exit are shown as market cap: the average fill price times the supply, never a quoted market cap. The supply is the coin's recorded FDV ÷ price, or pump.fun's fixed 1 billion for a pump.fun coin. The card names that source and the USD rate it used (the current SOL price for a paper or tracked card). Exit is the **blended** average of every sell; with two or more sells, the **last sell** gets its own row. `m` in the preview switches to the SOL price per token and back. A coin with no known supply stays on the price view, and the card says why.
34
+ - **Private by default.** The wallet address is hidden, and the size shows as a band (`0.5-1 SOL`). `a` shows the wallet, `z` the exact size; no balance or key is ever on a card.
35
35
  - **Sharing is yours.** `x` saves the card, copies the image to the clipboard where your OS allows it (macOS; Linux with `wl-copy` or `xclip`) and opens X's compose page in your browser with a short neutral text (the stamp in words, no coin and no numbers). You paste the image and post. dexterm does not post, has no X credentials for this and sends nothing. `t` copies the text version, `s` only saves; `f` flips 16:9 and 1:1, `←`/`→` move between coins, `esc` closes.
36
36
 
37
- A card shows one position's own fills. It is not a track record, and trading in dexterm is still experimental; the footer says so, along with "not financial advice".
37
+ A card shows one position's own fills. It is not a track record, and paper trading is not a result; the footer says so, along with "not financial advice".
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-paper-trading-the-safety-model
3
+ title: Paper trading and the safety model › The safety model
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading and the safety model
7
+ heading: The safety model
8
+ anchor: the-safety-model
9
+ url: https://dexterm.xyz/docs/paper-trading#the-safety-model
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - safety
14
+ - model
15
+ - paper
16
+ - trading
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/paper-trading.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ These are the invariants; hold us to them:
28
+
29
+ 1. **No custody.** dexterm holds no private key, has no trading wallet and has no signing code. The Phantom link stores only your public key, from a signed message.
30
+ 2. **Nothing is sent.** dexterm builds no transaction and sends none. Every ticket, plan, autotrade run and agent fill is paper.
31
+ 3. **Keypress gate on by default.** Models and voice create proposals; arming a plan or confirming a ticket needs a physical keypress. Opting out, if ever offered, needs an explicit "this is less safe" confirmation and is local, logged and reversible.
32
+ 4. **The AI has no trading interface.** No build, sign or send tool exists for the model. Its write-shaped tools are paper only: `open_ticket` opens a PAPER ticket, and (only if you start `--agent-paper` on a mandate you armed) an agent you connected can use the `paper_*` tools to book the **simulated** ledger inside that mandate. A registry test enumerates every MCP tool and fails if any could reach a signing or sending path.
33
+
34
+ > warn: paper results are not predictive. Paper fills take the quote at its word; a real fill pays real slippage, priority fees and failed transactions, and most memecoins go to zero. Nothing here is financial advice.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: docs-paper-trading-the-ticket
3
- title: Paper trading, live trading and the safety model › The ticket
3
+ title: Paper trading and the safety model › The ticket
4
4
  kind: docs
5
5
  page: paper-trading
6
- page_title: Paper trading, live trading and the safety model
6
+ page_title: Paper trading and the safety model
7
7
  heading: The ticket
8
8
  anchor: the-ticket
9
9
  url: https://dexterm.xyz/docs/paper-trading#the-ticket
@@ -13,7 +13,6 @@ tags:
13
13
  - ticket
14
14
  - paper
15
15
  - trading
16
- - live
17
16
  - safety
18
17
  - model
19
18
  confidence: high
@@ -26,6 +25,6 @@ sources:
26
25
  date: 2026-10-16
27
26
  ---
28
27
 
29
- `B` or `S` on a token opens a buy or sell ticket. It shows the side, the size (SOL or % of balance when buying; % of the position when selling), slippage in bps, and a rolling Jupiter quote refreshed every (generated from the app: see https://dexterm.xyz/docs/paper-trading#the-ticket; app-help has the exact keys and commands) s while you edit: what you pay, what you receive, price in SOL and USD, price impact (as a percent; Jupiter reports a 0..1 fraction and the app converts it once), the simulated fee, the route and the minimum received. Keys: digits type, `tab` switches field, `←`/`→` flips the side, `u` toggles the unit, `⏎` reviews, `esc` cancels, `L` flips PAPER ⇄ LIVE (see below). Token amounts are shown as quantities, so a small buy of an expensive token reads `0.0144 AVGOx`, never `0`; until the token's decimals are known the ticket says so instead of printing a guess.
28
+ `B` or `S` on a token opens a buy or sell ticket. It shows the side, the size (SOL or % of balance when buying; % of the position when selling), slippage in bps, and a rolling Jupiter quote refreshed every (generated from the app: see https://dexterm.xyz/docs/paper-trading#the-ticket; app-help has the exact keys and commands) s while you edit: what you pay, what you receive, price in SOL and USD, price impact (as a percent; Jupiter reports a 0..1 fraction and the app converts it once), the simulated fee, the route and the minimum received. Keys: digits type, `tab` switches field, `←`/`→` flips the side, `u` toggles the unit, `⏎` reviews, `esc` cancels. Token amounts are shown as quantities, so a small buy of an expensive token reads `0.0144 AVGOx`, never `0`; until the token's decimals are known the ticket says so instead of printing a guess.
30
29
 
31
30
  The **confirm gate** is on by default. `⏎` arms the order; `y` (or `⏎` again) confirms. For a notional above (generated from the app: see https://dexterm.xyz/docs/paper-trading#the-ticket; app-help has the exact keys and commands) SOL you must type the size back digit for digit before the confirm counts. Any other key during the confirm step cancels the arm: a stray key can never confirm, and `q` or a screen number cannot navigate out from under an armed order. The fill is computed from a **fresh quote at confirm time**, never from the quote on screen, and is booked into the paper wallet in one SQLite transaction. If Jupiter rate-limits during the confirm the ticket says so, retries for up to 8 s, then lands in an error state you can retry or cancel; it never hangs.