@aetherwealth/cli
v0.2.15
Published
Official Aether Wealth CLI for journals, accounts, alerts, forex and crypto market context, and technical indicators.
Readme
Aether Wealth CLI
Official command-line client for Aether Wealth. Manage your trading journal, accounts, alerts, market context, and technical indicators from any terminal — the same data your Aether Wealth dashboard and the Aether Wealth MCP server use, through the same OAuth-authenticated account.
The package runs locally with npx and talks to production Aether Wealth by
default. Normal commands authenticate with browser-based OAuth; live market
watch uses a runtime-only user API key. It is built for traders who
want to script their journal, wire alerts into other tools, or check market
context without opening the dashboard.
Journaling, not order routing.
trades createandtrades closerecord entries in your Aether Wealth trading journal for analysis and stats — they do not place, modify, or close live orders with any broker. Nothing in this CLI executes trades on a market.
Install
npx -y @aetherwealth/cli --helpOr install it globally:
npm install -g @aetherwealth/cli
aether-wealth --helpAuthentication
Run aether-wealth login once. It opens the Aether Wealth OAuth flow in your
browser; after you approve access, the CLI stores an access token in the
operating-system keychain where available, with a protected 0600 file
fallback (AETHER_CLI_CREDENTIALS_FILE forces the file store, useful on
headless Linux without a secret service).
aether-wealth login # sign in with your browser
aether-wealth whoami # show who you are signed in as
aether-wealth logout # clear the local credential on this deviceNormal commands run as your OAuth session. market watch is the sole separate
path: it reads AETHER_API_KEY from the current process, and never accepts or
stores that secret through argv, login, or the config file.
CI / Non-Interactive Use
Set AETHER_ACCESS_TOKEN to a pre-minted OAuth access token to skip the
browser flow entirely. It is read fresh per request and never written to
disk or to the config file. Destructive commands (trades delete,
accounts delete, alerts delete) still require --yes/-y to run
non-interactively.
Where It Points
The CLI talks to production Aether Wealth (https://api.aetherwealth.ai) by
default. Point it elsewhere with AETHER_BASE_URL (for example
http://localhost:9006 for local development against a running
aether-backend).
Environment Variables
| Variable | Purpose |
| --- | --- |
| AETHER_BASE_URL | Backend base URL. Defaults to https://api.aetherwealth.ai; set http://localhost:9006 for a local aether-backend. Must be https unless the host is loopback. |
| AETHER_ACCESS_TOKEN | CI escape hatch: a pre-minted OAuth access token that skips the browser flow. Read fresh per request, never written to disk. |
| AETHER_API_KEY | User API key with market:read, required only for market watch. Runtime-only and never persisted. |
| AETHER_CLI_CREDENTIALS_FILE | Force the 0600 file credential store instead of the OS keychain (headless Linux without a secret service). |
| AETHER_DEFAULT_ACCOUNT_ID | Account id used when --account is omitted on trade commands. |
| AETHER_DEFAULT_CONVERSATION_ID | Conversation id used when --conversation is omitted on chat commands. |
Commands
Every command supports --json (machine-readable output), --no-color,
--debug (print request/response timing to stderr), and -h/--help.
Auth
| Command | Purpose |
| --- | --- |
| login | Sign in with your browser (OAuth). |
| logout | Sign out on this device. |
| whoami | Show who you're signed in as. |
| auth login\|logout\|status | Same three, grouped under auth. |
Trades
| Command | Purpose |
| --- | --- |
| trades list | List trades (--account, --status, --pair, --from, --to, --page, --limit). |
| trades show <id> | Show one trade in detail. |
| trades create | Create a trade (--account, --pair, --direction LONG\|SHORT, --entry-price, --entry-time, plus optional --lot-size, --stop-loss, --take-profit, --notes, --tag, --timeframe, --risk-percent). |
| trades update <id> | Update fields (--notes, --tag, --stop-loss, --take-profit, --lot-size, --timeframe, --risk-percent). |
| trades close <id> | Close an open trade (--exit-price, --exit-time, --notes, --fees, --swap). |
| trades delete <id> | Delete a trade (confirms; --yes to skip in scripts). |
Accounts And Stats
| Command | Purpose |
| --- | --- |
| accounts list | List trading accounts. |
| accounts trades <id> | List trades for an account. |
| accounts create | Create an account (--name, --broker, --account-type, --initial-balance, --currency, --notes, --default-risk). |
| accounts update <id> | Update account fields (--name, --broker, --notes, --active, …). |
| accounts delete <id> | Delete an account (confirms; --yes to skip in scripts). |
| stats | Aggregate trading stats (--account, --pair, --from, --to). |
API Keys
| Command | Purpose |
| --- | --- |
| keys list | List your API keys. |
| keys create --name X | Create a new API key (--permissions, --rate-limit, --expires-at). |
| keys regenerate <id> | Rotate a key secret (--permissions replaces access). |
| keys update <id> | Update key metadata (--name, --rate-limit, --active). |
| keys revoke <id> | Revoke a key. |
Chat
| Command | Purpose |
| --- | --- |
| chat send "<msg>" | Send a chat message (--conversation, --provider, --model). |
| chat list | List your AI conversations. |
| chat show <id> | Show one conversation with messages. |
| chat new | Create an empty conversation. |
| chat delete <id> | Delete a conversation. |
Alerts
| Command | Purpose |
| --- | --- |
| alerts list | List price + trendline alerts (--kind indicator, --pair, --include-archived). |
| alerts create price | Create a price-level alert (--pair --timeframe --price --condition above\|below\|crosses, plus --trigger close\|wick, --persistent, --no-email, --no-push, --message, --expires). |
| alerts create trendline | Create a trendline alert from two chart points (--pair --timeframe --price1 --time1 --price2 --time2 --condition). |
| alerts create indicator | Create an indicator-condition alert (--pair --timeframe --indicator <type> --param k=v,k2=v2 --series <output> --op <op>, plus --dedup edge\|continuous). Threshold ops (gt gte lt lte eq crosses_above crosses_below) take --threshold <n>; series ops (gt_series lt_series crosses_above_series crosses_below_series) take --other <series>. |
| alerts update <id> | Update fields (--price, --condition, --active, --archive; --kind indicator for indicator alerts). |
| alerts delete <id> | Delete an alert (--kind indicator; confirms, --yes to skip). |
Market Context
| Command | Purpose |
| --- | --- |
| market watch <symbol…> | Stream live 1-minute prices. Interactive terminals show a refreshed latest-value table; pipes and --json emit JSONL. Terminal stream failures print to stderr and exit with code 1. |
| market candles | Recent OHLC bars (--pair --timeframe, plus admin-only native --source, --limit, --offset). |
| market calendar | Economic calendar events (--currency USD,EUR, --from, --to, --min-impact <n>). |
| market macro | Macro time series such as CPI or interest rates (--currency --indicator, plus --from, --to, --limit). |
| market instruments | Supported instruments and timeframes. |
Technical Indicators
| Command | Purpose |
| --- | --- |
| indicators <name…> | Compute one or more indicators, e.g. indicators rsi macd --pair EURUSD --timeframe 1h --param time_period=14,series_type=close [--outputsize N]. Param names are per-indicator (Twelve Data names, e.g. time_period, series_type); an unknown key returns the allowed list. |
Example
aether-wealth login
aether-wealth trades list --status OPEN --account acc_123
aether-wealth stats --pair EURUSD --from 2026-01-01
AETHER_API_KEY=aw_live_... aether-wealth market watch EURUSD GBPUSD
aether-wealth alerts create price --pair XAUUSD --timeframe 1h \
--price 2400 --condition above --message "Gold above 2400"
aether-wealth indicators rsi ema --pair EURUSD --timeframe 1h \
--param time_period=14 --json | jq .Safety And Limits
- OAuth is per user. Live watch's user API key is process-only and needs
market:read; the CLI never writes it to config or credential storage. - Tokens live in the OS keychain (or a
0600file) and can be cleared withlogout. - Destructive commands (
trades delete,accounts delete,alerts delete) prompt for confirmation; pass--yes/-yto run them in scripts. In a non-interactive shell without--yes, they refuse to run rather than guess. - Normal commands use typed tRPC over HTTPS. Live watch uses the SDK's ticketed aether-backend WebSocket; the API key never enters the socket URL.
- Live watch is fixed to
1m, accepts at most 25 symbols, and reports the latest observed price rather than an executable bid/ask quote. - Live watch keeps running across network failures, backend 5xx responses,
rate limits (honoring
Retry-After), and planned ticket reauthentication. Invalid credentials and whole-stream policy failures print the error and exit with code1. A rejection scoped to one symbol is printed while the watch continues for unaffected symbols; retryable gateway errors reconnect. - Backend rate limits and cost-sensitive-indicator gates apply the same way
they do for the dashboard and the MCP server. Rate-limited request/response
reads (
market,indicators) are retried automatically with backoff; if the limit persists the command prints a clear message and exits with code4(distinct from1), so a script can back off and retry.
Known Deltas From The Dashboard
The CLI is not yet at full parity with the Aether Wealth dashboard:
trades createcannot set exit fields directly — create the trade open, then usetrades close <id>to set--exit-price/--exit-time.trades listhas no--tagfilter (filter client-side on the JSON output, e.g.--json | jq '.trades[] | select(.tags[]? == "breakout")').whoami/auth statusshow your account id in place of an email when the backend hasn't granted theemailOAuth scope for your session.
Links
- Aether Wealth: https://aetherwealth.ai
- Trading app: https://app.aetherwealth.ai
- Terms: https://aetherwealth.ai/terms
- Privacy: https://aetherwealth.ai/privacy
- npm package: https://www.npmjs.com/package/@aetherwealth/cli
License
Proprietary. See the LICENSE file included with this package.
