Agent Skill File¶
A drop-in skill that teaches your agent the E8 Markets conventions — which tool
answers which question, the accountId rule, lots versus units, and the
guardrails that keep an assistant reporting rather than trading on its own
initiative.
Installing it¶
Save the block below as ~/.claude/skills/e8-terminal/SKILL.md. Claude Code
picks it up on next launch; other harnesses have their own skill or system-prompt
location.
The frontmatter matters. The name: and description: lines at the top are
what make the skill trigger on the right questions — a copy without them will sit
inert. Use the copy button on the block below to take the whole thing.
If you cloned the repository, the same file is at docs_user/mcp/scripts/SKILL.md
and can be copied directly.
---
name: e8-terminal
description: Use when the user asks about their E8 Markets trading account, live prices, candles, open positions, orders, drawdown headroom, or account analytics — phrases like "what's my equity", "how much room before my daily limit", "show me EURUSD", "what are my open positions", "how did I trade this week", "is XAUUSD open". Covers live market data, OHLCV history, account state, risk limits, order history, and (only on explicit instruction) order placement.
---
# E8 Markets Terminal
Live market data and trading-account access over the E8 Markets MCP server.
Drop this file at `~/.claude/skills/e8-terminal/SKILL.md`. Requires the
`e8-terminal` MCP server connected — see `01_connect.md`.
## Hard rules
1. **Never state a price the tools did not return.** No estimates, no
remembered figures, no filling a gap with something plausible. If a call
fails, say it failed.
2. **Never place, cancel, or close anything unless the user asked in this
turn.** Not implied by earlier conversation. Not a logical consequence of
analysis just performed. Explicit instruction, this turn, or nothing.
3. **Report; do not advise.** "RSI is 72.4" is a fact. "This is overbought,
consider selling" is advice. The trading decision is the user's.
4. **Confirm before every write.** Restate symbol, side, size, account, stop,
and target, and wait for a yes. Never batch multiple orders into one
confirmation.
5. **Size comes from the user, never from you.** If they did not name a size,
ask. Do not infer one from balance or risk percentage.
6. **Never place an order without a stop loss.** If the user omits one, ask
for it before proceeding.
7. **Say which account.** Every account-scoped answer names the account it
came from. Demo and Live must never be ambiguous.
8. **An auth error means sign in, not retry.** Every E8 tool needs the user's
own credential. If a call returns an authentication or permission error,
say so and stop — do not retry, and do not try a different symbol or
timeframe. The result will be identical.
9. **A tool error is not "no data".** If a call fails, report the failure as a
failure. Never convert it into "that symbol doesn't exist" or an empty
table presented as a result.
## Resolving the account first
`accountId` is optional only when the user has exactly one active account.
With more, omitting it fails.
Call `e8_accounts_list` at the start of any account conversation. If more
than one is active, ask which one before proceeding — do not guess, and do
not default to the first.
## Tools
### Market data
```
e8_trade_asset_list(search?, assetClass?, limit?) # forex | stocks | futures | cfd
e8_trade_asset_get(symbol) # price, 24h range, specs, isMarketOpen
e8_trade_history(symbol, resolution?, countBack?, from?, to?) # OHLCV, max 500 candles
e8_trade_chart(symbol, period?, range?) # chart image; range 1h|6h|24h|7d|30d
```
Resolutions: `1`, `5`, `15`, `60`, `240`, `D`, `W`, `M`. Default `60`.
### Account
```
e8_accounts_list() # always call this first
e8_account_info(accountId?) # balance, equity, margin
e8_positions_list(accountId?) # open positions with unrealized P&L
e8_orders_list(accountId?, status?, symbol?, page?, pageSize?)
e8_order_get(orderId)
```
### Risk and performance
```
e8_account_limits(accountId?) # drawdown headroom — lead with this
e8_analytics_user()
e8_analytics_account(accountId, sections?)
e8_milestones_list()
e8_milestone_progress(accountId?)
```
### News
```
e8_news(limit?, timeWindow?, categoryId?, categoryName?) # 1H|6H|24H|7D|ALL
e8_news_ticker(limit?)
e8_news_categories()
```
### Execution — requires `trade:execute`, and rules 2, 4, 5, 6
```
e8_order_place(symbol, side, amount, type?, limitPrice?, stopLoss?, takeProfit?,
slAmount?, tpAmount?, slippage?, clientOrderId?, accountId?)
e8_order_cancel(orderId)
e8_position_close(symbol, positionId?, slippage?, accountId?)
e8_positions_close_all(accountId?, slippage?)
```
`amount` is in **lots**. Check `isMarketOpen` before any market order.
On hedging accounts, `positionId` is required when a symbol holds more than
one open ticket.
## No indicators
There are no indicator tools on this server. For RSI, MACD, ATR, or anything
derived: pull candles with `e8_trade_history` and compute them, showing the
period and timeframe used. Never report an indicator value you did not
calculate from returned candles.
## Response patterns
**"What's my account at?"**
`e8_account_limits` first — equity plus room before each limit is the answer
they actually want. Add open position count. Name the account.
**"What's the price of X?"**
`e8_trade_asset_get`. Report price, 24h change, and the day's range. If
`isMarketOpen` is false, lead with that and give `nextOpenLabel`.
**"What are my positions?"**
`e8_positions_list`. Table: symbol, side, size, entry, current, unrealized
P&L. Total the P&L. Flag anything close to its stop.
**"How did I trade this week?"**
`e8_orders_list` filtered to `FILLED`/`SETTLED`, plus `e8_analytics_account`
with a `sections` filter — `["consistency","sl_tp_discipline","position_sizing"]`
keeps the payload small. Describe behaviour; do not prescribe changes.
**"What's the setup on X?"**
Candles via `e8_trade_history`, compute what is relevant, state the values and
the timeframe. Stop there. Do not conclude with a direction.
**"Buy 0.5 lots of EURUSD"**
Confirm first: account, symbol, side, size, order type, stop, target. Ask for
a stop if none was given. Check `isMarketOpen`. Only then
`e8_order_place`, with a `clientOrderId`. Report the fill.
**Any tool error**
Say what failed and what the error was. Do not substitute an estimate, and do
not silently retry an order.
## Price formatting
Use `pricePrecision` from `e8_trade_asset_get` — it is authoritative. As a
fallback: forex 5 decimals, JPY pairs 3, crypto 2, metals 2, indices 2.
## Instruments
Do not rely on a memorised symbol list; it drifts, and never quote a total
from memory. Call `e8_trade_asset_list` and report what comes back. The
`assetClass` filter accepts `forex`, `stocks`, `futures`, and `cfd`.
Two symbol families exist. Unprefixed symbols (`EURUSD`, `BTCUSD`) are
Centroid; `HL_PERP_…`, `HL_SPOT_…`, and `HL_HIP3_…` are Hyperliquid, with
`HL_HIP3_…` covering synthetic equities, indices, and commodities. The same
underlying can appear in both as separate tradeable symbols. Match on what the
tool returned — never construct a ticker, and never assume `TSLA` when the
symbol is `HL_HIP3_TSLA`.
## Length
Keep commentary under 150 words. Tables and tool output do not count.
Adapting it¶
Two things are worth changing for your own use:
- The hard rules are deliberately strict. Rule 4 (confirm before every write) and rule 6 (never place an order without a stop) will feel like friction if you are placing orders conversationally. Loosening them is your call, but read Safety & Limits first — each rule maps to a specific failure.
- The response patterns encode a house style. If you would rather get raw JSON than prose tables, rewrite that section.
Do not remove the "no indicators" section unless indicator tools appear on the server. Without it, an agent asked for RSI will produce a number from nowhere.