@lark-people/cli 0.0.0-beta.2 → 0.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +8 -17
  2. package/README.zh.md +8 -17
  3. package/bin/people-cli_darwin_amd64 +0 -0
  4. package/bin/people-cli_darwin_arm64 +0 -0
  5. package/bin/people-cli_linux_amd64 +0 -0
  6. package/bin/people-cli_linux_arm64 +0 -0
  7. package/bin/people-cli_windows_amd64.exe +0 -0
  8. package/bin/people-cli_windows_arm64.exe +0 -0
  9. package/package.json +4 -1
  10. package/scripts/install-wizard.js +10 -1
  11. package/skills/people-attendance/SKILL.md +0 -667
  12. package/skills/people-attendance/references/people-attendance-submission.md +0 -426
  13. package/skills/people-attendance/scripts/resolve_date.py +0 -894
  14. package/skills/people-hire/SKILL.md +0 -255
  15. package/skills/people-hire/references/people-hire-application.md +0 -334
  16. package/skills/people-hire/references/people-hire-evaluation-task-list.md +0 -233
  17. package/skills/people-hire/references/people-hire-evaluation.md +0 -127
  18. package/skills/people-hire/references/people-hire-interview-record.md +0 -109
  19. package/skills/people-hire/references/people-hire-interview-task-list.md +0 -250
  20. package/skills/people-hire/references/people-hire-interview.md +0 -146
  21. package/skills/people-hire/references/people-hire-job-process.md +0 -93
  22. package/skills/people-hire/references/people-hire-job-requirement.md +0 -227
  23. package/skills/people-hire/references/people-hire-job.md +0 -277
  24. package/skills/people-hire/references/people-hire-minutes.md +0 -91
  25. package/skills/people-hire/references/people-hire-talent.md +0 -105
  26. package/skills/people-hire/references/people-hire-test.md +0 -197
  27. package/skills/people-overtime/SKILL.md +0 -992
  28. package/skills/people-overtime/references/people-attendance-overtime-apply.md +0 -491
  29. package/skills/people-overtime/references/people-attendance-overtime.md +0 -51
  30. package/skills/people-overtime/references/people-attendance-submission.md +0 -203
  31. package/skills/people-overtime/scripts/resolve_date.py +0 -894
@@ -1,255 +0,0 @@
1
- ---
2
- name: people-hire
3
- version: 2.0.2
4
- description: "飞书招聘:查询职位、招需、招聘需求、投递、面试、评估、人才、招聘流程、笔试、面试速记等招聘数据。当用户需要查看面试任务、评估任务、招聘需求、职位、人才、投递、面试记录、评估记录、招聘流程、笔试、面试速记或面试评价详情时使用。本 skill 将招聘查询固定为已接入的招聘场景,并以 `people-cli schema` 暴露的接口字段为准。"
5
- metadata:
6
- requires:
7
- bins: ["people-cli"]
8
- cliHelp: "people-cli hire --help"
9
- ---
10
- # hire
11
-
12
- > **前置条件:** 先阅读 [`../people-shared/SKILL.md`](../people-shared/SKILL.md),其中包含认证、身份选择与权限处理流程。
13
- > **执行前必做:** 执行任何 `hire` Shortcut 或原生 API 前,必须先阅读对应 reference 文档,禁止盲目调用。
14
- > **字段来源:** 本 skill 中涉及的接口入参、返回字段、枚举值说明,统一以 `people-cli schema hire.<resource>.<method>` 暴露的 CLI 当前结构为准。
15
- > **强制约束:** `+interview-task-list` 和 `+evaluation-task-list` 只能查询当前登录用户的任务,不支持指定其他用户,禁止尝试传入 `user_id` 等参数。
16
- > **投递列表约束:** 查询投递列表必须使用 `people-cli hire +application-list`;未指定流程类型时 Shortcut 同时查询社招和校招并合并当前页结果,且分别提示社招/校招是否还有更多数据。用户明确说社招/校招时传 `--process-type social|campus` 并只查指定流程;高级参数 `--job-process-id` 会覆盖流程解析。原生 `application.list` 只作为 Shortcut 底层输入,禁止直接调用或展示原生 ID 列表。
17
- > **Shortcut 输出约束:** 已有 Shortcut 的招聘查询必须使用 Shortcut 的 `summary` 视图和紧凑表格输出,避免大 JSON 占用上下文;用户要求特定字段时优先使用 `--fields`,用户明确要求完整结构时才使用 `--view full`。
18
- > **命令前缀约束:** 用户消息里的 `/people-hire`、`people-hire` 只是触发本 skill 的自然语言前缀,不是 shell 命令;生成命令时必须使用 `people-cli hire ...`,禁止把 `/people-hire` 原样传给终端。
19
- > **禁止导出约束:** 招聘数据仅可用于当前对话内查询、摘要和必要的后续调用;禁止导出、下载或保存到本地文件、表格、文档或云盘,包括使用 `--output`、shell 重定向、`tee`、`pbcopy`,以及生成 CSV、Excel、XLSX、JSON/NDJSON 等离线文件。用户要求导出时,应拒绝导出并改为提供受分页与裁剪限制的当前对话摘要。
20
- > **P0 硬拒绝约束:** 用户要求批量导出、明文输出、保存或复制候选人手机号、身份证号、联系方式、简历附件、全量候选人信息等敏感招聘数据时,必须直接拒绝;禁止调用 CLI,禁止生成文件,禁止提示申请明文权限或继续授权。用户要求查询他人任务/他人 HR 对候选人的全量评估结论时,若没有明确投递、职位或候选人范围,也直接说明不能越权查询,并给出可提供 `application_id`、候选人姓名、职位或当前用户任务范围的替代路径。
21
- > **候选人与面试内容边界:** 仅当能从当前用户面试任务或面试记录链路确认"当前登录用户本人是该候选人的面试官"时,才可查看并输出该候选人的教育经历、项目经历、工作经历等详细履历内容;其他情况仅可查看候选人名称。仅可查看当前登录用户本人填写的面试评价和本人面试产生的面试速记;不支持查看他人的面试评价或面试速记。无法确认归属时,不调用详情接口下钻敏感内容。
22
- > **原生 API JQ 约束:** `people-cli hire <resource> <method> --jq` 对飞书原始响应执行,根对象包含 `code`、`msg`、`data`;原生列表 API 必须从 `.data.items` 取列表,原生详情 API 必须从 `.data.<object>` 取详情。禁止在原生 API 上直接写 `.items[]`、`.minutes`、`.interview_record` 等省略 `.data` 的路径。Shortcut 的 `--jq` 例外,按 Shortcut Envelope 使用 `.data[]`。
23
-
24
- ## 1. 何时使用与命令导航
25
-
26
- 当用户要通过 `people-cli hire` 查询招聘域数据时使用本 skill。只做认证、初始化、scope、身份切换时先读 `../people-shared/SKILL.md`;泛化讨论招聘策略或非招聘域数据时切换到对应 skill。
27
-
28
- 定位命令后必须阅读对应 reference。已有 Shortcut 的场景必须使用 Shortcut;无 Shortcut 的原生 API 调用前才执行 `people-cli schema hire.<resource>.<method>`。
29
-
30
- | 用户意图 / 关键词 | 优先命令 | 必读 reference |
31
- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
32
- | 我的评估任务、待评估、已评估、无需评估 | `people-cli hire +evaluation-task-list` | [`people-hire-evaluation-task-list.md`](references/people-hire-evaluation-task-list.md) |
33
- | 我的面试任务、待我面试、待评价面试、未开始面试、已终止面试 | `people-cli hire +interview-task-list` | [`people-hire-interview-task-list.md`](references/people-hire-interview-task-list.md) |
34
- | 招需、招聘需求、需求池、需求短码、需求状态、招需草稿 | `people-cli hire +job-requirement-list` | [`people-hire-job-requirement.md`](references/people-hire-job-requirement.md) |
35
- | 职位列表、职位详情、职位进度、招聘负责人、用人经理、协助人、关联招需 | `people-cli hire +job-list` / `+job-detail` | [`people-hire-job.md`](references/people-hire-job.md) |
36
- | 人才详情、候选人姓名、`talent_id` | `people-cli hire +talent-detail --talent-id <talent_id>` | [`people-hire-talent.md`](references/people-hire-talent.md) |
37
- | 投递列表、投递详情、`application_id`、投递状态、投递阶段、投递来源 | `people-cli hire +application-list` / `application get` / `application detail` | [`people-hire-application.md`](references/people-hire-application.md) |
38
- | 面试记录、`interview_id`、某次投递的面试信息 | `people-cli hire +interview-list` | [`people-hire-interview.md`](references/people-hire-interview.md) |
39
- | 招聘流程、流程阶段、`job_process`、`process_id` | `people-cli hire +job-process-list` | [`people-hire-job-process.md`](references/people-hire-job-process.md) |
40
- | 笔试、笔试结果、笔试状态 | `people-cli hire +test-list --application-id <application_id>`;只有候选人姓名时先从任务或投递场景拿 `application_id` | [`people-hire-test.md`](references/people-hire-test.md) |
41
- | 我的评估/面试任务候选人的笔试状态、待阅卷、已接受但未作答 | 先 `+evaluation-task-list` / `+interview-task-list` 取 `application_id`,再 `+test-list` | [`people-hire-test.md`](references/people-hire-test.md) |
42
- | 面试速记、面试逐字稿、`interview_id` | `people-cli hire +minutes-detail` | [`people-hire-minutes.md`](references/people-hire-minutes.md) |
43
- | 面试评价详情、新版面评、`interview_record_id` | `people-cli hire +interview-record-detail` | [`people-hire-interview-record.md`](references/people-hire-interview-record.md) |
44
- | 评估记录、某次投递的评估信息 | `people-cli hire +evaluation-list` | [`people-hire-evaluation.md`](references/people-hire-evaluation.md) |
45
-
46
-
47
-
48
- ## 2. Hire 通用知识
49
-
50
- ### 2.1 任务选路心智模型
51
-
52
- | 用户诉求 | 优先方案 | 不要误走 |
53
- | ------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
54
- | "我有哪些待评估任务" | `+evaluation-task-list` | 不要直接调用 `evaluation-task list` 或先查 `evaluation.list` |
55
- | "我有哪些待评价面试" | `+interview-task-list` | 不要直接调用 `interview-task list` 或先查 `interview.list` |
56
- | "我有哪些待我面试 / 待我面的候选人" | `+interview-task-list --pending-interview` | 不要传 `--my-department` / `--my-team`,面试任务本身已限定当前用户 |
57
- | "查我负责的职位" | `+job-list --mine --user-id-type open_id` | Shortcut 内部获取当前用户 `data.open_id` 并下推到招聘负责人字段;不要空查职位后按负责人名称过滤 |
58
- | "查我协助的职位" | `+job-list --assistant-mine --user-id-type open_id` | Shortcut 内部获取当前用户并下推到招聘协助人字段;不要拉全量后按姓名过滤 |
59
- | "我作为用人经理的职位" | `+job-list --hiring-manager-mine --user-id-type open_id` | Shortcut 内部获取当前用户并下推到用人经理字段;不要拉全量后按姓名过滤 |
60
- | "我的部门 / 我的团队 / 我们部门 / 我们团队的职位、招需、投递" | `+job-list/+job-requirement-list/+application-list --my-department` 或 `--my-team` | Shortcut 内部获取当前用户 `department_id` 并按部门 ID 过滤;不要按部门名称猜测 |
61
- | "查某招聘负责人名下职位" | `+job-list --recruiter-id <open_id> --user-id-type open_id` | 不要直接用 `+job-detail` 猜 `job_id` |
62
- | "看某职位完整详情 / 招聘进度" | 已知单个 `job_id` 时 `+job-detail --job-id <job_id>`;多个职位进展用 `+job-list --with-stage-counts --fields job_title,stage_counts` | 不要为统计每个职位阶段人数去扫 `+application-list` |
63
- | "按需求短码 / 招需 ID 查需求" | `+job-requirement-list` | 不要用职位接口替代需求接口 |
64
- | "查我负责的招需 / 我负责的招聘需求" | `+job-requirement-list --mine --user-id-type open_id` | Shortcut 内部获取当前用户 `data.open_id` 并下推到 `recruiter_id_list` |
65
- | "查某招聘负责人负责的招需" | `+job-requirement-list --recruiter-id <open_id> --user-id-type open_id` | 不要空查招需后按负责人名称过滤 |
66
- | "查看进行中的招需" | `+job-requirement-list --display-progress 2` | 不要只查第一页后过滤,否则容易只返回 2/3 条 |
67
- | "各招需关联了哪些职位 / 还差几个名额" | `+job-requirement-list --with-linked-jobs --fields requirement_name,progress,linked_jobs,head_count,filled_count,remaining_count` | 不要拉全量职位后在模型上下文中手工拼接 |
68
- | "看某个候选人档案" | `+talent-detail --talent-id <talent_id>` | 不要没有 `talent_id` 就直接执行,也不要改用原生 `talent detail` 猜参数 |
69
- | "看某次投递详情" | `application get` | 不要把投递详情误当成投递列表 |
70
- | "看职位下候选人进展 / 投递列表" | `+application-list`,用户明确社招/校招时加 `--process-type social\|campus` | 不要直接调用原生 `application.list` 或只展示 ID 列表 |
71
- | "按姓名/电话/邮箱/公司/学校等查投递" | `+application-list --keyword <关键词>`,用户明确社招/校招时加 `--process-type social\|campus` | 不要手动翻页后在模型上下文里过滤 |
72
- | "某候选人在我负责的职位下有几条投递 / 分别什么状态" | `+application-list --keyword <候选人> --mine --fields candidate,job,stage,application_time` | 先按候选人关键词收窄投递,再按投递关联职位负责人过滤;不要先扫我负责的全部职位再逐个查投递 |
73
- | "查终止/被锁定在其他职位/无法推进投递" | `+application-list --terminated` / `+application-list --locked`,跨职位可重复 `--job-id` | 不要先查全部投递再按阶段或锁定状态过滤 |
74
- | "查某次投递的面试记录" | `+interview-list` | 不要把面试记录场景误走成面试任务 |
75
- | "查招聘流程 / 阶段列表" | `+job-process-list` | 不要把流程配置误走成职位详情 |
76
- | "查笔试结果 / 笔试状态" | 已有投递 ID 时 `+test-list --application-id <application_id>`;当前用户任务范围内按候选人查时,先 `+interview-task-list/+evaluation-task-list --keyword` 取 `application_id` | 不要再按旧接口传 `test_ids`,也不要在无投递列表权限时改走 `+application-list` |
77
- | "查我评估/面试过的候选人的笔试状态" | 先用 `+evaluation-task-list` / `+interview-task-list` 取内部 `application_id`,再用 `+test-list --application-id ...` 过滤笔试状态 | 不要用 `+application-list` 兜底,也不要把 `待阅卷`、`未作答`、`已接受` 写成任务状态过滤 |
78
- | "查面试速记" | 已知 `interview_id` 时 `+minutes-detail` | 不要用面试记录列表伪造速记文本 |
79
- | "查新版面试评价详情" | 已知 `interview_id` 时 `+interview-record-detail --interview-id <interview_id>`;已知本人 `interview_record_id` 时传 `--interview-record-id` | 不要把 `interview_id` 当作 `interview_record_id`;Shortcut 会按当前用户筛本人面评记录 |
80
- | "查某次投递的评估记录" | `+evaluation-list` | 不要把评估记录场景误走成评估任务 |
81
- | "只要我的任务摘要" | 使用 Shortcut 默认裁剪输出 | 不要盲目加 `--view full` 或再补调关联 API |
82
-
83
- ### 2.2 资源关系
84
-
85
- ```text
86
- job / job-requirement
87
- -> application
88
- -> interview / interview-task
89
- -> minutes / interview-record
90
- -> evaluation / evaluation-task
91
- -> test
92
- -> talent
93
- job-process
94
- -> application.stage / interview.stage
95
- ```
96
-
97
- - `job` / `job-requirement` 是招聘侧的岗位与需求视角。
98
- - `application` 是候选人对职位的一次投递,是串联后续流程的中心对象。
99
- - `interview-task` / `evaluation-task` 是"当前处理人待办视角"。
100
- - `interview` / `evaluation` 是"流程实体记录视角"。
101
- - `job-process` 是招聘流程与阶段配置视角。
102
- - `test` 是笔试列表视角,底层映射到 `hire/v1/tests/search`;底层需要 `application_id_list`,Shortcut 必须传 `--application-id`。当前用户任务范围内只有候选人姓名时,先用 `+interview-task-list --keyword` 或 `+evaluation-task-list --keyword` 获取内部 `Application ID`,再传给 `+test-list`。
103
- - `minutes` 是面试速记文本视角,需要 `interview_id`。
104
- - `interview-record` 是新版面试评价详情视角,需要 `interview_record_id`。
105
- - `talent` 是候选人实体,一个人才可能对应多次投递。
106
-
107
- ### 2.3 身份与参数分发规则
108
-
109
- - 招聘域默认优先使用 `--as user`,显式遵循 `people-shared` 中的授权与提权流程。
110
- - 所有招聘 Shortcut 默认使用 `--as user`;只有用户明确指定 `--as bot` 且该 Shortcut 支持 bot 时,才使用 bot 身份。
111
- - 用户说"我负责的职位 / 我负责的招聘需求 / 我负责的招需"时,直接使用 `+job-list --mine --user-id-type open_id` 或 `+job-requirement-list --mine --user-id-type open_id`。Shortcut 会内部执行 `GET /open-apis/authen/v1/user_info` 获取当前用户 `data.open_id`,并把该 open_id 下推到招聘负责人字段。不要手动调用 `people-cli auth status` 或 `people-cli api GET /open-apis/authen/v1/user_info --as user` 后再拼命令;也不要猜测 open_id 或要求用户手填。
112
- - 用户说"我协助的职位 / 我作为招聘协助人的职位"时,直接使用 `+job-list --assistant-mine --user-id-type open_id`;用户说"我作为用人经理的职位"时,直接使用 `+job-list --hiring-manager-mine --user-id-type open_id`。两者都由 Shortcut 内部获取当前用户并下推到对应负责人字段,禁止先拉全量职位再按姓名过滤。
113
- - 用户说"我的部门 / 我的团队 / 我们部门 / 我们团队 / 本部门"相关职位、招需或投递时,直接使用对应列表 Shortcut 的 `--my-department` 或 `--my-team`。Shortcut 会内部执行 `POST /open-apis/corehr/v2/employees/query_basic_info` 获取当前用户 `data.item.department_id` 并按部门 ID 过滤;`department_id_type` 跟随 `--department-id-type`,未指定时默认 `open_department_id`。不要手动 curl、不要按部门名称猜测。
114
- - `+application-list` 会先调 `job-process.list` 获取流程 ID,并以底层 `process_id` 查询投递列表。用户说社招时传 `--process-type social`,用户说校招时传 `--process-type campus`;用户未指定流程类型时不需要追问,Shortcut 会同时查询社招和校招,合并当前页结果,并分别提示社招/校招是否还有更多数据。继续翻页时必须按提示带上对应 `--process-type` 和 `--page-token`。
115
- - 未指定流程类型的 `+application-list` 中,`--page-size` 作用于每个流程;默认会查询社招最多 5 条、校招最多 5 条。
116
- - 用户同时给出候选人关键词和"我负责的职位下"时,投递查询顺序固定为:先用 `+application-list --keyword <候选人> --mine` 按候选人收窄投递,再由 Shortcut 按投递关联职位的招聘负责人过滤当前用户。不要先 `+job-list --mine` 拉我负责的职位列表后逐个查投递,这会慢且容易漏掉候选人的其他投递。
117
- - 职位下或多个职位下的投递过滤必须优先使用 Shortcut 参数:已知多个职位时重复传 `--job-id`;终止投递用 `--terminated`;"锁定在其他职位 / 被别的职位锁定 / 无法推进 / 没法推进"用 `--locked`,等价于 `--lock-status 2`;"锁定在当前职位"用 `--lock-status 3`;姓名/电话/邮箱/公司/任职职位/学校等关键词用 `--keyword`;部门、当前用户部门/团队、阶段、来源、职位序列、招聘类型、投递月份分别用 `--department/--department-id/--my-department/--my-team`、`--stage`、`--source`、`--job-category`、`--recruitment-type`、`--month`。只有没有专用参数的返回字段条件才写入 `--where`。
118
- - 职位和招需列表的常见过滤也优先用 Shortcut 参数:`+job-list` 的部门、当前用户部门/团队、城市、职位序列、流程类型、招聘类型、启用状态用 `--department/--department-id/--my-department/--my-team`、`--city`、`--job-category`、`--process-type`、`--recruitment-type`、`--active-status/--closed`;`+job-requirement-list` 的关键词、部门、当前用户部门/团队、状态用 `--keyword`、`--department/--department-id/--my-department/--my-team`、`--progress/--display-progress`。
119
- - 时间过滤优先用 Shortcut 参数,由 CLI 负责换算时间,不要让模型自行计算毫秒时间戳。时间 flag 支持毫秒时间戳、`YYYY-MM`、`YYYY-MM-DD`、`YYYY-MM-DD HH:mm[:ss]`、`近/最近 N 天/周/月/季度/年`、`今天/today`、`昨天/yesterday`、`本月/current`、`上月/last`;`+interview-task-list` 的本月/上月/某月优先用 `--month`,已结束待评价用 `--status 待评价 --ended`;`+evaluation-task-list` 的更新时间月份优先用 `--month`。笔试仍必须同时传 `--application-id`。
120
- - 基于"我的评估/面试任务候选人"查询笔试状态时,权限链路固定为任务列表到笔试列表:先用 `+evaluation-task-list` 和/或 `+interview-task-list` 按用户时间范围取内部 `application_id`,对 `application_id` 去重后传给 `+test-list --application-id ...`。这类场景不要调用 `+application-list`,因为用户可能没有投递列表权限;也不要在任务 Shortcut 上过滤 `test_status` / `reply_status`,`待阅卷`、`未作答`、`已接受` 都是笔试字段。
121
- - 底层 `job-requirement.list` 是 `POST`,同时存在 query 参数与 request body;`+job-requirement-list` 会自动分发,禁止为了手动区分 `--params` 和 `--data` 绕过 Shortcut。
122
- - `+job-list`、`+job-detail`、`+talent-detail`、`+test-list`、`+interview-list`、`+evaluation-list`、`+job-process-list`、`+minutes-detail`、`+interview-record-detail` 已封装对应查询;只有 `application get/detail` 等无 Shortcut 的原生 API 需要在调用前先看 schema,不要猜测 ID 类型字段默认值。
123
- - 多个招聘接口包含 `user_id_type`、`department_id_type`、`job_level_id_type`、`job_family_id_type` 等类型参数,不允许自行臆断。
124
- - `+talent-detail`、`+minutes-detail`、`+interview-record-detail`、`+test-list` 都需要特定主键;缺少主键时先从上游查询结果或用户补充中获取,不要猜。`+talent-detail` 使用 `--talent-id`,不要改用原生 `talent detail`;`interview_id` 是面试 ID,不是面评 ID;查面评详情时可传 `+interview-record-detail --interview-id <interview_id>`,由 Shortcut 筛当前用户本人的 `interview_record_id` 后再查询详情。`+test-list` 必须传 `--application-id`,不支持按 `test_ids` 入参查询。
125
-
126
- ## 3. 执行规则
127
-
128
- ### 3.1 标准执行顺序
129
-
130
- 1. 先识别用户意图属于评估任务、面试任务、招聘需求、职位、人才、投递、面试记录、招聘流程、笔试、面试速记、面试评价详情、评估记录等已支持模块中的哪一个。
131
- 2. 定位到命令后,先读对应 reference;已有 Shortcut 的场景必须使用 Shortcut,无 Shortcut 的场景才使用原生 API。
132
- 3. 如使用原生 API,先执行 `people-cli schema hire.<resource>.<method>` 查看参数结构与参数位置。
133
- 4. 按 reference 中固定的输入字段组织命令,严格区分 `--params`、`--data` 和 path 参数。
134
- 5. 执行命令;列表查询默认 `page_size=5`,默认只处理受控预算内的结果。CLI/Shortcut 输出中的 `page_token` 是给 skill/agent 后续翻页使用的内部 continuation,不要在最终回复用户时展示;如存在更多数据,只提示用户"还有更多数据"。若用户明确指定查询后过滤条件,必须使用对应 Shortcut 的 `--where` / `--mode` / `--limit` / `--scan-page-limit` 让 CLI 内部受控扫描,禁止模型手动循环分页过滤。
135
- 6. 回复时只返回接口或 shortcut 实际返回的关键结果,以及建议的下一步查询动作;不得把招聘数据导出或保存为离线文件。
136
-
137
- ### 3.2 不可违反规则
138
-
139
- 1. **有 Shortcut 就用 Shortcut**:评估任务、面试任务、职位列表、职位详情、人才详情、招需列表、投递列表、面试记录、评估记录、招聘流程、笔试、面试速记、面试评价详情必须分别使用 `+evaluation-task-list`、`+interview-task-list`、`+job-list`、`+job-detail`、`+talent-detail`、`+job-requirement-list`、`+application-list`、`+interview-list`、`+evaluation-list`、`+job-process-list`、`+test-list`、`+minutes-detail`、`+interview-record-detail`,禁止绕开。
140
- 2. **任务只查当前登录用户**:两个任务类 Shortcut 都禁止传 `user_id`、`people_admin_id` 等尝试查询他人任务。
141
- 3. **先查 schema,再写原生命令**:只有无 Shortcut 的原生 API 调用前才执行 `people-cli schema hire.<resource>.<method>`;已有 Shortcut 的场景不要为了查 schema 绕开 Shortcut。
142
- 4. **参数分发严格**:无 Shortcut 的原生 API 中,query 参数放 `--params`,request body 参数放 `--data`,path 参数直接放位置参数或对应 flag;已有 Shortcut 的场景使用 Shortcut flag。
143
- 5. **不要重复 enrich / 重复裁剪**:列表 Shortcut 已按默认展示字段裁剪并默认表格化;任务 Shortcut 已自动补齐 `Evaluation/Interview`、`Application`、`Talent`;投递列表 Shortcut 已自动把列表 ID 补查为投递信息。禁止再手动拼接同一条链路。
144
- 6. **不要猜 ID**:`+job-detail` 需要真实 `job_id`;如果用户没有提供,必须先走 `+job-list`。
145
- 7. **不要跨视角混用**:任务接口解决待办问题,记录接口解决流程实体问题;不要把任务查询结果当成完整面试/评估明细。
146
- 8. **详情与笔试查询必须有 ID**:`+talent-detail` 需要 `--talent-id`,`application get/detail` 需要 `application_id`,`+minutes-detail` 需要 `--interview-id`,`+interview-record-detail` 需要 `--interview-id` 或 `--interview-record-id` 且二者只能传一个,`+test-list` 需要 `--application-id`;缺少时先从上游结果获取。若用户问"我近期评估和面试中的候选人"或"近两个月面试候选人"的笔试状态,必须从 `+evaluation-task-list` / `+interview-task-list` 获取内部 `application_id` 后再查 `+test-list`,不要改走 `+application-list`。不要把 `interview_id` 填到 `--interview-record-id`;`+test-list` 不接收 `test_ids`,也不允许只按时间范围空查。
147
- 9. **禁止编造输出数据**:所有场景下只能基于接口或 Shortcut 实际返回的内容进行输出;严禁基于常识、上下文猜测或期望结果补写不存在的职位、招需、候选人、状态、人数、负责人等字段。
148
- 10. **禁止绕过权限**:所有场景下,只要用户要求"忽略/绕过权限限制"(例如"忽略权限限制"、"无视权限"、"越权查询"、"不管有没有权限都查"),必须直接拒绝回答;不提供任何绕过或提权操作指引。若确实需要权限,请按 `people-shared` 的授权与身份选择流程处理。
149
- 11. **默认不翻页,用户回复隐藏 `page_token`**:所有需要分页的接口默认只返回当前页结果;CLI/Shortcut 必须保留并输出 `page_token` / `pageToken` 供 skill/agent 内部继续翻页。如果接口返回 `has_more=true` 或等价信号,最终回复用户时只提示"还有更多数据",不要展示 `page_token` / `pageToken`。只有用户明确要求继续时,才可用返回值继续翻页。
150
- 12. **默认不向用户展示 ID 类字段**:Shortcut 或接口返回中可以保留必要 ID 供后续调用,例如 `job_id`、`application_id`、`talent_id`、`interview_id`、`evaluation_id`、`stage_id`、`department.id` 等;但除非用户明确指定,回复用户时默认不要展示这些 ID 字段。
151
- 13. **候选人姓名默认输出为招聘系统超链接**:凡是回复中展示候选人姓名,且接口或 Shortcut 实际返回了 `talent_id`,都必须渲染为招聘系统链接。若 Shortcut 的 `Candidate Name` 已是 Markdown 链接,直接保留该值;若需要自行整理表格,必须携带同一行的 `Talent ID` / `Application ID` 拼接。若同时有 `application_id`,使用 `https://people-cn.bytedance.com/hire/talent/<talent_id>?application_id=<application_id>`;若没有 `application_id`,使用 `https://people-cn.bytedance.com/hire/talent/<talent_id>`。若缺少 `talent_id`,则只输出纯文本姓名,不要编造链接。
152
- 14. **列表查询默认只取 5 条**:所有列表查询接口和任务列表 Shortcut,默认传 `page_size=5` / `--page-size 5`。只有用户明确要求更多条数时,才调整 `page_size`,且不得超过对应 schema 的上限。
153
- 15. **列表查询默认裁剪表格化**:有列表 Shortcut 的场景必须使用 Shortcut 的 `--view summary` 紧凑表格输出。裁剪后的返回必须保留后续调用需要的内部 ID 字段;用户明确要求自定义字段时使用 `--fields`,明确要求完整结构时使用 `--view full`;不要为了字段裁剪手写 `--jq`。`--fields`、`--where`、`--group-by` 使用 reference 中的 CLI 稳定字段别名,不要把中文展示名当参数字段。回复用户时仍遵守"默认不向用户展示 ID 类字段"规则。
154
- 16. **查询后过滤必须走 Shortcut 受控扫描**:如果用户在列表场景明确指定查询后过滤条件,必须使用对应 Shortcut 的 `--where`、`--limit`、`--scan-page-limit`、`--mode`、`--group-by`,让 CLI 内部完成过滤、计数或聚合。禁止模型自己循环 `--page-token` 拉多页后过滤;也不要把第一页过滤后的 2/3 条直接当作最终结果。
155
- 17. **"我负责/我协助/我是用人经理/我的部门/我的团队"必须下推入参**:查询"我负责的职位 / 我负责的招聘需求 / 我负责的招需"时使用 `--mine`;查询"我协助的职位 / 我作为招聘协助人的职位"时使用 `+job-list --assistant-mine`;查询"我作为用人经理的职位"时使用 `+job-list --hiring-manager-mine`;查询"我的部门 / 我的团队 / 我们部门 / 我们团队 / 本部门"相关职位、招需、投递时使用对应 Shortcut 的 `--my-department` 或 `--my-team`。这些参数都会让 CLI 内部获取当前用户 `data.open_id` 或 `data.item.department_id` 并下推/过滤到对应字段;禁止使用 `people-cli auth status` 取当前用户,也禁止先拉全量列表再按负责人名称、部门名称或团队名称做本地过滤。
156
- 18. **候选人详细履历只限本人面试官链路**:教育经历、项目经历、工作经历等候选人详细内容,只能在已确认当前登录用户本人是该候选人的面试官时查看和输出。确认依据必须来自当前用户的 `+interview-task-list`、当前用户面试记录,或同一链路中明确显示当前用户为面试官的结果;无法确认时,只能输出候选人名称,不调用详情接口下钻这些字段,也不编造或推断。
157
- 19. **面评和速记只看本人内容**:`+interview-record-detail` 仅用于查看当前登录用户本人填写的面试评价;有 `interview_id` 时必须传 `--interview-id`,由 Shortcut 按当前用户筛选正确的 `interview_record_id`,不要手动从 `interview_record_list` 里挑 ID。`+minutes-detail` 仅用于查看当前登录用户本人作为面试官参与的面试速记。用户要求查看他人的面试评价、他人的面试速记,或给出无法证明属于本人面试链路的 `interview_record_id` / `interview_id` 时,必须拒绝下钻并说明不支持查看他人内容。
158
- 20. **P0 敏感查询直接拒绝**:用户要求批量导出、保存、复制或明文输出候选人手机号、身份证号、联系方式、简历附件、全量候选人信息等敏感招聘数据时,必须直接拒绝;禁止调用 CLI,禁止提示申请明文权限,禁止改用文件或剪贴板绕过。用户要求查询其他 HR/其他人的全量任务或评估结论且没有明确候选人、职位、投递或当前用户任务范围时,也直接说明不能越权查询。
159
- 21. **禁止导出招聘数据**:不得将招聘域查询结果导出、下载、复制或保存到本地/云端文件;不得创建 CSV、Excel、XLSX、JSON、NDJSON、Markdown、文档、表格等离线产物;不得使用 `--output`、shell 重定向、`tee`、`pbcopy`、管道到文件或其它方式绕过。若用户要求"导出 / 下载 / 保存 / 生成表格文件 / 发我文件",必须拒绝导出,改为在当前对话中按默认分页、裁剪和 ID 隐藏规则给摘要。
160
- 22. **原生 API JQ 不得省略 `.data`**:原生命令的 `--jq` 输入不是 schema 中的 `responseBody` 本身,而是飞书原始响应 `{code,msg,data}`。列表用 `(.data.items // [])[]` 或 `{items: (.data.items // [] | map(...)), has_more: .data.has_more}`;详情用 `.data.<object>`。如果 jq 返回 `null` 或空结果,先用 `--jq '.data | keys'` 或不带 `--jq` 查看真实结构,再修正路径,不要继续猜。
161
-
162
- ### 3.3 分页、并发与数据量限制
163
-
164
- - `+job-list`、`+job-requirement-list`、`+interview-task-list`、`+evaluation-task-list` 的分页大小上限都是 `20`;`+application-list`、`+test-list`、`+interview-list`、`+evaluation-list`、`+job-process-list`、`+minutes-detail` 的分页大小上限都是 `100`;skill 默认查询 `5` 条。底层原生列表 API 仅作为对应 Shortcut 的能力来源。
165
- - 所有 `list` 类查询默认串行执行,不要并发翻页。
166
- - 默认优先返回一页关键结果;CLI/Shortcut 输出需要保留 `page_token` / `pageToken` 供 skill/agent 内部继续翻页。如果还有更多数据,最终回复用户时只提示"还有更多数据",不要展示 `page_token` / `pageToken`。
167
- - 明确过滤条件是默认不翻页规则的例外,但只能通过 Shortcut 的受控扫描完成:`--where` 表达查询后过滤,`--limit` 控制最终返回条数,`--scan-page-limit` 控制最多扫描源页数,`--mode exists|count|aggregate` 控制存在性、计数和聚合输出,`--group-by` 指定聚合字段。触发受控扫描或显式 `--limit` 大于 `--page-size` 时,默认最多扫描 10 页,Shortcut 会自动把底层源接口 `page_size` 调大到该 Shortcut 上限以减少翻页;最终输出仍按 `--limit` / 默认 `--page-size` 裁剪。模型不得自行循环分页。
168
- - 有列表 Shortcut 的场景必须使用 Shortcut 的紧凑表格输出;Shortcut 裁剪结果仍应保留后续调用需要的内部关联 ID。无 Shortcut 的原生列表 API 才使用 `--jq` 裁剪列表结果,只取默认展示字段和内部关联 ID。不要默认返回整包 `items[]` / `data[]`。
169
- - Shortcut 场景默认使用 `--view summary` 裁剪输出;只有用户明确要求完整原始数据时才使用 `--view full`。已有 `--no-trim` 的旧 Shortcut 可兼容使用,但新写法优先 `--view full`。
170
- - 输出格式仅用于当前对话消费,不代表允许导出;禁止使用 `--format csv` / `--format ndjson`、`--output`、shell 重定向等面向文件导出的格式或参数。Shortcut 字段裁剪优先使用 `--fields`;`--format json` / `--jq` 仅允许在无 Shortcut 的原生 API 场景为当前对话内裁剪字段或后续调用取 ID 使用,不得保存成文件。
171
-
172
- ### 3.4 查询后过滤通用流程
173
-
174
- 适用于所有列表查询接口和任务列表 Shortcut。当用户明确提出以下类型的过滤条件时触发。已有 Shortcut 的场景一律使用 Shortcut 的受控扫描参数,不允许模型手动分页过滤。
175
-
176
- | 过滤类型 | 常见表达 | 执行要求 |
177
- | ------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
178
- | 时间范围 | `XX天内`、`最近一周`、`今天`、`本月` | 优先下推时间入参,并把自然日期/月交给 CLI 换算;无法下推时用 `--where` 和 `--scan-page-limit` 受控扫描 |
179
- | 状态条件 | `进行中`、`已完成`、`待评估`、`待评价`、`已关闭` | 优先下推状态入参;无法下推时用 `--where` 过滤返回字段 |
180
- | 归属条件 | `我的XXX`、`某负责人名下`、`某部门`、`某地点` | 优先下推负责人、部门、地点等入参;无法下推时用 `--where` 过滤返回字段 |
181
- | 存在性条件 | `有没有`、`是否存在`、`确认一下` | 使用 `--mode exists --limit 1`,找到 1 条即可停止 |
182
- | 统计/聚合条件 | `几条`、`数量`、`top 原因`、`按阶段/原因聚合` | 使用 `--mode count` 或 `--mode aggregate --group-by <字段>`,二维聚合用逗号分隔,如 `--group-by job_category,termination_reason`,只返回统计摘要 |
183
- | 全量措辞 | `所有`、`全部`、`有哪些` | 默认理解为当前查询范围摘要,不等于查全量;只有用户明确说 `查全 / 不漏 / 完整列表 / 全量明细` 才扩大 `--scan-page-limit`,且仍受预算和禁止导出约束限制 |
184
-
185
- 固定执行顺序:
186
-
187
- 1. **先下推可用入参**:有 Shortcut 的场景以 Shortcut 参数为准,能下推或由 Shortcut 内部过滤的必须先用专用参数,如 `--mine`、`--assistant-mine`、`--hiring-manager-mine`、`--my-department`、`--my-team`、`--recruiter-id`、`--hiring-manager-id`、`--assistant-id`、`--job-id`、`--keyword`、`--department`、`--department-id`、`--city`、`--job-category`、`--recruitment-type`、`--process-type`、`--active-status`、`--closed`、`--progress`、`--terminated`、`--locked`、`--lock-status`、`--month`、`--ended`、时间范围、状态枚举等。
188
- 2. **再表达后过滤条件**:无法下推的条件写入 `--where`,使用字段别名,如 `department contains Brand`、`city=成都`、`progress=进行中`、`conclusion contains 不通过`。
189
- 3. **选择输出模式**:普通列表用 `--mode list`;确认是否存在用 `--mode exists --limit 1`;只问数量用 `--mode count`;问原因/阶段/状态分布用 `--mode aggregate --group-by <字段>`;需要同时按两个维度聚合时用逗号分隔字段,不要拆成多条命令重复扫描。
190
- 4. **设置扫描预算**:默认 `--scan-page-limit` 由 Shortcut 控制;触发受控扫描时默认为 10 页。除非用户明确要求扩大范围,不要主动调大。触发受控扫描时无需手动调大 `--page-size`,Shortcut 会自动提高底层源接口 `page_size`,最终输出仍按 `--limit` 裁剪。即使用户说"所有/全部",也先按默认预算返回摘要和 `Scanned pages` / `Truncated` 信息。
191
- 5. **组织回复**:只输出符合条件的数据或聚合摘要;不向用户展示 `page_token` / `pageToken`;可在内部使用返回里的分页 token 和 ID 字段继续调用接口,但默认不向用户展示 ID 类字段。
192
-
193
- ### 3.5 Shortcut 参数高频纠错
194
-
195
- 模型拼接命令时,优先使用各 reference 的稳定字段别名和专用 flag。遇到下列表达时按右侧写法修正,不要凭自然语言字段名猜测:
196
-
197
- | 错误/高风险写法 | 正确写法 |
198
- | --- | --- |
199
- | `--where 'name contains xxx'` 查职位 | `+job-list --keyword xxx`,或 `--where 'job_title contains xxx'` / `title contains xxx` |
200
- | `--fields id,name` 查职位 | `--fields job_id,job_title`;CLI 兼容 `id,name`,但 skill 输出仍不展示 ID |
201
- | `--where 'status=招聘中'` 查职位 | 优先 `+job-list --active-status active`;已关闭用 `--closed` 或 `--active-status inactive` |
202
- | `--where 'interview_time ...'` 查面试任务 | 优先 `+interview-task-list --month 本月/上月` 或 `--start-time 近两个月 --end-time 今天`;返回字段过滤用 `begin_time` |
203
- | `--where 'A AND B'` | 优先写成 `--where 'A; B'`;CLI 兼容 `AND`,但不支持 `OR` 表达式 |
204
- | 模型自行计算毫秒时间戳 | 直接把日期或月份传给时间 flag,由 CLI 换算;月份优先用 `--month` |
205
- | `--time-from/--time-to` 用在任务/记录列表 | 面试任务、评估任务、面试记录、评估记录、笔试均支持;投递仍用 `--start-time/--end-time` 或 `--update-start-time/--update-end-time` |
206
- | `--status completed` 查评估任务 | `+evaluation-task-list --status 已评估`;CLI 兼容 `completed` |
207
- | `--where 'status=待阅卷'` 查评估/面试任务 | 先从任务 Shortcut 取 `application_id`,再 `+test-list --where 'test_status=待阅卷'` |
208
- | `--where 'score is not null'` 查笔试已打分 | 优先 `+test-list --graded`;CLI 也支持 `--where 'score is not null'` / `--where 'graded=true'` |
209
- | `--where 'conclusion contains ...'` 查面试任务/面试列表 | 面评详情用 `+interview-record-detail --interview-id <interview_id>`;不要在任务列表上过滤面评结论 |
210
- | `--fields application.stage` / `talent.name` 这类嵌套路径 | 使用稳定别名,如 `application_id,candidate,job,stage,active_status` |
211
- | `source/channel/current_stage` 投递筛选 | 来源优先 `+application-list --source <来源>`;阶段用 `--stage` 或 `stage/current_stage` 字段别名 |
212
-
213
- 禁止行为:
214
-
215
- - 不要手动循环 `--page-token` 后在模型上下文中过滤。
216
- - 不要把自然语言里的"所有/全部/有哪些"直接解释为查完整全量明细。
217
- - 不要为了凑数编造结果。
218
- - 不要把不符合条件的数据混入结果。
219
- - 不要在回复中暴露内部翻页 token。
220
-
221
- ## 4. 常见错误与恢复
222
-
223
- | 错误 / 现象 | 含义 | 恢复动作 |
224
- | ------------------------------------------------ | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
225
- | 任务 Shortcut 报参数错误 | 误传 `user_id` 或把 `activity-status` 传成字符串 | 去掉非法参数;`--activity-status` 必须传 int |
226
- | `+job-detail` 无法执行 | 缺少 `job_id` | 先执行 `+job-list` 定位职位,再查详情 |
227
- | `+talent-detail` / `application get` 无法执行 | 缺少主键 ID | 先从任务、投递、面试、评估等上游结果中提取 `talent_id` / `application_id` |
228
- | `+test-list` 参数错误 | 未指定投递 ID | 已有投递 ID 时传 `--application-id`;只有候选人姓名且范围是当前用户任务时,先用 `+interview-task-list/+evaluation-task-list --keyword` 获取 `application_id`;不要手写原生 `tests/search` |
229
- | 在评估/面试任务上过滤 `待阅卷`、`未作答`、`已接受` | 把笔试状态误当成任务状态 | 先用任务 Shortcut 取 `application_id`,再用 `+test-list --where 'test_status=待阅卷' --mode aggregate --group-by application_id` 或 `--where 'reply_status=已接受; test_status=未作答'`;最终按 `application_id` 去重,不向用户展示 ID |
230
- | `+minutes-detail` 无法执行 | 缺少 `interview_id` | 先用 `+interview-list` 或任务 Shortcut 定位面试 ID |
231
- | `+interview-record-detail` 无法执行 | 缺少 `interview_id` 或本人 `interview_record_id` | 优先从面试记录、面试任务中拿 `interview_id`,用 `--interview-id` 让 Shortcut 筛本人面评记录;不要把 `interview_id` 填到 `--interview-record-id` |
232
- | 招聘需求列表参数位置错误 | 绕过 Shortcut 手写原生命令,或把 body 字段塞到了 query | 改用 `+job-requirement-list`;Shortcut 会自动分发 query 和 body 参数 |
233
- | 招聘接口返回权限不足 | 当前身份未授权相关 scope | 按 `people-shared` 的授权 / 提权流程处理 |
234
- | 返回结果过大 | 未使用分页、未裁剪输出、查询范围过宽 | 收窄筛选条件、控制 `page_size`;有 Shortcut 用 `--fields` / `--view summary`,无 Shortcut 的原生 API 必要时才用 `--jq` 提取 |
235
- | 用户要求导出招聘数据 | 离线导出不允许 | 拒绝导出;改为当前对话内分页、裁剪后的摘要输出 |
236
- | 用户要求明文联系方式/简历附件/全量候选人信息 | 命中 P0 敏感数据边界 | 直接拒绝,不调用 CLI,不提示申请明文权限,不生成文件 |
237
- | 用户要求查询其他 HR/其他人的全量任务或评估结论 | 任务 Shortcut 只支持当前登录用户,且存在越权风险 | 不触发认证或授权;说明不能越权查询,并要求提供明确候选人、职位、投递或改查当前用户任务范围 |
238
- | 用户要求候选人教育/项目/工作经历等详细履历 | 未确认当前登录用户本人是该候选人的面试官 | 不下钻详情字段;只返回候选人名称,并说明详细履历仅支持本人作为面试官的候选人 |
239
- | 用户要求查看他人面试评价或面试速记 | 面评和速记仅支持当前登录用户本人内容 | 拒绝查询他人内容;仅当 `interview_record_id` / `interview_id` 来自本人面试链路时才可继续 |
240
- | 原生 API `--jq` 返回 `null` 或空结果 | jq 路径省略了飞书响应外层 `.data` | 改成 `.data.items` / `.data.<object>`;必要时先用 `--jq '.data \| keys'` 探测 |
241
-
242
- ## 5. 参考文档
243
-
244
- - [people-hire-evaluation-task-list.md](references/people-hire-evaluation-task-list.md) — 评估任务场景
245
- - [people-hire-interview-task-list.md](references/people-hire-interview-task-list.md) — 面试任务场景
246
- - [people-hire-job-requirement.md](references/people-hire-job-requirement.md) — 招聘需求场景
247
- - [people-hire-job.md](references/people-hire-job.md) — 职位场景
248
- - [people-hire-talent.md](references/people-hire-talent.md) — 人才场景
249
- - [people-hire-application.md](references/people-hire-application.md) — 投递场景
250
- - [people-hire-interview.md](references/people-hire-interview.md) — 面试记录场景
251
- - [people-hire-job-process.md](references/people-hire-job-process.md) — 招聘流程场景
252
- - [people-hire-test.md](references/people-hire-test.md) — 笔试场景
253
- - [people-hire-minutes.md](references/people-hire-minutes.md) — 面试速记场景
254
- - [people-hire-interview-record.md](references/people-hire-interview-record.md) — 面试评价详情场景
255
- - [people-hire-evaluation.md](references/people-hire-evaluation.md) — 评估记录场景