SuperAPI AI Directory

skill-scan

General & other

View repository

Updated 10-16 08:39

About this skill

/skill-scan — intersection mining of high salary × learnable × AI-enhanced (core)

Core method (read this first)

Do not search for low-quality content like "Top 10 High-Paying AI Careers"— their interests are not neutral; they are customer-acquisition funnels for course/training institutions. The truly honest demand signal is real open positions on BOSS Zhipin: if a position is open and pays well = someone is really spending money to buy this capability; more positions = rising demand, fewer = red ocean. Then overlay your capability profile and pick out the intersection of the three circles: "high salary × you can learn it × still needed in the AI era."

Iron rules

  1. The primary source is real recruitment data(BOSS adapter + recruitment trends); "career recommendation" low-quality content is not used as a basis.
  2. Never rely on memory. Salary range, position heat, and skill requirements must all be retrieved in real time (BOSS / web search plus year).
  3. Every position first goes through AI impact classification(ai-impact-taxonomy.md): replacement-type positions are directly discouraged; only recommend enhancement / emerging ones.
  4. For each position, calculate learnability based on the user's starting point(learnability-rubric.md); those below the threshold are not listed as top choices.
  5. Converge by tier(role-tiers.md): do not recommend unreachable algorithm positions to S0, and do not recommend annotation to S3.
  6. Any opportunity with "training/referral/job guarantee" must pass anti-scam checks(anti-scam-rubric.md)。
  7. Honestly label the boundaries of BOSS data: salary figures are obfuscated by fonts (▯ placeholders), so only the range is obtained; exact values require the user to manually view the detail page.
  8. Detail pages are read-only and require the user to specify them: only read detail links explicitly selected by the user; the user may choose any number from the candidates, or choose fewer or none. When reading, keep it low-frequency and sequential, and extract only the position title, company, salary, location/address, and JD/requirement text; do not read/save HR information, do not click "Chat Now," and do not perform unselected bulk scraping.

Process

Step 0 — Read context

  • Read .skill-state.json to get the profile + profile.start_tier(none → route to skill-init)。
  • Read ../../shared-references/role-tiers.md(route by tier).
  • Read ../../shared-references/ai-impact-taxonomy.md(direction gate).
  • Read ../../shared-references/learnability-rubric.md(learnability scoring).
  • Read ../../shared-references/anti-scam-rubric.md(anti-scam, used for training/referral types).
  • Read lessons.md(if it exists): the user's past review notes; prioritize referring to them.
  • Before any write to found_at / found_at_full , first get the current time using the system time:
date '+%Y-%m-%d %H:%M %Z %z'

found_at write the date,found_at_full write the specific time and time zone, following the user's system time zone (e.g.,2026-06-26 22:06 CST +0800). When displaying to the user, write it as 2026-06-26 22:06(本机时区 + UTC 偏移,如 中国标准时间 CST,UTC+8), and do not hard-code it to the time of some fixed country.

Step 1 — Lock search terms by tier

First limit the direction scope by start_tier (role-tiers), then combine it with the user's transferable abilities and list 3–6 BOSS search keywords.

  • S0 → AI内容运营 AIGC运营 AI标注 数字人运营 AI客服
  • S1 → AIGC运营 AI营销 Prompt工程 AI设计 AI视频
  • S2 → AI应用开发 LLM应用 大模型应用 AI工程 Agent开发
  • S3 → <用户行业>AI AI解决方案 行业AI产品 AI合规

Adjust the terms based on the user's transferable abilities; do not force a template. Say the terms to be searched to the user first for confirmation.

Step 2 — Retrieve real recruitment data (BOSS adapter, human-in-the-loop)

Use ../../adapters/boss。This is semi-automatic and requires user cooperation. First tell the user the steps:

cd ../../adapters/boss          # 相对 skill 目录;实际路径见安装位置
./launch-chrome.sh              # 起【有界面】Chrome,用户扫码登录 BOSS,弹滑块手动过
node diagnose-cdp.mjs 9222      # 可选:确认当前环境能读 Chrome 调试端口
node read-boss.mjs "AIGC运营" 100010000 9222 1 # 搜词读第 1 页列表 → JSON(城市码默认全国)
node read-boss-detail.mjs 9222 "https://www.zhipin.com/job_detail/..." # 用户明确选中后,只读选中的 JD
  • Run once per keyword, get back JSON (job title / salary magnitude / company / list-page tags / detail link / diagnostics). List-page tags are usually only enough to judge experience/education/internship duration; full skill requirements still require the user to manually paste the JD.
  • Salary is on the order of ▯▯-▯▯K magnitude(BOSS font obfuscation, the adapter does not crack it) — the digit structure leaks the magnitude, which is enough to distinguish tiers; for exact values have the user manually open 2–3 detail pages to look.
  • Cannot get the real JD requirements list page: first look at the list page to filter candidates, give the user 2–5 jobs worth looking at; only after the user explicitly says "read these JDs" use read-boss-detail.mjs to read 1–3 detail pages. If detail reading fails, then have the user manually paste the JD.
  • If diagnostics.maybeNeedLogin/blocked/cardCount=0: prompt the user to log in / pass verification / rerun; if the selectors have rotted, send the diagnostics back for recalibration.
  • If unable to connect to 127.0.0.1:9222: first run node diagnose-cdp.mjs 9222. If it is readable in a normal terminal but not readable inside the Codex/Claude sandbox, that means non-sandbox permissions are needed to read the local Chrome debugging port; it does not mean the adapter selectors are broken.
  • ⚠️ Low frequency, read-only list page, no pagination / no entering details / no private messages (anti-scraping risk control + ToS + anti-fraud A6).

If the user is currently unable to log in to run the adapter: fall back to WebSearch for "<job> recruiting requirements salary 2026 / market report", butclearly mark this as secondhand retelling, not as good as first-hand BOSS。

Step 2.5 — page-by-page screening rhythm (at most 3 pages)

Do not read all BOSS search results in one go. Proceed according to the rhythm below:

  1. Read the list for page N of the current keyword (starting from page 1).
  2. Use the user profile + anti-fraud rubric for rough screening, provide the user with 2–5 candidates "worth opening the JD for", and explain why; at the same time call out obvious deterrent items (such as high pay with zero experience, commission, training, customer acquisition, financial cold calling).
  3. After viewing each page, prompt the user that they can adjust the screening requirements (such as no internships, only Shenzhen, exclude sales/commission, salary floor, only full-time, only English/overseas direction). If the user adjusts requirements, screen subsequent pages according to the new requirements.
  4. Wait for the user to make an explicit choice, then call read-boss-detail.mjs to read detail pages. The user can choose any number from the candidates, and can also choose fewer or none; if there is no explicit choice, do not read details. When many are chosen at once, read sequentially at low frequency and organize in batches in the output, to avoid concurrency/high frequency triggering risk control.
  5. Based on the JD, do a gap analysis and a preliminary learnability judgment. Jobs already read/chosen by the user will not be recommended again on subsequent pages, only reviewed together in the final summary.
  6. After the user completes the second round of selection and finishes reading JDs, if enough comparable jobs have been accumulated (usually 4–8 JDs or 2–3 clear directions), proactively prompt that a stage report/job report can be generated now; the user may also choose to continue looking at page 3.
  7. Continue to the next page until 3 pages have been viewed, the user asks to stop, or 2–3 sufficiently strong candidate directions have been found.
  8. After viewing at most 3 pages, give the user a stage summary: pages viewed, candidate jobs, JDs read, JDs pending, deterrent patterns, screening requirements the user adjusted along the way, and recommended next steps.

Step 3 — Web cross-validation of AI impact and trends

For each candidate job, according to ai-impact-taxonomy.md judge augmentation/newly created/replacement:

  • Check the order of magnitude of the number of jobs for the same term on BOSS (rising/shrinking).
  • WebSearch (add year):<岗位> 招聘趋势 2026、<岗位> 会不会被AI取代, industry employment reports (use only interest-neutral sources).
  • Mark replacement-type directly as "discourage", even if positions still exist now.

Step 4 — Calculate learnability for each candidate role (core increment)

Score according to learnability-rubric.md 's L1–L5 (0–10), combining JD requirements vs the user's transferable:

  • Listyour gaps(which blocks are missing, item by item; which are transferable).
  • Give learnability score + verdict(highly learnable/medium/strenuous/discourage).
  • Givehonest timeline: based on the user's N hours per week, roughly how many months until they can submit resumes.

Step 5 — Anti-scam filtering (only for training/referral/outsourcing types)

If a path involves paid training/referrals/guaranteed employment, run it through anti-scam-rubric.md, and mark the verdict. The position itself (direct company hiring) generally does not cross the red line, but if the company cannot be found/there are B signals such as zero-threshold high-salary JDs, also mark it truthfully.

Step 6 — Output (use a unified format for each candidate role)

岗位:<名称>
AI 影响:增强 ⬆️ / 新生 🆕 / 替代 ⬇️
薪资量级:<▯ 量级 + 单位>(精确值需手动看详情页)
需求热度:<同词岗位量级/趋势 + 来源年份>
你的差距:<逐条;可迁移的标出来>
可学性:x/10(L1–L5 一句话)
判定:✅ 高可学 / ⚠️ 中等 / ⛔ 吃力 / ❌ 劝退
诚实周期:<以每周 N 小时算,几个月到能投简历>

Sort comprehensively by learnability × salary,recommend 2–3 intersection roles first, and also list the discouraged ones and explain why (to avoid the user stepping into the trap themselves).

Step 7 — Persist to disk

Write the candidate roles into .skill-state.json 's candidate_roles[](including ai_impact / salary_band / demand / gap / learnability_score / learnability_verdict / honest_timeline / scam_verdict / found_at=today's date / found_at_full=specific time and time zone / status=candidate). Prompt the user:"I choose role XX as my study plan" → go to skill-plan。