dexterm-cli 0.1.4 → 0.1.6
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.
- package/dist/packages/agents/src/index.js +2 -0
- package/dist/packages/agents/src/spectator.js +54 -0
- package/dist/packages/agents/src/story.js +523 -0
- package/dist/packages/agents/src/tiers.js +1 -0
- package/dist/packages/agents/src/tools.js +1 -0
- package/dist/packages/cli/assets/claude/plugin/skills/REGISTRY.json +1 -1
- package/dist/packages/cli/assets/claude/plugin/skills/larp-check/SKILL.md +15 -8
- package/dist/packages/cli/src/agent-cmd.js +6 -4
- package/dist/packages/cli/src/agent-paper.js +60 -0
- package/dist/packages/cli/src/agent-spectator.js +17 -1
- package/dist/packages/cli/src/analyst/backend.js +206 -0
- package/dist/packages/cli/src/analyst/codex.js +301 -0
- package/dist/packages/cli/src/analyst/larp-gauge.js +60 -0
- package/dist/packages/cli/src/analyst/session.js +21 -3
- package/dist/packages/cli/src/app-help-gen.js +21 -12
- package/dist/packages/cli/src/backtest-cmd.js +13 -2
- package/dist/packages/cli/src/display.js +55 -9
- package/dist/packages/cli/src/doctor.js +58 -2
- package/dist/packages/cli/src/live/dev-history.js +115 -0
- package/dist/packages/cli/src/live/index.js +5 -1
- package/dist/packages/cli/src/live/newpairs.js +12 -0
- package/dist/packages/cli/src/live/screens/newpairs-live.js +1 -1
- package/dist/packages/cli/src/live/screens/token-live.js +51 -11
- package/dist/packages/cli/src/live/screens/watchlist-live.js +1 -1
- package/dist/packages/cli/src/live/token.js +1 -0
- package/dist/packages/cli/src/live/trade.js +22 -0
- package/dist/packages/cli/src/main.js +267 -19
- package/dist/packages/cli/src/mcp-follow.js +137 -10
- package/dist/packages/cli/src/plan-cmd.js +15 -5
- package/dist/packages/cli/src/popup.js +17 -1
- package/dist/packages/cli/src/record-cmd.js +2 -0
- package/dist/packages/cli/src/rules.js +25 -2
- package/dist/packages/cli/src/scan/ui.js +7 -1
- package/dist/packages/cli/src/screens/agent-hud.js +741 -0
- package/dist/packages/cli/src/screens/analyst-session.js +9 -3
- package/dist/packages/cli/src/screens/analyst.js +4 -3
- package/dist/packages/cli/src/screens/brain.js +608 -0
- package/dist/packages/cli/src/screens/newpairs.js +1 -1
- package/dist/packages/cli/src/screens/pnl-chip.js +143 -0
- package/dist/packages/cli/src/screens/screener.js +1 -0
- package/dist/packages/cli/src/screens/token.js +16 -7
- package/dist/packages/cli/src/screens/trending.js +1 -1
- package/dist/packages/cli/src/state.js +69 -5
- package/dist/packages/cli/src/version.js +1 -1
- package/dist/packages/custom/src/rules.js +2 -2
- package/dist/packages/custom/src/schema.js +13 -3
- package/dist/packages/data/src/fixtures.js +28 -6
- package/dist/packages/data/src/index.js +5 -0
- package/dist/packages/data/src/larp/score.js +220 -0
- package/dist/packages/data/src/larp/x-account.js +316 -0
- package/dist/packages/data/src/sources/jupiter.js +1 -0
- package/dist/packages/data/src/trade/agent/paper-desk.js +401 -0
- package/dist/packages/data/src/trade/agent/rendezvous.js +161 -0
- package/dist/packages/data/src/trade/plans/engine.js +7 -0
- package/dist/packages/data/src/trade/plans/mandate.js +28 -15
- package/dist/packages/data/src/trade/plans/service.js +1 -1
- package/dist/packages/mcp/assets/kb/app-help/agent-paper-trade.md +38 -0
- package/dist/packages/mcp/assets/kb/app-help/ask-the-analyst.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/connect-an-agent.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/dev-history.md +32 -0
- package/dist/packages/mcp/assets/kb/app-help/larp-check.md +5 -1
- package/dist/packages/mcp/assets/kb/app-help/paper-trade.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/scan-mode.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/screen-positions.md +4 -1
- package/dist/packages/mcp/assets/kb/app-help/screen-token.md +4 -0
- package/dist/packages/mcp/assets/kb/app-help/spectate-an-agent.md +2 -1
- package/dist/packages/mcp/assets/kb/app-help/use-codex-analyst.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-agent-paper-trading.md +51 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-directory-metadata-prepared-not-submitted.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-install-in-one-command.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-starting-a-run.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-use-codex-instead-of-claude.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-or-linux-npm.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-chart-y-axis.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-price-display-mode.md +3 -3
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-rules-engine.md +1 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-analyst-s-launch.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +13 -3
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-running-the-tests.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +2 -2
- package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +1 -2
- package/dist/packages/mcp/assets/kb/docs/docs-larp-the-larp-score.md +60 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-the-verdict.md +0 -2
- package/dist/packages/mcp/assets/kb/docs/docs-larp-what-it-looks-at.md +4 -1
- package/dist/packages/mcp/assets/kb/docs/docs-larp.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-letting-an-agent-paper-trade-experimental.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-order-plans-and-standing-mandates.md +1 -9
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-paper-only-mandates.md +41 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-market-cap-axis.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-what-it-shows.md +1 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-the-read.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-dev-history.md +47 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-how-well-it-predicts-measured-held-out.md +46 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-limits.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-agent-hud-spectator-v2.md +58 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-brain-view-and-the-pnl-chip.md +46 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-three-surfaces.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-spectator.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +2 -0
- package/dist/packages/mcp/src/index.js +5 -2
- package/dist/packages/mcp/src/paper-agent.js +93 -0
- package/dist/packages/mcp/src/server.js +354 -19
- package/dist/packages/mcp/src/spectator-sink.js +158 -4
- package/dist/packages/mcp/src/user-content.js +1 -0
- package/dist/packages/packs/src/index.js +1 -0
- package/dist/packages/packs/src/larp-score-backtest.js +119 -0
- package/dist/packages/popup/src/pages/chart-lib.js +36 -15
- package/dist/packages/popup/src/pages/chart.css +9 -0
- package/dist/packages/popup/src/pages/chart.html +4 -1
- package/dist/packages/popup/src/pages/chart.js +34 -5
- package/dist/packages/popup/src/pages/spectator.css +45 -0
- package/dist/packages/popup/src/pages/spectator.html +1 -0
- package/dist/packages/popup/src/pages/spectator.js +69 -0
- package/dist/packages/popup/src/protocol.js +2 -0
- package/dist/packages/popup/src/server.js +5 -1
- package/dist/packages/recorder/src/dev-history.js +133 -0
- package/dist/packages/recorder/src/index.js +1 -0
- package/dist/packages/recorder/src/recorder.js +23 -0
- package/dist/packages/recorder/src/schema.js +11 -0
- package/dist/packages/tui/src/canvas.js +7 -0
- package/dist/packages/tui/src/fmt.js +53 -0
- package/dist/packages/tui/src/keymap.js +4 -0
- package/dist/packages/tui/src/widgets.js +9 -4
- package/package.json +1 -1
|
@@ -13,6 +13,15 @@ export const HARD = Object.freeze({
|
|
|
13
13
|
tipBudgetLamports: 500_000_000, maxTipLamportsPerTx: 10_000_000, maxPriorityFeeLamportsPerTx: 10_000_000,
|
|
14
14
|
ttlMs: 24 * 3600_000, maxSendsPerSec: 20,
|
|
15
15
|
});
|
|
16
|
+
/**
|
|
17
|
+
* task-1469: ceilings for a PAPER-ONLY mandate (`dexterm mandate draft --paper`). Only the agent paper desk reads
|
|
18
|
+
* one: the plan engine refuses to arm a plan into it, fire under it or copy-trade through it, so these numbers never
|
|
19
|
+
* reach a signer, and HARD (above) stays the ceiling of every mandate a real fill can use. Fills are still priced
|
|
20
|
+
* on a live quote, so a bigger paper size pays its real price impact.
|
|
21
|
+
*/
|
|
22
|
+
export const PAPER_HARD = Object.freeze({
|
|
23
|
+
...HARD, totalUsd: 10_000, perTradeUsd: 2_000, perCoinUsd: 2_000, dailyLossUsd: 10_000, maxPriceImpactPct: 10,
|
|
24
|
+
});
|
|
16
25
|
/** Confirmation tiers and the multiplier they apply to a mandate's per-trade cap for plans confirmed that way. */
|
|
17
26
|
export const TIERS = Object.freeze({
|
|
18
27
|
'keypress': { rank: 0, perTradeMultiplier: 1.0, canArmMandate: true, canArmBatch: true },
|
|
@@ -37,6 +46,8 @@ function clamp(v, dflt, hardMax) {
|
|
|
37
46
|
export function draftMandate(input, ctx) {
|
|
38
47
|
const x = input ?? {};
|
|
39
48
|
const now = ctx.clock.now();
|
|
49
|
+
const paper = x.paperOnly === true;
|
|
50
|
+
const H = paper ? PAPER_HARD : HARD;
|
|
40
51
|
const actions = Array.isArray(x.actions) ? x.actions.filter((a) => a === 'buy' || a === 'sell') : ['buy', 'sell'];
|
|
41
52
|
if (actions.length === 0)
|
|
42
53
|
throw new MandateError('bad-request', 'at least one of buy/sell');
|
|
@@ -45,23 +56,23 @@ export function draftMandate(input, ctx) {
|
|
|
45
56
|
id: ctx.id ?? `mandate_${now.toString(36)}_${Math.random().toString(36).slice(2, 8)}`,
|
|
46
57
|
wallet: 'fast', // the capped fast wallet; the main wallet is never named here
|
|
47
58
|
budget: {
|
|
48
|
-
totalUsd: clamp(x.totalUsd, 100,
|
|
49
|
-
perTradeUsd: clamp(x.perTradeUsd, 20,
|
|
50
|
-
perCoinUsd: clamp(x.perCoinUsd, 40,
|
|
51
|
-
dailyLossUsd: clamp(x.dailyLossUsd, 50,
|
|
59
|
+
totalUsd: clamp(x.totalUsd, 100, H.totalUsd),
|
|
60
|
+
perTradeUsd: clamp(x.perTradeUsd, 20, H.perTradeUsd),
|
|
61
|
+
perCoinUsd: clamp(x.perCoinUsd, 40, H.perCoinUsd),
|
|
62
|
+
dailyLossUsd: clamp(x.dailyLossUsd, 50, H.dailyLossUsd),
|
|
52
63
|
},
|
|
53
64
|
limits: {
|
|
54
|
-
maxArmedPlans: clamp(x.maxArmedPlans, 20,
|
|
55
|
-
maxInFlight: clamp(x.maxInFlight, 5,
|
|
56
|
-
maxOpenPositions: clamp(x.maxOpenPositions, 20,
|
|
57
|
-
maxSlippageBps: clamp(x.maxSlippageBps, 500,
|
|
58
|
-
maxPriceImpactPct: clamp(x.maxPriceImpactPct, 3,
|
|
59
|
-
maxSendsPerSec: clamp(x.maxSendsPerSec, 5,
|
|
65
|
+
maxArmedPlans: clamp(x.maxArmedPlans, 20, H.maxArmedPlans),
|
|
66
|
+
maxInFlight: clamp(x.maxInFlight, 5, H.maxInFlight),
|
|
67
|
+
maxOpenPositions: clamp(x.maxOpenPositions, 20, H.maxOpenPositions),
|
|
68
|
+
maxSlippageBps: clamp(x.maxSlippageBps, 500, H.maxSlippageBps),
|
|
69
|
+
maxPriceImpactPct: clamp(x.maxPriceImpactPct, 3, H.maxPriceImpactPct),
|
|
70
|
+
maxSendsPerSec: clamp(x.maxSendsPerSec, 5, H.maxSendsPerSec),
|
|
60
71
|
},
|
|
61
72
|
fees: {
|
|
62
|
-
tipBudgetLamports: clamp(x.tipBudgetLamports, 50_000_000,
|
|
63
|
-
maxTipLamportsPerTx: clamp(x.maxTipLamportsPerTx, 1_000_000,
|
|
64
|
-
maxPriorityFeeLamportsPerTx: clamp(x.maxPriorityFeeLamportsPerTx, 2_000_000,
|
|
73
|
+
tipBudgetLamports: clamp(x.tipBudgetLamports, 50_000_000, H.tipBudgetLamports),
|
|
74
|
+
maxTipLamportsPerTx: clamp(x.maxTipLamportsPerTx, 1_000_000, H.maxTipLamportsPerTx),
|
|
75
|
+
maxPriorityFeeLamportsPerTx: clamp(x.maxPriorityFeeLamportsPerTx, 2_000_000, H.maxPriorityFeeLamportsPerTx),
|
|
65
76
|
},
|
|
66
77
|
allowed: {
|
|
67
78
|
actions,
|
|
@@ -70,8 +81,9 @@ export function draftMandate(input, ctx) {
|
|
|
70
81
|
},
|
|
71
82
|
maxTier: (typeof x.maxTier === 'string' && x.maxTier in TIERS) ? x.maxTier : 'keypress',
|
|
72
83
|
createdAt: now,
|
|
73
|
-
expiresAt: now + clamp(x.ttlMs, 4 * 3600_000,
|
|
84
|
+
expiresAt: now + clamp(x.ttlMs, 4 * 3600_000, H.ttlMs),
|
|
74
85
|
status: 'draft', armedAt: null, armedBy: null, revokedAt: null, revokedReason: null,
|
|
86
|
+
...(paper ? { paperOnly: true } : {}),
|
|
75
87
|
};
|
|
76
88
|
// perTrade can never exceed total; perCoin never exceeds total.
|
|
77
89
|
m.budget.perTradeUsd = Math.min(m.budget.perTradeUsd, m.budget.totalUsd);
|
|
@@ -117,7 +129,8 @@ export function revokeMandate(m, reason, ctx) {
|
|
|
117
129
|
}
|
|
118
130
|
/** Hash of the caps a gesture arms — the proof binds to these numbers, not to the mandate id alone. */
|
|
119
131
|
export function capsHash(m) {
|
|
120
|
-
|
|
132
|
+
// task-1469: the paper-only flag is part of what a gesture arms; a normal mandate hashes exactly as before.
|
|
133
|
+
return createHash('sha256').update(JSON.stringify({ b: m.budget, l: m.limits, f: m.fees, a: m.allowed, t: m.maxTier, e: m.expiresAt, w: m.wallet, ...(m.paperOnly === true ? { p: 1 } : {}) })).digest('hex').slice(0, 16);
|
|
121
134
|
}
|
|
122
135
|
/** Alive = armed and not expired. Expiry is checked on every call, never cached. */
|
|
123
136
|
export function mandateAlive(m, now) {
|
|
@@ -149,7 +149,7 @@ export class PlanService {
|
|
|
149
149
|
return {
|
|
150
150
|
id: x.m.id, status: x.m.status, wallet: x.m.wallet, totalUsd: x.m.budget.totalUsd, perTradeUsd: x.m.budget.perTradeUsd,
|
|
151
151
|
perCoinUsd: x.m.budget.perCoinUsd, maxTier: x.m.maxTier, reservedUsd: L.reservedUsd, spentUsd: L.spentUsd,
|
|
152
|
-
realizedUsd: L.realizedUsd, lossUsd: L.lossUsd, expiresAt: x.m.expiresAt,
|
|
152
|
+
realizedUsd: L.realizedUsd, lossUsd: L.lossUsd, expiresAt: x.m.expiresAt, paperOnly: x.m.paperOnly === true,
|
|
153
153
|
};
|
|
154
154
|
});
|
|
155
155
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: agent-paper-trade
|
|
3
|
+
title: Let an agent paper trade
|
|
4
|
+
kind: app-help
|
|
5
|
+
screen: all
|
|
6
|
+
feature: mcp
|
|
7
|
+
tags:
|
|
8
|
+
- app-help
|
|
9
|
+
- agent
|
|
10
|
+
- mcp
|
|
11
|
+
- paper
|
|
12
|
+
- autonomous
|
|
13
|
+
- experimental
|
|
14
|
+
- confirm
|
|
15
|
+
- close
|
|
16
|
+
- simulated
|
|
17
|
+
flags:
|
|
18
|
+
- --agent-paper
|
|
19
|
+
tools:
|
|
20
|
+
- paper_open_ticket
|
|
21
|
+
- paper_size_ticket
|
|
22
|
+
- paper_confirm
|
|
23
|
+
- paper_close
|
|
24
|
+
- paper_positions
|
|
25
|
+
- paper_pnl
|
|
26
|
+
confidence: high
|
|
27
|
+
owner: maintainers
|
|
28
|
+
origin: app-help-generated
|
|
29
|
+
reviewed_by: generated@2026-10-16
|
|
30
|
+
generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
|
|
31
|
+
sources:
|
|
32
|
+
- packages/tui/src/keymap.ts
|
|
33
|
+
- packages/cli/src/main.ts
|
|
34
|
+
- packages/mcp/src/server.ts
|
|
35
|
+
date: 2026-10-16
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
Experimental, paper only, off by default. Arm a mandate yourself (its caps, by keypress), then start `dexterm --spectate-mcp --agent-paper <mandate-id>`: an agent connected through `dexterm mcp` can then open, size, confirm and close SIMULATED (paper) trades inside those caps with paper_open_ticket / paper_size_ticket / paper_confirm / paper_close, and read paper_positions / paper_pnl. The agent is untrusted: it can never sign, send a real transaction, touch keys, or raise a cap; its per-trade cap is a quarter of the mandate's, and a size over any cap is refused. Caps are re-read from your armed mandate on every call, so revoking it or the panic key stops the agent. Every call is journaled and shows in this terminal's agent activity; Ctrl+P pauses, Ctrl+K stops for the rest of the run, any key takes over, and quitting turns it off. Figures are simulated and are not a result.
|
|
@@ -38,6 +38,6 @@ sources:
|
|
|
38
38
|
date: 2026-10-16
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
The analyst is your own `claude` login. ⏎ on a coin runs a full dossier; `a` runs a rug-check (or a trench-scan of the screener when nothing is selected). Type a follow-up and ⏎ to send. If `claude` is missing or logged out the panel shows the one-line fix and the rest of dexterm keeps working. Start without AI using `--no-ai`.
|
|
41
|
+
The analyst is your own `claude` login (or your own `codex` login: `/engine codex`, see "Run the analyst on Codex"). ⏎ on a coin runs a full dossier; `a` runs a rug-check (or a trench-scan of the screener when nothing is selected). Type a follow-up and ⏎ to send. If `claude` is missing or logged out the panel shows the one-line fix and the rest of dexterm keeps working. Start without AI using `--no-ai`.
|
|
42
42
|
|
|
43
43
|
Keys: `a`, `⏎` (screener).
|
|
@@ -34,6 +34,6 @@ sources:
|
|
|
34
34
|
date: 2026-10-16
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
`dexterm mcp` is a plain stdio MCP server exposing the same read-only tools the analyst uses. Add it to any Claude Code with `claude mcp add dexterm -- node packages/mcp/bin/dexterm-mcp.mjs
|
|
37
|
+
`dexterm mcp` is a plain stdio MCP server exposing the same read-only tools the analyst uses. Add it to any Claude Code with `claude mcp add dexterm -- node packages/mcp/bin/dexterm-mcp.mjs`, or set up Claude Code, Claude Desktop, Cursor or Codex in one command with `dexterm mcp install <client>`. Agents are untrusted: every tool is read-only and an agent can never sign, arm, raise a cap or touch keys. Use `app_help` for "how do I" questions and `app_state` to see what the user sees.
|
|
38
38
|
|
|
39
39
|
CLI: `dexterm mcp`.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dev-history
|
|
3
|
+
title: Check if a coin's creator rugged before (dev history)
|
|
4
|
+
kind: app-help
|
|
5
|
+
screen: token
|
|
6
|
+
feature: token-intel
|
|
7
|
+
tags:
|
|
8
|
+
- app-help
|
|
9
|
+
- dev
|
|
10
|
+
- deployer
|
|
11
|
+
- creator
|
|
12
|
+
- serial
|
|
13
|
+
- rugger
|
|
14
|
+
- rugged
|
|
15
|
+
- history
|
|
16
|
+
- launches
|
|
17
|
+
tools:
|
|
18
|
+
- dev_history
|
|
19
|
+
- get_dev_history
|
|
20
|
+
confidence: high
|
|
21
|
+
owner: maintainers
|
|
22
|
+
origin: app-help-generated
|
|
23
|
+
reviewed_by: generated@2026-10-16
|
|
24
|
+
generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
|
|
25
|
+
sources:
|
|
26
|
+
- packages/tui/src/keymap.ts
|
|
27
|
+
- packages/cli/src/main.ts
|
|
28
|
+
- packages/mcp/src/server.ts
|
|
29
|
+
date: 2026-10-16
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
The token screen's ON-CHAIN panel shows the creator's recorded track record (0.1.5): `Dev rugs` (rugs out of labelled prior launches, e.g. `2/3 · n=3 · rec 7d`), `Dev launches` (`n=3 · rec 2h · dev:jup`: which feed named the creator), `Dev sold bag` (median minutes to the dev's exit, `med 20m · n=3 · rec 1d`), `Dev linked` (funder or cluster from the wallet-intel scan, with the scan's age) and `Linked dev rugs` (rugs by other wallets in that cluster). Every value names its source (`rec` = the recorder, `scan` = the wallet-intel scan), its sample (n=) and the age of its newest datum. It comes from dexterm's own local history recorder (keyless creator links + code-only outcome labels), so it says `unknown` when there is no record; it is a risk flag from observed history, never a certificate. Alert on it with the rule field `devrugs`, e.g. `when devrugs >= 2 then alert(warn, "new coin from a wallet that rugged before") scope newpairs`. Agents and the analyst use the `dev_history` MCP tool.
|
|
@@ -15,12 +15,16 @@ tags:
|
|
|
15
15
|
- domain
|
|
16
16
|
- github
|
|
17
17
|
- vet
|
|
18
|
+
- score
|
|
19
|
+
- x
|
|
20
|
+
- twitter
|
|
18
21
|
tools:
|
|
19
22
|
- larp_check
|
|
20
23
|
- get_links
|
|
21
24
|
- fetch_page
|
|
22
25
|
- check_domain
|
|
23
26
|
- check_github
|
|
27
|
+
- check_x
|
|
24
28
|
confidence: high
|
|
25
29
|
owner: maintainers
|
|
26
30
|
origin: app-help-generated
|
|
@@ -33,4 +37,4 @@ sources:
|
|
|
33
37
|
date: 2026-10-16
|
|
34
38
|
---
|
|
35
39
|
|
|
36
|
-
The LARP check vets whether a real product exists (website, domain age, GitHub) read-only — it is not a price call. Ask the analyst "is <coin> a larp?" (skill `larp-check`), or an agent can call the `larp_check` MCP tool. A
|
|
40
|
+
The LARP check vets whether a real product exists (website, domain age, GitHub, the X account) read-only — it is not a price call. Ask the analyst "is <coin> a larp?" (skill `larp-check`), or an agent can call the `larp_check` MCP tool. It returns a 0-100 LARP score: the sum of named flags with their points (low under 25, medium 25-49, high 50+), plus a list of what could not be read, which widens the range instead of lowering the score. A score is a summary of flags, never a certificate; it never recommends buy/sell.
|
|
@@ -31,6 +31,6 @@ sources:
|
|
|
31
31
|
date: 2026-10-16
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
Press `B` / `S` on the token screen to open a PAPER buy/sell ticket in its editing phase. dexterm holds no keys and signs nothing — paper trading is a simulation. Confirming a ticket needs your explicit keypress (the gate); a stray key never confirms. The analyst can open a PAPER ticket but can never size, confirm or send it.
|
|
34
|
+
Press `B` / `S` on the token screen to open a PAPER buy/sell ticket in its editing phase. dexterm holds no keys and signs nothing — paper trading is a simulation. Confirming a ticket needs your explicit keypress (the gate); a stray key never confirms. The in-app analyst can open a PAPER ticket but can never size, confirm or send it. If you separately arm a mandate and enable agent paper trading, a connected agent can open, size, confirm and close PAPER trades inside your caps (never raising them, never signing) — see "Let an agent paper trade".
|
|
35
35
|
|
|
36
36
|
Keys: `B` (token), `S` (token).
|
|
@@ -32,6 +32,6 @@ sources:
|
|
|
32
32
|
date: 2026-10-16
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
Scan mode is an observe-only AI watcher (off by default, zero extra requests). Toggle it with `Z` (or `/scan on|off` on the screener line, or `--scan` at launch); `R` resumes a paused scan. It can only surface findings, never take a UI action or trade (structurally observe-only). The analyst can turn it on or off for you.
|
|
35
|
+
Scan mode is an observe-only AI watcher (off by default, zero extra requests). Toggle it with `Z` (or `/scan on|off` on the screener line, or `--scan` at launch); `R` resumes a paused scan. It can only surface findings, never take a UI action or trade (structurally observe-only). While it is on, the token screen's analyst panel shows its brain view: the scan log (locks, refreshes, releases, blocked actions) with the read streaming under it, the vetting checklist and the data strip. While it runs and you hold a paper or live position, a PnL chip shows it on the band under the header of every screen and on the chart popup; display only. The analyst can turn it on or off for you.
|
|
36
36
|
|
|
37
37
|
Keys: `Z`, `R`.
|
|
@@ -116,6 +116,9 @@ actions:
|
|
|
116
116
|
- workspace.popups
|
|
117
117
|
- workspace.default
|
|
118
118
|
- screen.rules
|
|
119
|
+
tools:
|
|
120
|
+
- paper_positions
|
|
121
|
+
- paper_pnl
|
|
119
122
|
confidence: high
|
|
120
123
|
owner: maintainers
|
|
121
124
|
origin: app-help-generated
|
|
@@ -127,7 +130,7 @@ sources:
|
|
|
127
130
|
date: 2026-10-16
|
|
128
131
|
---
|
|
129
132
|
|
|
130
|
-
Your simulated (PAPER) positions and their P&L. dexterm holds no keys and signs nothing; paper trading is a simulation for learning the flow.
|
|
133
|
+
Your simulated (PAPER) positions and their P&L. dexterm holds no keys and signs nothing; paper trading is a simulation for learning the flow. An agent you enabled can read these over MCP with the read-only paper_positions and paper_pnl tools.
|
|
131
134
|
|
|
132
135
|
Keys on this screen:
|
|
133
136
|
`q/^C` — quit
|
|
@@ -63,6 +63,7 @@ keys:
|
|
|
63
63
|
- T
|
|
64
64
|
- L
|
|
65
65
|
- C
|
|
66
|
+
- A
|
|
66
67
|
- I
|
|
67
68
|
- F
|
|
68
69
|
- Z
|
|
@@ -132,6 +133,7 @@ actions:
|
|
|
132
133
|
- open.tg
|
|
133
134
|
- open.links
|
|
134
135
|
- popup.chart
|
|
136
|
+
- display.chartAxis
|
|
135
137
|
- popup.token
|
|
136
138
|
- tape.toggle
|
|
137
139
|
- scan.toggle
|
|
@@ -159,6 +161,7 @@ tools:
|
|
|
159
161
|
- get_trades
|
|
160
162
|
- get_candles
|
|
161
163
|
- get_dev_history
|
|
164
|
+
- dev_history
|
|
162
165
|
- rugcheck
|
|
163
166
|
confidence: high
|
|
164
167
|
owner: maintainers
|
|
@@ -217,6 +220,7 @@ Keys on this screen:
|
|
|
217
220
|
`T` — open TG
|
|
218
221
|
`L` — links
|
|
219
222
|
`C` — chart popup
|
|
223
|
+
`A` — chart axis mcap ⇄ price
|
|
220
224
|
`I` — token popup
|
|
221
225
|
`F` — flow ⇄ tape
|
|
222
226
|
`Z` — AI scan
|
|
@@ -22,6 +22,7 @@ commands:
|
|
|
22
22
|
flags:
|
|
23
23
|
- --replay
|
|
24
24
|
- --spectate-mcp
|
|
25
|
+
- --spectate-thoughts
|
|
25
26
|
confidence: high
|
|
26
27
|
owner: maintainers
|
|
27
28
|
origin: app-help-generated
|
|
@@ -34,6 +35,6 @@ sources:
|
|
|
34
35
|
date: 2026-10-16
|
|
35
36
|
---
|
|
36
37
|
|
|
37
|
-
Watch an agent work. For an agent on the loopback bus, `dexterm agent serve --spectator-popup` opens the AGENT ACTIVITY window, `--spectate` starts the read-only, token-gated, loopback stream, and `--record FILE` saves a redacted session. For an agent connected over MCP (`dexterm mcp install`), run the app with `dexterm --spectate-mcp`: the running terminal
|
|
38
|
+
Watch an agent work. For an agent on the loopback bus, `dexterm agent serve --spectator-popup` opens the AGENT ACTIVITY window, `--spectate` starts the read-only, token-gated, loopback stream, and `--record FILE` saves a redacted session. For an agent connected over MCP (`dexterm mcp install`), run the app with `dexterm --spectate-mcp`: the running terminal follows the agent and an agent dock appears under the screen — a phase rail (SCANNING > VETTING > SIZING > EXECUTING > HOLDING > EXITING) with a heartbeat, the call timeline with result chips, the rows it scans glow and a cursor marks the coin it opens, a vetting card fills its checks and LARP evidence, and a PAPER trade shows its ticket, the fill, a live position with the mark PnL and a result card. `--spectate-thoughts FILE` streams the agent's own words into a thought ribbon from a JSONL file it writes (for example `claude -p --output-format stream-json`); display only. PAPER is always on screen; ctrl+p pauses, ctrl+k kills (a hard stop) and any key you press takes control; calm mode drops the motion. While the agent is active, the token screen's analyst panel is its BRAIN VIEW: the reasoning stream with phase tags (or dexterm's narration when there is no thoughts feed), the vetting checklist with the app's numbers and pass/warn/fail/pending, a data strip, the PAPER plan and position, and the session's decision log with a simulated scoreboard. While it holds a PAPER position, a PnL chip shows coin, PnL, entry to mark, peak, drawdown, time held and the take-profit it said, on every terminal screen (in the dock, or on the band under the header on terminals under 24 rows) and on the chart popup; display only. `dexterm spectate --replay FILE` replays a saved session step by step and `dexterm spectate --info` shows the live stream endpoint. Every shared copy is redacted — a tool name, refusal, agent line or navigation can never leak a wallet or key — and a spectator can only watch, never act. Full docs: https://dexterm.xyz/docs/spectator/
|
|
38
39
|
|
|
39
40
|
CLI: `dexterm spectate`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: use-codex-analyst
|
|
3
|
+
title: Run the analyst on Codex instead of Claude
|
|
4
|
+
kind: app-help
|
|
5
|
+
screen: all
|
|
6
|
+
feature: analyst
|
|
7
|
+
tags:
|
|
8
|
+
- app-help
|
|
9
|
+
- codex
|
|
10
|
+
- openai
|
|
11
|
+
- chatgpt
|
|
12
|
+
- engine
|
|
13
|
+
- analyst
|
|
14
|
+
- claude
|
|
15
|
+
- switch
|
|
16
|
+
- backend
|
|
17
|
+
flags:
|
|
18
|
+
- --analyst-engine
|
|
19
|
+
confidence: high
|
|
20
|
+
owner: maintainers
|
|
21
|
+
origin: app-help-generated
|
|
22
|
+
reviewed_by: generated@2026-10-16
|
|
23
|
+
generated_from: dexterm/app keymap + overlay + mcp tools + cli (task-1413)
|
|
24
|
+
sources:
|
|
25
|
+
- packages/tui/src/keymap.ts
|
|
26
|
+
- packages/cli/src/main.ts
|
|
27
|
+
- packages/mcp/src/server.ts
|
|
28
|
+
date: 2026-10-16
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
The analyst can run on your own Codex CLI login instead of Claude (0.1.5). Pick it with `--analyst-engine codex`, `DEXTERM_ANALYST_ENGINE=codex`, `"analyst": {"engine": "codex"}` in `~/.dexterm/config.json`, or type `/engine codex` in the chat box (new conversations; `/engine` alone shows the engine and what is installed). The default `auto` uses claude when it is installed, else codex. dexterm stores no credentials: your `codex login` does the work. The Codex run is locked read-only: only the read-only dexterm tools (plus the UI actions the session allows, none in scan mode), no shell, no file edits, no web search, no other MCP server; a turn that tries anything else is stopped. `dexterm doctor` shows a Codex CLI line (installed, version, logged in). Codex is also supported as an MCP client: `dexterm mcp install codex`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-agents-agent-paper-trading
|
|
3
|
+
title: Bring your own agent › Agent paper trading
|
|
4
|
+
kind: docs
|
|
5
|
+
page: agents
|
|
6
|
+
page_title: Bring your own agent
|
|
7
|
+
heading: Agent paper trading
|
|
8
|
+
anchor: agent-paper-trading
|
|
9
|
+
url: https://dexterm.xyz/docs/agents#agent-paper-trading
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- agents
|
|
13
|
+
- agent
|
|
14
|
+
- paper
|
|
15
|
+
- trading
|
|
16
|
+
- bring
|
|
17
|
+
- own
|
|
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/agents.md
|
|
25
|
+
date: 2026-10-16
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
**Status: experimental, paper only, off by default (since 0.1.5).** By default an agent can only read and navigate; it cannot trade at all. If you choose to, you can let an agent you connected over `dexterm mcp` run a full **paper** trade loop inside a **trading mandate** you armed yourself. Nothing here is live: every fill books the **simulated** paper wallet.
|
|
29
|
+
|
|
30
|
+
Two steps, both yours:
|
|
31
|
+
|
|
32
|
+
1. Draft and arm a mandate (`dexterm mandate draft` / `arm`, or the plans screen). Its caps are per-trade, per-coin and total size, a loss limit, open positions, price impact, allowed sides and an optional mint allow-list, and arming needs a physical keypress. For bigger simulated sizes, draft a **paper-only** mandate with `dexterm mandate draft --paper` (see paper-only mandates (https://dexterm.xyz/docs/paper-trading#paper-only-mandates)): only the agent paper desk can use it.
|
|
33
|
+
2. Start the terminal with the agent activity view and name that mandate: `dexterm --spectate-mcp --agent-paper <mandate-id>`. Quitting turns it off again.
|
|
34
|
+
|
|
35
|
+
While it is on, the agent can use six tools:
|
|
36
|
+
|
|
37
|
+
- `paper_open_ticket` opens a simulated ticket for a mint and side. It stays inert until confirmed.
|
|
38
|
+
- `paper_size_ticket` sets the simulated size. A buy over any cap is **refused**, never clamped up.
|
|
39
|
+
- `paper_confirm` re-checks the caps and your controls, fetches a fresh keyless quote and books the simulated fill.
|
|
40
|
+
- `paper_close` closes a fraction of a held simulated position. If the keyless quote for that close is rate-limited, the desk waits briefly and asks for a fresh quote by itself (up to 4 tries in about 25 seconds, each retry shown in the agent activity) and books the fill on that later quote, never on an old one.
|
|
41
|
+
- `paper_positions` and `paper_pnl` read the simulated positions and PnL. They are read-only.
|
|
42
|
+
|
|
43
|
+
The guarantees, each covered by tests:
|
|
44
|
+
|
|
45
|
+
- **It can never sign or send.** No MCP tool can build, sign or send a real transaction, touch a wallet or key, or change a cap. The paper tools book the simulated ledger only. A registry test enumerates every MCP tool, fails on any tool not on its reviewed allow-list, and checks that the paper path imports nothing that signs, sends or arms.
|
|
46
|
+
- **Caps come from your mandate.** The agent's tools never carry caps: on every call the server re-reads the mandate from the hash-chained plans journal you armed it in, and a journal that fails its hash check is refused. That protects the mandate from the agent's tools; it is not tamper-proofing against other software running as your own user. The agent runs at the most restricted confirmation tier, so its per-trade cap is a quarter of the mandate's. Revoking the mandate, letting it expire or pressing the panic key stops the agent on its next call.
|
|
47
|
+
- **The terminal shows what the agent looks at.** While you follow it, `open_token` from the agent moves your screen to coins it was shown by its own reads (the screen, `screener_query`, `narrative_board`) or holds a paper position in, view-only.
|
|
48
|
+
- **You stay in control, and you see everything.** Every call and every refusal shows in this terminal's agent activity, labelled PAPER, and is appended to its own hash-chained audit journal. Ctrl+P pauses and resumes, Ctrl+K stops it for the rest of the run, and any key while the agent is driving takes over; all of them halt its paper calls. Trading calls are refused while nothing is watching.
|
|
49
|
+
- **Only the agent you connected.** The in-app analyst and the scan never get the paper tools. The loopback agent bus does not offer them either.
|
|
50
|
+
|
|
51
|
+
Figures are simulated. They are for learning the flow, not a result, and never a prediction or a recommendation. This is not financial advice.
|
package/dist/packages/mcp/assets/kb/docs/docs-agents-directory-metadata-prepared-not-submitted.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-agents-directory-metadata-prepared-not-submitted
|
|
3
|
+
title: Bring your own agent › Install in one command › Directory metadata (prepared, not submitted)
|
|
4
|
+
kind: docs
|
|
5
|
+
page: agents
|
|
6
|
+
page_title: Bring your own agent
|
|
7
|
+
heading: Directory metadata (prepared, not submitted)
|
|
8
|
+
anchor: directory-metadata-prepared-not-submitted
|
|
9
|
+
url: https://dexterm.xyz/docs/agents#directory-metadata-prepared-not-submitted
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- agents
|
|
13
|
+
- directory
|
|
14
|
+
- metadata
|
|
15
|
+
- prepared
|
|
16
|
+
- submitted
|
|
17
|
+
- install
|
|
18
|
+
- command
|
|
19
|
+
- bring
|
|
20
|
+
- own
|
|
21
|
+
- agent
|
|
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/agents.md
|
|
29
|
+
date: 2026-10-16
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
The source repository includes an official MCP Registry `server.json` and a
|
|
33
|
+
Smithery MCPB manifest. They describe the same local stdio command and the same
|
|
34
|
+
(generated from the app: see https://dexterm.xyz/docs/agents#directory-metadata-prepared-not-submitted; app-help has the exact keys and commands)-tool surface that `dexterm mcp doctor` reports. No directory
|
|
35
|
+
listing is implied: publication remains a separate maintainer action, and the
|
|
36
|
+
Registry package marker must first ship in a new `dexterm-cli` release.
|
|
@@ -47,3 +47,5 @@ $ dexterm mcp doctor # spawn the server and list the tools you
|
|
|
47
47
|
Flags: `--config FILE` writes to a specific file instead of the client default; `--print` only prints; `--node` emits a `node <path> mcp` command for when `dexterm` is not on your PATH; `--yes` skips the confirmation prompt. On a non-interactive shell the command prints the plan and writes nothing unless you pass `--yes`.
|
|
48
48
|
|
|
49
49
|
`dexterm mcp doctor` spawns the server over stdio, does the MCP handshake, and lists the tools, prompts and resources the agent sees — proof the connection works before you point an agent at it.
|
|
50
|
+
|
|
51
|
+
Codex is supported both ways: as an MCP client here (`dexterm mcp install codex`), and, since 0.1.5, as the engine that runs the in-app analyst on your own Codex login (use Codex instead of Claude (https://dexterm.xyz/docs/analyst#use-codex-instead-of-claude)).
|
|
@@ -22,4 +22,4 @@ sources:
|
|
|
22
22
|
date: 2026-10-16
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
The panel shows a one-line fix (`npm i -g @anthropic-ai/claude-code && claude login`) and the rest of dexterm keeps working. `dexterm doctor` reports the Claude CLI line as a warning, not a failure.
|
|
25
|
+
The panel shows a one-line fix (`npm i -g @anthropic-ai/claude-code && claude login`) and the rest of dexterm keeps working. `dexterm doctor` reports the Claude CLI line as a warning, not a failure. With Codex installed, `auto` runs the analyst on Codex instead.
|
|
@@ -30,4 +30,6 @@ Nothing runs behind your back. Opening a token with `⏎` is free. A paid run st
|
|
|
30
30
|
- type a question (`i` or `⏎` to focus, `⏎` to send). A question is a chat turn on the warm session, or a new session with that question as its first turn, never a structured skill run;
|
|
31
31
|
- let AI scan mode (https://dexterm.xyz/docs/scan) lock a coin.
|
|
32
32
|
|
|
33
|
+
In an auto mode (following an agent with `--spectate-mcp`, or AI scan mode (https://dexterm.xyz/docs/scan#the-read)), the token screen's analyst panel shows the brain view (https://dexterm.xyz/docs/spectator#the-brain-view-and-the-pnl-chip) until you type into it.
|
|
34
|
+
|
|
33
35
|
Each token keeps its own conversation for the run; the analyst tab has its own. `esc` interrupts a running answer from any screen. The caption under an answer shows cost, latency, tool calls and the model.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-analyst-use-codex-instead-of-claude
|
|
3
|
+
title: The analyst › Use Codex instead of Claude
|
|
4
|
+
kind: docs
|
|
5
|
+
page: analyst
|
|
6
|
+
page_title: The analyst
|
|
7
|
+
heading: Use Codex instead of Claude
|
|
8
|
+
anchor: use-codex-instead-of-claude
|
|
9
|
+
url: https://dexterm.xyz/docs/analyst#use-codex-instead-of-claude
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- analyst
|
|
13
|
+
- use
|
|
14
|
+
- codex
|
|
15
|
+
- instead
|
|
16
|
+
- claude
|
|
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/analyst.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
*Since 0.1.5.* The analyst can run on **your own Codex CLI login** instead of Claude. dexterm ships no key and reads no credential: the `codex` you set up and signed in to does the work, on your plan.
|
|
28
|
+
|
|
29
|
+
- **Pick it:** `--analyst-engine codex` at launch, `DEXTERM_ANALYST_ENGINE=codex`, `"analyst": {"engine": "codex"}` in `~/.dexterm/config.json`, or type `/engine codex` in the chat box (it applies to new conversations; `/engine` alone shows the current engine and which CLIs it found). The default, `auto`, prefers Claude Code and falls back to Codex. Only you choose: the analyst cannot change its own engine.
|
|
30
|
+
- **Same guarantees, enforced in the Codex CLI itself.** dexterm runs `codex exec --json` with your Codex config and rules files ignored, apps, plugins, hooks, skills discovery and sub-agents off, the shell and exec tools removed, the sandbox read-only, approvals `never` and web search off. Its only MCP server is the read-only `dexterm mcp`, limited by an allow-list: the read tools plus the UI actions the session allows (none in scan mode (https://dexterm.xyz/docs/scan)), never a paper or trade tool. If Codex still reports a command, a file change, a web search or any other tool, dexterm stops the turn and says so. The firewalled CONTEXT block, the skills and your own skill overlays are the same; the skill playbook is passed inline because Codex has no plugin directory.
|
|
31
|
+
- **What is different.** Codex reports whole messages, so an answer appears per message rather than word by word. The caption shows `codex plan` instead of a dollar cost (Codex reports tokens, not cost). The model is your Codex default for your login; pin one with `DEXTERM_CODEX_MODEL`. Which models a ChatGPT plan allows is decided by your plan, not by dexterm.
|
|
32
|
+
- **Codex errors are one line each:** no Codex CLI (`npm i -g @openai/codex && codex login`), a logged-out Codex (`codex login`), or an old one (update; the lock needs codex-cli 0.163.0 or newer, and an unknown lock flag fails the run instead of loosening it). `dexterm doctor` shows a Codex CLI line with the version and whether you are logged in. On Windows dexterm only starts a `codex.exe` on PATH; the npm `codex.cmd` shim is not started.
|
|
33
|
+
- **How we checked.** Offline tests drive a fake `codex` through the real app path, and a measurement harness runs the real codex-cli 0.163.0 against a local mock model (no account, no model): the tool list Codex sends is the dexterm allow-list only, and forged shell, exec, patch, sub-agent and ticket calls come back "unsupported" without running. Answer quality and speed against Claude have not been benchmarked.
|
|
34
|
+
|
|
35
|
+
Codex is also supported the other way round, as an MCP client that drives dexterm: `dexterm mcp install codex` (see bring your own agent (https://dexterm.xyz/docs/agents#install-in-one-command)).
|
|
@@ -36,4 +36,4 @@ date: 2026-10-16
|
|
|
36
36
|
npm i -g dexterm-cli
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
Linux x64 with Node 22 and 24 and macOS on Intel processors have passed the full automated tests plus a clean install-and-start check. Apple Silicon macOS
|
|
39
|
+
Linux x64 with Node 22 and 24 and macOS on Intel processors have passed the full automated tests plus a clean install-and-start check. Apple Silicon macOS passed the same automated tests in CI for 0.1.4. No `sudo` (the command that grants administrator power) is required for this npm path.
|
|
@@ -26,4 +26,4 @@ sources:
|
|
|
26
26
|
date: 2026-10-16
|
|
27
27
|
---
|
|
28
28
|
|
|
29
|
-
Windows x64 is experimental
|
|
29
|
+
Windows x64 is experimental: the full CI suite passed for 0.1.4, though some file-permission checks are skipped. File permissions rely on your Windows user profile; voice has no Windows speech engine; browser-opening actions show a URL instead; `doctor` may print a macOS/Linux repair command; and the npm-installed `claude.cmd` is not detected as a usable analyst binary. These limits do not change the key rule: dexterm never holds your wallet keys.
|
|
@@ -36,4 +36,4 @@ Install Node.js LTS first, reopen PowerShell, and run:
|
|
|
36
36
|
npm i -g dexterm-cli
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
The Windows path is experimental
|
|
39
|
+
The Windows path is experimental: the project's CI suite passed for 0.1.4, but nobody has used it much by hand. The core read-only screens are expected to work, but voice has no Windows engine, browser-opening shortcuts do not work, and some repair instructions are written for macOS/Linux. See Windows expectations (https://dexterm.xyz/docs/beginners#windows-expectations).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-configuration-chart-y-axis
|
|
3
|
+
title: Configuration and files on disk › Chart Y axis
|
|
4
|
+
kind: docs
|
|
5
|
+
page: configuration
|
|
6
|
+
page_title: Configuration and files on disk
|
|
7
|
+
heading: Chart Y axis
|
|
8
|
+
anchor: chart-y-axis
|
|
9
|
+
url: https://dexterm.xyz/docs/configuration#chart-y-axis
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- configuration
|
|
13
|
+
- chart
|
|
14
|
+
- axis
|
|
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
|
+
Both charts, the terminal token chart and the popup chart (https://dexterm.xyz/docs/popup-chart#market-cap-axis), plot **market cap** on the Y axis by default, for new and existing configs alike. It is separate from the price display mode (https://dexterm.xyz/docs/configuration#price-display-mode): `A` on the token screen (or the popup's **MCAP | PRICE** control) flips the axis between market cap and USD price and saves it as `"display": { "chartAxis": "price" }` (or `"mcap"`; absent means `mcap`) through the journal, so `ctrl+z` undoes it. `dexterm display` prints both settings.
|
|
28
|
+
|
|
29
|
+
- Axis labels, the last-value tag, the crosshair legend and the volume use one compact formatter: a lowercase k for thousands, then M, B, T; one decimal below 10 of the unit and none after (`$4.9k`, `$42k`, `$487k`, `$1.2M`, `$48M`, `$1.3B`), never scientific notation. When two neighbouring ticks would read the same, the axis adds one decimal (`48.3M`).
|
|
30
|
+
- 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). The bars stay USD prices underneath, so indicators, PAPER entry / stop / target lines and fills keep their meaning; only the labels change.
|
|
31
|
+
- A token without a known supply plots its price and the title says `price (mcap unavailable)`. In price mode tiny prices use the subscript form (`0.0₅493`).
|
|
32
|
+
- While following an agent, the HUD's PAPER position card reads entry and mark as market cap (`entry MC $4.7k`) when the axis is market cap and the supply is known.
|
|
@@ -33,6 +33,8 @@ date: 2026-10-16
|
|
|
33
33
|
| `DEXTERM_INTENSITY` | `off` · `normal` · `fever` |
|
|
34
34
|
| `DEXTERM_OFFLINE=1` | refuse live data; `--fixtures` or `--replay` only (tests and CI) |
|
|
35
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_ANALYST_ENGINE` | `auto` (default) · `claude` · `codex`: which of your CLIs runs the analyst (since 0.1.5; also `--analyst-engine` and `analyst.engine` in `config.json`) |
|
|
37
|
+
| `DEXTERM_CODEX_MODEL` | pin the Codex model for analyst turns (default: your Codex default) |
|
|
36
38
|
| `DEXTERM_POPUP_SHELL` | path to a prebuilt native chart window |
|
|
37
39
|
| `DEXTERM_POPUP_HOTKEY` · `DEXTERM_POPUP_HOTKEY_CLOSE` | override the popup chords without a config file |
|
|
38
40
|
| `DEXTERM_RECORDER=0` | history recorder off (same as `--no-recorder`; `off`, `false` and `no` work too) |
|
|
@@ -27,9 +27,9 @@ date: 2026-10-16
|
|
|
27
27
|
|
|
28
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
29
|
|
|
30
|
-
- `$` flips price ⇄ market cap on every screen
|
|
30
|
+
- `$` flips price ⇄ market cap on every screen (the charts have their own Y axis setting (https://dexterm.xyz/docs/configuration#chart-y-axis)), 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
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
|
|
32
|
+
- Charts have their own setting, the chart Y axis (https://dexterm.xyz/docs/configuration#chart-y-axis) (market cap by default); `$` does not change it.
|
|
33
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
|
|
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 and the header. Nothing is estimated.
|
|
35
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.
|
|
@@ -31,6 +31,7 @@ vol5m.velocity > 3 and cluster < 20 and liq > 25K for 2 ticks then alert(up, "su
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
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
|
+
- Since 0.1.5: `devrugs` is the coin's creator's labelled prior rugs from the local record (dev history (https://dexterm.xyz/docs/screens#dev-history); unknown = no match), e.g. `when devrugs >= 2 then alert(warn, "new coin from a wallet that rugged before") scope newpairs`.
|
|
34
35
|
- 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
36
|
- 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
37
|
- `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.
|
|
@@ -25,3 +25,5 @@ date: 2026-10-16
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
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.
|
|
28
|
+
|
|
29
|
+
On Codex (since 0.1.5) it is spawned as `codex exec --json` with `--ignore-user-config` and `--ignore-rules`, `--disable` for `shell_tool`, `unified_exec`, `apps`, `plugins`, `hooks`, `multi_agent`, `browser_use` and `computer_use` (an unknown name fails the run), `sandbox_mode="read-only"`, `approval_policy="never"`, `web_search="disabled"`, the system prompt as `developer_instructions`, one `dexterm` MCP server with an `enabled_tools` allow-list and its environment forwarded by name (no value on the command line), and `--output-schema` for structured skills. The same lock is repeated on every resumed turn. `analyst.engine` in `config.json` is yours alone: a model or agent proposal that touches it is refused.
|