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,25 @@
1
+ ---
2
+ id: docs-cli
3
+ title: CLI flags and commands
4
+ kind: docs
5
+ page: cli
6
+ page_title: CLI flags and commands
7
+ url: https://dexterm.xyz/docs/cli
8
+ tags:
9
+ - docs
10
+ - cli
11
+ - flags
12
+ - commands
13
+ confidence: high
14
+ owner: maintainers
15
+ origin: docs-generated
16
+ reviewed_by: generated@2026-10-16
17
+ generated_from: dexterm/site content/docs (task-1420)
18
+ sources:
19
+ - site/content/docs/cli.md
20
+ date: 2026-10-16
21
+ ---
22
+
23
+ Every flag parseArgs accepts, the subcommands, the filter grammar, sort keys and presets.
24
+
25
+ Generated from `packages/cli/src/main.ts` (`parseArgs`, the subcommand dispatch and `dexterm --help`), `scan/command.ts` (the `--scan-*` table), `screener/filter.ts`, `screener/sort.ts` and `screener/presets.ts` at commit `(generated from the app: see https://dexterm.xyz/docs/cli; app-help has the exact keys and commands)`. `npm run docs:check` fails if a flag here does not exist or an accepted flag is undocumented.
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: docs-configuration-environment-variables
3
+ title: Configuration and files on disk › Environment variables
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Environment variables
8
+ anchor: environment-variables
9
+ url: https://dexterm.xyz/docs/configuration#environment-variables
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - environment
14
+ - variables
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ | variable | effect |
28
+ |---|---|
29
+ | `DEXTERM_HOME` | the directory for `state.json`, `helius.key`, `popup.json`, `config.json`, workspaces, themes and packs (default `~/.dexterm`) |
30
+ | `DEXTERM_DB_PATH` | set by the app for its analyst MCP child so it shares the same cache file; you normally use `--db` |
31
+ | `DEXTERM_RPC_URL` · `DEXTERM_RPC_URLS` | read-only RPC endpoints (see above) |
32
+ | `DEXTERM_CALM=1` | effects off (same as `--calm`) |
33
+ | `DEXTERM_INTENSITY` | `off` · `normal` · `fever` |
34
+ | `DEXTERM_OFFLINE=1` | refuse live data; `--fixtures` or `--replay` only (tests and CI) |
35
+ | `DEXTERM_ANALYST_MODEL` | the Claude model for analyst turns (default `(generated from the app: see https://dexterm.xyz/docs/configuration#environment-variables; app-help has the exact keys and commands)`) |
36
+ | `DEXTERM_POPUP_SHELL` | path to a prebuilt native chart window |
37
+ | `DEXTERM_POPUP_HOTKEY` · `DEXTERM_POPUP_HOTKEY_CLOSE` | override the popup chords without a config file |
38
+ | `DEXTERM_RECORDER=0` | history recorder off (same as `--no-recorder`; `off`, `false` and `no` work too) |
39
+ | `DEXTERM_TRACE` | write first-frame and first-rows milestones to a file (boot measurements) |
40
+ | `DEXTERM_VOICE_STT` · `DEXTERM_VOICE_TTS` | pick the voice (https://dexterm.xyz/docs/voice) engines: `auto` (default) · `apple` · `whisper` · `none`, and `auto` · `say` · `none` |
41
+ | `DEXTERM_VOICE_RECORD=1` | keep the whisper path's temporary WAV instead of deleting it after transcription |
42
+ | `DEXTERM_WHISPER_MODEL` · `DEXTERM_VOICE_HELPER_DIR` · `DEXTERM_SWIFTC` | the whisper model file (default `~/.dexterm/models/ggml-base.en.bin`), the compiled Apple Speech helper's cache dir (default `~/.dexterm/voice-helper`), the Swift compiler |
43
+ | `DEXTERM_SCREEN_STATE` | set by the app for its MCP child (the current screen context); not for you |
44
+ | `NO_COLOR` · `FORCE_COLOR` · `COLORTERM` · `TERM` | colour depth detection; `NO_COLOR` also implies calm |
45
+ | `LANG` / `LC_ALL` | a non-UTF-8 locale switches the rain to hex glyphs (`--ascii-rain` forces it) |
@@ -0,0 +1,41 @@
1
+ ---
2
+ id: docs-configuration-files-on-disk
3
+ title: Configuration and files on disk › Files on disk
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Files on disk
8
+ anchor: files-on-disk
9
+ url: https://dexterm.xyz/docs/configuration#files-on-disk
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - files
14
+ - disk
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/configuration.md
22
+ date: 2026-10-16
23
+ ---
24
+
25
+ | path | what | notes |
26
+ |---|---|---|
27
+ | `~/.local/share/dexterm/dexterm.db` | SQLite: the data cache, your watchlist and alerts, the feed snapshot, the request and credit meters, the PAPER wallet (balance, positions, trades), your KOL lists and mutes, and the history recorder (https://dexterm.xyz/docs/configuration#history-recorder)'s tables | `--db PATH` moves it, `--db :memory:` skips it. `$XDG_DATA_HOME/dexterm/dexterm.db` when set; `%APPDATA%\dexterm\dexterm.db` on Windows. |
28
+ | `~/.dexterm/state.json` | how many times dexterm has booted (the first launch gets the full boot and the welcome card) | `DEXTERM_HOME` moves the directory |
29
+ | `~/.dexterm/helius.key` | your optional free Helius key, mode 600 | read in code, URL built in memory, never printed. Optional. |
30
+ | `~/.dexterm/popup.json` | chart popup hotkeys, docking, rain, fps cap | optional; see popup chart (https://dexterm.xyz/docs/popup-chart#config-dexterm-popup-json) |
31
+ | `~/.dexterm/config.json` · `config.journal.jsonl` | the customization config (v4: theme overrides, keymap, rules, installed packs, widget consent, the price display mode (https://dexterm.xyz/docs/configuration#price-display-mode)) and its journal of applied changes with their inverses | machine-written, mode 600; `ctrl+z` in the app undoes the last change. Holds no secrets by construction: the schema has no key field, and an older config that carried one gets it moved out to `<name>.key`. See workspaces (https://dexterm.xyz/docs/configuration#workspaces), rules (https://dexterm.xyz/docs/configuration#rules-engine), packs (https://dexterm.xyz/docs/configuration#packs) |
32
+ | `~/.dexterm/workspaces/<name>.json` · `themes/<name>.json` | your workspaces and themes, one file each | `dexterm workspace`, `dexterm theme` |
33
+ | `~/.dexterm/packs/<name>@<version>/` · `allowed_signers` · `reviewed-packs.json` | installed packs (exactly the files their lock names), the publisher keys you pinned, pack hashes you marked reviewed | `dexterm pack` |
34
+ | `~/.dexterm/voice-helper/` | the Apple Speech helper (`recognize.swift`, its compiled binary and a source hash), built once by `swiftc` on the first voice use | optional; see voice (https://dexterm.xyz/docs/voice). No audio or transcript is ever written here |
35
+ | `~/.dexterm/piper/` · `~/.dexterm/models/` | the neural voice: a private Python environment with Piper (macOS, written by `dexterm voice setup`), and the downloaded voice models (`en_GB-alan-medium`, whisper `base.en`) | optional; `dexterm voice uninstall` removes the runtime, `--purge-model` the Piper voice too. See voice (https://dexterm.xyz/docs/voice#the-voice-neural-by-default) |
36
+ | `~/.dexterm/exports/` | PNG and text files from `E` (export a view) and `H` (PnL cards (https://dexterm.xyz/docs/paper-trading#pnl-cards)) | directory 700, files 600; local only, nothing is uploaded |
37
+ | `~/.dexterm/spectator.json` | the spectator stream (https://dexterm.xyz/docs/spectator#2-the-read-only-stream-spectate)'s loopback port and per-session token, while `dexterm agent serve --spectate` runs | mode 600; never printed or passed as an argument |
38
+ | `~/.local/bin/dexterm` | the launcher `install.sh` writes | user-level |
39
+ | `packages/popup/shell/wry/target/release/dexterm-shell-wry` | the native chart window, if built | `DEXTERM_POPUP_SHELL` points elsewhere |
40
+
41
+ Delete the first three and dexterm forgets everything.
@@ -0,0 +1,44 @@
1
+ ---
2
+ id: docs-configuration-headless-recorder-dexterm-record
3
+ title: Configuration and files on disk › History recorder › Headless recorder (dexterm record)
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Headless recorder (dexterm record)
8
+ anchor: headless-recorder-dexterm-record
9
+ url: https://dexterm.xyz/docs/configuration#headless-recorder-dexterm-record
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - headless
14
+ - recorder
15
+ - dexterm
16
+ - record
17
+ - history
18
+ - files
19
+ - disk
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/configuration.md
27
+ date: 2026-10-16
28
+ ---
29
+
30
+ The recorder above only grows while the terminal is open. `dexterm record` is **opt-in**. It runs the same recorder jobs with no terminal UI: snapshots and feed membership, the new-pairs stream, the 1 h to 72 h outcome sweeps, labels and retention. Your local history keeps growing for backtests while dexterm is closed.
31
+
32
+ ```sh
33
+ $ dexterm record run --once --verbose # one observation pass + one maintenance pass, then exit
34
+ $ dexterm record run # keep going: a feed refresh every 60 s (--interval S)
35
+ $ dexterm record status # db size, snapshots, outcomes, today's sweep calls, LaunchAgent state
36
+ $ dexterm record install --dry-run # print the macOS LaunchAgent it would write; writes nothing
37
+ $ dexterm record install --load # write it to ~/Library/LaunchAgents (no sudo) and load it
38
+ $ dexterm record uninstall --unload # stop and remove it
39
+ ```
40
+
41
+ - **Nothing turns itself on.** The collector runs only when you start it. `install` writes a user-level LaunchAgent and loads it only with `--load`. A LaunchAgent does not start before you log in.
42
+ - **Same budgets as the app.** Every request goes through the data layer's rate limiter and health gate, and the outcome sweeps keep their own per-sweep and per-day caps. It never builds a signer, never trades and never prints an RPC key.
43
+ - **A disk cap.** Above `--max-db-mb` (1024 by default) it pauses new observations, while labels and retention keep running, so the database cannot grow without bound.
44
+ - **Recurring backtests.** 0.1.3 also ships the logic behind recurring skill backtests: a rolling held-out window, a frozen comparison set, and a gate that only *proposes* a tuning when it beats the noise. Nothing changes a skill on your machine. A tuning reaches you only through a normal release, with its measured numbers, including weak ones (see LARP detector (https://dexterm.xyz/docs/larp)).
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: docs-configuration-history-recorder
3
+ title: Configuration and files on disk › History recorder
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: History recorder
8
+ anchor: history-recorder
9
+ url: https://dexterm.xyz/docs/configuration#history-recorder
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - history
14
+ - recorder
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ In live mode dexterm keeps a local history of what it saw, for the rug model and backtests on the roadmap (https://dexterm.xyz/roadmap/): a row per coin when its price, liquidity, holders or volume changed materially (plus an hourly anchor), which feeds listed it, and a code-only outcome label per anchor at 1 h, 2 h, 6 h, 24 h and 72 h (no model is involved). It lives in the same `--db` file; nothing is uploaded.
28
+
29
+ - **Requests:** recording reuses data the screens already fetched. Outcome checks re-ask DexScreener about coins whose window is due, at the lowest priority inside the app's own limiter: at most 6 calls a minute and 1,500 a day, skipped while DexScreener is rate-limiting.
30
+ - **When it runs:** the first maintenance pass (outcome check, labels, retention) runs 5 seconds after launch and then once a minute, and quitting labels whatever is due before the database closes. Until 2026-10-12 the first pass waited a full minute and nothing ran at quit, so two days of short runs on the development machine left 1,676 anchors and 0 outcomes; `dexterm recorder label` labels an older database's backlog in one go.
31
+ - **Size:** measured at about 100 MB per 8-hour live day with the current rules. Raw JSON is dropped after 7 days, rows are thinned to one per coin per minute after 24 hours, and columns expire after 90 days; outcome labels are kept. `dexterm recorder stats` shows the size, `dexterm recorder prune` runs retention now.
32
+ - **Off:** `--no-recorder` or `DEXTERM_RECORDER=0`. It never runs with `--fixtures`, `--replay` or `--db :memory:`.
33
+ - **Export:** `dexterm recorder export` writes one record per anchor with its later outcomes (see the CLI reference (https://dexterm.xyz/docs/cli#subcommands)).
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: docs-configuration-packs
3
+ title: Configuration and files on disk › Packs
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Packs
8
+ anchor: packs
9
+ url: https://dexterm.xyz/docs/configuration#packs
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - packs
14
+ - files
15
+ - disk
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/configuration.md
23
+ date: 2026-10-16
24
+ ---
25
+
26
+ A pack is a directory you can share: `pack.json` (name, version, publisher, what it contains), then `workspaces/*.json`, `themes/*.json`, `rules/*.rules`, `keymap.json` and `widgets/<name>/` (see widgets (https://dexterm.xyz/docs/configuration#widgets)), plus a generated `pack.lock` (sha256 per file and a pack hash) and an optional `pack.lock.sig` from `ssh-keygen -Y sign` (no new dependency; the key everyone already has).
27
+
28
+ ```sh
29
+ $ dexterm pack verify ./trenches # the install card: integrity, signature, trust, contents, refusals
30
+ $ dexterm pack add ./trenches --accept-unsigned # install into ~/.dexterm/packs/trenches@1.0.0
31
+ $ dexterm pack export ./mine --name mine --workspace hud --theme amber --rules --keymap
32
+ $ dexterm pack sign ./mine --key ~/.ssh/id_ed25519 ; dexterm pack trust alice "ssh-ed25519 AAAA…"
33
+ ```
34
+
35
+ - **Trust tiers decide defaults, never powers.** `reviewed` (the pack hash is on the list dexterm ships or in your `reviewed-packs.json`) > `signed` (a publisher key you pinned with `dexterm pack trust`) > `unsigned` (needs `--accept-unsigned`: the risk card). Rules from a reviewed or signed pack load enabled; from an unsigned pack they load disabled and you enable each one on the rules screen (that makes your own copy). A pack keymap is shown and merged only by `dexterm pack keymap <name> --merge`, through the same reserved-key checks as your own. Widgets install disabled.
36
+ - **A pack never runs code.** It is plain files; there is no entry script, no dependency, no network. Refused outright, not skipped: paths with `..` or an absolute root, symlinks anywhere, hidden files, `node_modules`, more than 200 files or 2 MB, a `__proto__` key in any JSON, a capability or enabled field on a widget, a rule that tries to arm or oversize, a keymap that rebinds a reserved key. The hash is pinned at install and re-checked on every load: a pack edited after install is skipped and reported, and a directory copied into `packs/` without a record is not an install.
37
+ - **Export refuses secrets.** Anything in your exported files that looks like a base58 private key, a Helius token, a 32-byte hex string or a high-entropy blob stops the export before a file is written.
38
+ - **Not built yet:** `pack add` from a git URL or a zip (install is from a directory you already have), and a shipped reviewed list (empty until a first-party pack is reviewed). The example pack is `packs/example-widgets` in the repo.
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: docs-configuration-price-display-mode
3
+ title: Configuration and files on disk › Price display mode
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Price display mode
8
+ anchor: price-display-mode
9
+ url: https://dexterm.xyz/docs/configuration#price-display-mode
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - price
14
+ - display
15
+ - mode
16
+ - files
17
+ - disk
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/configuration.md
25
+ date: 2026-10-16
26
+ ---
27
+
28
+ Memecoin traders think in market cap, so every token price can be shown as **market cap** instead of the USD price per token. It is a display mode only: the same data underneath, no extra requests, and nothing that trades (signer, caps, tickets, plans, the confirm gate) reads it.
29
+
30
+ - `$` flips price ⇄ market cap on every screen and both charts, and saves it to `config.json` as `"display": { "priceMode": "mcap" }` (or `"price"`, the default) through the journal, so `ctrl+z` undoes it. `dexterm display [price|mcap]` shows or sets it from the command line; `--price-mode price|mcap` overrides it for one run; a workspace may carry `"priceMode"` and switches to it while active.
31
+ - Market cap = price × supply, where the supply is what the data sources already report (the row's market cap ÷ its price at the latest tick). The screener, watchlist and new pairs lead with **MCAP** (the PRICE column moves to MCAP's old place, every sort key works as before, `mcap` still sorts by market cap); the watchlist's entry becomes **ENTRY MC**; spotlights and the token header lead with the market cap and keep the price beside it.
32
+ - Charts: the terminal chart and the popup chart (https://dexterm.xyz/docs/popup-chart#market-cap-axis) label the Y axis in K / M / B (`300K`, `1.2M`). Historical candles are scaled by the **current** supply, and the chart title says `mcap (current supply)` so nobody reads it as the exact market cap at that time (a burn or a mint since then is not reflected).
33
+ - Order plans already trigger on market cap: the `O` screen and the plans popup show each level with both numbers (`entry mc ≤ $300K ($0.0₃3)`), the price taken from the plan's own supply snapshot. Position rows read **AVG MC** / **MCAP**; profit and loss stay in USD (or SOL on the paper screen).
34
+ - A token without a known supply falls back to its price and says so: `ᵖ` after the number in a table (the panel caption counts them), `supply unknown · showing price` on the spotlight, the header and the chart title. Nothing is estimated.
35
+ - `config.json` moved to **v4** for this: an older file is migrated on load (`display.priceMode = price` added, a backup kept as `config.json.bak-v3`), nothing else changes.
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: docs-configuration-push-alerts-and-dexterm-watch
3
+ title: Configuration and files on disk › Push alerts and dexterm watch
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Push alerts and dexterm watch
8
+ anchor: push-alerts-and-dexterm-watch
9
+ url: https://dexterm.xyz/docs/configuration#push-alerts-and-dexterm-watch
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - push
14
+ - alerts
15
+ - dexterm
16
+ - watch
17
+ - files
18
+ - disk
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/configuration.md
26
+ date: 2026-10-16
27
+ ---
28
+
29
+ Rules (above) already alert inside the running terminal. To hear about a match when the terminal is closed, pick where alerts go and run your rules headless.
30
+
31
+ ```sh
32
+ dexterm alerts status # which channels are on
33
+ dexterm alerts set-telegram # your own Telegram bot (token + chat id read from the environment or stdin, never argv)
34
+ dexterm alerts set-discord # your own Discord webhook URL
35
+ dexterm alerts enable desktop # a desktop notification (macOS, Linux)
36
+ dexterm alerts test # send one test alert to every enabled channel
37
+ dexterm watch # run your rules with no terminal UI and deliver alerts
38
+ dexterm watch --once # one pass, then exit (good for cron)
39
+ ```
40
+
41
+ - **Off by default.** Nothing is sent anywhere until you configure and enable a channel. `dexterm alerts disable` turns a channel off again.
42
+ - **Your credentials, stored locally.** A Telegram bot token or a Discord webhook lives in your home folder with mode 0600 and is never logged or printed. dexterm ships no bot and no webhook of its own.
43
+ - **Triggers are plain rules.** A price level, a holder-concentration change, a LARP grade change, or a new pair that matches a filter are all rule lines (see the rules section); the LARP grade is a numeric field, so "downgraded" is `when larp.delta < 0`.
44
+ - **Proposals only.** A rule can raise an alert, open a ticket proposal or ask the analyst. There is no path from a rule, or from `dexterm watch`, to signing, arming or raising a cap.
45
+ - **Untrusted text is cleaned.** Token names and symbols pass the prompt firewall before they reach any channel.
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: docs-configuration-rules-engine
3
+ title: Configuration and files on disk › Rules engine
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Rules engine
8
+ anchor: rules-engine
9
+ url: https://dexterm.xyz/docs/configuration#rules-engine
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - rules
14
+ - engine
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ A rule is one line: `when <cond> [for <n> ticks | <n>s | <n>m] then <action>+ [cooldown <dur>] [max <n>/h] [scope screener | watchlist | newpairs | positions | mint:<addr>] [window <dur>] [name "<s>"]`. Conditions use the filter grammar (https://dexterm.xyz/docs/cli#filter-grammar)'s fields and tags with `and` / `or` / `not` and parentheses, plus two derived signals over a per-coin history the engine keeps itself: `<field>.velocity` (current ÷ the mean of the earlier samples in the window) and `<field>.delta` (current − oldest in the window); both are false until two earlier samples exist, so a rule never fires on a coin's first paint. Actions: `alert(level, "text")`, `ticket(buy | sell, size ≤ 50, sol | usd | pct)`, `ask(skill)`, `popup(chart | token | bubbles | narrative | plans | feeds)`, `tag("label")`, `sound(name)`, `watch`.
28
+
29
+ ```text
30
+ vol5m.velocity > 3 and cluster < 20 and liq > 25K for 2 ticks then alert(up, "surge") ask(token-dossier) popup(chart) cooldown 15m max 6/h name "surge-clean"
31
+ ```
32
+
33
+ - The open token's live holder and rug signals (https://dexterm.xyz/docs/screens#live-holder-and-rug-signals) are rule fields too: `top10`, `dev`, `bundled`, `snipers`, `fresh`, `cluster`, `lplocked`, `bonding`, `mintable`, `freezable`, with `.delta` and `.velocity` (`dexterm rules fields` lists them all).
34
+ - The text is parsed, never evaluated as code. Every rule has a cooldown (default 10 m) and a max per hour (default 12, hard cap 120), so a bad rule is annoying, not dangerous.
35
+ - Rules can **alert**, annotate your own watchlist (`tag`, `watch`), open the read-only windows and ring the bell, or **propose**. `ticket` and `ask` do not act: each fire becomes a proposal card on the rules screen (status proposal, your keypress required, armed by nobody); acting on it opens the PAPER ticket in its editing phase, where you size and confirm, or asks the analyst. Nothing a rule does reaches an order plan, a mandate, the signer or the gate, and a rule argument named like money (`arm`, `auto`, `confirm`, `execute`, `sign`, `send`) is refused at parse time, in text and in JSON.
36
+ - `ctrl+r` opens the RULES screen: the list with enabled / last fired / source, `i` types a new rule with a live "would match N of M rows right now" dry-run, `tab` the proposals pane, `space` toggles, `d` removes. `dexterm rules list | add "<rule>" | remove | enable | disable <id> | check "<rule>" | dry-run "<rule>" | fields`. Rules live in `config.json`, every change through the journal.
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: docs-configuration-the-analyst-s-launch
3
+ title: Configuration and files on disk › The analyst's launch
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: The analyst's launch
8
+ anchor: the-analyst-s-launch
9
+ url: https://dexterm.xyz/docs/configuration#the-analyst-s-launch
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - analyst
14
+ - launch
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ For the record, the analyst is spawned as `claude -p` with `--output-format stream-json`, `--tools ''` (no built-in tools), `--strict-mcp-config` pointing at the dexterm server only, `--allowedTools mcp__dexterm__*`, `--permission-mode dontAsk`, `--setting-sources ''` (none of your Claude Code settings or other plugins), the dexterm plugin directory for the skills, the analyst system prompt appended, a JSON schema for structured skills, and `--disallowedTools` for the action tools in scan mode. It cannot read files, run commands or reach any other MCP server from inside dexterm.
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: docs-configuration-the-optional-free-rpc-key
3
+ title: Configuration and files on disk › The optional free RPC key
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: The optional free RPC key
8
+ anchor: the-optional-free-rpc-key
9
+ url: https://dexterm.xyz/docs/configuration#the-optional-free-rpc-key
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - optional
14
+ - free
15
+ - rpc
16
+ - key
17
+ - files
18
+ - disk
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/configuration.md
26
+ date: 2026-10-16
27
+ ---
28
+
29
+ Keyless, the holders panel shows the holder count and the top-10 share from Jupiter; the ranked top-20 list with owner wallets needs a free RPC key (a 2-minute signup with no card at Helius, Alchemy, QuickNode or Ankr). Configure one of:
30
+
31
+ ```sh
32
+ $ mkdir -p ~/.dexterm && printf %s "<your-key>" > ~/.dexterm/helius.key && chmod 600 ~/.dexterm/helius.key
33
+ ```
34
+
35
+ ```sh any read-only RPC URL; the first wins, extras join the rotation pool
36
+ $ export DEXTERM_RPC_URL="https://<provider>/<path>"
37
+ $ export DEXTERM_RPC_URLS="https://rpc-a/...,https://rpc-b/..."
38
+ ```
39
+
40
+ Resolution order: `DEXTERM_RPC_URL`, else `~/.dexterm/helius.key`, else the public RPC pool. All configured endpoints rotate by health score; a 429 pauses one endpoint (honouring `Retry-After`) and fails over to the next. Every URL in an error, a `--verbose` line or a `--record` file passes a redactor; a recording that still carries a key refuses to save. `dexterm doctor` reports the provider name only, never the key.
41
+
42
+ > warn: never paste a key into a command line argument, a shell history, a chat or a repository. The file above is the only place dexterm reads it from.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: docs-configuration-themes-and-keymaps
3
+ title: Configuration and files on disk › Themes and keymaps
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Themes and keymaps
8
+ anchor: themes-and-keymaps
9
+ url: https://dexterm.xyz/docs/configuration#themes-and-keymaps
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - themes
14
+ - keymaps
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ `~/.dexterm/themes/<name>.json` is `{ "extends": "cyberspace", "tokens": { "accent": "#ffb02e", … } }`: a built-in base plus hex overrides. At load every value must be a hex colour, ramps exactly four, unknown tokens are refused, and two semantic checks protect you from a shared theme: a **contrast floor** (text on background, muted on panel, the up / down / warn colours) and an **up / down guard** (`up` must read green/cyan and `down` red/pink by hue, both must carry real colour — an HSL saturation floor — and they must sit a minimum perceptual distance apart, so neither an amber pair nor a near-grey pair can make a loss look like a gain). A theme that fails loads as `paper` with a toast naming the token. `config.theme.overrides` is the same for one-off tokens; `dexterm theme list | show | init <name> | check <name>`.
28
+
29
+ `config.keymap` re-binds the app's actions: `"global": { "screen.watchlist": ["3", "W"] }` and `"screens": { "screener": { "preset.next": ["]"] } }`, chords as `"ctrl+w s"`. Refused by name, whatever the file says: assigning `ctrl+c`, `esc`, `enter`, `y` / `Y` or `!` to anything; changing the keys of quit, back, the alert confirm / dismiss, arm, panic or the gate; two actions on one key within one scope; a chord prefix bound on its own; more than four keys per action. Any error keeps the defaults (a half-applied keymap is worse than none) and names the path. `dexterm keymap [screen]` prints the effective keys with overrides marked `·`; the `?` overlay marks them the same way.
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: docs-configuration-themes-and-look
3
+ title: Configuration and files on disk › Themes and look
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Themes and look
8
+ anchor: themes-and-look
9
+ url: https://dexterm.xyz/docs/configuration#themes-and-look
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - themes
14
+ - look
15
+ - files
16
+ - disk
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/configuration.md
24
+ date: 2026-10-16
25
+ ---
26
+
27
+ `--theme cyberspace|midnight|ember|paper` or `t` at runtime. `--intensity off|normal|fever`, `--fps N`, `--no-boot`, `--ascii-rain`, `--tz ZONE` for the header clock (default America/New_York; `local` for the machine zone). Details in the CLI reference (https://dexterm.xyz/docs/cli#flags). User themes join the `t` cycle: see themes and keymaps (https://dexterm.xyz/docs/configuration#themes-and-keymaps).
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: docs-configuration-widgets
3
+ title: Configuration and files on disk › Widgets
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Widgets
8
+ anchor: widgets
9
+ url: https://dexterm.xyz/docs/configuration#widgets
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - widgets
14
+ - files
15
+ - disk
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/configuration.md
23
+ date: 2026-10-16
24
+ ---
25
+
26
+ A pack widget is an html page the popup host serves in a loopback HUD window, the same window technology as the popup chart (https://dexterm.xyz/docs/popup-chart). It is the only way third-party UI gets into dexterm, and it is small on purpose: a widget can **receive and render**; it cannot fetch, import, run anything in the terminal process, or send anything but close / focus / drag.
27
+
28
+ - `widgets/<name>/widget.json` declares pages and their topics, a subset of `rows · token · narrative · positions · alerts · theme`: the screener's public columns, the open coin, the narrative board, your positions (symbol, size, PnL), the alert log, the theme. Nothing in a view model names a key, a signer, a cap, a mandate or the gate; pair / source ids and provenance internals are not sent.
29
+ - The window is two documents: the host's own wrapper page (it owns the connection to the terminal, the title strip and the close button) and, inside it, the pack page in a sandboxed frame. The pack page runs under a hash-only CSP: the html is served exactly as installed (nothing is substituted into it, there is no nonce), and every inline `<script>` and `<style>` block runs because its sha256 is in the header — only the text you read before enabling the widget. It has no network of its own at all (no fetch, no socket, no remote scripts, styles, images or fonts), no cookies or storage (an opaque origin), no inline handlers, no eval, no runtime script injection where the engine supports Trusted Types, and no way to navigate anywhere: a document may always navigate itself, which a sandbox alone cannot stop, so the wrapper's `frame-src` names the one document the frame may show and the engine refuses any other before a request exists — the wrapper then closes the widget and logs why. Verified in headless Chromium and WebKit. One kind of connection no content-security directive covers — a `<link rel=preconnect>` built at run time makes WebKit open a bare TCP connection to a host and port the page chose — so the SDK, which runs first in the frame, seals the DOM: the insertion methods, every HTML-parsing entry point (the static `Document.parseHTMLUnsafe` included), `adoptNode` / `importNode`, the element-taking setters and WebRTC are locked on the prototypes before any pack script runs, a click on a link that targets another window (and any form submit) is cancelled before the engine can open a connection for it, a MutationObserver closes the widget if a loader element ever appears anyway, and none of it depends on Trusted Types, which the system WebKit of macOS 14 and 15 lacks (verified inside the real native shell on that WebKit, and in headless Chromium and WebKit with Trusted Types stripped, with a raw TCP sink). Widgets open only in the native popup shell (macOS 14 or newer), whose windows are routed through a loopback sink proxy of the host's as a further backstop for named hosts. A page that carries a loader (`<script src>`, `<link>`, a frame, `<meta http-equiv>`, `@import`, or a `__NONCE__` placeholder) is refused at install, again at open and again when the host issues the window's ticket. A frozen `dexterm` object is injected ahead of the pack markup: `dexterm.on(topic, fn)`, `dexterm.theme` (also CSS variables), `dexterm.close()`, `dexterm.log()`; the frame can say only ready / log / close back, and the terminal's socket accepts nothing but the generic events from a widget.
30
+ - Consent is yours and re-checked: a widget installs disabled; `dexterm pack widget <pack> <name> --enable` after you read the page; at every open the app re-hashes the installed pack and refuses a page edited since. A workspace can list a widget popup (`{ "kind": "widget", "widget": "<pack>/<name>" }`) but cannot enable it.
31
+ - **Beta.** One example widget (`packs/example-widgets`, the MOVERS tiles), a popup window only. The in-process plugin sandbox from the design (terminal columns and panels, host-mediated fetch, per-plugin storage) is not built. API and limits: `packages/popup/WIDGETS.md` in the repo.
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: docs-configuration-workspaces
3
+ title: Configuration and files on disk › Workspaces
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ heading: Workspaces
8
+ anchor: workspaces
9
+ url: https://dexterm.xyz/docs/configuration#workspaces
10
+ tags:
11
+ - docs
12
+ - configuration
13
+ - workspaces
14
+ - files
15
+ - disk
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/configuration.md
23
+ date: 2026-10-16
24
+ ---
25
+
26
+ A workspace is one JSON file, `~/.dexterm/workspaces/<name>.json`: the screen to land on, the theme and intensity, the screener preset / filter / sort, the token-screen panel toggles, optional per-screen pane trees for the layout solver (weights, fixed widths, priorities, what collapses at which width), and the HUD popups to open together. The shipped `default` reproduces the five screens exactly; `morning-hud` is "show me everything": the narrative board, the feeds, order plans and the chart of the selected coin as windows beside the terminal.
27
+
28
+ - In the app: `ctrl+w` then `w` list · `n` / `N` next / previous · `s` save the current layout under a typed name · `m` the morning HUD · `o` open the active workspace's popups · `d` default · `1`–`9` pick a slot. `--workspace <name>` starts in one. The footer shows the active workspace.
29
+ - On the command line: `dexterm workspace list | show <name> | remove <name> | init` (`init` writes `default` as an editable file with the shipped trees).
30
+ - A switch is a UI action and nothing more. It can navigate, re-theme and open the same read-only windows the keys open; it cannot open a ticket, confirm, arm or sign, and a workspace file has no field for any of that (the schema refuses unknown keys by name). Jarvis proposes workspace switches through the same proposal card as everything else.
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: docs-configuration
3
+ title: Configuration and files on disk
4
+ kind: docs
5
+ page: configuration
6
+ page_title: Configuration and files on disk
7
+ url: https://dexterm.xyz/docs/configuration
8
+ tags:
9
+ - docs
10
+ - configuration
11
+ - files
12
+ - disk
13
+ confidence: high
14
+ owner: maintainers
15
+ origin: docs-generated
16
+ reviewed_by: generated@2026-10-16
17
+ generated_from: dexterm/site content/docs (task-1420)
18
+ sources:
19
+ - site/content/docs/configuration.md
20
+ date: 2026-10-16
21
+ ---
22
+
23
+ Environment variables, the files dexterm writes, the optional free RPC key, and how to delete everything.
24
+
25
+ dexterm has no config server, no account and no telemetry. Everything it remembers is in a handful of local files you can read and delete.
@@ -0,0 +1,51 @@
1
+ ---
2
+ id: docs-copy-trading-stage-1-follow-a-wallet-see-what-it-does
3
+ title: Copy trading (staged, personal, paper by default) › Stage 1: follow a wallet, see what it does
4
+ kind: docs
5
+ page: copy-trading
6
+ page_title: Copy trading (staged, personal, paper by default)
7
+ heading: Stage 1: follow a wallet, see what it does
8
+ anchor: stage-1-follow-a-wallet-see-what-it-does
9
+ url: https://dexterm.xyz/docs/copy-trading#stage-1-follow-a-wallet-see-what-it-does
10
+ tags:
11
+ - docs
12
+ - copy-trading
13
+ - stage
14
+ - follow
15
+ - wallet
16
+ - does
17
+ - copy
18
+ - trading
19
+ - staged
20
+ - personal
21
+ - paper
22
+ - default
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/copy-trading.md
30
+ date: 2026-10-16
31
+ ---
32
+
33
+ Press `U` anywhere for the **FOLLOWED WALLETS** screen, or use the shell:
34
+
35
+ ```
36
+ dexterm follow add <addr> --name "my label"
37
+ dexterm follow list | stats <addr> | trades <addr> | remove <addr> | purge --yes
38
+ ```
39
+
40
+ - **Your list, your labels.** A label is whatever you type, passed through the prompt firewall (an instruction-shaped label is refused, control characters are stripped, 24 characters at most). dexterm never infers who a wallet is, never scrapes X or Telegram to attribute one, and never exports the list. `purge` deletes every follow and label; the file is `~/.dexterm/follows.json` (mode 600).
41
+ - **Decoded swaps.** The tracker reads the wallet's own recent history (Helius `getTransactionsForAddress`, 10 credits a call, newest first, through the data layer's limiter and credit meter) and classifies each transaction from the wallet's own balances: tokens up and SOL down is a **buy**, tokens down and SOL up a **sell**, tokens moved without a SOL leg a **transfer** (an airdrop is flagged as cost 0), tokens and SOL moving the *same* way is **lp-like** (an LP add or removal, never a swap), and two mints in one transaction is a **token-swap** with no SOL split, so nothing unpriceable is priced. Wrapped SOL is never a mint. The POPCAT recording from the wallet-intel spike is the regression case for the lp-like rule: its busiest launch signer *receives* tokens and SOL together.
42
+ - **Numbers with their sample.** Realised PnL is FIFO by token amount over the history fetched, in SOL exactly and in USD at today's rate (the rate is printed). Fees and tips are inside the SOL leg. Win rate is wins over closed positions and stays hidden under n = 10 (the row shows `n<10 (2/4)`). The early-entry score needs the token's launch-window buyer ranks (a bubble-map scan) and shows `—` with the reason otherwise; it has no "reached 3×" filter yet and says so. Every figure carries `all N txs` or `last N txs only · older history not fetched`.
43
+ - **Alerts, not news.** The first look at a wallet backfills history silently. Only transactions that appear *after* that raise an alert, as a toast anywhere in the app and on the screen's ALERTS tape with the lag between the block and the moment dexterm saw it. Keyless, the tracker is honestly **unavailable** and says how to get the free Helius key; a failed poll shows on the row and the next poll retries.
44
+
45
+ - **Hold time.** The median time from first buy to last sell over the wallet's **closed** positions. A position counts only when both of those trades carry a real block time. Otherwise hold time shows `—` with the reason. It appears in `dexterm follow stats` and the detail view.
46
+ - **Buy and sell alerts, pushed if you want.** A new trade by a followed wallet raises the in-app alert as before. If you have enabled a push channel (https://dexterm.xyz/docs/configuration#push-alerts-and-dexterm-watch) (desktop, your own Telegram bot or Discord webhook), the alert is delivered there too, marked buy or sell and "not a recommendation". This happens only while the dexterm terminal is running: `dexterm watch` runs your rules headless but does not follow wallets. Delivery is read-only: an alert cannot open, arm or sign anything.
47
+ - **Per-wallet detail.** `⏎` on a followed wallet opens its detail view: recent decoded trades, positions, realised PnL, win rate with its n, hold time, early-entry score and open positions. Each figure is labelled with its source (Helius history) and data age. `↑`/`↓` scroll, `⏎` or `esc` close.
48
+
49
+ Nothing on this stage trades. A wallet's past fills say nothing about its next one, and the screen says so.
50
+
51
+ `H` on this screen makes a PnL card (https://dexterm.xyz/docs/paper-trading#pnl-cards) for the selected wallet's coins, stamped **TRACKED WALLET** (read-only observation), with the wallet address hidden unless you show it. To mark an open position it looks up the coin's public decimals and price (the same keyless lookup the mirror ticket uses).