Trade From Anywhere
Cabal runs on three surfaces -- a web dashboard, a Telegram bot, and a CLI. They are not three separate bots. They are three windows into one agent with one identity, one set of guardrails, one conversation history, and one position book.
A trade proposed during a background run can be approved from Telegram while you are on the train. A position opened from Telegram shows up on the web dashboard when you sit down at your desk. The CLI reads the same activity log as the web. Nothing falls through the cracks because there is nothing to sync -- it is all the same state.
One agent, every surface
Your agent is a single persistent identity. It carries one set of risk limits, one conversation history, and one position book regardless of how you reach it. Whether you open the web dashboard, message via Telegram, or run a command from the terminal, you are talking to the same agent with the same context.
This means:
- Guardrails configured on the web apply to trades approved from Telegram.
- A conversation started from Telegram appears in your web chat history.
- Positions and activity are visible from the dashboard and the CLI without reconciliation.
There is no "Telegram version" of your agent. There is one agent, and you choose where to interact with it.
Telegram
Link your Telegram account by either messaging the bot directly with /start or navigating to Settings on the web dashboard and connecting from there. Both paths end with the same result -- your Telegram identity is bound to your Cabal account.
Once linked, Telegram becomes a first-class trading surface:
- Start conversations -- message the bot and your agent responds. The conversation appears in your web chat history.
- Receive signal notifications -- tracked wallet activity, background run summaries, and alerts arrive as Telegram messages.
- Approve or reject trade proposals -- inline buttons appear below each proposal. One tap to approve, one tap to reject.
Bot commands
| Command | What it does |
|---|---|
/start | Link your Telegram account |
/status | Check your agent's current state |
/new | Start a new conversation |
/history | See recent conversations |
Approve trades from your phone
This is the workflow that matters most. Walk through it end to end:
- Your agent detects a signal from a tracked wallet while you are away from your computer.
- The agent reasons about the signal -- the token, the size, the source's track record, your current positions -- and proposes a trade.
- Telegram delivers the proposal to your phone with Approve and Reject buttons.
- You read the summary and tap Approve.
- The server runs guardrail checks again. Market conditions may have shifted since the proposal was generated -- price impact, slippage, and position limits are all re-evaluated at approval time.
- If every check passes, the trade executes. If any check fails, you see exactly which limit was violated and why the trade was blocked.
- You open the web dashboard later and the position is already there -- same book, same history.
The second guardrail check at approval time is the key safety mechanism. If the market moved enough between proposal and approval to violate your risk limits, the trade is blocked even after you tap Approve. You never execute a stale proposal that no longer fits your rules.
The CLI
The cabal command gives you programmatic access to the same agent, the same state, and the same guardrails.
Device-auth login
cabal auth login
This starts a device-code flow. A URL opens in your browser where you approve the login. Once authorized, your terminal session is authenticated and all subsequent commands run under your account.
Reading state
cabal positions
cabal activity
Check your portfolio and recent activity from the terminal. The data is the same as what the web dashboard displays -- there is no separate state.
The external-agent harness
The CLI supports an external-agent workflow: bring your own model and runtime, but use Cabal for authentication, trade execution, guardrails, and position tracking. Your custom agent gets the same infrastructure as the built-in agent without needing to reimplement risk checks or wallet management.
Every CLI operation respects the same guardrails as every other surface. There is no back door.
What you can do where
| Capability | Dashboard | Telegram | CLI |
|---|---|---|---|
| Chat | Yes | Yes | -- |
| Trade approvals | Yes | Yes | -- |
| Signal delivery | Yes | Yes | -- |
| Position monitoring | Yes | -- | Yes |
| Trade history | Yes | -- | Yes |
| Agent configuration | Yes | -- | -- |
| Risk limit settings | Yes | -- | -- |
| Wallet management | Yes | -- | -- |
| Scripted access | -- | -- | Yes |
Configuration and settings live on the web dashboard. Trading and approvals work across the dashboard and Telegram. Programmatic access goes through the CLI.
Setting up wallets
Before your agent can trade on a chain, you need a linked wallet funded with the native currency for gas. Set up wallets in Agent settings on the web dashboard.
| Chain | What you need | Where to set it |
|---|---|---|
| Solana | Linked Solana wallet | Agent settings |
| Base (EVM) | Linked Ethereum wallet | Agent settings |
| Hyperliquid | Master wallet + provisioned agent sub-wallet | Agent settings (follow the provisioning flow) |
Your Ethereum wallet is shared between Base and Hyperliquid. A single agent can hold wallets on all three chains simultaneously.
Fund each wallet before trading:
- Solana -- SOL for gas
- Base -- ETH on Base for gas
- Hyperliquid -- USDC for margin
Cabal enforces a native reserve floor on each chain so you always have enough gas to execute. If a trade would drop your native balance below the floor, the trade is blocked.
EVM token approvals: Base trades may require a token approval step before the swap executes. This is standard EVM behavior -- you will see "Step 1: Approve token spending" before the actual trade. The approval only needs to happen once per token.
See also
- -- full Telegram integration reference
- -- CLI installation and commands
- -- risk limits that apply across all surfaces