---
name: staskh-ib-portfolio
description: "Get portfolio positions from Interactive Brokers. Use when user asks about their portfolio, positions, holdings, or what stocks they own. Requires TWS or IB Gateway running locally."
license: "MIT"
metadata:
  decimalai-skill-id: "1821c820-3cbb-4ab4-8a02-2c0e17ff95a5"
  decimalai-version-id: "76616d85-9d0d-47ca-8932-cc802073b14e"
  decimalai-version: "1"
  decimalai-body-sha256: "d3a91bb27ccdb9c34efe40b0e358501f8261483a4b2754521ebfa4899ae338ce"
  decimalai-name: "staskh/ib-portfolio"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "finance"
  decimalai-source: "https://app.decimal.ai/s/staskh-ib-portfolio@1/SKILL.md"
---
# IB Portfolio

Fetch current portfolio positions from Interactive Brokers.

## IB Connection

TWS or IB Gateway must be running locally with API enabled:
- **Paper trading** — port 7497
- **Live trading** — port 7496
- **`IB_PORT` env var** — default port when `--port` is omitted (e.g. `IB_PORT=4001` for a Gateway container). Precedence: `--port` flag > `IB_PORT` > built-in default. Set it in the shell or a `.env` file.

**Port fallback:** If the configured port fails, automatically retry on the other port.
If the retry succeeds, save to memory which account type worked (live/paper) and reuse it for all IB skill calls in this and future sessions — until the user explicitly asks for the other account.
If both ports fail, ask the user to verify that TWS or IB Gateway is running with API access enabled.

## Instructions

> **Note:** If `uv` is not installed or `pyproject.toml` is not found, replace `uv run python` with `python` in all commands below.

```bash
uv run python scripts/portfolio.py [--port PORT]
```

## Arguments

- `--port` - IB port (default: 7497 for paper trading)
- `--account` - Specific IB account ID (optional, defaults to first account)

## Output

Returns JSON with:
- `connected` - Whether connection succeeded
- `positions` - Array of positions with symbol, quantity, avg_cost, market_value, unrealized_pnl

If not connected, explain that TWS/Gateway needs to be running.

## Dependencies

- `ib-async`


## Timezone

All timestamps and time-based calculations must use the `America/New_York` timezone. All JSON output must include `generated_at` (NY time string) and `data_delay` fields.
