感谢你对 boss-agent-cli 的关注!English version: CONTRIBUTING.en.md
首次贡献前请先完成 快速上手 中的本地自检与开发者验证。
git clone https://github.com/can4hou6joeng4/boss-agent-cli.git
cd boss-agent-cli
uv sync --all-extras
uv run pytest tests/ -v
# 启用本地提交质量门禁(推荐)
uv run pre-commit installPython ≥ 3.10 是最低要求。项目使用 uv 管理依赖,uv sync --all-extras 会在本地 .venv 中安装运行时和开发依赖。
- Python 源码缩进使用 tab。
pyproject.toml中的indent-width = 4表示格式工具的视觉宽度,不表示改为空格缩进。- Python >= 3.10,使用
X | Y联合类型。 - 命令输出必须保持 JSON 信封契约:stdout 只输出 Agent 可读 JSON,stderr 输出日志和进度。
- commit message:
type: 中文描述(feat / fix / refactor / docs / test / chore / ci)。 - 类型检查:
uv run mypy src/boss_agent_cli,CI 阻塞式门禁,新代码必须零 mypy 错误。- ✅
feat: 新增配置管理命令 - ❌
feat: add config command(英文描述) - ❌
feat: 新增 config 命令(中英混杂) - 不要添加
Co-authored-by尾注或任何 AI 署名行
- ✅
代码改动提交前尽量运行完整矩阵:
uv run pytest tests/ -q
uv run ruff check src/ tests/
uv run mypy src/boss_agent_cli
uv run boss --help
uv run boss schema --format native文档改动至少运行:
uv run pytest tests/test_agent_docs.py tests/test_open_source_docs.py -q
git diff --check项目采用度只参考两个被动来源:PyPI 下载量和 GitHub Insights(star / clone / traffic)。
不要引入任何形式的运行时遥测、使用埋点、匿名统计回传或远程日志,即使它们是可选或匿名的。除用户显式发起的 API 调用外,数据不应离开本机;遥测会破坏这条承诺。
在决定是否投入推广、示例或集成工作前,先查看上述被动信号,而不是靠遥测收集使用情况。
- Fork 本仓库并 clone 到本地。
- 从
master创建功能分支:git checkout -b feat/your-feature。 - 先写测试:写失败的测试,再写实现,再跑全套。
- 本地 lint + 测试:
uv run ruff check src/ tests/ mcp-server/ uv run pytest tests/ -q
- 原子提交:每个 commit 只做一件事。
- Push 并向
master发起 Pull Request。 - CI 全绿才能合并:4 个 Python 版本(3.10–3.13)跑测试,加 lint / typecheck / docs / 安全扫描。
维护者会使用 squash merge,所以最终 squash 标题也要遵守上面的 commit 格式。
每个命令必须向 stdout 输出 JSON 信封:
{
"ok": true,
"schema_version": "1.0",
"command": "search",
"data": [...],
"pagination": {...},
"error": null,
"hints": {...}
}stdout只放 JSON,不要直接print()到 stdout。stderr放日志和进度信息(受--log-level控制)。exit 0表示成功(ok=true)。exit 1表示失败(ok=false)。
出错时信封必须包含 error.code、error.recoverable 和 error.recovery_action。可用错误码见 src/boss_agent_cli/commands/schema.py 中 SCHEMA_DATA["error_codes"]。
- 鼓励 TDD:先写测试再写实现。CI 覆盖率在 Codecov 追踪,基线 80%。
- Mock 外部 I/O:
AuthManager、BossClient、CacheStore、AIService是 mock 边界,测试不应真正调用 BOSS 直聘 API。 - 错误路径对等:每条成功路径至少对应一条错误路径测试(认证过期、限流、参数非法等)。
- 在
src/boss_agent_cli/commands/下新建文件 - 在
commands/register.py中注册命令(register_candidate_commands/register_recruiter_commands;main.py只保留全局选项,不直接挂命令) - 在
schema.py(SCHEMA_DATA["commands"])中添加命令描述;顶层命令数变化时同步SCHEMA_DATA["description"]中的「共 N 个顶层命令」计数(有测试断言计数与命令表长度一致) - 在
tests/test_commands.py或按命令名新建测试文件 - 更新
docs/commands.md和docs/commands.en.md(命令速查表) - 更新
AGENTS.md(CLI 不变量契约中的命令数)与docs/capability-matrix.md/docs/capability-matrix.en.md中的命令计数;tests/test_agent_docs.py对这些计数字符串有硬编码断言,需一并更新 - 更新
README.md和README.en.md(命令参考表) - 更新对应模块的
CLAUDE.md - 如果命令对 Agent 通过 MCP 调用有用,还需在
src/boss_agent_cli/mcp_server.py的TOOLS列表加 Tool 定义、在_build_args函数加分支;工具名与合规命令标识对不上时(如boss_hr_*系对应recruiter-*)要登记_MCP_TOOL_COMPLIANCE_COMMAND_OVERRIDES,否则低风险过滤不生效;mcp-server/server.py是手工维护的 re-export 清单,新增公开符号需补一行;工具总数变化时同步README.en.md中的 "MCP server with N tools"(有测试按len(TOOLS)动态断言)
请在 .github/ISSUE_TEMPLATE/ 下选择对应模板:
- bug_report:附上
boss doctor输出和版本号 - feature_request:描述使用场景和期望行为
- documentation:错别字、缺失文档、过时示例
不写代码也能帮忙:
- 翻译改进(如
README.en.md润色) - 带复现步骤的 bug 报告
- 在新的 Agent 宿主中编写使用示例(见
docs/integrations/) - 不同机器 / 系统 / Chrome 版本的性能测试结果
欢迎在 Discussions 发帖,或在相关 Issue 下留言。