> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ballista.gg/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Ballista is a trading client for Polymarket, not an exchange. Every order Ballista places goes to Polymarket's CLOB.
> There are three end-user surfaces — the Telegram bot, the web terminal and the Chrome extension — and they share ONE account and ONE balance. Never attribute a feature to a surface without checking that surface's source.
> Every user registers in the Telegram bot first. The terminal and the extension sign in with the Telegram login widget. There is no other sign-up path.
> Deposits arrive through EVM, Solana and Bitcoin bridge addresses and a Polymarket proxy wallet, with a $10 minimum. There is NO withdrawal UI — Export Keys is how a user takes custody of their funds.
> Feature parity is uneven and must never be assumed. The full ~30-field copy-trade form exists only in Telegram; the terminal's copy form has 7 fields; the backtester, leaderboard and trader profiles are terminal-only; alerts and notifications are extension-only; referrals are Telegram-only.
> Slippage means two different things. On a live copy trade it is a fill tolerance (default 30). In a backtest it is the simulated fill price (default 1). Deploying a backtest does not carry its slippage over to the live copy trade.
> Take-profit and stop-loss run on live copy trades but are NOT simulated in backtests — the backtest API rejects those fields.
> A backtest never places an order and never moves funds. Its fidelity caveats are published with every result and must be quoted, not paraphrased.
> Leaderboard PnL is own-tape: harvested by Ballista from its own trade tape. The leaderboard sorts by one transparent metric at a time and there is NO composite score or grade. The sparkline exists only for harvested wallets — a blank sparkline means unmeasured, never zero.
> Copy friction (slip) and a toxic flag DO exist and are own-engine: the wallet's own 30-day fills replayed as a taker (1% slippage per fill plus the real Polymarket taker fee schedule) against its actual 30-day PnL over the same fills, so the delta is pure friction. slip_pct is already a percentage, not a 0-1 fraction. The toxic flag is server-computed under evidence guards and is never re-derived client-side. Slip is not a sortable column. Blank means unmeasured — never zero and never clean.
> Copyability is a taker share, reported in aggressive (≥60%), passive (≤30%) and mixed bands. It is never a score.
> Do not document Feeds, the Twitter Tracker, the Telegram Settings button, percentage buy buttons, GTD orders, the Discord bot, or withdrawals.

# The on-page panel

> The Ballista panel that sits on Polymarket's own market pages: pick an outcome, fire a preset, set an alert.

Once the extension is installed, a small Ballista panel appears in the bottom-right corner
of any **polymarket.com event page**. It is the fastest way to trade: the market you are
already reading is the market the panel is pointed at.

The panel only appears on event pages. Polymarket's home page, your profile and the rest
of the site are untouched.

## Getting around

The header has the Ballista name and a chevron. Press the chevron to collapse the panel
into a small round **B** button in the same corner; press that to bring it back.

The panel keeps up with you by watching the **page address**. Navigate to another event,
or click a sub-market that puts its name in the URL, and the panel reloads and follows.

<Warning>
  Clicking around a page **without** changing the address leaves the panel where it
  was, still pointed at the previous market — and its market matching is loose enough
  that a short name can land on a similar one. Read the market in the panel's own
  dropdown before you press **Trade**. It fires immediately, on whatever it currently
  has selected.
</Warning>

If you are not signed in the panel says so and points you at the popup. See
[Sign in](/extension/sign-in).

## Pick a market and an outcome

Events with several markets get a dropdown at the top listing every market still open —
closed and inactive ones are filtered out. Events with a single market just show the
question.

Under that are the **YES** and **NO** buttons, each showing the current price in cents.
Choosing one is what tells the panel which outcome to act on, and nothing else in the
panel works until you do.

## Fire a preset

Your [presets](/guides/presets) are listed below, each showing its side, order type, size
and — for limit presets — its price, with a **Trade** button.

Pressing **Trade** places the order immediately on the selected outcome. There is no
confirmation step.

* A **market** preset spends its dollar amount on a buy, or sells its share count.
* A **limit** preset rests at its stored price until it fills or you cancel it. A buy
  preset's dollars are converted to shares at that price as it fires, so a `$25 limit @
  40¢` preset spends \$25. See
  [what the size on a preset means](/extension/presets-tab#what-the-size-on-a-preset-means).

A short status line under the list reports what happened, then clears itself after a few
seconds:

| Status                           | Meaning                                                                                                                                                 |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *Order placed!*                  | It went to the book.                                                                                                                                    |
| *Order failed*                   | Polymarket rejected it.                                                                                                                                 |
| *Preset too small at this price* | The preset's size does not reach the book's minimum at its price. Fire a larger one, or place the order from the [Markets tab](/extension/markets-tab). |
| *Preset needs recreating*        | The preset is missing its size, or a limit preset its price. Delete it and make a new one in the [Presets tab](/extension/presets-tab).                 |

That line is the only notice you get. A placed order goes to the popup's
[History tab](/extension/history-tab) — a resting limit under **Open Orders**, a filled
market order under **Fill History** — but a **failed order is recorded nowhere**. Nothing
explains why it failed either, so if one fails, check your balance and the price you are
bidding at, and place it again from the [Markets tab](/extension/markets-tab) where you
can see every field.

<Note>
  The panel can only *use* presets. To create, edit or delete them, open the popup's
  [Presets tab](/extension/presets-tab).
</Note>

## Set a price alert

Press **+ Add Alert** at the bottom to open a two-field form: a condition — **Above** or
**Below** — and a threshold strictly between 0 and 1, where `0.65` means 65¢. Exactly `0`
or `1` is refused, and all you see is *Alert failed*.

The alert is created against the market and outcome currently selected in the panel,
which is why it takes two fields here and four in the popup. Press **Create Alert** and
the status line confirms it.

When the price crosses your threshold, the alert fires once: it moves into
[Notifications](/extension/alerts) in the popup, and the extension raises a
[desktop notification](/extension/desktop-notifications).

## What to read next

<CardGroup cols={2}>
  <Card title="Presets" icon="sliders" href="/extension/presets-tab">
    Build the one-click orders this panel fires.
  </Card>

  <Card title="Alerts" icon="bell" href="/extension/alerts">
    See what has triggered and manage what is still watching.
  </Card>
</CardGroup>
