{"id":"5e5cf8b4-558a-4585-9b62-f98c4fb63543","entityType":"agent","slug":"clawhub-upkuajing-linkedin-person-search","name":"Pinpointing LinkedIn personnel, locating individuals from LinkedIn data by name, company,job title, and industry. Helping recruiters, sales teams, and B2B lead-generationspecialists discover LinkedIn profiles, source candidates, and enrich contactdata—sui","canonicalUrl":"https://www.xpersona.co/agent/clawhub-upkuajing-linkedin-person-search","canonicalPath":"/agent/clawhub-upkuajing-linkedin-person-search","generatedAt":"2026-10-11T14:17:02.862Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":null},"description":"Search LinkedIn professionals with name, company and job‑title filters. Fetch profile information to support head‑hunting and global sales‑lead development. Trigger: LinkedIn people search, find targeted professionals, global lead generation, executive headhunting, contact‑data enrichment","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17304xrt0p2xssnmr7datqzks83gvsr:linkedin-person-search","sourceUrl":"https://clawhub.ai/upkuajing/linkedin-person-search","homepage":"https://clawhub.ai/upkuajing/skills/linkedin-person-search","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/upkuajing/linkedin-person-search","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/upkuajing/skills/linkedin-person-search","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Pinpointing LinkedIn personnel, locating individuals from LinkedIn data by name, company,job title, and industry. Helping recruiters, sales teams, and B2B lead-"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":null},"stars":null,"forks":null,"downloads":1081,"packageName":null,"latestVersion":"1.0.3","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:03:31.563Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T11:03:31.576Z","lastCrawledAt":"2026-10-11T11:03:31.563Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T11:03:31.563Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.3","createdAt":"2026-08-24T09:24:46.758Z","changelog":"updated","fileCount":11,"zipByteSize":21502},{"version":"1.0.2","createdAt":"2026-07-16T06:33:23.558Z","changelog":"updated","fileCount":9,"zipByteSize":18653},{"version":"1.0.1","createdAt":"2026-07-08T01:48:48.511Z","changelog":"updated","fileCount":9,"zipByteSize":18345},{"version":"0.1.0","createdAt":"2026-07-07T22:47:04.103Z","changelog":"Initial code and script removal; the skill package now contains only documentation files. - Removed all core Python scripts and requirements (5 files deleted). - No runnable code remains; only documentation is included in this version. - All guidance, instructions, and references to scripts are still available in SKILL.md for informational purposes.","fileCount":4,"zipByteSize":6470},{"version":"1.0.0","createdAt":"2026-07-07T22:45:17.856Z","changelog":"updated","fileCount":9,"zipByteSize":18440}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17304xrt0p2xssnmr7datqzks83gvsr:linkedin-person-search","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17304xrt0p2xssnmr7datqzks83gvsr:linkedin-person-search` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/upkuajing/linkedin-person-search before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T14:17:02.860Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-upkuajing-linkedin-person-search/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":null},"readme":"Skill: Pinpointing LinkedIn personnel, locating individuals from LinkedIn data by name, company,job title, and industry. Helping recruiters, sales teams, and B2B lead-generationspecialists discover LinkedIn profiles, source candidates, and enrich contactdata—suitable for talent acquisition, headhunting, candidate screening, and internationallead generation.\n\nOwner: upkuajing\n\nSummary: Search LinkedIn professionals with name, company and job‑title filters. Fetch profile information to support head‑hunting and global sales‑lead development. Trigger: LinkedIn people search, find targeted professionals, global lead generation, executive headhunting, contact‑data enrichment\n\nTags: B2B lead:1.0.3, acquisition:1.0.3, decision-maker:1.0.3, generation:1.0.3, latest:1.0.3, lead-gen:1.0.3, linkedin:1.0.3, people-search:1.0.3, prospecting:1.0.3\n\nVersion history:\n\nv1.0.3 | 2026-08-24T09:24:46.758Z | user\n\nupdated\n\nv1.0.2 | 2026-07-16T06:33:23.558Z | user\n\nupdated\n\nv1.0.1 | 2026-07-08T01:48:48.511Z | user\n\nupdated\n\nv0.1.0 | 2026-07-07T22:47:04.103Z | auto\n\nInitial code and script removal; the skill package now contains only documentation files.\n\n- Removed all core Python scripts and requirements (5 files deleted).\n- No runnable code remains; only documentation is included in this version.\n- All guidance, instructions, and references to scripts are still available in SKILL.md for informational purposes.\n\nv1.0.0 | 2026-07-07T22:45:17.856Z | user\n\nupdated\n\nArchive index:\n\nArchive v1.0.3: 11 files, 21502 bytes\n\nFiles: references/linkedin-person-list-api.md (3235b), references/skill-error-report-api.md (2070b), requirements.txt (14b), scripts/auth.py (5860b), scripts/common.py (14567b), scripts/error_report.py (1845b), scripts/linkedin_person_search.py (6949b), scripts/version_check.py (4933b), skill-card.md (2795b), SKILL.md (9184b), _meta.json (141b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: linkedin-person-search\ndescription: \"Search LinkedIn professionals with name, company and job‑title filters. Fetch profile information to support head‑hunting and global sales‑lead development.\\n\\nTrigger: LinkedIn people search, find targeted professionals, global lead generation, executive headhunting, contact‑data enrichment\"\nmetadata: {\"version\":\"1.0.3\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n### **Report Skill Call Errors**\nWhen an API call fails or returns abnormal data (server error, timeout, malformed response, etc.), explain the anomaly to the user in natural language and ask whether to report it to the platform for troubleshooting. Only run the report after user confirmation:\n```bash\npython scripts/error_report.py --params '{\"requestPath\":\"/agent/search/linkedin/person/list\",\"requestId\":\"f47ac10b58cc4372a5670e02b2c3d479\",\"context\":\"LinkedIn person search query failed with a server error\"}'\n```\n- Do not report normal business conditions (insufficient balance, invalid API key, parameter errors) — handle them via their own flows\n- Error reporting does not incur query fees\n- **Parameters**: See [Error Report API](references/skill-error-report-api.md)\n\n## Fees\n\n**All API calls incur fees**, different interfaces have different billing methods.\n\n**Latest pricing**: Users can visit [Detailed Price Description](https://www.upkuajing.com/web/openapi/price.html)\nOr use: `python scripts/auth.py --price_info` (returns complete pricing for all interfaces)\n\n### List Search Billing Rules\n\nBilled by **number of calls**, each call returns up to 20 records:\n- Number of calls: `ceil(query_count / 20)` times\n- **Whenever query_count > 20, must before execution:**\n  1. Inform user of expected number of calls\n  2. Stop, wait for explicit user confirmation in a separate message, then execute script\n\n### Fee Confirmation Principle\n\n**Any operation that incurs fees must first inform and wait for explicit user confirmation. Do not execute in the same message as the notification.**\n\n\n## Workflow\n\nChoose parameters based on user intent.\n\n### Decision Guide\n\n| User Intent | Use API |\n|-------------|---------|\n| \"Find CTOs of XX company\" | LinkedIn person list (companyNames + titleNames) |\n| \"Find people with email in US\" | LinkedIn person list existEmail=1 + countryCodes=[\"US\"] |\n| \"Find people in a specific industry\" | LinkedIn person list humanIndustries |\n\n## Usage Examples\n\n### Scenario 1: Small Query — Search People\n\n**User request**: \"Find CTOs at XXXX\"\n```bash\npython scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20\n```\n\n### Scenario 2: Large Query — Multiple Script Calls Required\n\n**User request**: \"Find 1000 US people with email addresses in the tech industry\"\n**Before execution** inform user: ceil(1000/20) = 50 API calls, confirm before executing.\n```bash\npython scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000\n```\n**After execution**: Script responds {\"task_id\":\"a1b2-c3d4\", \"file_url\": \"xxxxx\", ……}\n**Continue execution, append data**: Specify task_id, script continues from where it left off and appends to file\n```bash\npython scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000\n```\n\n## Error Handling\n\n- **API key invalid/non-existent**: Check `UPKUAJING_API_KEY` in `~/.upkuajing/.env` file\n- **Insufficient balance**: Guide user to top up\n- **Invalid parameters**: **Must first check the corresponding API documentation in references/ directory**, get correct parameter names and formats from documentation, do not guess\n- **Skill call errors / abnormal responses**: Explain to the user and, with user confirmation, report to the platform via `python scripts/error_report.py` (see [Report Skill Call Errors](#report-skill-call-errors))\n\n### API Documentation Reference\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n- Error Report: Check [references/skill-error-report-api.md](references/skill-error-report-api.md)\n\n## Best Practices\n\n1. **Check API documentation**:\n   - **Before executing queries, must first check the corresponding API reference documentation**\n   - Check [references/linkedin-person-list-api.md](references/linkedin-person-list-api.md)\n   - Do not guess parameter names, get accurate parameter names and formats from documentation\n\n2. **Optimize query parameters**:\n   - Use `humanIndustries` / `companyNames` to filter precisely; industry names must be in **English**\n   - Use `existEmail=1` or `existPhone=1` to filter people with contact information\n   - Use `countryCodes` to limit country scope\n\n3. **Large result sets**:\n   - For large queries, pay attention to the jsonl file size\n\n## Notes\n- People records use `hid` as the unique identifier; `pid` is the associated company identifier\n- Country codes use ISO 3166-1 alpha-2 format (e.g., CN, US, JP)\n- File paths use forward slashes on all platforms\n- Industry names must be in **English**\n- Search quantity affects API response time, recommend setting timeout: 120\n- **Prohibit outputting technical parameter format**: Do not display code-style parameters in responses, convert to natural language\n- **Do not** estimate or guess per-call fees — use `python scripts/auth.py --price_info` to get accurate pricing information\n- **Do not** guess parameter names, get accurate parameter names and formats from documentation\n\n## Related Skills\n\nOther UpKuaJing skills you might find useful:\n\n- global-company-person-search — Search people from the global company database\n- linkedin-company-search — Search companies from LinkedIn data\n- global-company-search — Search companies from the global company database\n- global-company-shareholder — Query shareholder list from the global company database\n- global-company-employee — Query employee list from the global company database\n- global-company-person-colleague — Query colleague list from the global company database\n- global-company-person-alumni — Query alumni list from the global company database\n- global-company-person-experience — Query work experience list from the global company database\n- global-company-person-education — Query education history list from the global company database\n- global-company-person-school-detail — Query school detail from the global company database\n- upkuajing-global-company-people-search — Unified company and people search across all sources\n- upkuajing-customs-trade-company-search — Search customs trade companies\n- upkuajing-contact-info-validity-check — Check contact info validity\n- phone-validity-check — Check phone number validity\n- email-validity-check — Check email address validity\n- domain-validity-check — Check domain validity and security\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1787563486758\n}\n\nFile v1.0.3:references/linkedin-person-list-api.md\n\n# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分\n\nFile v1.0.3:references/skill-error-report-api.md\n\n# Agent调用Skill异常上报 API 参考\n\n> 上报 Agent 调用 Skill 异常，用于平台侧问题追踪与优化。异常上报不产生查询费用。\n> 接口路径：`POST /agent/skill/error/report`\n> 鉴权：需要 Bearer 令牌（UPKUAJING_API_KEY）\n\n## python脚本参数\n\n- `--params`：JSON格式的上报参数（必填）\n- 未传 `skillId`/`skillVersion` 时，脚本会自动从当前 Skill 目录名与 SKILL.md 读取并填充\n- 必填参数：`skillId`、`skillVersion`、`requestId`、`requestPath`、`context`；其中 `requestId` 从出问题的请求响应（ApiResp.requestId）中获取\n\n## API请求参数\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skillId | string | 是 | Skill 标识（最大128字符），如\"customs-analysis-area\" |\n| skillVersion | string | 是 | Skill 版本（最大32字符） |\n| agentName | string | 否 | Agent 名称（最大128字符） |\n| modelName | string | 否 | 模型名称（最大128字符） |\n| requestPath | string | 是 | 出问题的站内接口路径，以 / 开头（最大255字符），如\"/agent/customs/analysis/area\" |\n| requestId | string | 是 | 全请求唯一关联号（最大128字符），取失败请求响应中的 requestId |\n| requestTime | long | 否 | 请求发起时间戳（毫秒，≥0） |\n| requestParams | object | 否 | 请求参数（原始入参，敏感字段会自动脱敏；序列化后≤64KB） |\n| responseData | object | 否 | 响应数据（异常发生时的返回内容，敏感字段会自动脱敏；序列化后≤64KB） |\n| durationMs | long | 否 | 本次调用耗时（毫秒，≥0） |\n| context | string | 是 | 异常上下文（堆栈/错误信息，用于定位根因，最大2000字符） |\n\n## 响应数据\n\n### 外层结构\n\n- code（integer）：状态码，0 表示成功\n- msg（string）：提示信息\n- requestId（string）：全请求唯一关联号（32位无横线，与 MDC traceId 同值）\n\n### data 字段\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| reportId | long | 上报记录 ID |\n\nFile v1.0.3:skill-card.md\n\n## Description:\n\nSearch LinkedIn professionals with name, company, and job-title filters to fetch profile information for headhunting and global sales lead development.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[upkuajing](https://clawhub.ai/user/upkuajing)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nRecruiters, sales teams, and B2B lead-generation specialists use this skill to find LinkedIn-derived people records by name, company, job title, industry, geography, and contact-data availability.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: API keys and account data may be exposed if stored or displayed carelessly.\n\nMitigation: Use a protected environment variable or secret store where possible; if using `~/.upkuajing/.env`, restrict the directory and file to owner-only permissions and do not print or paste the file contents.\n\nRisk: LinkedIn-derived people and contact data may be sensitive or regulated.\n\nMitigation: Use the skill only with a lawful basis for processing the data, limit access to result files, and avoid unnecessary retention or redistribution.\n\nRisk: Search and account-management API calls may incur fees.\n\nMitigation: Check current pricing and obtain explicit confirmation before paid searches, especially when the requested result count requires multiple calls.\n\nRisk: Error reports may accidentally include raw search parameters, responses, profile data, or credentials.\n\nMitigation: Review and redact error-report context before submission; do not include credentials or raw profile/contact data.\n\n## Reference(s):\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n- [Skill Error Report API](references/skill-error-report-api.md)\n- [UpKuaJing Homepage](https://www.upkuajing.com)\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/)\n- [UpKuaJing OpenAPI Pricing](https://www.upkuajing.com/web/openapi/price.html)\n- [ClawHub Skill Page](https://clawhub.ai/upkuajing/skills/linkedin-person-search)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with shell commands plus JSON status and JSONL result files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Search results are written as task-scoped JSONL files, and script responses include task status, request identifiers, file paths, and fee information.]\n\n## Skill Version(s):\n\n1.0.3 (source: server evidence and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.3:requirements.txt\n\nhttpx>=0.23.0\n\nArchive v1.0.2: 9 files, 18653 bytes\n\nFiles: references/linkedin-person-list-api.md (3235b), requirements.txt (14b), scripts/auth.py (5860b), scripts/common.py (14567b), scripts/linkedin_person_search.py (6768b), scripts/version_check.py (4933b), skill-card.md (2743b), SKILL.md (8092b), _meta.json (141b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: linkedin-person-search\ndescription: \"Search LinkedIn professionals with name, company and job‑title filters. Fetch profile information to support head‑hunting and global sales‑lead development.\\n\\nTrigger: LinkedIn people search, find targeted professionals, global lead generation, executive headhunting, contact‑data enrichment\"\nmetadata: {\"version\":\"1.0.2\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n## Fees\n\n**All API calls incur fees**, different interfaces have different billing methods.\n\n**Latest pricing**: Users can visit [Detailed Price Description](https://www.upkuajing.com/web/openapi/price.html)\nOr use: `python scripts/auth.py --price_info` (returns complete pricing for all interfaces)\n\n### List Search Billing Rules\n\nBilled by **number of calls**, each call returns up to 20 records:\n- Number of calls: `ceil(query_count / 20)` times\n- **Whenever query_count > 20, must before execution:**\n  1. Inform user of expected number of calls\n  2. Stop, wait for explicit user confirmation in a separate message, then execute script\n\n### Fee Confirmation Principle\n\n**Any operation that incurs fees must first inform and wait for explicit user confirmation. Do not execute in the same message as the notification.**\n\n\n## Workflow\n\nChoose parameters based on user intent.\n\n### Decision Guide\n\n| User Intent | Use API |\n|-------------|---------|\n| \"Find CTOs of XX company\" | LinkedIn person list (companyNames + titleNames) |\n| \"Find people with email in US\" | LinkedIn person list existEmail=1 + countryCodes=[\"US\"] |\n| \"Find people in a specific industry\" | LinkedIn person list humanIndustries |\n\n## Usage Examples\n\n### Scenario 1: Small Query — Search People\n\n**User request**: \"Find CTOs at XXXX\"\n```bash\npython scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20\n```\n\n### Scenario 2: Large Query — Multiple Script Calls Required\n\n**User request**: \"Find 1000 US people with email addresses in the tech industry\"\n**Before execution** inform user: ceil(1000/20) = 50 API calls, confirm before executing.\n```bash\npython scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000\n```\n**After execution**: Script responds {\"task_id\":\"a1b2-c3d4\", \"file_url\": \"xxxxx\", ……}\n**Continue execution, append data**: Specify task_id, script continues from where it left off and appends to file\n```bash\npython scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000\n```\n\n## Error Handling\n\n- **API key invalid/non-existent**: Check `UPKUAJING_API_KEY` in `~/.upkuajing/.env` file\n- **Insufficient balance**: Guide user to top up\n- **Invalid parameters**: **Must first check the corresponding API documentation in references/ directory**, get correct parameter names and formats from documentation, do not guess\n\n### API Documentation Reference\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n\n## Best Practices\n\n1. **Check API documentation**:\n   - **Before executing queries, must first check the corresponding API reference documentation**\n   - Check [references/linkedin-person-list-api.md](references/linkedin-person-list-api.md)\n   - Do not guess parameter names, get accurate parameter names and formats from documentation\n\n2. **Optimize query parameters**:\n   - Use `humanIndustries` / `companyNames` to filter precisely; industry names must be in **English**\n   - Use `existEmail=1` or `existPhone=1` to filter people with contact information\n   - Use `countryCodes` to limit country scope\n\n3. **Large result sets**:\n   - For large queries, pay attention to the jsonl file size\n\n## Notes\n- People records use `hid` as the unique identifier; `pid` is the associated company identifier\n- Country codes use ISO 3166-1 alpha-2 format (e.g., CN, US, JP)\n- File paths use forward slashes on all platforms\n- Industry names must be in **English**\n- Search quantity affects API response time, recommend setting timeout: 120\n- **Prohibit outputting technical parameter format**: Do not display code-style parameters in responses, convert to natural language\n- **Do not** estimate or guess per-call fees — use `python scripts/auth.py --price_info` to get accurate pricing information\n- **Do not** guess parameter names, get accurate parameter names and formats from documentation\n\n## Related Skills\n\nOther UpKuaJing skills you might find useful:\n\n- global-company-person-search — Search people from the global company database\n- linkedin-company-search — Search companies from LinkedIn data\n- global-company-search — Search companies from the global company database\n- global-company-shareholder — Query shareholder list from the global company database\n- global-company-employee — Query employee list from the global company database\n- global-company-person-colleague — Query colleague list from the global company database\n- global-company-person-alumni — Query alumni list from the global company database\n- global-company-person-experience — Query work experience list from the global company database\n- global-company-person-education — Query education history list from the global company database\n- global-company-person-school-detail — Query school detail from the global company database\n- upkuajing-global-company-people-search — Unified company and people search across all sources\n- upkuajing-customs-trade-company-search — Search customs trade companies\n- upkuajing-contact-info-validity-check — Check contact info validity\n- phone-validity-check — Check phone number validity\n- email-validity-check — Check email address validity\n- domain-validity-check — Check domain validity and security\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1784183603558\n}\n\nFile v1.0.2:references/linkedin-person-list-api.md\n\n# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分\n\nFile v1.0.2:skill-card.md\n\n## Description: <br>\nSearches LinkedIn professional records through the UpKuaJing Open Platform API using filters such as name, company, job title, industry, country, and contact-signal availability. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[upkuajing](https://clawhub.ai/user/upkuajing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal recruiters, sales teams, and B2B lead-generation users can use this skill to find people in LinkedIn data by company, role, industry, geography, and contact-signal filters. It supports candidate sourcing, headhunting, lead discovery, and profile-result collection through a paid third-party API. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill uses a paid third-party API and searches can incur charges. <br>\nMitigation: Confirm pricing and expected call count before execution, especially when query_count exceeds one result page. <br>\nRisk: The UpKuaJing API key may be stored in a local plaintext dotfile. <br>\nMitigation: Prefer an environment variable when possible, restrict local file access, and remove the key when it is no longer needed. <br>\nRisk: Returned profile results are retained on disk. <br>\nMitigation: Delete local task data and logs when retention is no longer necessary. <br>\nRisk: The skill can support broad contact-data enrichment. <br>\nMitigation: Use only authorized, purpose-limited searches and avoid broad collection that does not meet privacy, legal, or organizational requirements. <br>\n\n\n## Reference(s): <br>\n- [LinkedIn Person List API reference](references/linkedin-person-list-api.md) <br>\n- [ClawHub skill page](https://clawhub.ai/upkuajing/skills/linkedin-person-search) <br>\n- [UpKuaJing homepage](https://www.upkuajing.com) <br>\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/) <br>\n- [UpKuaJing API pricing](https://www.upkuajing.com/web/openapi/price.html) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with shell commands, JSON status output, and JSONL result files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires UPKUAJING_API_KEY; API calls are billable; search results are persisted locally by task ID.] <br>\n\n## Skill Version(s): <br>\n1.0.2 (source: server release and skill metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.2:requirements.txt\n\nhttpx>=0.23.0\n\nArchive v1.0.1: 9 files, 18345 bytes\n\nFiles: references/linkedin-person-list-api.md (3235b), requirements.txt (14b), scripts/auth.py (5860b), scripts/common.py (14567b), scripts/linkedin_person_search.py (6768b), scripts/version_check.py (4933b), skill-card.md (2472b), SKILL.md (7177b), _meta.json (141b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: linkedin-person-search\ndescription: Official skill for upkuajing (跨境魔方). Search people (找人) from LinkedIn data. Find people by name, company, position, and industry. Ideal for talent search and lead development on LinkedIn data.\nmetadata: {\"version\":\"1.0.1\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n## Fees\n\n**All API calls incur fees**, different interfaces have different billing methods.\n\n**Latest pricing**: Users can visit [Detailed Price Description](https://www.upkuajing.com/web/openapi/price.html)\nOr use: `python scripts/auth.py --price_info` (returns complete pricing for all interfaces)\n\n### List Search Billing Rules\n\nBilled by **number of calls**, each call returns up to 20 records:\n- Number of calls: `ceil(query_count / 20)` times\n- **Whenever query_count > 20, must before execution:**\n  1. Inform user of expected number of calls\n  2. Stop, wait for explicit user confirmation in a separate message, then execute script\n\n### Fee Confirmation Principle\n\n**Any operation that incurs fees must first inform and wait for explicit user confirmation. Do not execute in the same message as the notification.**\n\n\n## Workflow\n\nChoose parameters based on user intent.\n\n### Decision Guide\n\n| User Intent | Use API |\n|-------------|---------|\n| \"Find CTOs of XX company\" | LinkedIn person list (companyNames + titleNames) |\n| \"Find people with email in US\" | LinkedIn person list existEmail=1 + countryCodes=[\"US\"] |\n| \"Find people in a specific industry\" | LinkedIn person list humanIndustries |\n\n## Usage Examples\n\n### Scenario 1: Small Query — Search People\n\n**User request**: \"Find CTOs at XXXX\"\n```bash\npython scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20\n```\n\n### Scenario 2: Large Query — Multiple Script Calls Required\n\n**User request**: \"Find 1000 US people with email addresses in the tech industry\"\n**Before execution** inform user: ceil(1000/20) = 50 API calls, confirm before executing.\n```bash\npython scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000\n```\n**After execution**: Script responds {\"task_id\":\"a1b2-c3d4\", \"file_url\": \"xxxxx\", ……}\n**Continue execution, append data**: Specify task_id, script continues from where it left off and appends to file\n```bash\npython scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000\n```\n\n## Error Handling\n\n- **API key invalid/non-existent**: Check `UPKUAJING_API_KEY` in `~/.upkuajing/.env` file\n- **Insufficient balance**: Guide user to top up\n- **Invalid parameters**: **Must first check the corresponding API documentation in references/ directory**, get correct parameter names and formats from documentation, do not guess\n\n### API Documentation Reference\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n\n## Best Practices\n\n1. **Check API documentation**:\n   - **Before executing queries, must first check the corresponding API reference documentation**\n   - Check [references/linkedin-person-list-api.md](references/linkedin-person-list-api.md)\n   - Do not guess parameter names, get accurate parameter names and formats from documentation\n\n2. **Optimize query parameters**:\n   - Use `humanIndustries` / `companyNames` to filter precisely; industry names must be in **English**\n   - Use `existEmail=1` or `existPhone=1` to filter people with contact information\n   - Use `countryCodes` to limit country scope\n\n3. **Large result sets**:\n   - For large queries, pay attention to the jsonl file size\n\n## Notes\n- People records use `hid` as the unique identifier; `pid` is the associated company identifier\n- Country codes use ISO 3166-1 alpha-2 format (e.g., CN, US, JP)\n- File paths use forward slashes on all platforms\n- Industry names must be in **English**\n- Search quantity affects API response time, recommend setting timeout: 120\n- **Prohibit outputting technical parameter format**: Do not display code-style parameters in responses, convert to natural language\n- **Do not** estimate or guess per-call fees — use `python scripts/auth.py --price_info` to get accurate pricing information\n- **Do not** guess parameter names, get accurate parameter names and formats from documentation\n\n## Related Skills\n\nOther UpKuaJing skills you might find useful:\n\n- global-company-person-search — Search people from the global company database\n- linkedin-company-search — Search companies from LinkedIn data\n- global-company-search — Search companies from the global company database\n- upkuajing-global-company-people-search — Unified company and people search across all sources\n- upkuajing-customs-trade-company-search — Search customs trade companies\n- upkuajing-contact-info-validity-check — Check contact info validity\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783475328511\n}\n\nFile v1.0.1:references/linkedin-person-list-api.md\n\n# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nSearches LinkedIn-derived people data through the UpKuaJing Open Platform by name, company, position, industry, geography, and contact-availability filters. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[upkuajing](https://clawhub.ai/user/upkuajing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nRecruiters, sales teams, and B2B lead builders use this skill to discover LinkedIn-derived people records and continue large people-search tasks through API-backed result files. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: API keys and account information can expose the user's UpKuaJing account if shared or stored insecurely. <br>\nMitigation: Keep UPKUAJING_API_KEY and ~/.upkuajing/.env private, and avoid including credentials in prompts, logs, screenshots, or shared result bundles. <br>\nRisk: Searches and account top-ups may incur fees. <br>\nMitigation: Confirm fee-incurring searches and top-up actions before execution, and use the pricing reference or auth.py --price_info for current pricing instead of estimating costs. <br>\nRisk: Returned people-search data may include personal or contact-related information. <br>\nMitigation: Use and share task_data results only where the user has an appropriate legal and compliance basis for processing the data. <br>\n\n\n## Reference(s): <br>\n- [LinkedIn Person List API](references/linkedin-person-list-api.md) <br>\n- [UpKuaJing Homepage](https://www.upkuajing.com) <br>\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/) <br>\n- [UpKuaJing API Pricing](https://www.upkuajing.com/web/openapi/price.html) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Shell commands, Configuration, Guidance, Files] <br>\n**Output Format:** [Markdown guidance, shell commands, JSON responses, and JSONL result files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires Python and UPKUAJING_API_KEY; search results are written under task_data with task metadata for continuation.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: skill metadata, server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.1:requirements.txt\n\nhttpx>=0.23.0\n\nArchive v0.1.0: 4 files, 6470 bytes\n\nFiles: references/linkedin-person-list-api.md (3235b), skill-card.md (2636b), SKILL.md (7177b), _meta.json (141b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: linkedin-person-search\ndescription: Official skill for upkuajing (跨境魔方). Search people (找人) from LinkedIn data. Find people by name, company, position, and industry. Ideal for talent search and lead development on LinkedIn data.\nmetadata: {\"version\":\"1.0.0\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n## Fees\n\n**All API calls incur fees**, different interfaces have different billing methods.\n\n**Latest pricing**: Users can visit [Detailed Price Description](https://www.upkuajing.com/web/openapi/price.html)\nOr use: `python scripts/auth.py --price_info` (returns complete pricing for all interfaces)\n\n### List Search Billing Rules\n\nBilled by **number of calls**, each call returns up to 20 records:\n- Number of calls: `ceil(query_count / 20)` times\n- **Whenever query_count > 20, must before execution:**\n  1. Inform user of expected number of calls\n  2. Stop, wait for explicit user confirmation in a separate message, then execute script\n\n### Fee Confirmation Principle\n\n**Any operation that incurs fees must first inform and wait for explicit user confirmation. Do not execute in the same message as the notification.**\n\n\n## Workflow\n\nChoose parameters based on user intent.\n\n### Decision Guide\n\n| User Intent | Use API |\n|-------------|---------|\n| \"Find CTOs of XX company\" | LinkedIn person list (companyNames + titleNames) |\n| \"Find people with email in US\" | LinkedIn person list existEmail=1 + countryCodes=[\"US\"] |\n| \"Find people in a specific industry\" | LinkedIn person list humanIndustries |\n\n## Usage Examples\n\n### Scenario 1: Small Query — Search People\n\n**User request**: \"Find CTOs at XXXX\"\n```bash\npython scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20\n```\n\n### Scenario 2: Large Query — Multiple Script Calls Required\n\n**User request**: \"Find 1000 US people with email addresses in the tech industry\"\n**Before execution** inform user: ceil(1000/20) = 50 API calls, confirm before executing.\n```bash\npython scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000\n```\n**After execution**: Script responds {\"task_id\":\"a1b2-c3d4\", \"file_url\": \"xxxxx\", ……}\n**Continue execution, append data**: Specify task_id, script continues from where it left off and appends to file\n```bash\npython scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000\n```\n\n## Error Handling\n\n- **API key invalid/non-existent**: Check `UPKUAJING_API_KEY` in `~/.upkuajing/.env` file\n- **Insufficient balance**: Guide user to top up\n- **Invalid parameters**: **Must first check the corresponding API documentation in references/ directory**, get correct parameter names and formats from documentation, do not guess\n\n### API Documentation Reference\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n\n## Best Practices\n\n1. **Check API documentation**:\n   - **Before executing queries, must first check the corresponding API reference documentation**\n   - Check [references/linkedin-person-list-api.md](references/linkedin-person-list-api.md)\n   - Do not guess parameter names, get accurate parameter names and formats from documentation\n\n2. **Optimize query parameters**:\n   - Use `humanIndustries` / `companyNames` to filter precisely; industry names must be in **English**\n   - Use `existEmail=1` or `existPhone=1` to filter people with contact information\n   - Use `countryCodes` to limit country scope\n\n3. **Large result sets**:\n   - For large queries, pay attention to the jsonl file size\n\n## Notes\n- People records use `hid` as the unique identifier; `pid` is the associated company identifier\n- Country codes use ISO 3166-1 alpha-2 format (e.g., CN, US, JP)\n- File paths use forward slashes on all platforms\n- Industry names must be in **English**\n- Search quantity affects API response time, recommend setting timeout: 120\n- **Prohibit outputting technical parameter format**: Do not display code-style parameters in responses, convert to natural language\n- **Do not** estimate or guess per-call fees — use `python scripts/auth.py --price_info` to get accurate pricing information\n- **Do not** guess parameter names, get accurate parameter names and formats from documentation\n\n## Related Skills\n\nOther UpKuaJing skills you might find useful:\n\n- global-company-person-search — Search people from the global company database\n- linkedin-company-search — Search companies from LinkedIn data\n- global-company-search — Search companies from the global company database\n- upkuajing-global-company-people-search — Unified company and people search across all sources\n- upkuajing-customs-trade-company-search — Search customs trade companies\n- upkuajing-contact-info-validity-check — Check contact info validity\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1783464424103\n}\n\nFile v0.1.0:references/linkedin-person-list-api.md\n\n# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分\n\nFile v0.1.0:skill-card.md\n\n## Description: <br>\nOfficial UpKuaJing skill for searching LinkedIn people data by name, company, position, industry, geography, and contact indicators. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[upkuajing](https://clawhub.ai/user/upkuajing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nRecruiters, sales teams, B2B lead builders, and agents working on talent acquisition or lead generation use this skill to find people in LinkedIn-derived data and refine searches by role, company, industry, geography, and contact availability. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can guide searches over LinkedIn-derived people and contact indicators. <br>\nMitigation: Use it only with a legitimate basis for processing the data, and avoid bulk contact harvesting or outreach that violates law, platform terms, or organizational policy. <br>\nRisk: The skill depends on a third-party API key and paid API calls. <br>\nMitigation: Use only trusted UpKuaJing credentials, confirm billable searches before execution, and verify current pricing through the provider before running large queries. <br>\nRisk: Retrieved profile or contact indicators may be sensitive. <br>\nMitigation: Share results only inside authorized recruiting, sales, or lead-generation workflows and limit retention to what those workflows require. <br>\n\n\n## Reference(s): <br>\n- [LinkedIn Person List API](artifact/references/linkedin-person-list-api.md) <br>\n- [Server-resolved source repository](https://github.com/Upkuajing/linkedin-person-search) <br>\n- [UpKuaJing homepage](https://www.upkuajing.com) <br>\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/) <br>\n- [UpKuaJing OpenAPI pricing](https://www.upkuajing.com/web/openapi/price.html) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON API parameter examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires an UPKUAJING_API_KEY and may involve paid API calls; the released package evidence says no runnable code remains in this version.] <br>\n\n## Skill Version(s): <br>\n0.1.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 9 files, 18440 bytes\n\nFiles: references/linkedin-person-list-api.md (3235b), requirements.txt (14b), scripts/auth.py (5860b), scripts/common.py (14567b), scripts/linkedin_person_search.py (6768b), scripts/version_check.py (4933b), skill-card.md (2653b), SKILL.md (7177b), _meta.json (141b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: linkedin-person-search\ndescription: Official skill for upkuajing (跨境魔方). Search people (找人) from LinkedIn data. Find people by name, company, position, and industry. Ideal for talent search and lead development on LinkedIn data.\nmetadata: {\"version\":\"1.0.0\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n## Fees\n\n**All API calls incur fees**, different interfaces have different billing methods.\n\n**Latest pricing**: Users can visit [Detailed Price Description](https://www.upkuajing.com/web/openapi/price.html)\nOr use: `python scripts/auth.py --price_info` (returns complete pricing for all interfaces)\n\n### List Search Billing Rules\n\nBilled by **number of calls**, each call returns up to 20 records:\n- Number of calls: `ceil(query_count / 20)` times\n- **Whenever query_count > 20, must before execution:**\n  1. Inform user of expected number of calls\n  2. Stop, wait for explicit user confirmation in a separate message, then execute script\n\n### Fee Confirmation Principle\n\n**Any operation that incurs fees must first inform and wait for explicit user confirmation. Do not execute in the same message as the notification.**\n\n\n## Workflow\n\nChoose parameters based on user intent.\n\n### Decision Guide\n\n| User Intent | Use API |\n|-------------|---------|\n| \"Find CTOs of XX company\" | LinkedIn person list (companyNames + titleNames) |\n| \"Find people with email in US\" | LinkedIn person list existEmail=1 + countryCodes=[\"US\"] |\n| \"Find people in a specific industry\" | LinkedIn person list humanIndustries |\n\n## Usage Examples\n\n### Scenario 1: Small Query — Search People\n\n**User request**: \"Find CTOs at XXXX\"\n```bash\npython scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20\n```\n\n### Scenario 2: Large Query — Multiple Script Calls Required\n\n**User request**: \"Find 1000 US people with email addresses in the tech industry\"\n**Before execution** inform user: ceil(1000/20) = 50 API calls, confirm before executing.\n```bash\npython scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000\n```\n**After execution**: Script responds {\"task_id\":\"a1b2-c3d4\", \"file_url\": \"xxxxx\", ……}\n**Continue execution, append data**: Specify task_id, script continues from where it left off and appends to file\n```bash\npython scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000\n```\n\n## Error Handling\n\n- **API key invalid/non-existent**: Check `UPKUAJING_API_KEY` in `~/.upkuajing/.env` file\n- **Insufficient balance**: Guide user to top up\n- **Invalid parameters**: **Must first check the corresponding API documentation in references/ directory**, get correct parameter names and formats from documentation, do not guess\n\n### API Documentation Reference\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n\n## Best Practices\n\n1. **Check API documentation**:\n   - **Before executing queries, must first check the corresponding API reference documentation**\n   - Check [references/linkedin-person-list-api.md](references/linkedin-person-list-api.md)\n   - Do not guess parameter names, get accurate parameter names and formats from documentation\n\n2. **Optimize query parameters**:\n   - Use `humanIndustries` / `companyNames` to filter precisely; industry names must be in **English**\n   - Use `existEmail=1` or `existPhone=1` to filter people with contact information\n   - Use `countryCodes` to limit country scope\n\n3. **Large result sets**:\n   - For large queries, pay attention to the jsonl file size\n\n## Notes\n- People records use `hid` as the unique identifier; `pid` is the associated company identifier\n- Country codes use ISO 3166-1 alpha-2 format (e.g., CN, US, JP)\n- File paths use forward slashes on all platforms\n- Industry names must be in **English**\n- Search quantity affects API response time, recommend setting timeout: 120\n- **Prohibit outputting technical parameter format**: Do not display code-style parameters in responses, convert to natural language\n- **Do not** estimate or guess per-call fees — use `python scripts/auth.py --price_info` to get accurate pricing information\n- **Do not** guess parameter names, get accurate parameter names and formats from documentation\n\n## Related Skills\n\nOther UpKuaJing skills you might find useful:\n\n- global-company-person-search — Search people from the global company database\n- linkedin-company-search — Search companies from LinkedIn data\n- global-company-search — Search companies from the global company database\n- upkuajing-global-company-people-search — Unified company and people search across all sources\n- upkuajing-customs-trade-company-search — Search customs trade companies\n- upkuajing-contact-info-validity-check — Check contact info validity\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1783464317856\n}\n\nFile v1.0.0:references/linkedin-person-list-api.md\n\n# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nSearch people from LinkedIn data by name, company, position, and industry using the UpKuaJing Open Platform API. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[upkuajing](https://clawhub.ai/user/upkuajing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nRecruiters, sales teams, B2B lead builders, and agent operators use this skill to discover LinkedIn people records and source candidates or leads with filters such as company, title, industry, geography, and available contact indicators. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Paid API searches and top-up helper commands can spend account funds. <br>\nMitigation: Confirm expected call counts and pricing before searches, especially when query_count is greater than 20. <br>\nRisk: The API key may be stored in plaintext in ~/.upkuajing/.env. <br>\nMitigation: Protect the file from sharing or commits, prefer environment-variable injection where practical, and rotate exposed keys. <br>\nRisk: Search results can contain personal and contact data. <br>\nMitigation: Use returned people data only where there is a lawful, consent-aware basis and handle generated JSONL files as sensitive data. <br>\nRisk: The skill performs an under-disclosed version check during API use. <br>\nMitigation: Review network behavior before deployment in restricted environments. <br>\n\n\n## Reference(s): <br>\n- [LinkedIn Person List API](references/linkedin-person-list-api.md) <br>\n- [UpKuaJing homepage](https://www.upkuajing.com) <br>\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/) <br>\n- [UpKuaJing OpenAPI pricing](https://www.upkuajing.com/web/openapi/price.html) <br>\n- [ClawHub skill page](https://clawhub.ai/upkuajing/skills/linkedin-person-search) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, files] <br>\n**Output Format:** [Markdown guidance with inline shell commands; scripts return JSON summaries and write JSONL result files.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires Python and UPKUAJING_API_KEY; searches can incur paid API charges and may create local task data files.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: release evidence and SKILL.md metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.0:requirements.txt\n\nhttpx>=0.23.0","readmeExcerpt":"Skill: Pinpointing LinkedIn personnel, locating individuals from LinkedIn data by name, company,job title, and industry. Helping recruiters, sales teams, and B2B lead-generationspecialists discover LinkedIn profiles, source candidates, and enrich contactdata—suitable for talent acquisition, headhunting, candidate screening, and internationallead generation. Owner: upkuajing Summary: Search LinkedIn professionals with","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"cat ~/.upkuajing/.env"},{"language":"text","snippet":"UPKUAJING_API_KEY=your_api_key_here"},{"language":"bash","snippet":"python scripts/error_report.py --params '{\"requestPath\":\"/agent/search/linkedin/person/list\",\"requestId\":\"f47ac10b58cc4372a5670e02b2c3d479\",\"context\":\"LinkedIn person search query failed with a server error\"}'"},{"language":"bash","snippet":"python scripts/linkedin_person_search.py \\\n  --params '{\"companyNames\": [\"XXXX\"], \"titleNames\": [\"CTO\"]}' \\\n  --query_count 20"},{"language":"bash","snippet":"python scripts/linkedin_person_search.py --params '{\"humanIndustries\": [\"technology\"], \"countryCodes\": [\"US\"], \"existEmail\": 1}' --query_count 1000"},{"language":"bash","snippet":"python scripts/linkedin_person_search.py --task_id 'task-id-here' --query_count 2000"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linkedin-person-search\ndescription: \"Search LinkedIn professionals with name, company and job‑title filters. Fetch profile information to support head‑hunting and global sales‑lead development.\\n\\nTrigger: LinkedIn people search, find targeted professionals, global lead generation, executive headhunting, contact‑data enrichment\"\nmetadata: {\"version\":\"1.0.3\",\"homepage\":\"https://www.upkuajing.com\",\"clawdbot\":{\"emoji\":\"👤\",\"requires\":{\"bins\":[\"python\"],\"env\":[\"UPKUAJING_API_KEY\"]},\"primaryEnv\":\"UPKUAJING_API_KEY\"}}\n---\n\n# LinkedIn Person Search\n\nSearch people data from LinkedIn using the UpKuaJing Open Platform API.\n\n## Overview\n\nThis skill provides access to UpKuaJing's LinkedIn people data through one list search script. API key generation and top-up are provided through the `auth.py` script.\n\n## Running Scripts\n\n### Environment Setup\n\n1. **Check Python**: `python --version`\n2. **Install dependencies**: `pip install -r requirements.txt`\n\nScript directory: `scripts/*.py`\nRun example: `python scripts/*.py`\n\n**Important**: Always use direct script invocation like `python scripts/linkedin_person_search.py`. **Do NOT use** shell compound commands like `cd scripts && python linkedin_person_search.py`\n\n### LinkedIn Person List Search (`linkedin_person_search.py`)\n- **Return granularity**: Each person as one record\n- **Use cases**: Focus on \"which people exist\" in LinkedIn data\n- **Examples**:\n  - \"Find CTOs at XXXX\"\n  - \"Find Sales Directors in China\"\n- **Parameters**: See [LinkedIn Person List](references/linkedin-person-list-api.md)\n\n## API Key and Top-up\n\nThis skill requires an API key. The API key is stored in the `~/.upkuajing/.env` file:\n```bash\ncat ~/.upkuajing/.env\n```\n**Example file content**:\n```\nUPKUAJING_API_KEY=your_api_key_here\n```\n### **API Key Not Set**\nFirst check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;\nIf UPKUAJING_API_KEY is not set, prompt the user to choose:\n1. User has one: User provides it (manually add to ~/.upkuajing/.env file)\n2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env\nWait for user selection;\n\n### **Account Top-up**\nWhen API response indicates insufficient balance, explain and guide user to top up:\n1. Create top-up order (`auth.py --new_rec_order`)\n2. Based on order response, send payment page URL to user, guide user to open URL and pay, user confirms after successful payment;\n\n### **Get Account Information**\nUse this script to get account information for UPKUAJING_API_KEY: `auth.py --account_info`\n\n## API Key and UpKuaJing Account\n- Newly applied API key: Register and login at [UpKuaJing Open Platform](https://developer.upkuajing.com/), then bind account\n\n### **Report Skill Call Errors**\nWhen an API call fails or returns abnormal data (server error, timeout, malformed response, etc.), explain the anomaly to the user in natural language and ask whether to report it to the platform for troubleshooting. On"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn76ywjzma121r2rh959ejsf49834c6x\",\n  \"slug\": \"linkedin-person-search\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1787563486758\n}"},{"path":"references/linkedin-person-list-api.md","content":"# 领英找人列表搜索 API 参考\n\n> 数据来源已由接口固定为 `linkedin`（领英），调用方无需传入 `sourceNames`。\n> 接口路径：`POST /agent/search/linkedin/person/list`\n\n## python脚本参数\n- `--params`: API业务参数（JSON字符串）\n- `--task_id`：任务ID；用于继续之前的任务或断点续传\n- `--query_count`：期望获取的总记录数；默认20；范围20~1000\n- params、task_id 必须指定其一，不能同时指定\n\n## params API业务参数\n\n### 关键词搜索\n- keywords（数组）：关键词匹配列表（涉及：人名、公司名、人物行业、公司行业、人物简介、职位、角色、职级、学位、兴趣爱好、技能字段）\n- humanNames（数组）：人物名关键词列表\n- humanNamesFilter（数组）：人物名不包含的关键词列表\n- companyNames（数组）：公司名关键词列表\n- companyNamesFilter（数组）：公司名不包含的关键词列表\n- titleNames（数组）：职位名称关键词列表\n\n### 行业筛选\n- humanIndustries（数组）：人物行业列表\n- humanIndustriesFilter（数组）：不包含的人物行业列表\n\n### 地理筛选\n- countryCodes（数组）：国家代码列表（ISO 3166-1 alpha-2）\n- countryCodesFilter（数组）：不包含的国家代码\n\n### 联系方式筛选\n- existPhone：0=全部，1=存在，2=不存在\n- existWhatsApp：0=全部，1=存在，2=不存在\n- existEmail：0=全部，1=存在，2=不存在\n- existWebsite：0=全部，1=存在，2=不存在\n- existSocial：0=全部，1=存在，2=不存在\n\n### 排序与匹配\n- sort（整数）：0=匹配度排序，1=综合排序\n- isExact（布尔值）：true=精确匹配，false=模糊匹配（默认 false）\n\n### 游标与 PIT\n- cursor（字符串）：查询游标；首次请求不传\n- usePit（布尔值）：是否启用 PIT 模式（大数据量翻页时更稳定）\n- pitId（字符串）：PIT 游标 ID；启用 PIT 后由首次响应返回，后续请求回传\n\n## 响应数据\n\n### 外层结构\n- code（整数）：响应码，0 表示成功\n- msg（字符串）：响应消息\n- data：人物列表数据（见下）\n- fee：计费信息（apiCost 本次扣费、accountBalance 账户余额、uuid 调用标识）\n\n### data 字段\n- cursor（字符串）：下一页查询游标\n- pitId（字符串）：PIT 游标 ID（启用 PIT 时返回）\n- list（数组）：人物列表\n\n### list 人物字段\n- hid：人物唯一标识\n- pid：公司唯一标识\n- human_name：人物名称\n- company_name：公司名称\n- country_code：人物所属国家 ISO 代码\n- title_names：职位名称列表\n- title_levels：职位级别列表\n- employee：公司员工人数范围\n- experience_num：工作经历次数\n- human_industries：人物行业描述列表\n- company_industries：公司行业描述列表\n- gender：性别（F=女性，M=男性）\n- human_type：人物类型（0=未检测，1=个人，2=公司，3=不确定）\n- phone_num：电话数量\n- email_num：邮箱数量\n- website_num：网址数量\n- social_num：社媒数量\n- ws_num：WhatsApp 数量\n- exist_company_website：是否有公司官网（1=存在，2=不存在）\n- rate：数据评分\n- es_score：es 匹配评分"},{"path":"references/skill-error-report-api.md","content":"# Agent调用Skill异常上报 API 参考\n\n> 上报 Agent 调用 Skill 异常，用于平台侧问题追踪与优化。异常上报不产生查询费用。\n> 接口路径：`POST /agent/skill/error/report`\n> 鉴权：需要 Bearer 令牌（UPKUAJING_API_KEY）\n\n## python脚本参数\n\n- `--params`：JSON格式的上报参数（必填）\n- 未传 `skillId`/`skillVersion` 时，脚本会自动从当前 Skill 目录名与 SKILL.md 读取并填充\n- 必填参数：`skillId`、`skillVersion`、`requestId`、`requestPath`、`context`；其中 `requestId` 从出问题的请求响应（ApiResp.requestId）中获取\n\n## API请求参数\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skillId | string | 是 | Skill 标识（最大128字符），如\"customs-analysis-area\" |\n| skillVersion | string | 是 | Skill 版本（最大32字符） |\n| agentName | string | 否 | Agent 名称（最大128字符） |\n| modelName | string | 否 | 模型名称（最大128字符） |\n| requestPath | string | 是 | 出问题的站内接口路径，以 / 开头（最大255字符），如\"/agent/customs/analysis/area\" |\n| requestId | string | 是 | 全请求唯一关联号（最大128字符），取失败请求响应中的 requestId |\n| requestTime | long | 否 | 请求发起时间戳（毫秒，≥0） |\n| requestParams | object | 否 | 请求参数（原始入参，敏感字段会自动脱敏；序列化后≤64KB） |\n| responseData | object | 否 | 响应数据（异常发生时的返回内容，敏感字段会自动脱敏；序列化后≤64KB） |\n| durationMs | long | 否 | 本次调用耗时（毫秒，≥0） |\n| context | string | 是 | 异常上下文（堆栈/错误信息，用于定位根因，最大2000字符） |\n\n## 响应数据\n\n### 外层结构\n\n- code（integer）：状态码，0 表示成功\n- msg（string）：提示信息\n- requestId（string）：全请求唯一关联号（32位无横线，与 MDC traceId 同值）\n\n### data 字段\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| reportId | long | 上报记录 ID |"},{"path":"skill-card.md","content":"## Description:\n\nSearch LinkedIn professionals with name, company, and job-title filters to fetch profile information for headhunting and global sales lead development.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[upkuajing](https://clawhub.ai/user/upkuajing)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nRecruiters, sales teams, and B2B lead-generation specialists use this skill to find LinkedIn-derived people records by name, company, job title, industry, geography, and contact-data availability.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: API keys and account data may be exposed if stored or displayed carelessly.\n\nMitigation: Use a protected environment variable or secret store where possible; if using `~/.upkuajing/.env`, restrict the directory and file to owner-only permissions and do not print or paste the file contents.\n\nRisk: LinkedIn-derived people and contact data may be sensitive or regulated.\n\nMitigation: Use the skill only with a lawful basis for processing the data, limit access to result files, and avoid unnecessary retention or redistribution.\n\nRisk: Search and account-management API calls may incur fees.\n\nMitigation: Check current pricing and obtain explicit confirmation before paid searches, especially when the requested result count requires multiple calls.\n\nRisk: Error reports may accidentally include raw search parameters, responses, profile data, or credentials.\n\nMitigation: Review and redact error-report context before submission; do not include credentials or raw profile/contact data.\n\n## Reference(s):\n\n- [LinkedIn Person List API](references/linkedin-person-list-api.md)\n- [Skill Error Report API](references/skill-error-report-api.md)\n- [UpKuaJing Homepage](https://www.upkuajing.com)\n- [UpKuaJing Open Platform](https://developer.upkuajing.com/)\n- [UpKuaJing OpenAPI Pricing](https://www.upkuajing.com/web/openapi/price.html)\n- [ClawHub Skill Page](https://clawhub.ai/upkuajing/skills/linkedin-person-search)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with shell commands plus JSON status and JSONL result files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Search results are written as task-scoped JSONL files, and script responses include task status, request identifiers, file paths, and fee information.]\n\n## Skill Version(s):\n\n1.0.3 (source: server evidence and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1727,"uniquenessScore":39,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:03:31.576Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:17:02.862Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}