@aetherwealth/cli
v0.1.36
Published
Official Aether Wealth CLI: manage your trading journal, accounts, alerts, market data, macro calendar, and technical indicators from the command line.
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, driven by the same OAuth-signed account.
The package runs locally with npx, authenticates with browser-based OAuth,
and talks to production Aether Wealth by default. 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 deviceNo shared API key is configured anywhere — every command runs as you, with your account's permissions.
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_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 candles | Recent OHLC bars (--pair --timeframe, plus --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-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 — the CLI never stores or configures a shared service secret.
- 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. - Every request goes over one transport (typed tRPC over HTTPS to aether-backend) — there's no separate REST fallback to keep in sync.
- Backend rate limits and cost-sensitive-indicator gates apply the same way
they do for the dashboard and the MCP server. Rate-limited 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
- npm package: https://www.npmjs.com/package/@aetherwealth/cli
