Metadata-Version: 2.4
Name: bossauto-cli
Version: 0.1.0
Summary: A CLI for Boss Zhipin (BOSS直聘) — search jobs, chat with bosses from the terminal
Author: ZyanWan
Keywords: boss,cli,job,recruitment,terminal,zhipin
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Office/Business
Requires-Python: >=3.10
Requires-Dist: browser-cookie3>=0.19
Requires-Dist: click>=8.0
Requires-Dist: httpx>=0.27
Requires-Dist: qrcode>=7.0
Requires-Dist: rich>=13.0
Provides-Extra: browser
Requires-Dist: camoufox>=0.4; extra == 'browser'
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.11.0; extra == 'dev'
Provides-Extra: yaml
Requires-Dist: pyyaml>=6.0; extra == 'yaml'
Description-Content-Type: text/markdown

# bossauto-cli

[English](./README.en.md) | 中文

`bossauto-cli` 是一个面向 BOSS 直聘的命令行工具，支持职位搜索、推荐职位、投递记录、沟通列表、职位详情导出，以及招聘方候选人管理等工作流。

> 说明：本项目通过网页登录态和 BOSS 直聘 Web 接口工作。请只在你拥有合法账号权限、并符合平台规则的场景下使用。

## 功能特性

- 认证：自动提取浏览器 Cookie，支持二维码登录和 `--cookie-source` 指定浏览器。
- 职位搜索：支持关键词、城市、薪资、经验、学历、行业、公司规模、融资阶段、职位类型筛选。
- 推荐职位：查看基于当前账号状态的推荐职位。
- 职位详情：通过 `boss detail` 或 `boss show` 查看详情。
- 数据导出：支持 CSV 和 JSON 导出。
- 个人中心：查看个人信息、投递记录、面试邀请、浏览历史和沟通列表。
- 打招呼：支持单个和批量打招呼，批量操作带基础延迟。
- 招聘方模式：查看招聘职位、候选人、聊天记录，导出候选人数据，并支持部分候选人操作。
- Agent 友好：`--json` / `--yaml` 输出统一结构化 envelope，Rich 展示输出到 stderr。

## 安装

从 PyPI 安装：

```bash
uv tool install bossauto-cli
```

或：

```bash
pipx install bossauto-cli
```

可选 YAML 输出支持：

```bash
pip install "bossauto-cli[yaml]"
```

从源码开发安装：

```bash
cd cli/boss-cli-main
python -m pip install -e .
```

开发依赖：

```bash
python -m pip install -e ".[dev]"
```

## 常用命令

### 认证

```bash
boss login
boss login --cookie-source chrome
boss login --qrcode
boss status
boss logout
```

### 职位搜索

```bash
boss search "golang"
boss search "Python" --city 杭州
boss search "Java" --salary 20-30K
boss search "前端" --exp 3-5年
boss search "AI" --degree 硕士
boss search "后端" --industry 互联网
boss search "产品" --scale 1000-9999人
boss search "数据" --stage 已上市
boss search "运维" --job-type 全职
boss search "后端" --city 深圳 -p 2
```

### 详情与导出

```bash
boss show 3
boss detail <securityId>
boss detail <securityId> --json
boss export "Python" -n 50 -o jobs.csv
boss export "golang" --format json -o jobs.json
```

### 推荐与个人中心

```bash
boss recommend
boss recommend -p 2 --json
boss me
boss me --json
boss applied
boss interviews
boss history
boss chat
```

### 打招呼

```bash
boss greet <securityId>
boss greet <securityId> --json
boss batch-greet "golang" --city 杭州 -n 5
boss batch-greet "Python" --salary 20-30K --dry-run
```

### 工具命令

```bash
boss cities
boss --version
boss -v search "Python"
```

## 招聘方模式

### 搜索与推荐

```bash
boss recruiter jobs
boss recruiter search "golang" --city 深圳 --exp 3-5年
boss recruiter recommend
boss recruiter recommend --job <encryptJobId>
boss recruiter recommend -p 2
```

### 候选人沟通

```bash
boss recruiter greet <encryptGeekId>
boss recruiter batch-view "Python" --city 杭州 -n 10
boss recruiter inbox
boss recruiter inbox --job <encryptJobId> -p 2
boss recruiter reply <friendId> "感谢您的关注，方便电话聊聊吗？"
boss recruiter chat <friendId>
```

### 沟通页操作

```bash
boss recruiter request-resume <friendId> --yes
boss recruiter exchange-phone <friendId> --yes
boss recruiter exchange-wechat <friendId> --yes
boss recruiter invite-interview <encryptGeekId> --job <encryptJobId>
boss recruiter mark-unsuitable <encryptGeekId> --job <encryptJobId>
```

### 简历、职位与导出

```bash
boss recruiter resume <encryptGeekId>
boss recruiter resume-download <encryptGeekId> --job <encryptJobId>
boss recruiter geek <encryptGeekId> --job-id <jobId>
boss recruiter job-close <encryptJobId> --yes
boss recruiter job-reopen <encryptJobId> --yes
boss recruiter labels
boss recruiter export -o candidates.csv
boss recruiter export --format json -o candidates.json
```

## 结构化输出

带 `--json` 或 `--yaml` 的命令会输出统一 envelope：

```json
{
  "ok": true,
  "schema_version": "1",
  "data": {}
}
```

- `--json`：输出 JSON。
- `--yaml`：输出 YAML，需要安装 `bossauto-cli[yaml]`。
- 非 TTY stdout：自动输出结构化 YAML，便于 Agent 或脚本消费。
- Rich 人类可读输出写入 stderr，避免污染管道输出。

完整结构说明见 [SCHEMA.md](./SCHEMA.md)。

## 认证机制

`boss login` 会优先尝试从本机浏览器提取 BOSS 直聘 Cookie，失败后回退到二维码登录。也可以使用：

```bash
boss login --cookie-source chrome
boss login --qrcode
```

凭证默认保存到：

```text
~/.config/boss-cli/credential.json
```

请不要把该文件提交到代码仓库。`.gitignore` 已忽略根目录下的 `credential.json`，但仍应避免复制或泄露真实 Cookie。

## 限速与稳定性

- 请求之间带随机延迟。
- 遇到限流会进行冷却和重试。
- 会合并响应中的 `Set-Cookie`。
- 检测 HTML 登录页重定向，避免把登录页当作 JSON 解析。
- `boss -v` 可输出请求状态、耗时等调试信息。

## 项目结构

```text
boss_cli/
├── __init__.py
├── cli.py
├── client.py
├── auth.py
├── constants.py
├── exceptions.py
├── index_cache.py
└── commands/
    ├── _common.py
    ├── auth.py
    ├── search.py
    ├── personal.py
    ├── social.py
    └── recruiter.py
```

## 开发

```bash
python -m pip install -e ".[dev]"
python -m pytest tests/ -v -m "not smoke"
python -m ruff check .
```

Live smoke 测试会访问真实 BOSS 直聘接口，并可能使用本地 Cookie。只有在明确需要时再运行：

```bash
python -m pytest tests/ -v -m smoke
```

## 发布

本地构建：

```bash
python -m build
python -m twine check dist/*
```

上传到 PyPI：

```bash
python -m twine upload dist/*
```

第一次上传成功后，PyPI 会自动创建 `bossauto-cli` 项目页面。

## 常见问题

### `ModuleNotFoundError: No module named 'qrcode'`

说明当前环境还没有安装项目依赖。执行：

```bash
python -m pip install -e .
```

### `boss status` 显示未登录

本地可能存在 Cookie，但网页登录态已经失效。执行：

```bash
boss logout
boss login
```

### `环境异常 (__zp_stoken__ 已过期)`

Cookie 已过期或缺少浏览器 JS 生成的安全 Cookie。建议在浏览器中重新登录 BOSS 直聘后，再运行：

```bash
boss login
```

### 搜索无结果

检查关键词和城市筛选条件。可以用：

```bash
boss cities
```
