Ib suite
Read-only Interactive Brokers (IBKR) diagnostics as portable AI-agent skills: account health, positions, daily P&L, trade history, dividends, options Greeks, and a P0–P3 graded portfolio report. Never places orders.
npx -y skills add luyangkk/ib-suite --skill ib-suiteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 17 days oldThe repository was created 17 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Read-only Interactive Brokers toolchain index and onboarding. Use when orienting across the ib-suite skills, running first-run setup (venv + live/paper config), or deciding which IB skill to run and in what order: ib-sync ingestion, live account/positions/daily-P&L/options overviews, Flex trade or dividend history, or the offline ib-analyze report. It runs nothing itself — the sub-skills do the work and never place, modify, or cancel an order.
SKILL.md
11.9 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
ib-suite — Interactive Brokers read-only toolchain
This directory is a read-only IB (Interactive Brokers) diagnostics toolchain:
pull account data from IB, land it in a local data lake, and turn it into a
graded portfolio-diagnostics report. Nothing here ever places, modifies, or
cancels an order. Ingestion connects with readonly=True; analysis never
touches the network.
This SKILL.md is the entry point. It does not run anything itself — it tells you (and OpenClaw) which sub-skill to run, in what order, and how the pieces fit.
0. First-run setup
Before running any sub-skill, make sure a config exists. This index owns
onboarding; the sub-skills stay gated until config.yaml is present.
- Detect. If
.ib-suite/config.yamlalready exists, config is ready — skip to §2. Otherwise continue.test -f .ib-suite/config.yaml && echo "config ready" || echo "needs setup" - Ensure the venv (only if missing):
test -d {baseDir}/.venv || bash {baseDir}/scripts/setup_venv.sh - Ask the user one question: connect to live (real account, port 4001)
or paper (simulated, port 4002)? Default is live — every connection
in this toolchain is
readonly=True, so live is read-only too. - Generate the config with the chosen mode (defaults to live):
It refuses to overwrite an existing config unless you add{baseDir}/.venv/bin/python {baseDir}/scripts/init_config.py \ --mode live --out .ib-suite/config.yaml--force. - Report back: the config path and the resulting mode/port. Remind the
user to start IB Gateway with Read-Only API enabled before
/ib-sync, and thatib-trade-historyandib-dividend-incomeshare one Flex token but keep separate per-window Query ID maps in ignored local config (flex.tokenwithflex.trade_history_query_ids/flex.dividend_query_ids); never echo either credential. - Proceed to §2 and run
/ib-sync→/ib-analyze.
Runtime config and data stay workspace-local under <workspace>/.ib-suite/
(gitignored); the skill dir ships only code and config.example.yaml.
1. Directory overview
| Component | What it is | Runs a command? | Network? |
|---|---|---|---|
| ib-common | Shared pip-installable package (config / schema / storage / metrics / charts). Not a skill. | No | No |
| ib-gateway | Read-only ingestion skill → /ib-sync | Yes | Yes (IB Gateway / Flex) |
| ib-account-overview | Read-only account financial overview skill → /ib-account-overview | Yes | Yes (IB Gateway) |
| ib-positions-overview | Read-only enriched positions overview skill → /ib-positions-overview | Yes | Yes (IB Gateway) |
| ib-daily-pnl | Read-only daily (today's) P&L breakdown skill → /ib-daily-pnl | Yes | Yes (IB Gateway) |
| ib-trade-history | Read-only Flex Query execution-history skill → /ib-trade-history | Yes | Yes (Flex Web Service) |
| ib-dividend-income | Read-only Flex-only paid/expected dividend-income skill → /ib-dividend-income | Yes | Yes (Flex Web Service) |
| ib-options-overview | Read-only option positions and Greeks overview skill → /ib-options-overview | Yes | Yes (IB Gateway) |
| ib-portfolio-analyst | Offline diagnostics skill → /ib-analyze | Yes | No |
skills/ib-suite/
SKILL.md # <- you are here (index / router)
scripts/setup_venv.sh # shared venv bootstrap (installs ib-common editable)
ib-common/ # shared library (installed editable into .venv)
ib-gateway/ # /ib-sync : IB/Flex -> local data lake
ib-account-overview/ # /ib-account-overview: IB account -> financial overview (no persistence)
ib-positions-overview/ # /ib-positions-overview: IB positions -> enriched, ranked overview (no persistence)
ib-daily-pnl/ # /ib-daily-pnl: IB live P&L -> today's realized/unrealized, ranked (no persistence)
ib-trade-history/ # /ib-trade-history: Flex executions -> stdout JSON (no persistence)
ib-dividend-income/ # /ib-dividend-income: Flex dividends -> stdout JSON (no account-data persistence)
ib-options-overview/ # /ib-options-overview: IB live options -> Greeks and risk overview (no persistence)
ib-portfolio-analyst/ # /ib-analyze: data lake -> report.md + charts
Scope. In: read-only sync, snapshots, Parquet history, and P0–P3 findings across account health, concentration, P&L attribution, trade review, portfolio risk, pre-trade simulation, and Flex-only dividend income. Out (hard boundary): order placement/modification/cancellation, live WhatIf margin checks, real-time market data, and any write path to IB. Do not add these under the banner of "completeness".
2. Run guide
Dependency direction: ib-common ← ib-gateway (produces data) ← ib-portfolio-analyst (consumes data).
setup_venv.sh -> ib-gateway /ib-sync -> ib-portfolio-analyst /ib-analyze
(install ib-common) (write data lake) (read lake -> report)
-
Setup once (or after dependency changes). Bootstraps the shared
.venvand installsib-common(editable) plus runtime deps. Idempotent.bash {baseDir}/scripts/setup_venv.sh # config.yaml is created by "0. First-run setup" (writes .ib-suite/config.yaml)Runtime data lives outside the skill dir. Keep the real
config.yamland the data lake under the workspace, e.g.<workspace>/.ib-suite/config.yamland<workspace>/.ib-suite/data/(setstorage.root: .ib-suite/data). The skill directory ships only code andconfig.example.yaml; reinstalling the skill must never overwrite user data. Entry scripts take explicit--config/--outand don't depend on the current working directory. -
Ingest (ib-gateway, online). Start IB Gateway (paper 4002 / live 4001) with API access, then run
/ib-sync. Writesdata/snapshots/<account>/<ts>.jsonand appendsdata/timeseries/positions_history.parquet. See ib-gateway/SKILL.md. -
Analyze (ib-portfolio-analyst, offline). Run
/ib-analyzeagainst a snapshot to producereport.md+.html/.pngcharts. See ib-portfolio-analyst/SKILL.md.
Which skill do I run?
| You want to… | Run |
|---|---|
| Refresh account/position data from IB | ib-gateway → /ib-sync |
| See account equity, margin, liquidity & P&L right now | ib-account-overview → /ib-account-overview |
| List every position, ranked, with the most concentrated name | ib-positions-overview → /ib-positions-overview |
| See how the account did today and which names drove it | ib-daily-pnl → /ib-daily-pnl |
| List historical fills, commission, realized P&L and win/loss statistics | ib-trade-history → /ib-trade-history |
| See paid/expected dividends, tax, attribution, annual income and yield | ib-dividend-income → /ib-dividend-income |
| Configure shared Flex credentials or dividend query fields | ib-dividend-income → /ib-dividend-income setup guide |
| Inspect option holdings, IV, Greeks, expiry exposure, and concentration | ib-options-overview → /ib-options-overview |
| Produce a diagnostic report from existing data | ib-portfolio-analyst → /ib-analyze |
| Test any skill without IB | its tests/ fixtures (see §5) |
Note on optional inputs. /ib-sync v1 lands only the account snapshot and
positions. Daily bars, executions, and dividends are optional JSON arrays
(matching the DailyBar / Execution / Dividend schema, e.g. exported from a
Flex report) that you pass to /ib-analyze directly; the corresponding report
sections appear only when their data is supplied.
3. Sub-skill module spec
Every functional sub-skill directory (ib-gateway, ib-portfolio-analyst, and
any future one) MUST follow this contract:
SKILL.mdwith valid frontmatter. Requiredname+description, andmetadata.openclaw(requires.bins,requires.config,os) so OpenClaw can discover and gate it.nameMUST equal the directory name (lowercase, stable).descriptionstates the read-only boundary. Start with "Read-only", say what it does and when it triggers, and stay narrow enough to avoid mis-firing.scripts/holds the deterministic entry logic. Useargparse; validate required args; exit non-zero with an actionable message on failure. Commands inSKILL.mduse the{baseDir}placeholder and.venv/bin/python— never absolute or hardcoded user paths.- Network/IB access hides behind an injectable factory (
client_factory,http_get) sotests/run fully offline againstfixtures/. - Reuse
ib-common, don't fork it. Types come fromib_common.schema(pydantic v2); reuseFinding,grade(),thresholds, storage helpers, andrender()for charts. New diagnostic modules live inib_analyst/, exposeanalyze(...) -> list[Finding]with a module-levelDIMconstant and an optionalbuild_chart(...) -> plotly.Figure, and are wired intoanalyze.py'srun(). New thresholds MUST also be added toib-common/config.example.yamlunderthresholds:. from __future__ import annotationsat the top of every module; type-annotate functions; docstring public functions.
4. Invocation
As OpenClaw slash commands (primary). Once discovered, the sub-skills expose
/ib-sync, /ib-account-overview, /ib-positions-overview, /ib-daily-pnl,
/ib-trade-history, /ib-dividend-income, /ib-options-overview, and
/ib-analyze. Gating is driven by each skill's metadata.openclaw (python3
on PATH, a config.yaml, and a supported OS).
As direct scripts (for automation / other systems). Call the entry scripts with the shared interpreter; they print structured, parseable results (dicts / output paths) to stdout and return non-zero on failure:
# ingest
{baseDir}/.venv/bin/python {baseDir}/ib-gateway/scripts/ib_sync.py --config .ib-suite/config.yaml
# historical Flex executions (default: latest 7 calendar days)
{baseDir}/.venv/bin/python {baseDir}/ib-trade-history/scripts/trade_history.py \
--config .ib-suite/config.yaml
# Flex-only dividend income (inclusive dates are required)
{baseDir}/.venv/bin/python {baseDir}/ib-dividend-income/scripts/dividend_income.py \
--config .ib-suite/config.yaml \
--start-date 2026-01-01 \
--end-date 2026-07-19
# analyze (bars/executions/dividends optional)
{baseDir}/.venv/bin/python {baseDir}/ib-portfolio-analyst/scripts/analyze.py \
--config .ib-suite/config.yaml \
--snapshot data/snapshots/<account>/<ts>.json \
--out data/runs/$(date +%Y%m%dT%H%M%S)
As a library. import ib_common (installed editable) for config/schema/
storage/metrics/charts. ib-trade-history and ib-dividend-income share the
Flex token but keep separate per-window Query ID maps (flex.token with
flex.trade_history_query_ids / flex.dividend_query_ids) in ignored
local config. The dividend skill requires numeric windows and its standalone
field/window guide is
ib-dividend-income/flex-query-setup.md.
Never hardcode or echo tokens, Query IDs, account numbers, or user paths.
What ships with it: 29 files
161.8 KB alongside SKILL.md, 23 of them executable
ib-common/
- config.example.yaml2.5 KB
- ib_common/charts/__init__.pyruns0 B
- ib_common/charts/render.pyruns929 B
- ib_common/config.pyruns3.6 KB
- ib_common/dividend_income.pyruns49.6 KB
- ib_common/flex.pyruns4.1 KB
- ib_common/__init__.pyruns0 B
- ib_common/metrics/__init__.pyruns0 B
- ib_common/metrics/returns.pyruns1.7 KB
- ib_common/metrics/risk.pyruns1.7 KB
- ib_common/redaction.pyruns596 B
- ib_common/schema.pyruns19.8 KB
- ib_common/storage.pyruns1.7 KB
- pyproject.toml1.1 KB
- requirements.txt58 B
- tests/fixtures/config_minimal.yaml105 B
- tests/fixtures/config_options_market_data.yaml152 B
- tests/fixtures/snapshot_sample.json661 B
- tests/test_charts.pyruns460 B
- tests/test_config.pyruns4.6 KB
- tests/test_dividend_income.pyruns52.2 KB
- tests/test_flex.pyruns2.8 KB
- tests/test_metrics_returns.pyruns636 B
- tests/test_metrics_risk.pyruns839 B
- tests/test_schema.pyruns4.6 KB
- tests/test_storage.pyruns1.3 KB
scripts/
- init_config.pyruns2.4 KB
- setup_venv.shruns1.1 KB
- tests/test_init_config.pyruns2.5 KB