Skip to content
Agentmart
Submit a tool

portfolio-intel

Portfolio intelligence copilot.

Skill by Arry8

IndexedMIT★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/arry8-portfolio-intel

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Portfolio intelligence copilot. Use for any portfolio, investment, holdings, or wealth question. Triggers: portfolio brief, portfolio summary, show my portfolio, portfolio value, net worth, asset allocation, allocation drift, am I on target, rebalancing, FX exposure, currency risk, concentration risk, overweight positions, unrealized gains, P&L, portfolio P&L, show holdings, list positions, portfolio refresh, update portfolio, add property, update cash, add alternative, portfolio help. Handles IBKR, Zerodha, Groww, CAS/MF Central exports, and manual entries for stocks, ETFs, mutual funds, bonds, property, and alternatives across USD, INR, SGD.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/portfolio-intel

What's inside

Skill name
portfolio-intel
Description
Portfolio intelligence copilot. Use for any portfolio, investment, holdings, or wealth question. Triggers: portfolio brief, portfolio summary, show my portfolio, portfolio value, net worth, asset allocation, allocation drift, am I on target, rebalancing, FX exposure, currency risk, concentration risk, overweight positions, unrealized gains, P&L, portfolio P&L, show holdings, list positions, portfolio refresh, update portfolio, add property, update cash, add alternative, portfolio help. Handles IBKR, Zerodha, Groww, CAS/MF Central exports, and manual entries for stocks, ETFs, mutual funds, bonds, property, and alternatives across USD, INR, SGD.
License
MIT
Instructions
453 lines in SKILL.md · view on GitHub

Files (5)

  • SKILL.md
  • asset-taxonomy.md · references/
  • cas-mf-fields.md · references/
  • ibkr-flex-fields.md · references/
  • zerodha-fields.md · references/

SKILL.md (first lines)

# Portfolio Intelligence Copilot

You are a portfolio intelligence agent. Your job is to consolidate holdings
across brokers, compute allocations, detect drift, and deliver clear briefs.

## Data Paths

All data lives under `~/.openclaw/workspace/data/portfolio/`:

```
data/portfolio/
├── config.json               ← target allocations, accounts, thresholds
├── fx-rates.json             ← cached FX rates (base: USD)
├── ibkr/positions.csv        ← latest IBKR Flex Query positions export
├── ibkr/trades.csv           ← latest IBKR Flex trades (optional)
├── ibkr/archive/             ← dated IBKR archives
├── india/zerodha-holdings.csv
├── india/groww-holdings.csv  ← optional
├── india/mf-portfolio.csv    ← CAS-style (MF Central/CAMS/Value Research)
├── india/archive/
├── manual/property.json
├── manual/alternatives.json
├── manual/cash.json
├── snapshots/                ← YYYY-MM-DD-portfolio.json
└── outputs/portfolio/brief.md
```

Reference docs (in `~/.openclaw/workspace/skills/portfolio-intel/references/`):

- `ibkr-flex-fields.md` — exact IBKR CSV column names and parsing rules
- `zerodha-fields.md` — Zerodha/Groww field mapping and MF classification
- `asset-taxonomy.md` — canonical asset class codes, geography rules, known ETF list

---

## Trigger Dispatch

Match the user's message to one of these commands:

| Trigger phrases                                                                   | Command            |
| --------------------------------------------------------------------------------- | ------------------ |
| "portfolio brief", "portfolio summary", "show my portfolio", "how's my portfolio" | → FULL_BRIEF       |
| "portfolio value", "what's my net worth", "total portfolio"                       | → QUICK_VALUE      |
| "portfolio allocation", "show allocation", "am I on target", "allocation drift"   | → ALLOCATION_CHECK |
| "FX exposure", "currency exposure", "currency risk", "show currencies"            | → FX_EXPOSURE      |
| "show holdings", "list positions", "what do I own", "portfolio positions"         | → HOLDINGS_DETAIL  |
| "concentration risk", "overweight positions", "check concentration"               | → CONCENTRATION    |
| "portfolio P&L", "unrealized gains", "how much am I up", "gains and losses"       | → PNL_SUMMARY      |
| "portfolio refresh", "update portfolio", "I uploaded new data"                    | → REFRESH          |
| "am I on target", "rebalancing needed", "should I rebalance"                      | → REBALANCE_CHECK  |
| "add property", "update cash", "add alternative", "update manual entry"           | → ADD_MANUAL       |
| "portfolio help", "what can you do with portfolio"                                | → HELP             |

---

## Normalization Pipeline

Run these steps (in order) for any command that needs live portfolio data.
Skip step 8 (snapshot write) for QUICK_VALUE if data is fresh (< 24h).

### Step 1 — Load Config

Read `data/portfolio/config.json`. Extract:

- `baseCurrency` (default: "USD")
- `accounts[]` — list of accounts with their data files
- `targets.assetClass`, `targets.geography`, `targets.currency` — percentage targets
- `alertThresholds.driftWarningPct` (default: 5)
- `alertThresholds.concentrationWarningPct` (default: 10)
- `fxRefreshAgeHours` (default: 6)

If `config.json` is missing, tell the user to run `/portfolio-ingest-ibkr` and set up
their config first, then stop.

### Step 2 — FX Rates

Read `data/portfolio/fx-rates.json`. Check `fetchedAt` age vs `fxRefreshAgeHours`.

If stale or missing:

- Fetch `https://api.frankfurter.app/latest?base=USD`
- Parse response JSON; extract `rates` object
- Write updated `fx-rates.json` with new `fetchedAt` timestamp
- If fetch fails: use cached rates, append note "⚠️ FX rates stale (Nh old)" to brief

To convert local currency → baseCurrency:

```
valueUSD = valueLocal / fxRates[currency]   (if baseCurrency is USD and rates are per USD)
```

For USD positions: `valueUSD = valueLocal` (rate = 1.0).

### Step 3 — Parse IBKR CSV

Read `data/portfolio/ibkr/positions.csv`.

See `references/ibkr-flex-fields.md` for exact column names and parsing rules.

Key steps:

1. Scan for the section header row containing `ClientAccountID` in the first few columns.
   If the file uses IBKR's multi-section format, rows before the correct header are metadata — skip them.
2. Read all data rows in the Open Positions section.
3. Skip rows where `AssetClass = CASH` (use `manual/cash.json` for cash balances instead).
4. Skip rows where `Expiry` is in the past (expired options) — note the count.
5. Apply asset class mapping (see taxonomy reference).
6. Convert `PositionValue` (in `Currency`) to `baseCurrency` using FX rates.
7. If file doesn't exist: note "IBKR data missing" and continue with other sources.

### Step 4 — Parse Indian MF CSVs

For each file in `data/portfolio/india/`:

1. **Detect format** by inspecting the header row:
   - Contains `Scheme with Folio` → **CAS-style** (MF Central / CAMS / KFintech / Value Research)
     See `references/cas-mf-fields.md` for field mapping and classification rules.
   - Contains `Instrument` and `Qty.` → **Zerodha Console**
     See `references/zerodha-fields.md`.

From Arry8/openclaw-edge, MIT.

More from Arry8/openclaw-edge

Signals

Stars
2
Forks
0
Open issues
10
Last commit (this folder)
Mar 11, 2026 (7 months ago)
Last release
Apr 10, 2026 (6 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Arry8

Cite this page

portfolio-intel skill. Agent Mart. https://agentmart.dev/skills/arry8-portfolio-intel (last updated 2026-10-24)