[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HZHSQ4RN8T2YERP55ZN6KG":3,"skill-same:01M6HZHSQ4RN8T2YERP55ZN6KG":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6HZHSQ4RN8T2YERP55ZN6KG","rwa-portfolio",null,"View portfolio holdings, P&L, allocation, and price history for tokenized stocks on Solana. Triggers: \"show portfolio\", \"my holdings\", \"positions\", \"how much TSLA\", \"price history\", \"P&L\", \"profit\", \"average entry\", \"24h change\", \"balance\", \"what do I own\".","outputlayer\u002Frwa_skills","outputlayer","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43842477?v=4","01M6HZHQWCSVEY38ZT60FDGAHG","Outputlayer","01M6HZHR0X8AVZ1ZQMCEW0GJ31",0,"MIT","https:\u002F\u002Fgithub.com\u002Foutputlayer\u002Frwa_skills\u002Fblob\u002Fmain\u002Fskills\u002Frwa-portfolio\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"rwa portfolio","rwa","portfolio","stocks","for","allocation","profit","my","balance","price","triggers","change","positions","solana","do","show","view","history","how","2026-11-10 10:12:30",false,"---\nname: rwa-portfolio\ndescription: >\n  View portfolio holdings, P&L, allocation, and price history for tokenized stocks on Solana.\n  Triggers: \"show portfolio\", \"my holdings\", \"positions\", \"how much TSLA\",\n  \"price history\", \"P&L\", \"profit\", \"average entry\", \"24h change\", \"balance\", \"what do I own\".\n---\n\n# Portfolio\n\n```bash\nrwa --json gm portfolio                   # Own wallet\nrwa --json gm portfolio \u003CWALLET_ADDR>     # Any public wallet\n```\n\n## JSON shape\n\n```json\n{\n  \"wallet\": \"5CjgV1J2...\",\n  \"cash\": { \"sol\": 0.0870, \"usdc\": 0.00 },\n  \"gm_positions\": {\n    \"positions\": [\n      { \"token\": \"TSLAon\", \"balance\": 0.2500, \"price\": 385.75,\n        \"value_usd\": 96.44, \"gm_alloc_pct\": 100.00, \"change_pct_24h\": 1.23 }\n    ],\n    \"value_usd\": 96.44, \"change_24h_usd\": 1.17, \"change_24h_pct\": 1.23\n  }\n}\n```\n\n`gm_alloc_pct` = allocation within GM positions only (not total portfolio including cash). Every position also carries `sector`\u002F`asset_class`\u002F`region`\u002F`type`\u002F`tags` (Ondo labels, omitted when unknown) — no join against `gm search` needed.\n\n## Slicing (`--view`, since 0.7.14)\n\n```bash\nrwa --json gm portfolio --view sector              # split into per-sector groups\nrwa --json gm portfolio --view Dividend            # filter: only positions tagged Dividend\nrwa --json gm portfolio --view MRNA,CAPR           # filter: only these tickers\nrwa --json gm portfolio --view Healthcare,factor   # filter, then split by factor\n```\n\n- Category names (`sector`, `region`, `class`, `type`, `factor`) SPLIT; tag labels\u002Ftickers FILTER. Same-category labels OR, different categories AND; at most one split category.\n- JSON adds `gm_positions.view` + `gm_positions.groups` (always present with the flag; `group: null` when no split). `positions[]` is narrowed to matches, but `gm_positions.value_usd` and `gm_alloc_pct` stay **full-portfolio** — use `view.matched_value_usd` for the slice total.\n- `--view factor` groups OVERLAP (multi-label) and don't sum to the total — JSON marks `overlapping: true`.\n- No match → exit 0 with `groups: []`; unknown or all-blank term → `invalid_view` (exit 1).\n\n# P&L (entry prices, realized\u002Funrealized)\n\n```bash\nrwa --json gm pnl        # own wallet only (built from the local trade ledger)\nrwa --json gm pnl --all  # compare EVERY wallet that traded via this CLI (one row per ledger, no keys needed)\n```\n\n```json\n{\n  \"wallet\": \"5CjgV1J2...\", \"trades_recorded\": 12,\n  \"tokens\": [\n    { \"token\": \"TSLAon\", \"qty\": \"0.25\", \"avg_cost\": 380.10, \"market_price\": 385.75,\n      \"invested_usdc\": 95.03, \"market_value_usdc\": 96.44,\n      \"unrealized_usdc\": 1.41, \"realized_usdc\": 3.20 }\n  ],\n  \"totals\": { \"invested_usdc\": 95.03, \"market_value_usdc\": 96.44,\n              \"unrealized_usdc\": 1.41, \"realized_usdc\": 3.20, \"total_pnl_usdc\": 4.61 }\n}\n```\n\nSemantics agents must respect:\n\n- Built **only from trades this CLI executed** (every buy\u002Fsell is logged locally per wallet). Deposits and inbound transfers are ignored by design; a CLI-recorded `send` of a GM token DOES shrink the position at avg cost with no realized impact (since 0.7.13 — no phantom holdings after sending tokens away).\n- JSON carries `ledger_path` — the per-wallet ledger file behind the numbers (delete it to reset history).\n- `pnl --all` returns `{wallets:[{wallet, trades_recorded, invested_usdc, unrealized_usdc?, realized_usdc, total_pnl_usdc?, ledger_integrity}]}` sorted by total P&L desc — use it to compare wallet performance.\n- `avg_cost` = average entry price of the open position; `unrealized_usdc` = market value − invested; `realized_usdc` = locked-in P&L from sells; `total_pnl_usdc` = both.\n- A token with an `oversold_qty` field was partly sold beyond CLI-recorded buys (acquired elsewhere) — that part is excluded from P&L, not mispriced.\n- Use `portfolio` for what the wallet holds NOW (on-chain truth); use `pnl` for entry prices and profit.\n- `pnl` JSON carries `ledger_integrity`: `ok` | `legacy` (pre-chain entries) | `broken@line N` (history may be modified — flag to the user; P&L still computes).\n- Balances\u002Fprices are in **raw tokens** (the CLI's canonical frame). Dividend-accruing tokens carry an optional `shares_per_token` (e.g. 1.0077): wallets like Phantom display raw × that multiplier, so the CLI's balance can read slightly lower than the wallet's — same value, different unit. Token price = share price × multiplier (total-return).\n\n# Price history\n\n```bash\nrwa --json gm history TSLA                # Default: 1 month\nrwa --json gm history TSLA -r 1D          # Ranges: 1D, 1W, 1M, 3M, 1Y, ALL\n```\n\nReturns: `symbol`, `range`, `candles` count, `first`\u002F`last` (timestamp + price), `high`, `low`, `change_pct`.\n\n# Efficient patterns\n\n- `portfolio` gives the full picture — no need to call `list` or `hours` first\n- `history -r 1D` (~50 tok) is much cheaper than `ALL` (~200 tok) for recent moves\n- To check one position: read `gm_positions.positions[]` — no separate balance call\n- To decide what to sell: sort by `change_pct_24h`\u002F`value_usd` from `portfolio`, or by `unrealized_usdc` from `pnl`\n- SOL balance is at `cash.sol`, USDC at `cash.usdc`\n","# Portfolio\n\n```bash\nrwa --json gm portfolio                   # Own wallet\nrwa --json gm portfolio \u003CWALLET_ADDR>     # Any public wallet\n```\n\n## JSON shape\n\n```json\n{\n  \"wallet\": \"5CjgV1J2...\",\n  \"cash\": { \"sol\": 0.0870, \"usdc\": 0.00 },\n  \"gm_positions\": {\n    \"positions\": [\n      { \"token\": \"TSLAon\", \"balance\": 0.2500, \"price\": 385.75,\n        \"value_usd\": 96.44, \"gm_alloc_pct\": 100.00, \"change_pct_24h\": 1.23 }\n    ],\n    \"value_usd\": 96.44, \"change_24h_usd\": 1.17, \"change_24h_pct\": 1.23\n  }\n}\n```\n\n`gm_alloc_pct` = allocation within GM positions only (not total portfolio including cash). Every position also carries `sector`\u002F`asset_class`\u002F`region`\u002F`type`\u002F`tags` (Ondo labels, omitted when unknown) — no join against `gm search` needed.\n\n## Slicing (`--view`, since 0.7.14)\n\n```bash\nrwa --json gm portfolio --view sector              # split into per-sector groups\nrwa --json gm portfolio --view Dividend            # filter: only positions tagged Dividend\nrwa --json gm portfolio --view MRNA,CAPR           # filter: only these tickers\nrwa --json gm portfolio --view Healthcare,factor   # filter, then split by factor\n```\n\n- Category names (`sector`, `region`, `class`, `type`, `factor`) SPLIT; tag labels\u002Ftickers FILTER. Same-category labels OR, different categories AND; at most one split category.\n- JSON adds `gm_positions.view` + `gm_positions.groups` (always present with the flag; `group: null` when no split). `positions[]` is narrowed to matches, but `gm_positions.value_usd` and `gm_alloc_pct` stay **full-portfolio** — use `view.matched_value_usd` for the slice total.\n- `--view factor` groups OVERLAP (multi-label) and don't sum to the total — JSON marks `overlapping: true`.\n- No match → exit 0 with `groups: []`; unknown or all-blank term → `invalid_view` (exit 1).\n\n# P&L (entry prices, realized\u002Funrealized)\n\n```bash\nrwa --json gm pnl        # own wallet only (built from the local trade ledger)\nrwa --json gm pnl --all  # compare EVERY wallet that traded via this CLI (one row per ledger, no keys needed)\n```\n\n```json\n{\n  \"wallet\": \"5CjgV1J2...\", \"trades_recorded\": 12,\n  \"tokens\": [\n    { \"token\": \"TSLAon\", \"qty\": \"0.25\", \"avg_cost\": 380.10, \"market_price\": 385.75,\n      \"invested_usdc\": 95.03, \"market_value_usdc\": 96.44,\n      \"unrealized_usdc\": 1.41, \"realized_usdc\": 3.20 }\n  ],\n  \"totals\": { \"invested_usdc\": 95.03, \"market_value_usdc\": 96.44,\n              \"unrealized_usdc\": 1.41, \"realized_usdc\": 3.20, \"total_pnl_usdc\": 4.61 }\n}\n```\n\nSemantics agents must respect:\n\n- Built **only from trades this CLI executed** (every buy\u002Fsell is logged locally per wallet). Deposits and inbound transfers are ignored by design; a CLI-recorded `send` of a GM token DOES shrink the position at avg cost with no realized impact (since 0.7.13 — no phantom holdings after sending tokens away).\n- JSON carries `ledger_path` — the per-wallet ledger file behind the numbers (delete it to reset history).\n- `pnl --all` returns `{wallets:[{wallet, trades_recorded, invested_usdc, unrealized_usdc?, realized_usdc, total_pnl_usdc?, ledger_integrity}]}` sorted by total P&L desc — use it to compare wallet performance.\n- `avg_cost` = average entry price of the open position; `unrealized_usdc` = market value − invested; `realized_usdc` = locked-in P&L from sells; `total_pnl_usdc` = both.\n- A token with an `oversold_qty` field was partly sold beyond CLI-recorded buys (acquired elsewhere) — that part is excluded from P&L, not mispriced.\n- Use `portfolio` for what the wallet holds NOW (on-chain truth); use `pnl` for entry prices and profit.\n- `pnl` JSON carries `ledger_integrity`: `ok` | `legacy` (pre-chain entries) | `broken@line N` (history may be modified — flag to the user; P&L still computes).\n- Balances\u002Fprices are in **raw tokens** (the CLI's canonical frame). Dividend-accruing tokens carry an optional `shares_per_token` (e.g. 1.0077): wallets like Phantom display raw × that multiplier, so the CLI's balance can read slightly lower than the wallet's — same value, different unit. Token price = share price × multiplier (total-return).\n\n# Price history\n\n```bash\nrwa --json gm history TSLA                # Default: 1 month\nrwa --json gm history TSLA -r 1D          # Ranges: 1D, 1W, 1M, 3M, 1Y, ALL\n```\n\nReturns: `symbol`, `range`, `candles` count, `first`\u002F`last` (timestamp + price), `high`, `low`, `change_pct`.\n\n# Efficient patterns\n\n- `portfolio` gives the full picture — no need to call `list` or `hours` first\n- `history -r 1D` (~50 tok) is much cheaper than `ALL` (~200 tok) for recent moves\n- To check one position: read `gm_positions.positions[]` — no separate balance call\n- To decide what to sell: sort by `change_pct_24h`\u002F`value_usd` from `portfolio`, or by `unrealized_usdc` from `pnl`\n- SOL balance is at `cash.sol`, USDC at `cash.usdc`\n",{"name":5,"description":7},"main","2a9273a156cc37a3a22355053a8e6b1b91b8df5e","skills\u002Frwa-portfolio","https:\u002F\u002Fgithub.com\u002Foutputlayer\u002Frwa_skills","https:\u002F\u002Fgithub.com\u002Foutputlayer","2026-10-08 09:24:42",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add outputlayer\u002Frwa_skills --skill rwa-portfolio",{"tool":55,"command":56},"bunx","bunx skills add outputlayer\u002Frwa_skills --skill rwa-portfolio",{"tool":58,"command":59},"pnpm","pnpm dlx skills add outputlayer\u002Frwa_skills --skill rwa-portfolio","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foutputlayer\u002Frwa_skills\u002Fblob\u002Fmain\u002Fskills\u002Frwa-portfolio\u002FSKILL.md",true,[],[64,86],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":38},"01M6HZJ08KZQX10GZGDT4G50SN","rwa-wallet","Set up Solana wallets and transfer funds for trading tokenized stocks via the rwa CLI. Use for wallet creation, import, export\u002Fbackup, encryption, sending\u002Fwithdrawing funds, or reclaiming rent. Triggers: \"create wallet\", \"generate keys\", \"import seed phrase\", \"export key\", \"backup wallet\", \"show address\", \"send SOL\", \"send USDC\", \"withdraw\", \"transfer\", \"reclaim rent\", \"encrypt wallet\", \"passphrase\".","https:\u002F\u002Fgithub.com\u002Foutputlayer\u002Frwa_skills\u002Fblob\u002Fmain\u002Fskills\u002Frwa-wallet\u002FSKILL.md",[],[71,20,72,73,74,75,76,77,78,79,34,32,80,81,29,82,83,23,84,85],"rwa wallet","Wallet","encryption","cli","SET","backup","passphrase","use","up","usdc","creation","import","via","encrypt","create",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":38},"01M6HZHWZDS6Z9RGF4MHJJP7BN","rwa-trade","Buy and sell tokenized stocks & ETFs on Solana via the rwa CLI. Use when the user wants to trade, buy, sell, preview a quote, check market hours, or list tokens. Triggers: \"buy TSLA\", \"sell stocks\", \"trade RWA\", \"quote NVDA\", \"market hours\", \"list tokens\", \"what can I buy on Solana\".","https:\u002F\u002Fgithub.com\u002Foutputlayer\u002Frwa_skills\u002Fblob\u002Fmain\u002Fskills\u002Frwa-trade\u002FSKILL.md",[],[93,20,94,95,96,97,98,78,99,32,100,101,102,22,103,29,83,104,74],"rwa trade","trade","buy","check","list","user","Market","preview","quote","sell","tokens","can"]