dexterm-cli 0.1.3 → 0.1.4

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 (221) hide show
  1. package/dist/packages/cli/assets/claude/analyst-system.md +2 -1
  2. package/dist/packages/cli/src/app-help-gen.js +3 -3
  3. package/dist/packages/cli/src/docs-kb-gen.js +228 -0
  4. package/dist/packages/cli/src/doctor.js +22 -7
  5. package/dist/packages/cli/src/index.js +1 -1
  6. package/dist/packages/cli/src/kb-skill-cmd.js +3 -0
  7. package/dist/packages/cli/src/larp-detected.js +209 -0
  8. package/dist/packages/cli/src/live/token.js +38 -1
  9. package/dist/packages/cli/src/main.js +140 -1
  10. package/dist/packages/cli/src/mcp-follow.js +225 -0
  11. package/dist/packages/cli/src/spectate-cmd.js +14 -3
  12. package/dist/packages/cli/src/version.js +1 -1
  13. package/dist/packages/cli/src/x-cmd.js +11 -5
  14. package/dist/packages/mcp/assets/kb/app-help/spectate-an-agent.md +4 -1
  15. package/dist/packages/mcp/assets/kb/docs/docs-agents-capability-tiers-enforced-server-side.md +38 -0
  16. package/dist/packages/mcp/assets/kb/docs/docs-agents-install-in-one-command.md +49 -0
  17. package/dist/packages/mcp/assets/kb/docs/docs-agents-per-agent-mandates.md +35 -0
  18. package/dist/packages/mcp/assets/kb/docs/docs-agents-recipes.md +43 -0
  19. package/dist/packages/mcp/assets/kb/docs/docs-agents-red-team-coverage.md +30 -0
  20. package/dist/packages/mcp/assets/kb/docs/docs-agents-two-ways-to-connect.md +37 -0
  21. package/dist/packages/mcp/assets/kb/docs/docs-agents-untrusted-by-default.md +36 -0
  22. package/dist/packages/mcp/assets/kb/docs/docs-agents-watch-an-agent-work-spectator-view.md +35 -0
  23. package/dist/packages/mcp/assets/kb/docs/docs-agents.md +26 -0
  24. package/dist/packages/mcp/assets/kb/docs/docs-analyst-answer-style.md +35 -0
  25. package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +25 -0
  26. package/dist/packages/mcp/assets/kb/docs/docs-analyst-it-knows-the-app.md +33 -0
  27. package/dist/packages/mcp/assets/kb/docs/docs-analyst-mcp-tools.md +33 -0
  28. package/dist/packages/mcp/assets/kb/docs/docs-analyst-plain-language-filters.md +25 -0
  29. package/dist/packages/mcp/assets/kb/docs/docs-analyst-skills.md +31 -0
  30. package/dist/packages/mcp/assets/kb/docs/docs-analyst-starting-a-run.md +33 -0
  31. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-can-change-three-tiers.md +33 -0
  32. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-sees.md +26 -0
  33. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-the-analyst-can-never-do.md +31 -0
  34. package/dist/packages/mcp/assets/kb/docs/docs-analyst.md +23 -0
  35. package/dist/packages/mcp/assets/kb/docs/docs-beginners-1-start-dexterm.md +35 -0
  36. package/dist/packages/mcp/assets/kb/docs/docs-beginners-2-open-a-real-coin-by-contract-address.md +43 -0
  37. package/dist/packages/mcp/assets/kb/docs/docs-beginners-3-read-the-safety-panel.md +40 -0
  38. package/dist/packages/mcp/assets/kb/docs/docs-beginners-4-read-the-holder-panel.md +35 -0
  39. package/dist/packages/mcp/assets/kb/docs/docs-beginners-5-optionally-ask-the-analyst.md +39 -0
  40. package/dist/packages/mcp/assets/kb/docs/docs-beginners-6-export-or-share-what-you-see.md +34 -0
  41. package/dist/packages/mcp/assets/kb/docs/docs-beginners-7-quit-safely.md +34 -0
  42. package/dist/packages/mcp/assets/kb/docs/docs-beginners-before-any-experimental-trading.md +33 -0
  43. package/dist/packages/mcp/assets/kb/docs/docs-beginners-check-the-installation-with-doctor.md +38 -0
  44. package/dist/packages/mcp/assets/kb/docs/docs-beginners-choose-a-setup-path.md +30 -0
  45. package/dist/packages/mcp/assets/kb/docs/docs-beginners-common-mistakes-and-recovery.md +30 -0
  46. package/dist/packages/mcp/assets/kb/docs/docs-beginners-copy-and-paste-without-surprises.md +39 -0
  47. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-data-says-unavailable-stale-or-rate-limited.md +35 -0
  48. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-dexterm-says-command-not-found.md +36 -0
  49. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-optional-help-is-unavailable.md +33 -0
  50. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-paste-does-nothing-or-pastes-twice.md +35 -0
  51. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-the-screen-looks-broken.md +33 -0
  52. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-you-typed-the-wrong-thing.md +33 -0
  53. package/dist/packages/mcp/assets/kb/docs/docs-beginners-install-node-js-first.md +36 -0
  54. package/dist/packages/mcp/assets/kb/docs/docs-beginners-linux.md +30 -0
  55. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-homebrew.md +46 -0
  56. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-or-linux-npm.md +39 -0
  57. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos.md +30 -0
  58. package/dist/packages/mcp/assets/kb/docs/docs-beginners-open-the-terminal.md +29 -0
  59. package/dist/packages/mcp/assets/kb/docs/docs-beginners-reopen-dexterm-later.md +36 -0
  60. package/dist/packages/mcp/assets/kb/docs/docs-beginners-ten-minute-first-win.md +30 -0
  61. package/dist/packages/mcp/assets/kb/docs/docs-beginners-terminal-shell-prompt-command-output-and-path.md +40 -0
  62. package/dist/packages/mcp/assets/kb/docs/docs-beginners-where-to-go-next.md +32 -0
  63. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +29 -0
  64. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +39 -0
  65. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows.md +30 -0
  66. package/dist/packages/mcp/assets/kb/docs/docs-beginners.md +29 -0
  67. package/dist/packages/mcp/assets/kb/docs/docs-cli-dexterm-help.md +31 -0
  68. package/dist/packages/mcp/assets/kb/docs/docs-cli-filter-grammar.md +37 -0
  69. package/dist/packages/mcp/assets/kb/docs/docs-cli-flags.md +27 -0
  70. package/dist/packages/mcp/assets/kb/docs/docs-cli-invocations.md +43 -0
  71. package/dist/packages/mcp/assets/kb/docs/docs-cli-presets.md +26 -0
  72. package/dist/packages/mcp/assets/kb/docs/docs-cli-scan-commands.md +26 -0
  73. package/dist/packages/mcp/assets/kb/docs/docs-cli-sort-keys.md +27 -0
  74. package/dist/packages/mcp/assets/kb/docs/docs-cli-subcommands.md +26 -0
  75. package/dist/packages/mcp/assets/kb/docs/docs-cli.md +25 -0
  76. package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +45 -0
  77. package/dist/packages/mcp/assets/kb/docs/docs-configuration-files-on-disk.md +41 -0
  78. package/dist/packages/mcp/assets/kb/docs/docs-configuration-headless-recorder-dexterm-record.md +44 -0
  79. package/dist/packages/mcp/assets/kb/docs/docs-configuration-history-recorder.md +33 -0
  80. package/dist/packages/mcp/assets/kb/docs/docs-configuration-packs.md +38 -0
  81. package/dist/packages/mcp/assets/kb/docs/docs-configuration-price-display-mode.md +35 -0
  82. package/dist/packages/mcp/assets/kb/docs/docs-configuration-push-alerts-and-dexterm-watch.md +45 -0
  83. package/dist/packages/mcp/assets/kb/docs/docs-configuration-rules-engine.md +36 -0
  84. package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-analyst-s-launch.md +27 -0
  85. package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-optional-free-rpc-key.md +42 -0
  86. package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-keymaps.md +29 -0
  87. package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-look.md +27 -0
  88. package/dist/packages/mcp/assets/kb/docs/docs-configuration-widgets.md +31 -0
  89. package/dist/packages/mcp/assets/kb/docs/docs-configuration-workspaces.md +30 -0
  90. package/dist/packages/mcp/assets/kb/docs/docs-configuration.md +25 -0
  91. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-1-follow-a-wallet-see-what-it-does.md +51 -0
  92. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-2-the-one-key-mirror-ticket-a-proposal.md +56 -0
  93. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-3-capped-auto-mirror-default-off-less.md +47 -0
  94. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-what-is-proven-what-is-not.md +36 -0
  95. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading.md +31 -0
  96. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-cache.md +32 -0
  97. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-health-registry.md +29 -0
  98. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-rate-limits-and-pacing.md +32 -0
  99. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-request-budget-meter.md +30 -0
  100. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-sources.md +47 -0
  101. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-the-helius-credit-meter.md +30 -0
  102. package/dist/packages/mcp/assets/kb/docs/docs-data-sources.md +27 -0
  103. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-dexterm-doctor.md +33 -0
  104. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-first-run.md +34 -0
  105. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +71 -0
  106. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-next.md +32 -0
  107. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +35 -0
  108. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-running-the-tests.md +34 -0
  109. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +44 -0
  110. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-updating.md +28 -0
  111. package/dist/packages/mcp/assets/kb/docs/docs-getting-started.md +27 -0
  112. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-global-keys.md +26 -0
  113. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-keys-handled-by-the-loop.md +29 -0
  114. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-per-screen-keys.md +26 -0
  115. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-what-shows.md +27 -0
  116. package/dist/packages/mcp/assets/kb/docs/docs-keyboard.md +26 -0
  117. package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +55 -0
  118. package/dist/packages/mcp/assets/kb/docs/docs-larp-open-link-keys.md +26 -0
  119. package/dist/packages/mcp/assets/kb/docs/docs-larp-paste-a-coin-on-the-web.md +35 -0
  120. package/dist/packages/mcp/assets/kb/docs/docs-larp-the-verdict.md +29 -0
  121. package/dist/packages/mcp/assets/kb/docs/docs-larp-timestamped-follow-up-drafts.md +35 -0
  122. package/dist/packages/mcp/assets/kb/docs/docs-larp-what-it-looks-at.md +33 -0
  123. package/dist/packages/mcp/assets/kb/docs/docs-larp.md +24 -0
  124. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-degraded-states-you-will-see.md +36 -0
  125. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-free-vs-paid-x-api-tiers-your-bill-your-limits.md +37 -0
  126. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-kol-lists-and-the-per-handle-filter.md +28 -0
  127. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-tests.md +25 -0
  128. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-is-read-and-when.md +35 -0
  129. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-you-set-up-once.md +40 -0
  130. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-where-the-tokens-live.md +27 -0
  131. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x.md +26 -0
  132. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-a-live-ticket.md +42 -0
  133. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-before-you-press-size-vs-caps.md +34 -0
  134. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-devnet-signer-mainnet-token.md +35 -0
  135. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-jupiter-rate-limits.md +33 -0
  136. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-link-a-wallet.md +32 -0
  137. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-live-trading-devnet-first.md +30 -0
  138. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-mainnet.md +31 -0
  139. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-order-plans-and-standing-mandates.md +44 -0
  140. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-panic.md +31 -0
  141. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-pnl-cards.md +37 -0
  142. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-live-fire-path-devnet-the-fast-wallet.md +41 -0
  143. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-signer-process.md +34 -0
  144. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-ticket.md +31 -0
  145. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-wallet.md +34 -0
  146. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-trade-moments.md +32 -0
  147. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +37 -0
  148. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-your-first-live-trade.md +41 -0
  149. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading.md +32 -0
  150. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-bubble-map-popup.md +27 -0
  151. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-build-the-native-window.md +33 -0
  152. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-config-dexterm-popup-json.md +38 -0
  153. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-docking-macos.md +27 -0
  154. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-keys-in-the-popup.md +30 -0
  155. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-market-cap-axis.md +28 -0
  156. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-security-model.md +33 -0
  157. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-token-and-feeds-popups.md +38 -0
  158. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-what-it-shows.md +30 -0
  159. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart.md +27 -0
  160. package/dist/packages/mcp/assets/kb/docs/docs-scan-cost-control.md +28 -0
  161. package/dist/packages/mcp/assets/kb/docs/docs-scan-keys-flag-command.md +34 -0
  162. package/dist/packages/mcp/assets/kb/docs/docs-scan-safety-four-layers.md +32 -0
  163. package/dist/packages/mcp/assets/kb/docs/docs-scan-states.md +27 -0
  164. package/dist/packages/mcp/assets/kb/docs/docs-scan-the-read.md +25 -0
  165. package/dist/packages/mcp/assets/kb/docs/docs-scan-triggers-and-score.md +37 -0
  166. package/dist/packages/mcp/assets/kb/docs/docs-scan.md +24 -0
  167. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-canary.md +30 -0
  168. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-task-1401-evaluation.md +35 -0
  169. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-latest-skill-care-run.md +33 -0
  170. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-links-only-larp-baseline-where-it-is-weak.md +35 -0
  171. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-not-measured.md +29 -0
  172. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-rug-verdict-rules.md +33 -0
  173. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-source-and-rebuild.md +31 -0
  174. package/dist/packages/mcp/assets/kb/docs/docs-scorecard.md +27 -0
  175. package/dist/packages/mcp/assets/kb/docs/docs-screens-1-screener.md +35 -0
  176. package/dist/packages/mcp/assets/kb/docs/docs-screens-2-new-pairs.md +28 -0
  177. package/dist/packages/mcp/assets/kb/docs/docs-screens-3-watchlist.md +27 -0
  178. package/dist/packages/mcp/assets/kb/docs/docs-screens-4-analyst-tab.md +28 -0
  179. package/dist/packages/mcp/assets/kb/docs/docs-screens-bubble-map.md +32 -0
  180. package/dist/packages/mcp/assets/kb/docs/docs-screens-coin-images.md +32 -0
  181. package/dist/packages/mcp/assets/kb/docs/docs-screens-live-holder-and-rug-signals.md +51 -0
  182. package/dist/packages/mcp/assets/kb/docs/docs-screens-order-plans.md +26 -0
  183. package/dist/packages/mcp/assets/kb/docs/docs-screens-paper-ticket-and-positions.md +29 -0
  184. package/dist/packages/mcp/assets/kb/docs/docs-screens-the-look.md +29 -0
  185. package/dist/packages/mcp/assets/kb/docs/docs-screens-token-screen.md +36 -0
  186. package/dist/packages/mcp/assets/kb/docs/docs-screens-trending-social-and-kol-lists.md +34 -0
  187. package/dist/packages/mcp/assets/kb/docs/docs-screens.md +26 -0
  188. package/dist/packages/mcp/assets/kb/docs/docs-spectator-1-the-agent-activity-window-follow-mode.md +56 -0
  189. package/dist/packages/mcp/assets/kb/docs/docs-spectator-2-the-read-only-stream-spectate.md +42 -0
  190. package/dist/packages/mcp/assets/kb/docs/docs-spectator-3-save-and-replay-record-file-dexterm-spectate.md +41 -0
  191. package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +39 -0
  192. package/dist/packages/mcp/assets/kb/docs/docs-spectator-limits.md +36 -0
  193. package/dist/packages/mcp/assets/kb/docs/docs-spectator-quick-start.md +37 -0
  194. package/dist/packages/mcp/assets/kb/docs/docs-spectator-security-model.md +35 -0
  195. package/dist/packages/mcp/assets/kb/docs/docs-spectator-see-also.md +29 -0
  196. package/dist/packages/mcp/assets/kb/docs/docs-spectator-streaming-it.md +32 -0
  197. package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-three-surfaces.md +37 -0
  198. package/dist/packages/mcp/assets/kb/docs/docs-spectator-what-is-redacted.md +35 -0
  199. package/dist/packages/mcp/assets/kb/docs/docs-spectator.md +29 -0
  200. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-common-questions.md +33 -0
  201. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +36 -0
  202. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-in-app-messages.md +42 -0
  203. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-reporting-a-problem.md +25 -0
  204. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting.md +23 -0
  205. package/dist/packages/mcp/assets/kb/docs/docs-voice-doctor.md +26 -0
  206. package/dist/packages/mcp/assets/kb/docs/docs-voice-it-clarifies-it-never-guesses.md +36 -0
  207. package/dist/packages/mcp/assets/kb/docs/docs-voice-latency.md +38 -0
  208. package/dist/packages/mcp/assets/kb/docs/docs-voice-linux-and-windows.md +32 -0
  209. package/dist/packages/mcp/assets/kb/docs/docs-voice-privacy.md +26 -0
  210. package/dist/packages/mcp/assets/kb/docs/docs-voice-still-unverified.md +27 -0
  211. package/dist/packages/mcp/assets/kb/docs/docs-voice-the-voice-neural-by-default.md +48 -0
  212. package/dist/packages/mcp/assets/kb/docs/docs-voice-what-it-can-never-do.md +27 -0
  213. package/dist/packages/mcp/assets/kb/docs/docs-voice-what-you-can-say.md +38 -0
  214. package/dist/packages/mcp/assets/kb/docs/docs-voice.md +25 -0
  215. package/dist/packages/mcp/src/app-help.js +123 -0
  216. package/dist/packages/mcp/src/firewall.js +2 -2
  217. package/dist/packages/mcp/src/index.js +5 -4
  218. package/dist/packages/mcp/src/server.js +56 -18
  219. package/dist/packages/mcp/src/spectator-sink.js +74 -2
  220. package/dist/packages/voice/src/stt/whisper.js +4 -2
  221. package/package.json +6 -5
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: docs-login-with-x-what-is-read-and-when
3
+ title: Login with X › What is read, and when
4
+ kind: docs
5
+ page: login-with-x
6
+ page_title: Login with X
7
+ heading: What is read, and when
8
+ anchor: what-is-read-and-when
9
+ url: https://dexterm.xyz/docs/login-with-x#what-is-read-and-when
10
+ tags:
11
+ - docs
12
+ - login-with-x
13
+ - read
14
+ - login
15
+ confidence: high
16
+ owner: maintainers
17
+ origin: docs-generated
18
+ reviewed_by: generated@2026-10-16
19
+ generated_from: dexterm/site content/docs (task-1420)
20
+ sources:
21
+ - site/content/docs/login-with-x.md
22
+ date: 2026-10-16
23
+ ---
24
+
25
+ | what | endpoint (user context) | when | cached |
26
+ |---|---|---|---|
27
+ | posts about the open coin | `GET /2/tweets/search/recent` with `$SYMBOL OR <mint>` (`-is:retweet -is:reply`) | every 60 s while the token screen is open, only newer posts after the first page | 15 min per query |
28
+ | your own X lists as KOL feeds | `GET /2/lists/:id/tweets` | every 5 min per enabled list | 15 min |
29
+ | manual KOL lists and packs | `GET /2/tweets/search/recent` with `from:` handles, 20 per query | every 5 min | 15 min |
30
+ | importing your lists | `GET /2/users/:id/owned_lists` + `GET /2/lists/:id/members` | only when you press `X` on the KOL screen or run `dexterm kol import-x` | – |
31
+ | who you are | `GET /2/users/me` | once at login | – |
32
+
33
+ Never: a filtered stream (economically unbounded), cashtag firehoses, search for every coin on the board, x.com pages, third-party mirrors. `⏎` on a post opens its URL in your browser; dexterm itself never fetches it.
34
+
35
+ Every response goes through the rate limiter (one bucket for X, and every `x-rate-limit-*` header updates a per-endpoint window) and the health registry; a `429` pauses reads until X's reset time and the header shows `x-stream ◐ rate limited 5m`. Posts then flow through the social layer exactly like news and on-chain rows: near-duplicates collapse, account bursts are marked spam, cashtag squats are hidden, instruction-like posts are withheld from the model and flagged `INJ` for you.
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: docs-login-with-x-what-you-set-up-once
3
+ title: Login with X › What you set up, once
4
+ kind: docs
5
+ page: login-with-x
6
+ page_title: Login with X
7
+ heading: What you set up, once
8
+ anchor: what-you-set-up-once
9
+ url: https://dexterm.xyz/docs/login-with-x#what-you-set-up-once
10
+ tags:
11
+ - docs
12
+ - login-with-x
13
+ - set
14
+ - once
15
+ - login
16
+ confidence: high
17
+ owner: maintainers
18
+ origin: docs-generated
19
+ reviewed_by: generated@2026-10-16
20
+ generated_from: dexterm/site content/docs (task-1420)
21
+ sources:
22
+ - site/content/docs/login-with-x.md
23
+ date: 2026-10-16
24
+ ---
25
+
26
+ 1. **An X developer account** at developer.x.com (https://developer.x.com) (log in with the X account you want to read as).
27
+ 2. **A Project with an App** of type **Native App** (a *public* client: PKCE only, no client secret ever exists, so nothing secret ships with dexterm).
28
+ 3. In the app's **User authentication settings**: OAuth 2.0 on, type *Native App*, callback URL **exactly** `http://127.0.0.1:41287/callback` (X requires `127.0.0.1`, not `localhost`, and an exact match), any website URL, and a name/description for the consent screen.
29
+ 4. Copy the app's **Client ID** and store it (prompted on your terminal; never on the command line):
30
+
31
+ ```sh
32
+ $ dexterm x set-client-id # paste the Client ID when prompted
33
+ $ dexterm x login # opens your browser on x.com; approve; the tab says "linked"
34
+ $ dexterm x status # @handle, scopes, token age, file modes
35
+ $ dexterm x logout # revokes both tokens at X and deletes the local record
36
+ ```
37
+
38
+ `dexterm doctor` has a **Login with X** line that tells you which of these is missing.
39
+
40
+ Scopes requested: `tweet.read users.read list.read offline.access`. Nothing with `write` or `dm` is ever requested, and the app refuses to build an authorize URL with such a scope.
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: docs-login-with-x-where-the-tokens-live
3
+ title: Login with X › Where the tokens live
4
+ kind: docs
5
+ page: login-with-x
6
+ page_title: Login with X
7
+ heading: Where the tokens live
8
+ anchor: where-the-tokens-live
9
+ url: https://dexterm.xyz/docs/login-with-x#where-the-tokens-live
10
+ tags:
11
+ - docs
12
+ - login-with-x
13
+ - where
14
+ - tokens
15
+ - live
16
+ - login
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/login-with-x.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ `~/.dexterm/x/tokens.json` (mode `600`, directory `700`; `DEXTERM_HOME` moves it) next to `client-id`. The access token lasts two hours and is refreshed with the refresh token when needed; X may rotate the refresh token, so the record is rewritten. Tokens are never printed, never written to any log or recording, never put on a command line, and never part of what the analyst sees (the analyst gets firewalled post text inside `<untrusted>` blocks, nothing else). If X answers `401`, the header says `login revoked or expired at X · dexterm x login` and nothing is read until you log in again. You can also revoke at `x.com/settings/connected_apps`.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: docs-login-with-x
3
+ title: Login with X
4
+ kind: docs
5
+ page: login-with-x
6
+ page_title: Login with X
7
+ url: https://dexterm.xyz/docs/login-with-x
8
+ tags:
9
+ - docs
10
+ - login-with-x
11
+ - login
12
+ confidence: high
13
+ owner: maintainers
14
+ origin: docs-generated
15
+ reviewed_by: generated@2026-10-16
16
+ generated_from: dexterm/site content/docs (task-1420)
17
+ sources:
18
+ - site/content/docs/login-with-x.md
19
+ date: 2026-10-16
20
+ ---
21
+
22
+ Read X posts in the SOCIAL panel and on the trending board with your own X app and your own login; what to set up, what the free and paid API tiers allow, and what dexterm never does.
23
+
24
+ dexterm can read X (Twitter) posts about the open coin and from the people you follow as KOLs. It does this **only through your own X developer app and your own X login** (OAuth 2.0 with PKCE, user context). There is no shared key, no dexterm account in the loop, no scraping, and dexterm never posts, likes, follows or reads DMs. Every tweet passes the same prompt firewall (https://dexterm.xyz/docs/analyst) as every other untrusted text before it is stored, shown or summarised.
25
+
26
+ Without a login nothing breaks: the trending board runs on the keyless venues, the SOCIAL panel shows on-chain rows and news, and the header says `x-stream ○ logged out`.
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: docs-paper-trading-a-live-ticket
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › A LIVE ticket
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: A LIVE ticket
8
+ anchor: a-live-ticket
9
+ url: https://dexterm.xyz/docs/paper-trading#a-live-ticket
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - live
14
+ - ticket
15
+ - trading
16
+ - devnet
17
+ - first
18
+ - paper
19
+ - safety
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/paper-trading.md
28
+ date: 2026-10-16
29
+ ---
30
+
31
+ `L` on a ticket flips it LIVE when a wallet is linked and the signer is alive (otherwise the ticket says why and stays PAPER). The header shows `◉ LIVE · DEVNET`, or `⚠ LIVE · MAINNET — REAL FUNDS` in red with the caps. `⏎` asks the signer for a **PLAN**:
32
+
33
+ 1. **Quote** from Jupiter, bound to your order: the input and output mints, the mode and the exact input amount must match or the plan is refused (`quote-mismatch`).
34
+ 2. **Build** the unsigned transaction; **decode** it with dexterm's own wire decoder (legacy and v0, lookup tables included).
35
+ 3. **Policy**: every top-level instruction must fit the shape of a Jupiter swap: exactly one route-family instruction (by Anchor discriminator), token operations limited to SyncNative, InitializeAccount for your wallet and CloseAccount back to your wallet, a System transfer only into your own wrapped-SOL account that is synced and closed in the same transaction, associated-token creation only for your wallet. Transfers, burns, approvals, authority changes, direct DEX calls and unknown programs are refused by name.
36
+ 4. **Binding**: the route's `in_amount`, `quoted_out_amount` and `slippage_bps` must equal the quote; the platform fee must be zero with the "none" sentinel account (dexterm takes no fee); the transfer authority must be your wallet; the source and destination must be your own associated token accounts for the two mints.
37
+ 5. **Simulation** against the RPC, with your wallet **and your token accounts** in the requested post-state: the SOL leaving your wallet must not exceed the plan plus a fee allowance nor the SOL cap; a buy may not decrease any of your token balances; a sell may spend only the order mint's account and only up to the order amount (an address a lookup table loads counts as part of the transaction). If the balances cannot be read, the plan is refused rather than guessed.
38
+ 6. **Price**: the SOL leg times the signer's own SOL/USD, never Jupiter's `swapUsdValue`; on mainnet an unknown or $0 price refuses.
39
+
40
+ The PLAN screen lists what will be signed instruction by instruction, what you pay and receive, the minimum received, the impact as a percent, the fee including any priority fee, the route, the simulation result, the SOL/USD price and its sources, the policy verdict and the caps verdict ("will be refused: …" when it would be).
41
+
42
+ `Y` (or `⏎`) is the keypress gate. The signer re-checks the caps, **reserves** the USD against the daily ledger (atomically, so two trades cannot both pass), opens the sign page, and hands the bytes to Phantom. What comes back must be the **same message** with a valid Ed25519 signature by the linked wallet; the only tolerated difference is a Lighthouse assertion tail appended by Phantom. The signed bytes are decoded, policy-checked and bound again, **re-simulated** with fresh token balances, and only then submitted. A transport error after the send keeps the charge and shows the signature with "do not resend"; a definite rejection before broadcast refunds. Plans are single-use and expire after 90 s.
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-paper-trading-before-you-press-size-vs-caps
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Before you press ⏎: size vs caps
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Before you press ⏎: size vs caps
8
+ anchor: before-you-press-size-vs-caps
9
+ url: https://dexterm.xyz/docs/paper-trading#before-you-press-size-vs-caps
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - before
14
+ - press
15
+ - size
16
+ - caps
17
+ - live
18
+ - trading
19
+ - devnet
20
+ - first
21
+ - paper
22
+ - safety
23
+ - model
24
+ confidence: high
25
+ owner: maintainers
26
+ origin: docs-generated
27
+ reviewed_by: generated@2026-10-16
28
+ generated_from: dexterm/site content/docs (task-1420)
29
+ sources:
30
+ - site/content/docs/paper-trading.md
31
+ date: 2026-10-16
32
+ ---
33
+
34
+ Since 2026-10-12 (`task-1368`) a LIVE buy ticket prices your size **at the signer's own SOL/USD** (the price its caps are enforced with) while you type, and shows it against the per-trade cap and what is left of the daily cap: `0.04 SOL ≈ $4.32 at SOL $108 · cap $5/trade · $20 left of $20 today`. When the size is over, the line turns red before you build anything: `0.05 SOL = $5.40 > $5 cap: use ≤ 0.043 SOL (f fits it; fees + token-account rent counted)`. `f` sets that size. The fit is the cap divided by the price minus 0.0025 SOL, rounded down to three decimals: the signer prices the *larger* of your planned SOL leg and the SOL the simulation actually moves out of the wallet, and a first buy of a token adds a token-account rent (0.00204 SOL) plus the fees on top of the size, so a size that is exactly the cap in USD would be refused at precheck. The daily remainder binds when it is smaller than the per-trade cap; with no SOL/USD from the signer the line says `$?` and the signer will refuse an unpriced trade on mainnet. The ticket's verdict is a preview; the signer still decides at precheck and again at confirm.
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: docs-paper-trading-devnet-signer-mainnet-token
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Devnet signer, mainnet token
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Devnet signer, mainnet token
8
+ anchor: devnet-signer-mainnet-token
9
+ url: https://dexterm.xyz/docs/paper-trading#devnet-signer-mainnet-token
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - devnet
14
+ - signer
15
+ - mainnet
16
+ - token
17
+ - live
18
+ - trading
19
+ - first
20
+ - paper
21
+ - safety
22
+ - model
23
+ confidence: high
24
+ owner: maintainers
25
+ origin: docs-generated
26
+ reviewed_by: generated@2026-10-16
27
+ generated_from: dexterm/site content/docs (task-1420)
28
+ sources:
29
+ - site/content/docs/paper-trading.md
30
+ date: 2026-10-16
31
+ ---
32
+
33
+ Jupiter has no devnet. A Jupiter route is built on **mainnet state** (its accounts, address-lookup tables and blockhash), so a devnet signer can never simulate or fill a swap of a real token: the simulation fails with an RPC error such as `invalid transaction: Transaction loads an address table account that doesn't exist`, and the caps refuse it (`simulation-failed`). The ticket now says this **before** you press ⏎ on any token while the signer is on devnet (`DEVNET cannot fill mainnet tokens: paper trade (L) or restart with --mainnet (real funds, caps $5/$20)`), and when a simulation does fail the PLAN shows the **full** RPC error over several lines (it used to be cut to `invalid transaction: Tr…`) with a plain-English hint when the pattern is this mismatch; the signer also writes the full error to the app log. Your two options are exactly those: paper trade the token with `L`, or run `dexterm --mainnet` with a funded mainnet wallet inside the caps (next section). The devnet signing path itself is proven by the probe, which is built for devnet on purpose.
34
+
35
+ On **devnet** a Jupiter swap is refused at the caps step (`mainnet-not-enabled`): Jupiter has no devnet, so a real swap is a mainnet action. The signing path is proven on devnet instead by **`dexterm wallet probe`** (or `/wallet probe`): a transaction dexterm builds itself that wraps 0.001 SOL into your own wrapped-SOL account and closes it back, fees only, through exactly the same keypress → Phantom → verify → re-simulate → submit → confirm path, with its own policy (no route allowed) and never on mainnet.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: docs-paper-trading-jupiter-rate-limits
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Jupiter rate limits
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Jupiter rate limits
8
+ anchor: jupiter-rate-limits
9
+ url: https://dexterm.xyz/docs/paper-trading#jupiter-rate-limits
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - jupiter
14
+ - rate
15
+ - limits
16
+ - live
17
+ - trading
18
+ - devnet
19
+ - first
20
+ - paper
21
+ - safety
22
+ - model
23
+ confidence: high
24
+ owner: maintainers
25
+ origin: docs-generated
26
+ reviewed_by: generated@2026-10-16
27
+ generated_from: dexterm/site content/docs (task-1420)
28
+ sources:
29
+ - site/content/docs/paper-trading.md
30
+ date: 2026-10-16
31
+ ---
32
+
33
+ Jupiter's keyless API allows about five requests per ten seconds per IP, answers `429` with no `Retry-After` but with a reset time, and its alternate host (`lite-api.jup.ag`) can answer `503` (both recorded on 2026-10-12 and kept as fixtures). A limit used to kill the plan (`build-failed: HTTP 429`) and park the preview on "fetching…" for half a minute. Now every keyless Jupiter call on the trade path is retried on the **other host** after the server's own reset (or `Retry-After`, with a jittered backoff), at most three attempts inside ten seconds; a `5xx` or a dropped connection alternates the same way; the LIVE preview, the signer's re-quote and the build go through the signer's **one** rate limiter and a quote fetched for the preview is reused by the build a moment later (two calls, not three). When the budget is spent, or the data layer's health gate is cooling the source down after two 429s in a minute, the ticket **keeps the plan**: it shows `Jupiter is rate limiting this IP (429 from api.jup.ag), retrying in Ns`, retries by itself when the wait ends, `r` retries now and `esc` cancels. Nothing is built or signed while it waits.
@@ -0,0 +1,32 @@
1
+ ---
2
+ id: docs-paper-trading-link-a-wallet
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Link a wallet
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Link a wallet
8
+ anchor: link-a-wallet
9
+ url: https://dexterm.xyz/docs/paper-trading#link-a-wallet
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - link
14
+ - wallet
15
+ - live
16
+ - trading
17
+ - devnet
18
+ - first
19
+ - paper
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 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 since `task-1368`; 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. The port is fixed because Phantom remembers which **origins** it trusts: link and every later sign page share `http://127.0.0.1:41291`, so after the first Connect prompt Phantom connects silently. dexterm verifies the Ed25519 proof and stores **only your public key** in `~/.dexterm/wallet-link.json`. `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.
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: docs-paper-trading-live-trading-devnet-first
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first)
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Live trading (devnet first)
8
+ anchor: live-trading-devnet-first
9
+ url: https://dexterm.xyz/docs/paper-trading#live-trading-devnet-first
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - live
14
+ - trading
15
+ - devnet
16
+ - first
17
+ - paper
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
+ **Status: in progress.** The code is on main and verified against fakes, a hand-built attack suite and a real recorded Jupiter transaction; the one thing not yet observed is a transaction signed by the real Phantom extension on devnet, which the maintainers' probe run will settle. Nothing here has touched mainnet.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: docs-paper-trading-mainnet
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Mainnet
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Mainnet
8
+ anchor: mainnet
9
+ url: https://dexterm.xyz/docs/paper-trading#mainnet
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - mainnet
14
+ - live
15
+ - trading
16
+ - devnet
17
+ - first
18
+ - paper
19
+ - safety
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/paper-trading.md
28
+ date: 2026-10-16
29
+ ---
30
+
31
+ Only with `--mainnet`. The banner is red, the caps are $5 per trade and $20 per day by default (raise them only with the flag, never above $500 / $2000), 1 SOL out per transaction, 3% impact, 500 bps slippage. dexterm takes no fee; you pay network fees only. Nobody has run a mainnet trade through this path yet, and nothing on this page authorizes one.
@@ -0,0 +1,44 @@
1
+ ---
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
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Order plans and standing mandates
8
+ anchor: order-plans-and-standing-mandates
9
+ url: https://dexterm.xyz/docs/paper-trading#order-plans-and-standing-mandates
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - order
14
+ - plans
15
+ - standing
16
+ - mandates
17
+ - paper
18
+ - trading
19
+ - live
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
+ 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.
33
+
34
+ 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
+
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.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: docs-paper-trading-panic
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › Panic
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: Panic
8
+ anchor: panic
9
+ url: https://dexterm.xyz/docs/paper-trading#panic
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - panic
14
+ - live
15
+ - trading
16
+ - devnet
17
+ - first
18
+ - paper
19
+ - safety
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/paper-trading.md
28
+ date: 2026-10-16
29
+ ---
30
+
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.
@@ -0,0 +1,37 @@
1
+ ---
2
+ id: docs-paper-trading-pnl-cards
3
+ title: Paper trading, live trading and the safety model › PnL cards
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: PnL cards
8
+ anchor: pnl-cards
9
+ url: https://dexterm.xyz/docs/paper-trading#pnl-cards
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - pnl
14
+ - cards
15
+ - paper
16
+ - trading
17
+ - live
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
+ `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/`.
31
+
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.
33
+ - **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.
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
+
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".
@@ -0,0 +1,41 @@
1
+ ---
2
+ id: docs-paper-trading-the-live-fire-path-devnet-the-fast-wallet
3
+ title: Paper trading, live trading and the safety model › Order plans and standing mandates › The live fire path (devnet, the fast wallet)
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: The live fire path (devnet, the fast wallet)
8
+ anchor: the-live-fire-path-devnet-the-fast-wallet
9
+ url: https://dexterm.xyz/docs/paper-trading#the-live-fire-path-devnet-the-fast-wallet
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - live
14
+ - fire
15
+ - path
16
+ - devnet
17
+ - fast
18
+ - wallet
19
+ - order
20
+ - plans
21
+ - standing
22
+ - mandates
23
+ - paper
24
+ - trading
25
+ confidence: high
26
+ owner: maintainers
27
+ origin: docs-generated
28
+ reviewed_by: generated@2026-10-16
29
+ generated_from: dexterm/site content/docs (task-1420)
30
+ sources:
31
+ - site/content/docs/paper-trading.md
32
+ date: 2026-10-16
33
+ ---
34
+
35
+ A standing mandate is meant to fire at machine speed, which a Phantom approval per fill cannot do. So the live path uses a second, **capped fast wallet**: the one key dexterm ever holds, created only by `dexterm wallet fast create` after a real keypress on a TTY, stored at `~/.dexterm/fast-wallet.json` at mode 600, **devnet only** (the record says so, the signer process loads it only against a devnet RPC, and there is no mainnet variant, no export and no import). `dexterm wallet fast status` shows its public key and devnet balance, `dexterm wallet fast airdrop` asks the devnet faucet, `dexterm wallet fast remove` deletes it (refused while it still holds SOL unless `--force`). Your main wallet is never named by a mandate and the fast wallet never signs for it: the signer refuses either crossing before caps, reservation or signing.
36
+
37
+ `L` on the `O` screen raises the fire-path prompt; a held keypress switches plan fills from PAPER to **LIVE · DEVNET · fast wallet** (and back), journaled as `settings.executor`. The switch is refused by voice, an agent, a pipe or the popup (it takes nothing but a keypress), while any plan is armed or holding (its legs would strand on the other ledger), when the run has no signer process (replay, offline, `--no-live`), when the signer is not on devnet, or when no fast wallet is loaded. Every run starts on paper; the journal never recovers a live switch.
38
+
39
+ When an armed plan fires on the live path, the engine asks the signer to **build a devnet fill** for its leg. Jupiter has no devnet, so the transaction is the probe's wrap-and-unwrap shape sized to the plan's SOL leg (0.02 SOL for a $3 entry at $150/SOL), with an on-chain memo naming the plan leg; the signer decodes it, runs the probe-shape policy and the program allow-list, simulates it with the fast wallet's token balances, prices the SOL leg from its own SOL/USD feed and **enforces its USD per-trade and daily caps on devnet too** (a fill with no trustworthy price, or above the per-trade or remaining daily budget, is refused and the reason, `per-trade-cap`, `daily-cap`, `no-usd-value`, is what the plans journal records) plus a hard **0.05 SOL per-fill ceiling**. The confirm re-checks and reserves the USD, has the fast wallet sign, verifies the signature and the message, re-simulates the signed bytes, submits and confirms. The engine journals an intent before anything is sent, treats the send as in flight until the signer answers, settles it by lookup and never resends; an outcome the signer could not determine expires in the engine after 90 seconds as unseen (the fast wallet is capped, so exposure is bounded). The plan's **token leg is modelled** from the fire-time price, because no token changes hands on devnet, and the journal labels the fill `devnet-fill` with `modelledTokens: true`, the real signature and the real SOL delta (the fees). A mainnet fill through the fast wallet is refused by construction.
40
+
41
+ What is proven here, on fakes with the real decoder, the real Ed25519 signer and the real executor pipeline: a fill is built, signed by the fast wallet (Phantom is never asked), confirmed and booked with the USD ledger charged; the ceiling, a missing price, the per-trade cap and the daily cap each refuse before anything signs; a mainnet signer or a missing fast wallet refuses the build; a fast-lane plan confirmed with the main wallet's key, or a main-lane plan built for the fast wallet, is `signer-mismatch`; the whole path works over the real authenticated child-process channel; and the engine-side adapter turns the signer's answers into the journal rows above. What is not: a fill confirmed on devnet with real faucet SOL (the public faucet answered an internal error on the day), and any mainnet action.
@@ -0,0 +1,34 @@
1
+ ---
2
+ id: docs-paper-trading-the-signer-process
3
+ title: Paper trading, live trading and the safety model › Live trading (devnet first) › The signer process
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: The signer process
8
+ anchor: the-signer-process
9
+ url: https://dexterm.xyz/docs/paper-trading#the-signer-process
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - signer
14
+ - process
15
+ - live
16
+ - trading
17
+ - devnet
18
+ - first
19
+ - paper
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
+ The first LIVE action starts a **separate signer process** with exactly the caps flags you started dexterm with (`--max-usd`, `--daily-usd`, `--max-sol-out`, `--max-slippage-bps`, `--trade-rpc`, `--mainnet`). It talks to the terminal over an authenticated pipe whose only methods are `status · plan · probe · precheck · confirm · drop · panic`: there is no `sign(bytes)`, no `submit`, no `setCaps`, and no way to name a wallet other than the one in the signer's own link file. If the signer dies it is never respawned; LIVE stays off until you restart.
33
+
34
+ The signer owns: the caps and their hard ceilings; the **daily USD ledger** (SQLite, shared by every dexterm process on the machine, survives a restart); the **kill switch**; its own HTTP client for Jupiter and the RPC; its own **SOL/USD feed** (DexScreener and CoinGecko, timestamped, both required within 3% and under 60 s on mainnet); and the wallet bridge. The network it reports and caps by is classified from the RPC endpoint it actually talks to, by exact hostname, never from a flag or a label.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: docs-paper-trading-the-ticket
3
+ title: Paper trading, live trading and the safety model › The ticket
4
+ kind: docs
5
+ page: paper-trading
6
+ page_title: Paper trading, live trading and the safety model
7
+ heading: The ticket
8
+ anchor: the-ticket
9
+ url: https://dexterm.xyz/docs/paper-trading#the-ticket
10
+ tags:
11
+ - docs
12
+ - paper-trading
13
+ - ticket
14
+ - paper
15
+ - trading
16
+ - live
17
+ - safety
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/paper-trading.md
26
+ date: 2026-10-16
27
+ ---
28
+
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.
30
+
31
+ 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.