{
  "schemaVersion": "1.0",
  "item": {
    "slug": "portfolio-tracking-skill",
    "name": "portfolio tracking",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/aigeneralstore/portfolio-tracking-skill",
    "canonicalUrl": "https://clawhub.ai/aigeneralstore/portfolio-tracking-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/portfolio-tracking-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=portfolio-tracking-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "commands/setup.md",
      "commands/portfolio.md",
      "commands/prices.md",
      "commands/advise.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/portfolio-tracking-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/portfolio-tracking-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Portfolio Tracker Skill",
        "body": "An investment portfolio tracker that runs entirely locally. All data stays in ~/.portfolio-tracker/."
      },
      {
        "title": "Architecture",
        "body": "Data: ~/.portfolio-tracker/data.json (portfolios, assets, prices)\nConfig: ~/.portfolio-tracker/config.json (API keys, wallet addresses, user profile)\nScripts: TypeScript CLI tools in <skill-path>/scripts/, run via npx tsx"
      },
      {
        "title": "First-Time Setup",
        "body": "Before running any script, ensure dependencies are installed:\n\nnpm install --prefix <skill-path>/scripts\n\nReplace <skill-path> with the actual installed path of this skill."
      },
      {
        "title": "How Scripts Work",
        "body": "Each script is a standalone CLI tool. Run them with:\n\nnpx tsx <skill-path>/scripts/<script>.ts <command> [args]\n\nScripts read from stdin when needed and output JSON to stdout."
      },
      {
        "title": "data-store.ts",
        "body": "load — Read portfolio data (creates default if missing)\nsave — Write portfolio data (JSON from stdin)\nload-config — Read config\nsave-config — Write config (JSON from stdin)"
      },
      {
        "title": "fetch-prices.ts",
        "body": "crypto <symbol> — Get crypto price (Binance → CoinGecko)\nstock <symbol> — Get stock price (Yahoo Finance)\nfx — Get USD/CNY/HKD exchange rates\nhistorical <symbol> — Get 3yr monthly historical data\nsearch <query> — Search for assets by name/symbol\nrefresh — Batch refresh prices (assets JSON from stdin)"
      },
      {
        "title": "binance-sync.ts",
        "body": "sync <apiKey> <apiSecret> — Fetch all Binance balances (6 account types)\nvalidate <apiKey> <apiSecret> — Validate API credentials"
      },
      {
        "title": "ibkr-sync.ts",
        "body": "sync <token> <queryId> — Fetch IBKR positions via Flex Query\nvalidate <token> <queryId> — Validate IBKR credentials"
      },
      {
        "title": "blockchain-sync.ts",
        "body": "sync <address> [chain] — Fetch wallet balances (single chain or all 5 EVM chains)\nvalidate <address> — Validate EVM address"
      },
      {
        "title": "Asset",
        "body": "{\n  \"id\": \"unique-id\",\n  \"type\": \"CRYPTO | USSTOCK | HKSTOCK | ASHARE | CASH\",\n  \"symbol\": \"BTC\",\n  \"name\": \"Bitcoin\",\n  \"quantity\": 1.5,\n  \"avgPrice\": 40000,\n  \"currentPrice\": 50000,\n  \"currency\": \"USD | CNY | HKD\",\n  \"transactions\": [],\n  \"source\": { \"type\": \"manual | binance | wallet | ibkr\" }\n}"
      },
      {
        "title": "Portfolio",
        "body": "{\n  \"id\": \"unique-id\",\n  \"name\": \"Main\",\n  \"assets\": [...]\n}"
      },
      {
        "title": "Viewing Portfolio",
        "body": "Load data via data-store.ts load\nFind current portfolio by currentPortfolioId\nCalculate total value using quantity * currentPrice per asset\nConvert to display currency using exchangeRates\nPresent as a formatted table"
      },
      {
        "title": "Adding Assets",
        "body": "Load data\nSearch for the asset using fetch-prices.ts search <query>\nGet current price via fetch-prices.ts crypto/stock <symbol>\nAdd asset to current portfolio with a generated unique ID\nSave data"
      },
      {
        "title": "Refreshing Prices",
        "body": "Load data\nPipe current portfolio assets to fetch-prices.ts refresh via stdin\nAlso run fetch-prices.ts fx for exchange rates\nUpdate each asset's currentPrice and the exchangeRates\nSet lastPriceRefresh to current ISO timestamp\nSave data"
      },
      {
        "title": "Syncing from Exchange/Wallet",
        "body": "Load config to get credentials\nRun the appropriate sync script\nMerge results: update existing assets (match by symbol+source), add new ones\nSave data"
      },
      {
        "title": "Commands",
        "body": "Available user commands:\n\n/portfolio — View and manage portfolios\n/prices — Refresh all prices\n/setup — Configure API keys and wallets\n/sync-binance — Sync from Binance\n/sync-ibkr — Sync from Interactive Brokers\n/sync-wallet — Sync from blockchain wallet\n/advise — Get AI investment advice"
      }
    ],
    "body": "Portfolio Tracker Skill\n\nAn investment portfolio tracker that runs entirely locally. All data stays in ~/.portfolio-tracker/.\n\nArchitecture\nData: ~/.portfolio-tracker/data.json (portfolios, assets, prices)\nConfig: ~/.portfolio-tracker/config.json (API keys, wallet addresses, user profile)\nScripts: TypeScript CLI tools in <skill-path>/scripts/, run via npx tsx\nFirst-Time Setup\n\nBefore running any script, ensure dependencies are installed:\n\nnpm install --prefix <skill-path>/scripts\n\n\nReplace <skill-path> with the actual installed path of this skill.\n\nHow Scripts Work\n\nEach script is a standalone CLI tool. Run them with:\n\nnpx tsx <skill-path>/scripts/<script>.ts <command> [args]\n\n\nScripts read from stdin when needed and output JSON to stdout.\n\ndata-store.ts\nload — Read portfolio data (creates default if missing)\nsave — Write portfolio data (JSON from stdin)\nload-config — Read config\nsave-config — Write config (JSON from stdin)\nfetch-prices.ts\ncrypto <symbol> — Get crypto price (Binance → CoinGecko)\nstock <symbol> — Get stock price (Yahoo Finance)\nfx — Get USD/CNY/HKD exchange rates\nhistorical <symbol> — Get 3yr monthly historical data\nsearch <query> — Search for assets by name/symbol\nrefresh — Batch refresh prices (assets JSON from stdin)\nbinance-sync.ts\nsync <apiKey> <apiSecret> — Fetch all Binance balances (6 account types)\nvalidate <apiKey> <apiSecret> — Validate API credentials\nibkr-sync.ts\nsync <token> <queryId> — Fetch IBKR positions via Flex Query\nvalidate <token> <queryId> — Validate IBKR credentials\nblockchain-sync.ts\nsync <address> [chain] — Fetch wallet balances (single chain or all 5 EVM chains)\nvalidate <address> — Validate EVM address\nData Types\nAsset\n{\n  \"id\": \"unique-id\",\n  \"type\": \"CRYPTO | USSTOCK | HKSTOCK | ASHARE | CASH\",\n  \"symbol\": \"BTC\",\n  \"name\": \"Bitcoin\",\n  \"quantity\": 1.5,\n  \"avgPrice\": 40000,\n  \"currentPrice\": 50000,\n  \"currency\": \"USD | CNY | HKD\",\n  \"transactions\": [],\n  \"source\": { \"type\": \"manual | binance | wallet | ibkr\" }\n}\n\nPortfolio\n{\n  \"id\": \"unique-id\",\n  \"name\": \"Main\",\n  \"assets\": [...]\n}\n\nWorkflow Patterns\nViewing Portfolio\nLoad data via data-store.ts load\nFind current portfolio by currentPortfolioId\nCalculate total value using quantity * currentPrice per asset\nConvert to display currency using exchangeRates\nPresent as a formatted table\nAdding Assets\nLoad data\nSearch for the asset using fetch-prices.ts search <query>\nGet current price via fetch-prices.ts crypto/stock <symbol>\nAdd asset to current portfolio with a generated unique ID\nSave data\nRefreshing Prices\nLoad data\nPipe current portfolio assets to fetch-prices.ts refresh via stdin\nAlso run fetch-prices.ts fx for exchange rates\nUpdate each asset's currentPrice and the exchangeRates\nSet lastPriceRefresh to current ISO timestamp\nSave data\nSyncing from Exchange/Wallet\nLoad config to get credentials\nRun the appropriate sync script\nMerge results: update existing assets (match by symbol+source), add new ones\nSave data\nCommands\n\nAvailable user commands:\n\n/portfolio — View and manage portfolios\n/prices — Refresh all prices\n/setup — Configure API keys and wallets\n/sync-binance — Sync from Binance\n/sync-ibkr — Sync from Interactive Brokers\n/sync-wallet — Sync from blockchain wallet\n/advise — Get AI investment advice"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/aigeneralstore/portfolio-tracking-skill",
    "publisherUrl": "https://clawhub.ai/aigeneralstore/portfolio-tracking-skill",
    "owner": "aigeneralstore",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/portfolio-tracking-skill",
    "agentUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/portfolio-tracking-skill/agent.md"
  }
}