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.
About
Reviews
Write a reviewNo 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
- 0.445score
task-pua
Arry8
Task persistence enhancer with 13 corporate flavors.
SkillDFreshness: D★ 2Claude Code +9 - 0.445score
claude-memory-optimizer
Arry8
Structured memory system with 4-type classification, frontmatter metadata, automated migration, and PUA-style maintenance checklist.
SkillDFreshness: D★ 2Claude Code +9 - 0.445score
hermes-learning-loop
Arry8
Self-improving learning loop inspired by Hermes Agent.
SkillDFreshness: D★ 2Claude Code +9 - 0.444score
kernel-cp-activator
Arry8
Deploy KERNEL_INTUITION_Cp on any AI architecture with calibrated thresholds.
SkillDFreshness: D★ 2Claude Code +9 - 0.442score
feishu-bot-refresh
Arry8
Refresh Feishu bot identity information.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
security-triage
Arry8
Triage GitHub security advisories for OpenClaw with high-confidence close/keep decisions, exact tag and commit verification, trust-model checks, optional…
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
vpn-deployment
Arry8
End-to-end WireGuard VPN deployment guide — VPS server setup, router client configuration, and traffic routing via apfree-wifidog tools.
SkillDFreshness: D★ 2Claude Code +9 - 0.436score
apfree-wifidog
Arry8
Guide tool usage for managing ApFree WiFiDog routers, gateways, and captive portal devices.
SkillDFreshness: D★ 2Claude Code +9 - 0.417score
acp-router
Arry8
Route plain-language requests for Pi, Claude Code, Codex, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Qwen, Kiro, Kimi, iFlow, Factory Droid…
SkillDFreshness: D★ 2Claude Code +9
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
- Repository
- github.com/Arry8/openclaw-edge
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Arry8
- 0.445score
task-pua
Arry8
Task persistence enhancer with 13 corporate flavors.
SkillDFreshness: D★ 2Claude Code +9 - 0.445score
claude-memory-optimizer
Arry8
Structured memory system with 4-type classification, frontmatter metadata, automated migration, and PUA-style maintenance checklist.
SkillDFreshness: D★ 2Claude Code +9 - 0.445score
hermes-learning-loop
Arry8
Self-improving learning loop inspired by Hermes Agent.
SkillDFreshness: D★ 2Claude Code +9 - 0.444score
kernel-cp-activator
Arry8
Deploy KERNEL_INTUITION_Cp on any AI architecture with calibrated thresholds.
SkillDFreshness: D★ 2Claude Code +9 - 0.442score
feishu-bot-refresh
Arry8
Refresh Feishu bot identity information.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
security-triage
Arry8
Triage GitHub security advisories for OpenClaw with high-confidence close/keep decisions, exact tag and commit verification, trust-model checks, optional…
SkillDFreshness: D★ 2Claude Code +9
Cite this page
portfolio-intel skill. Agent Mart. https://agentmart.dev/skills/arry8-portfolio-intel (last updated 2026-10-24)