boss-cli
boss-cli
English | 中文
Ищите вакансии BOSS直聘 (com.hpbr.bosszhipin) из терминала или от ИИ-агента — без устройства,
на чистом Python, для запуска не нужен телефон/эмулятор. Он воспроизводит нативную подпись запросов
приложения (libyzwg.so) на Python, поэтому обычный HTTP-запрос принимается сервером.
$ boss search "安卓逆向" --city 北京,上海,杭州
# 12 jobs for '安卓逆向' (cities=['北京', '上海', '杭州'], page=1)
- [北京] 资深Android逆向与风控对抗专家 | 70-100K·13薪 | PureblueAI
- [上海] 移动安全/逆向工程师 | 30-60K | ...
- [杭州] android逆向开发 | 50-75K | 小算科技
...Исследовательский / учебный проект. Поиск выполняется с токеном вашей собственной авторизованной учётной записи; вы несёте ответственность за соблюдение Условий обслуживания BOSS直聘. Не перегружайте API.
Возможности
Поиск без устройства — в рантайме не нужен телефон, эмулятор или unidbg; только Python + ваш токен сессии.
Несколько городов одним вызовом —
--city 北京,上海,杭州, по названию или коду.Фильтр по ключевым словам —
--filter 远程/--filter 兼职оставляет только подходящие вакансии (должность / метки / компания).Чистый вывод или JSON — читаемый список или
--jsonдля скриптов.MCP-сервер — предоставляет поиск как инструмент (
boss_search) для Claude / любого MCP-клиента.
Related MCP server: trackly-cli
Установка
pip install -r requirements.txt # lz4, requests (mcp only needed for the MCP server)Получение сессии (однократно)
Клиенту нужно три вещи из авторизованного приложения BOSS直聘 на устройстве, которым вы управляете:
поле | откуда берётся |
| заголовок запроса |
| query-параметр |
| внутри |
Перехватите один GET https://api5.zhipin.com/api/batch/requests из приложения любым HTTPS-
перехватчиком (Reqable / Charles / mitmproxy; если приложение использует пиннинг, используйте frida SSL-unpin скрипт), затем скопируйте
эти значения в session.local.json:
cp session.example.json session.local.json # then paste your t2 / client_info / uniqid / cardlist_defaultssession.local.json в .gitignore (в нём хранится ваш токен). t2 истекает — когда поиск начинает возвращать
invalid auth, получите новый t2 тем же способом.
Использование
# by city name or code, one or several
boss search "Python" # default city from your session
boss search "数据分析" --city 上海
boss search "安卓逆向" --city 北京,上海,杭州 # multi-city, results tagged [city]
# filter / paginate / cap
boss search "逆向" --city 北京,上海 --filter 远程 # only jobs mentioning 远程 (remote)
boss search "Golang" --page 2 --limit 20
boss search "算法" --json # parsed jobs as JSON
# run without installing (module form)
python -m bosscli.cli search "AIGC" --city 深圳Параметры: --city (название/код, через запятую) · --filter <text> · --page N · --sort -1 ·
--limit N · --json · --token <t2> (переопределение) · --session <path>.
Встроенные названия городов: 全国 / 北京 / 上海 / 广州 / 深圳 / 杭州 / 成都 / 南京 / 武汉 / 西安 / 苏州 / 天津 / 长沙 / 重庆 / 郑州 / 厦门 (остальные — передавайте код напрямую).
MCP-сервер
BOSS_SESSION=./session.local.json python -m bosscli.mcp_serverЗарегистрируйте его в вашем MCP-клиенте (например, ~/.claude.json); инструмент —
boss_search(query, city?, page?, sort?).
Как это работает (кратко)
Поиск BOSS直聘 идёт через batch-эндпоинт, параметры которого содержат два защищённых от подделки значения — sp
(зашифрованный блок параметров) и sig (подпись) — оба создаются нативной библиотекой
libyzwg.so. Этот проект воспроизводит подпись/шифрование этой библиотеки на чистом Python
(bosscli/yzwg.py), собирает batch-запрос (bosscli/signer.py), отправляет его и расшифровывает
ответ (bosscli/client.py). Корректность зафиксирована побайтовыми тестами на реальных перехватах
(tests/). Весь трюк в этом: как только подпись воспроизведена, поиск — это просто HTTP-запрос.
python tests/test_yzwg.py # native crypto — byte-exact vs real-device captures
python tests/test_signer.py # request assembly round-tripСтруктура
bosscli/yzwg.py signing / encryption primitives (pure Python)
bosscli/signer.py batch-request assembly
bosscli/client.py search: build → send → decrypt → parse
bosscli/cli.py the `boss search ...` CLI
bosscli/mcp_server.py MCP wrapper (tool: boss_search)
tests/ byte-exact regression tests + fixtures
session.example.json template for your session中文
English | 中文
在终端或 AI agent 里搜 BOSS直聘(com.hpbr.bosszhipin) 职位 —— 纯 Python、离设备,跑的时候不需要手机/模拟器。
它把 App 的 native 请求加签库(libyzwg.so)用 Python 复现了出来,所以一条普通 HTTP 请求就能被服务器接受。
$ boss search "安卓逆向" --city 北京,上海,杭州
# 12 jobs for '安卓逆向' (cities=['北京', '上海', '杭州'], page=1)
- [北京] 资深Android逆向与风控对抗专家 | 70-100K·13薪 | PureblueAI
- [杭州] android逆向开发 | 50-75K | 小算科技
...研究 / 学习用途。它用的是你自己登录账号的 token 去搜;请自行遵守 BOSS直聘的服务条款,别高频打接口。
功能
离设备搜索 —— 运行时不需要手机 / 模拟器 / unidbg,只要 Python + 你的 session token。
一条命令多城市 ——
--city 北京,上海,杭州,支持城市名或城市码。关键词筛选 ——
--filter 远程/--filter 兼职,只保留标题/标签/公司命中的岗位。文本或 JSON 输出 —— 可读列表,或
--json供脚本消费。MCP 服务 —— 把搜索暴露成工具(
boss_search)给 Claude / 任意 MCP 客户端。
安装
pip install -r requirements.txt # lz4、requests(MCP 服务另需 mcp 包)获取 session(一次性)
客户端需要从一台你自己、已登录的 BOSS直聘设备上拿三样东西:
字段 | 来源 |
| 请求头里的 |
| query 参数 |
| 在 |
用任意 HTTPS 抓包工具(Reqable / Charles / mitmproxy;App 若做了证书绑定,配个 frida SSL unpin 脚本)
抓一条 App 发出的 GET https://api5.zhipin.com/api/batch/requests,把上面几个值填进 session.local.json:
cp session.example.json session.local.json # 再把你的 t2 / client_info / uniqid / cardlist_defaults 粘进去session.local.json 已被 gitignore(里面是你的 token)。t2 会过期 —— 搜索开始返回 invalid auth 时,照上面再抓一个新的即可。
用法
# 按城市名或城市码,单个或多个
boss search "Python" # 用 session 里的默认城市
boss search "数据分析" --city 上海
boss search "安卓逆向" --city 北京,上海,杭州 # 多城市,结果带 [城市] 标签
# 筛选 / 翻页 / 限量
boss search "逆向" --city 北京,上海 --filter 远程 # 只看提到“远程”的岗
boss search "Golang" --page 2 --limit 20
boss search "算法" --json # 解析后的职位 JSON
# 不安装、直接模块方式跑
python -m bosscli.cli search "AIGC" --city 深圳参数:--city(城市名/码,逗号分隔)· --filter <文本> · --page N · --sort -1 ·
--limit N · --json · --token <t2>(临时覆盖)· --session <路径>。
内置城市名:全国 / 北京 / 上海 / 广州 / 深圳 / 杭州 / 成都 / 南京 / 武汉 / 西安 / 苏州 / 天津 / 长沙 / 重庆 / 郑州 / 厦门(其它城市直接传城市码)。
MCP 服务
BOSS_SESSION=./session.local.json python -m bosscli.mcp_server在 MCP 客户端里注册(如 ~/.claude.json);工具名 boss_search(query, city?, page?, sort?)。
原理(一句话版)
BOSS直聘的搜索走一个批量端点,参数里带两个防篡改值 —— sp(加密参数串)和 sig(签名),都由 native 库
libyzwg.so 生成。本项目把这个库的加签/加密用纯 Python 复现(bosscli/yzwg.py),装配批量请求
(bosscli/signer.py)、发出去再解密响应(bosscli/client.py)。正确性靠对真实抓包的字节级测试兜底
(tests/)。核心就这一点:加签一旦复现出来,搜索就只是一次普通 HTTP 请求。
免责声明
仅供安全研究与学习交流。请勿用于任何违反 BOSS直聘服务条款或相关法律法规的用途;因使用本项目产生的一切后果由使用者自负。
This server cannot be deployed
Maintenance
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
MCP server for Firecrawl — web search, scraping, and biomedical/arXiv paper search.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Related MCP Servers
- AlicenseBqualityAmaintenanceLocal MCP server for BOSS Zhipin workflows. Exposes 49 tools for job search, welfare filtering, recruiter messaging, pipeline tracking, and resume optimization for AI agents.77464 PyPI2,040MIT

trackly-cliofficial
AlicenseNot gradedqualityAmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.379 npm3MIT- AlicenseNot gradedqualityDmaintenanceUnified job search MCP server that aggregates live listings from multiple job boards with deduplication, enabling AI agents to find and filter jobs by keyword and location.MIT
- FlicenseNot gradedqualityDmaintenanceThis MCP server enables AI agents to interact with recruitment platforms like BOSS直聘, 猎聘, and Moka through a Chrome extension via WebSocket. It provides tools to detect platforms, fetch candidate lists, and test extension connectivity.2-