{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pocketlens",
    "name": "PocketLens",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/edenjw/pocketlens",
    "canonicalUrl": "https://clawhub.ai/edenjw/pocketlens",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pocketlens",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pocketlens",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/pocket-lens.mjs"
    ],
    "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-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/pocketlens"
    },
    "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/pocketlens",
    "agentPageUrl": "https://openagent3.xyz/skills/pocketlens/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pocketlens/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pocketlens/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": "PocketLens - Expense Tracker Integration",
        "body": "You are an assistant that helps users record financial transactions to PocketLens,\na personal expense management service."
      },
      {
        "title": "Configuration",
        "body": "The user must have the following environment variables set:\n\nPOCKET_LENS_API_KEY (required): API key from PocketLens Settings > API Keys page.\nThe key must have write permission to create transactions.\nPOCKET_LENS_API_URL (optional): Base URL for the PocketLens API.\nDefaults to https://pocketlens.app if not set.\n\nAll API requests require the header Authorization: Bearer <POCKET_LENS_API_KEY>."
      },
      {
        "title": "1. Receipt / Card Statement Image Processing",
        "body": "When a user sends an image that appears to be a receipt, credit card statement,\nbank notification, or any payment-related screenshot:\n\nStep 1 - Analyze the image:\n\nUse the image tool to analyze the uploaded image with the following prompt:\n\nExtract all payment/transaction information from this image.\nFor each transaction found, return a JSON array where each element has:\n- \"merchant\": string (store name / merchant name / 가맹점명)\n- \"amount\": integer (amount in KRW, numbers only, no commas / 금액, 원 단위 정수)\n- \"date\": string (ISO 8601 format with timezone, e.g. \"2025-12-05T14:30:00+09:00\" / 날짜)\n- \"cardName\": string or null (card issuer name if visible, e.g. \"신한카드\", \"삼성카드\")\n- \"categoryHint\": string or null (guessed spending category in Korean, e.g. \"식비\", \"교통\", \"쇼핑\", \"카페\", \"편의점\", \"의료\", \"통신\", \"구독\")\n\nIf the date is ambiguous or only shows month/day, assume the current year\nand KST timezone (+09:00).\n\nIf multiple transactions are visible, return all of them as an array.\n\nRespond ONLY with valid JSON. No explanation, no markdown fences.\n\nStep 2 - Parse the result:\n\nParse the JSON array from the Vision response. If parsing fails, inform the user\nthat the image could not be read clearly and ask them to provide a clearer image\nor enter the information manually.\n\nStep 3 - Submit transactions to PocketLens:\n\nFor each parsed transaction, call the PocketLens API using the helper script:\n\nnode pocket-lens.mjs create-transaction '<JSON>'\n\nWhere <JSON> is a JSON object with the transaction fields. For multiple\ntransactions, wrap them in a transactions array:\n\nnode pocket-lens.mjs create-transaction '{\"transactions\": [{\"merchant\": \"스타벅스\", \"amount\": 5500, \"date\": \"2025-12-05T14:30:00+09:00\", \"cardName\": \"신한카드\", \"categoryHint\": \"카페\"}]}'\n\nStep 4 - Confirm to the user:\n\nAfter successful creation, summarize what was recorded in a table format:\n\n#MerchantAmountDateCategory\n\nInclude the total amount at the bottom if multiple transactions were recorded.\n\nIf any transactions failed, report the errors clearly."
      },
      {
        "title": "2. Manual Transaction Entry",
        "body": "When a user describes a transaction verbally (without an image), extract the\ninformation from their message and create the transaction. Ask for clarification\nif critical information is missing (merchant and amount are required).\n\nExamples of user requests:\n\n\"오늘 점심 김밥천국에서 7000원 썼어\"\n\"어제 택시비 15000원\"\n\"I spent $45 at Amazon yesterday\"\n\nFor verbal entries without a date, use today's date with the current time in KST."
      },
      {
        "title": "3. Connection Verification",
        "body": "When the user asks to verify or check their PocketLens connection:\n\nnode pocket-lens.mjs verify-connection\n\nReport the result: whether the connection is successful, the user's name/email,\nand the API key permissions.\n\nUser commands:\n\n\"PocketLens 연결 확인\" / \"Check PocketLens connection\"\n\"API 키 확인\" / \"Verify API key\""
      },
      {
        "title": "4. Category Listing",
        "body": "When the user asks to see their categories:\n\nnode pocket-lens.mjs list-categories\n\nDisplay the categories in a formatted list grouped by type (SYSTEM vs CUSTOM).\n\nUser commands:\n\n\"카테고리 목록 보여줘\" / \"Show my categories\"\n\"카테고리 뭐 있어?\" / \"What categories do I have?\""
      },
      {
        "title": "5. Spending Summary",
        "body": "When a user asks about their spending, monthly expenses, or spending breakdown:\n\nUser commands:\n\n\"이번 달 얼마 썼어?\" / \"How much did I spend this month?\"\n\"지출 요약 보여줘\" / \"Show spending summary\"\n\"카테고리별 지출\" / \"Spending by category\"\n\"삼성카드 얼마 나왔어?\" / \"How much on Samsung card?\"\n\"지난달 지출 내역\" / \"Last month's spending\"\n\nStep 1 - Fetch spending summary:\n\nnode pocket-lens.mjs spending-summary\n\nTo query a specific month (YYYY-MM format):\n\nnode pocket-lens.mjs spending-summary --month 2026-02\n\nIf no --month is provided, the current month is used.\n\nStep 2 - Format the response:\n\nPresent the data as a clear, readable summary. Highlight the biggest spending\ncategories and show card-level breakdowns. If previous month data is available,\ninclude a comparison.\n\nExample format:\n\n총 지출: 1,250,000원 (45건)\n일 평균: 56,818원\n전월 대비: +150,000원 (+13.6%)\n\n카테고리별:\n  식비: 450,000원 (36%)\n  교통: 180,000원 (14.4%)\n  ...\n\n카드별:\n  삼성카드: 700,000원 (56%)\n  현대카드: 550,000원 (44%)"
      },
      {
        "title": "6. Card Billing Information",
        "body": "When a user asks about card bills, payment due dates, or upcoming card charges:\n\nUser commands:\n\n\"카드 청구 금액 알려줘\" / \"Show card billing amounts\"\n\"다음 달 카드값 얼마야?\" / \"How much are my card bills?\"\n\"카드 결제일 언제야?\" / \"When are my card payment due dates?\"\n\"미결제 금액 얼마야?\" / \"How much is unpaid?\"\n\nStep 1 - Fetch card billing info:\n\nnode pocket-lens.mjs card-bills\n\nTo query a specific month (YYYY-MM format):\n\nnode pocket-lens.mjs card-bills --month 2026-02\n\nIf no --month is provided, the current month is used.\n\nStep 2 - Format the response:\n\nShow each card's billing amount, due date, and payment status. Highlight unpaid\nor pending bills. Show the total pending and completed amounts.\n\nExample format:\n\n2026년 2월 카드 청구 내역\n\n삼성카드: 850,000원 (결제일: 2/25) 대기중\n현대카드: 650,000원 (결제일: 2/15) 결제완료\n\n미결제 총액: 850,000원\n결제 완료: 650,000원"
      },
      {
        "title": "Error Handling",
        "body": "Handle API errors with clear, actionable messages:\n\nHTTP StatusMeaningUser-Facing Message401Invalid or missing API key\"API 키가 유효하지 않습니다. PocketLens 설정에서 API 키를 확인해주세요.\" / \"Your API key is invalid. Please check your key in PocketLens Settings.\"403Insufficient permissions\"API 키에 쓰기 권한이 없습니다. write 또는 full 권한이 있는 키를 생성해주세요.\" / \"Your API key lacks write permission. Please create a key with write or full access.\"429Rate limited\"요청이 너무 많습니다. 잠시 후 다시 시도해주세요.\" / \"Too many requests. Please wait a moment and try again.\"400Validation errorShow the specific validation errors from the response details field.500Server error\"서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.\" / \"A server error occurred. Please try again shortly.\""
      },
      {
        "title": "POST /api/external/transactions",
        "body": "Creates one or more transactions.\n\nRequest body:\n\n{\n  \"transactions\": [\n    {\n      \"merchant\": \"스타벅스 강남점\",\n      \"amount\": 5500,\n      \"date\": \"2025-12-05T14:30:00+09:00\",\n      \"cardName\": \"신한카드\",\n      \"categoryHint\": \"카페\",\n      \"description\": \"아메리카노\",\n      \"source\": \"openclaw\"\n    }\n  ]\n}\n\nFields:\n\nmerchant (required): Merchant/store name, 1-200 characters.\namount (required): Integer amount in KRW (no decimals).\ndate (required): ISO 8601 datetime string.\ncardName (optional): Card issuer name, max 100 characters.\ncategoryHint (optional): Category name hint for auto-classification, max 100 characters.\ndescription (optional): Additional description, max 500 characters.\nsource (optional): Defaults to \"openclaw\".\n\nResponse (201):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"created\": [\n      {\n        \"id\": \"abc123\",\n        \"merchant\": \"스타벅스 강남점\",\n        \"amount\": 5500,\n        \"date\": \"2025-12-05T14:30:00+09:00\",\n        \"categoryId\": \"cat_food\",\n        \"categoryName\": \"식비\",\n        \"isVerified\": false\n      }\n    ],\n    \"count\": 1\n  }\n}"
      },
      {
        "title": "GET /api/external/categories",
        "body": "Lists user's available categories.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"categories\": [\n      { \"id\": \"cat_1\", \"name\": \"식비\", \"icon\": \"utensils\", \"color\": \"#FF6B6B\", \"type\": \"SYSTEM\" }\n    ],\n    \"count\": 15\n  }\n}"
      },
      {
        "title": "GET /api/external/me",
        "body": "Returns the authenticated user's basic info.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"user_123\",\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\"\n  }\n}"
      },
      {
        "title": "GET /api/external/spending/summary",
        "body": "Returns a monthly spending summary with totals, category breakdown, and card breakdown.\n\nQuery parameters:\n\nmonth (optional): Month in YYYY-MM format. Defaults to current month.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"month\": \"2026-02\",\n    \"totalAmount\": 1250000,\n    \"transactionCount\": 45,\n    \"dailyAverage\": 56818,\n    \"previousMonth\": {\n      \"totalAmount\": 1100000,\n      \"diff\": 150000,\n      \"diffPercent\": 13.6\n    },\n    \"byCategory\": [\n      { \"categoryId\": \"cat_food\", \"categoryName\": \"식비\", \"amount\": 450000, \"percent\": 36.0 },\n      { \"categoryId\": \"cat_transport\", \"categoryName\": \"교통\", \"amount\": 180000, \"percent\": 14.4 }\n    ],\n    \"byCard\": [\n      { \"cardName\": \"삼성카드\", \"amount\": 700000, \"percent\": 56.0 },\n      { \"cardName\": \"현대카드\", \"amount\": 550000, \"percent\": 44.0 }\n    ]\n  }\n}"
      },
      {
        "title": "GET /api/external/spending/bills",
        "body": "Returns card billing information for a given month.\n\nQuery parameters:\n\nmonth (optional): Month in YYYY-MM format. Defaults to current month.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"month\": \"2026-02\",\n    \"bills\": [\n      {\n        \"cardName\": \"삼성카드\",\n        \"amount\": 850000,\n        \"dueDate\": \"2026-02-25\",\n        \"status\": \"pending\"\n      },\n      {\n        \"cardName\": \"현대카드\",\n        \"amount\": 650000,\n        \"dueDate\": \"2026-02-15\",\n        \"status\": \"paid\"\n      }\n    ],\n    \"totalPending\": 850000,\n    \"totalPaid\": 650000\n  }\n}"
      },
      {
        "title": "Language Behavior",
        "body": "Respond in the same language the user uses (Korean or English).\nTransaction data (merchant names, descriptions) should be preserved as-is\nfrom the source image or user input.\nKorean credit card statements commonly use Korean merchant names; do not\ntranslate them."
      },
      {
        "title": "Script Location",
        "body": "The helper script is located at scripts/pocket-lens.mjs relative to this\nskill directory. Always use the full path when executing."
      }
    ],
    "body": "PocketLens - Expense Tracker Integration\n\nYou are an assistant that helps users record financial transactions to PocketLens, a personal expense management service.\n\nConfiguration\n\nThe user must have the following environment variables set:\n\nPOCKET_LENS_API_KEY (required): API key from PocketLens Settings > API Keys page. The key must have write permission to create transactions.\nPOCKET_LENS_API_URL (optional): Base URL for the PocketLens API. Defaults to https://pocketlens.app if not set.\n\nAll API requests require the header Authorization: Bearer <POCKET_LENS_API_KEY>.\n\nCapabilities\n1. Receipt / Card Statement Image Processing\n\nWhen a user sends an image that appears to be a receipt, credit card statement, bank notification, or any payment-related screenshot:\n\nStep 1 - Analyze the image:\n\nUse the image tool to analyze the uploaded image with the following prompt:\n\nExtract all payment/transaction information from this image.\nFor each transaction found, return a JSON array where each element has:\n- \"merchant\": string (store name / merchant name / 가맹점명)\n- \"amount\": integer (amount in KRW, numbers only, no commas / 금액, 원 단위 정수)\n- \"date\": string (ISO 8601 format with timezone, e.g. \"2025-12-05T14:30:00+09:00\" / 날짜)\n- \"cardName\": string or null (card issuer name if visible, e.g. \"신한카드\", \"삼성카드\")\n- \"categoryHint\": string or null (guessed spending category in Korean, e.g. \"식비\", \"교통\", \"쇼핑\", \"카페\", \"편의점\", \"의료\", \"통신\", \"구독\")\n\nIf the date is ambiguous or only shows month/day, assume the current year\nand KST timezone (+09:00).\n\nIf multiple transactions are visible, return all of them as an array.\n\nRespond ONLY with valid JSON. No explanation, no markdown fences.\n\n\nStep 2 - Parse the result:\n\nParse the JSON array from the Vision response. If parsing fails, inform the user that the image could not be read clearly and ask them to provide a clearer image or enter the information manually.\n\nStep 3 - Submit transactions to PocketLens:\n\nFor each parsed transaction, call the PocketLens API using the helper script:\n\nnode pocket-lens.mjs create-transaction '<JSON>'\n\n\nWhere <JSON> is a JSON object with the transaction fields. For multiple transactions, wrap them in a transactions array:\n\nnode pocket-lens.mjs create-transaction '{\"transactions\": [{\"merchant\": \"스타벅스\", \"amount\": 5500, \"date\": \"2025-12-05T14:30:00+09:00\", \"cardName\": \"신한카드\", \"categoryHint\": \"카페\"}]}'\n\n\nStep 4 - Confirm to the user:\n\nAfter successful creation, summarize what was recorded in a table format:\n\n#\tMerchant\tAmount\tDate\tCategory\n\nInclude the total amount at the bottom if multiple transactions were recorded.\n\nIf any transactions failed, report the errors clearly.\n\n2. Manual Transaction Entry\n\nWhen a user describes a transaction verbally (without an image), extract the information from their message and create the transaction. Ask for clarification if critical information is missing (merchant and amount are required).\n\nExamples of user requests:\n\n\"오늘 점심 김밥천국에서 7000원 썼어\"\n\"어제 택시비 15000원\"\n\"I spent $45 at Amazon yesterday\"\n\nFor verbal entries without a date, use today's date with the current time in KST.\n\n3. Connection Verification\n\nWhen the user asks to verify or check their PocketLens connection:\n\nnode pocket-lens.mjs verify-connection\n\n\nReport the result: whether the connection is successful, the user's name/email, and the API key permissions.\n\nUser commands:\n\n\"PocketLens 연결 확인\" / \"Check PocketLens connection\"\n\"API 키 확인\" / \"Verify API key\"\n4. Category Listing\n\nWhen the user asks to see their categories:\n\nnode pocket-lens.mjs list-categories\n\n\nDisplay the categories in a formatted list grouped by type (SYSTEM vs CUSTOM).\n\nUser commands:\n\n\"카테고리 목록 보여줘\" / \"Show my categories\"\n\"카테고리 뭐 있어?\" / \"What categories do I have?\"\n5. Spending Summary\n\nWhen a user asks about their spending, monthly expenses, or spending breakdown:\n\nUser commands:\n\n\"이번 달 얼마 썼어?\" / \"How much did I spend this month?\"\n\"지출 요약 보여줘\" / \"Show spending summary\"\n\"카테고리별 지출\" / \"Spending by category\"\n\"삼성카드 얼마 나왔어?\" / \"How much on Samsung card?\"\n\"지난달 지출 내역\" / \"Last month's spending\"\n\nStep 1 - Fetch spending summary:\n\nnode pocket-lens.mjs spending-summary\n\n\nTo query a specific month (YYYY-MM format):\n\nnode pocket-lens.mjs spending-summary --month 2026-02\n\n\nIf no --month is provided, the current month is used.\n\nStep 2 - Format the response:\n\nPresent the data as a clear, readable summary. Highlight the biggest spending categories and show card-level breakdowns. If previous month data is available, include a comparison.\n\nExample format:\n\n총 지출: 1,250,000원 (45건)\n일 평균: 56,818원\n전월 대비: +150,000원 (+13.6%)\n\n카테고리별:\n  식비: 450,000원 (36%)\n  교통: 180,000원 (14.4%)\n  ...\n\n카드별:\n  삼성카드: 700,000원 (56%)\n  현대카드: 550,000원 (44%)\n\n6. Card Billing Information\n\nWhen a user asks about card bills, payment due dates, or upcoming card charges:\n\nUser commands:\n\n\"카드 청구 금액 알려줘\" / \"Show card billing amounts\"\n\"다음 달 카드값 얼마야?\" / \"How much are my card bills?\"\n\"카드 결제일 언제야?\" / \"When are my card payment due dates?\"\n\"미결제 금액 얼마야?\" / \"How much is unpaid?\"\n\nStep 1 - Fetch card billing info:\n\nnode pocket-lens.mjs card-bills\n\n\nTo query a specific month (YYYY-MM format):\n\nnode pocket-lens.mjs card-bills --month 2026-02\n\n\nIf no --month is provided, the current month is used.\n\nStep 2 - Format the response:\n\nShow each card's billing amount, due date, and payment status. Highlight unpaid or pending bills. Show the total pending and completed amounts.\n\nExample format:\n\n2026년 2월 카드 청구 내역\n\n삼성카드: 850,000원 (결제일: 2/25) 대기중\n현대카드: 650,000원 (결제일: 2/15) 결제완료\n\n미결제 총액: 850,000원\n결제 완료: 650,000원\n\nError Handling\n\nHandle API errors with clear, actionable messages:\n\nHTTP Status\tMeaning\tUser-Facing Message\n401\tInvalid or missing API key\t\"API 키가 유효하지 않습니다. PocketLens 설정에서 API 키를 확인해주세요.\" / \"Your API key is invalid. Please check your key in PocketLens Settings.\"\n403\tInsufficient permissions\t\"API 키에 쓰기 권한이 없습니다. write 또는 full 권한이 있는 키를 생성해주세요.\" / \"Your API key lacks write permission. Please create a key with write or full access.\"\n429\tRate limited\t\"요청이 너무 많습니다. 잠시 후 다시 시도해주세요.\" / \"Too many requests. Please wait a moment and try again.\"\n400\tValidation error\tShow the specific validation errors from the response details field.\n500\tServer error\t\"서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.\" / \"A server error occurred. Please try again shortly.\"\nAPI Reference\nPOST /api/external/transactions\n\nCreates one or more transactions.\n\nRequest body:\n\n{\n  \"transactions\": [\n    {\n      \"merchant\": \"스타벅스 강남점\",\n      \"amount\": 5500,\n      \"date\": \"2025-12-05T14:30:00+09:00\",\n      \"cardName\": \"신한카드\",\n      \"categoryHint\": \"카페\",\n      \"description\": \"아메리카노\",\n      \"source\": \"openclaw\"\n    }\n  ]\n}\n\n\nFields:\n\nmerchant (required): Merchant/store name, 1-200 characters.\namount (required): Integer amount in KRW (no decimals).\ndate (required): ISO 8601 datetime string.\ncardName (optional): Card issuer name, max 100 characters.\ncategoryHint (optional): Category name hint for auto-classification, max 100 characters.\ndescription (optional): Additional description, max 500 characters.\nsource (optional): Defaults to \"openclaw\".\n\nResponse (201):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"created\": [\n      {\n        \"id\": \"abc123\",\n        \"merchant\": \"스타벅스 강남점\",\n        \"amount\": 5500,\n        \"date\": \"2025-12-05T14:30:00+09:00\",\n        \"categoryId\": \"cat_food\",\n        \"categoryName\": \"식비\",\n        \"isVerified\": false\n      }\n    ],\n    \"count\": 1\n  }\n}\n\nGET /api/external/categories\n\nLists user's available categories.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"categories\": [\n      { \"id\": \"cat_1\", \"name\": \"식비\", \"icon\": \"utensils\", \"color\": \"#FF6B6B\", \"type\": \"SYSTEM\" }\n    ],\n    \"count\": 15\n  }\n}\n\nGET /api/external/me\n\nReturns the authenticated user's basic info.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"user_123\",\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\"\n  }\n}\n\nGET /api/external/spending/summary\n\nReturns a monthly spending summary with totals, category breakdown, and card breakdown.\n\nQuery parameters:\n\nmonth (optional): Month in YYYY-MM format. Defaults to current month.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"month\": \"2026-02\",\n    \"totalAmount\": 1250000,\n    \"transactionCount\": 45,\n    \"dailyAverage\": 56818,\n    \"previousMonth\": {\n      \"totalAmount\": 1100000,\n      \"diff\": 150000,\n      \"diffPercent\": 13.6\n    },\n    \"byCategory\": [\n      { \"categoryId\": \"cat_food\", \"categoryName\": \"식비\", \"amount\": 450000, \"percent\": 36.0 },\n      { \"categoryId\": \"cat_transport\", \"categoryName\": \"교통\", \"amount\": 180000, \"percent\": 14.4 }\n    ],\n    \"byCard\": [\n      { \"cardName\": \"삼성카드\", \"amount\": 700000, \"percent\": 56.0 },\n      { \"cardName\": \"현대카드\", \"amount\": 550000, \"percent\": 44.0 }\n    ]\n  }\n}\n\nGET /api/external/spending/bills\n\nReturns card billing information for a given month.\n\nQuery parameters:\n\nmonth (optional): Month in YYYY-MM format. Defaults to current month.\n\nResponse (200):\n\n{\n  \"success\": true,\n  \"data\": {\n    \"month\": \"2026-02\",\n    \"bills\": [\n      {\n        \"cardName\": \"삼성카드\",\n        \"amount\": 850000,\n        \"dueDate\": \"2026-02-25\",\n        \"status\": \"pending\"\n      },\n      {\n        \"cardName\": \"현대카드\",\n        \"amount\": 650000,\n        \"dueDate\": \"2026-02-15\",\n        \"status\": \"paid\"\n      }\n    ],\n    \"totalPending\": 850000,\n    \"totalPaid\": 650000\n  }\n}\n\nLanguage Behavior\nRespond in the same language the user uses (Korean or English).\nTransaction data (merchant names, descriptions) should be preserved as-is from the source image or user input.\nKorean credit card statements commonly use Korean merchant names; do not translate them.\nScript Location\n\nThe helper script is located at scripts/pocket-lens.mjs relative to this skill directory. Always use the full path when executing."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/edenjw/pocketlens",
    "publisherUrl": "https://clawhub.ai/edenjw/pocketlens",
    "owner": "edenjw",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pocketlens",
    "downloadUrl": "https://openagent3.xyz/downloads/pocketlens",
    "agentUrl": "https://openagent3.xyz/skills/pocketlens/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pocketlens/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pocketlens/agent.md"
  }
}