@reconcrap/boss-recommend-mcp 2.0.45 → 2.0.47

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 (56) hide show
  1. package/bin/boss-recommend-mcp.js +4 -4
  2. package/config/screening-config.example.json +27 -27
  3. package/package.json +1 -1
  4. package/scripts/postinstall.cjs +44 -44
  5. package/skills/boss-chat/README.md +39 -39
  6. package/skills/boss-chat/SKILL.md +93 -93
  7. package/skills/boss-recommend-pipeline/README.md +12 -12
  8. package/skills/boss-recommend-pipeline/SKILL.md +180 -180
  9. package/skills/boss-recruit-pipeline/README.md +17 -17
  10. package/skills/boss-recruit-pipeline/SKILL.md +58 -58
  11. package/src/chat-mcp.js +1780 -1780
  12. package/src/chat-runtime-config.js +749 -749
  13. package/src/cli.js +3054 -3054
  14. package/src/core/boss-cards/index.js +199 -199
  15. package/src/core/browser/index.js +1453 -1446
  16. package/src/core/capture/index.js +1201 -1201
  17. package/src/core/cv-acquisition/index.js +238 -238
  18. package/src/core/cv-capture-target/index.js +299 -299
  19. package/src/core/greet-quota/index.js +54 -54
  20. package/src/core/infinite-list/index.js +1326 -1326
  21. package/src/core/reporting/legacy-csv.js +341 -341
  22. package/src/core/run/timing.js +33 -33
  23. package/src/core/screening/index.js +50 -3
  24. package/src/core/self-heal/index.js +973 -973
  25. package/src/core/self-heal/viewport.js +564 -564
  26. package/src/domains/chat/cards.js +137 -137
  27. package/src/domains/chat/constants.js +221 -221
  28. package/src/domains/chat/detail.js +1668 -1661
  29. package/src/domains/chat/index.js +7 -7
  30. package/src/domains/chat/jobs.js +592 -588
  31. package/src/domains/chat/page-guard.js +98 -98
  32. package/src/domains/chat/roots.js +56 -56
  33. package/src/domains/chat/run-service.js +1977 -1955
  34. package/src/domains/recommend/actions.js +457 -457
  35. package/src/domains/recommend/cards.js +243 -243
  36. package/src/domains/recommend/constants.js +165 -165
  37. package/src/domains/recommend/detail.js +36 -28
  38. package/src/domains/recommend/filters.js +610 -581
  39. package/src/domains/recommend/index.js +10 -10
  40. package/src/domains/recommend/jobs.js +316 -263
  41. package/src/domains/recommend/refresh.js +472 -472
  42. package/src/domains/recommend/roots.js +80 -80
  43. package/src/domains/recommend/run-service.js +75 -35
  44. package/src/domains/recommend/scopes.js +246 -245
  45. package/src/domains/recruit/actions.js +277 -277
  46. package/src/domains/recruit/cards.js +74 -74
  47. package/src/domains/recruit/constants.js +167 -167
  48. package/src/domains/recruit/detail.js +461 -460
  49. package/src/domains/recruit/index.js +9 -9
  50. package/src/domains/recruit/instruction-parser.js +451 -451
  51. package/src/domains/recruit/refresh.js +44 -44
  52. package/src/domains/recruit/roots.js +68 -68
  53. package/src/domains/recruit/run-service.js +1207 -1161
  54. package/src/domains/recruit/search.js +1202 -1149
  55. package/src/recommend-mcp.js +22 -22
  56. package/src/recruit-mcp.js +1338 -1338
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
2
- import { runCli } from "../src/cli.js";
3
-
4
- await runCli(process.argv);
1
+ #!/usr/bin/env node
2
+ import { runCli } from "../src/cli.js";
3
+
4
+ await runCli(process.argv);
@@ -1,28 +1,28 @@
1
1
  {
2
- "baseUrl": "https://api.openai.com/v1",
3
- "apiKey": "replace-with-openai-api-key",
4
- "model": "gpt-4.1-mini",
5
- "llmModels": [],
6
- "greetingMessage": "Hi同学,能麻烦发下简历吗?",
7
- "llmThinkingLevel": "low",
8
- "llmTimeoutMs": 60000,
9
- "llmMaxTokens": 512,
10
- "llmMaxRetries": 3,
11
- "llmImageLimit": 8,
12
- "llmImageDetail": "low",
13
- "debugPort": 9222,
14
- "outputDir": "",
15
- "humanRestEnabled": true,
16
- "humanBehavior": {
17
- "enabled": true,
18
- "profile": "paced_with_rests",
19
- "clickMovement": true,
20
- "textEntry": true,
21
- "listScrollJitter": true,
22
- "shortRest": true,
23
- "batchRest": true,
24
- "actionCooldown": true
25
- },
26
- "openaiOrganization": "optional-org-id",
27
- "openaiProject": "optional-project-id"
28
- }
2
+ "baseUrl": "https://api.openai.com/v1",
3
+ "apiKey": "replace-with-openai-api-key",
4
+ "model": "gpt-4.1-mini",
5
+ "llmModels": [],
6
+ "greetingMessage": "Hi同学,能麻烦发下简历吗?",
7
+ "llmThinkingLevel": "low",
8
+ "llmTimeoutMs": 60000,
9
+ "llmMaxTokens": 512,
10
+ "llmMaxRetries": 3,
11
+ "llmImageLimit": 8,
12
+ "llmImageDetail": "low",
13
+ "debugPort": 9222,
14
+ "outputDir": "",
15
+ "humanRestEnabled": true,
16
+ "humanBehavior": {
17
+ "enabled": true,
18
+ "profile": "paced_with_rests",
19
+ "clickMovement": true,
20
+ "textEntry": true,
21
+ "listScrollJitter": true,
22
+ "shortRest": true,
23
+ "batchRest": true,
24
+ "actionCooldown": true
25
+ },
26
+ "openaiOrganization": "optional-org-id",
27
+ "openaiProject": "optional-project-id"
28
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reconcrap/boss-recommend-mcp",
3
- "version": "2.0.45",
3
+ "version": "2.0.47",
4
4
  "description": "Unified MCP pipeline for recommend-page filtering and screening on Boss Zhipin",
5
5
  "keywords": [
6
6
  "boss",
@@ -1,44 +1,44 @@
1
- #!/usr/bin/env node
2
- const fs = require("node:fs");
3
- const path = require("node:path");
4
- const { spawnSync } = require("node:child_process");
5
-
6
- function isGlobalInstall() {
7
- if (String(process.env.npm_config_global || "").toLowerCase() === "true") return true;
8
- if (String(process.env.npm_config_location || "").toLowerCase() === "global") return true;
9
-
10
- const argvRaw = String(process.env.npm_config_argv || "");
11
- if (argvRaw.includes("--global") || argvRaw.includes(" -g ")) return true;
12
-
13
- return false;
14
- }
15
-
16
- function main() {
17
- const cliPath = path.join(__dirname, "..", "src", "cli.js");
18
- if (!fs.existsSync(cliPath)) {
19
- return;
20
- }
21
-
22
- const initCwd = String(process.env.INIT_CWD || "").trim();
23
- const workspaceArgs = initCwd ? ["--workspace-root", path.resolve(initCwd)] : [];
24
- const cliArgs = isGlobalInstall()
25
- ? [cliPath, "install", ...workspaceArgs]
26
- : [cliPath, "init-config", ...workspaceArgs];
27
-
28
- const result = spawnSync(process.execPath, cliArgs, {
29
- cwd: path.join(__dirname, ".."),
30
- stdio: "inherit",
31
- windowsHide: true,
32
- shell: false
33
- });
34
-
35
- if (result.error) {
36
- console.warn(`[boss-recommend-mcp] postinstall warning: ${result.error.message}`);
37
- return;
38
- }
39
- if (typeof result.status === "number" && result.status !== 0) {
40
- console.warn(`[boss-recommend-mcp] postinstall warning: install exited with code ${result.status}`);
41
- }
42
- }
43
-
44
- main();
1
+ #!/usr/bin/env node
2
+ const fs = require("node:fs");
3
+ const path = require("node:path");
4
+ const { spawnSync } = require("node:child_process");
5
+
6
+ function isGlobalInstall() {
7
+ if (String(process.env.npm_config_global || "").toLowerCase() === "true") return true;
8
+ if (String(process.env.npm_config_location || "").toLowerCase() === "global") return true;
9
+
10
+ const argvRaw = String(process.env.npm_config_argv || "");
11
+ if (argvRaw.includes("--global") || argvRaw.includes(" -g ")) return true;
12
+
13
+ return false;
14
+ }
15
+
16
+ function main() {
17
+ const cliPath = path.join(__dirname, "..", "src", "cli.js");
18
+ if (!fs.existsSync(cliPath)) {
19
+ return;
20
+ }
21
+
22
+ const initCwd = String(process.env.INIT_CWD || "").trim();
23
+ const workspaceArgs = initCwd ? ["--workspace-root", path.resolve(initCwd)] : [];
24
+ const cliArgs = isGlobalInstall()
25
+ ? [cliPath, "install", ...workspaceArgs]
26
+ : [cliPath, "init-config", ...workspaceArgs];
27
+
28
+ const result = spawnSync(process.execPath, cliArgs, {
29
+ cwd: path.join(__dirname, ".."),
30
+ stdio: "inherit",
31
+ windowsHide: true,
32
+ shell: false
33
+ });
34
+
35
+ if (result.error) {
36
+ console.warn(`[boss-recommend-mcp] postinstall warning: ${result.error.message}`);
37
+ return;
38
+ }
39
+ if (typeof result.status === "number" && result.status !== 0) {
40
+ console.warn(`[boss-recommend-mcp] postinstall warning: install exited with code ${result.status}`);
41
+ }
42
+ }
43
+
44
+ main();
@@ -1,39 +1,39 @@
1
- # boss-chat
2
-
3
- Bundled chat-page automation skill shipped with `boss-recommend-mcp`.
4
-
5
- Package: `@reconcrap/boss-recommend-mcp` (npm)
6
- Source: `https://github.com/reconcrap-cpu/boss-recommend-mcp`
7
-
8
- Use this skill when the user wants a chat-only Boss workflow without installing `boss-chat` separately.
9
-
10
- ## Stable Prompt Template (Trae-CN)
11
-
12
- Use the following prompt when host agents are prone to loop detection in long conversations:
13
-
14
- ```text
15
- Please run a Boss chat-only task (do not switch to recommend flow).
16
-
17
- Execution order:
18
- 1) Call boss_chat_health_check.
19
- 2) Call prepare_boss_chat_run once (empty params allowed) to fetch job_options and missing fields.
20
- 3) Ask for these required fields in one shot: job, start_from (unread/all), target_count, criteria.
21
- 4) After user reply, call start_boss_chat_run exactly once to start the run.
22
- 5) If ACCEPTED, reply only with run_id and "task started"; no auto polling.
23
-
24
- Anti-loop rules:
25
- - Do not repeat the same sentence across turns.
26
- - On validation errors, list all missing/invalid fields once.
27
- - Do not use start_boss_chat_run for preflight. It is only for the final start call and must include job/start_from/target_count/criteria.
28
- - Do not call start_boss_chat_run repeatedly in one turn.
29
- - Do not call get_boss_chat_run unless user explicitly asks for progress.
30
-
31
- target_count mapping:
32
- - Positive integer means explicit cap (for example 20).
33
- - `all` / `-1` / `unlimited` / `全部` / `不限` / `扫到底` / `全量` means unlimited.
34
- - `全部候选人` / `所有候选人` must also be treated as unlimited.
35
- - Always write the argument key as `target_count`.
36
- - For unlimited mode, prefer `"target_count": "all"` in the tool call; `-1` is accepted for compatibility and used internally by the CLI.
37
- - If the tool/UI shows `扫到底(必须传 target_count="all")`, copy that literal into the next tool call instead of paraphrasing it.
38
- - If start_boss_chat_run returns NEED_INPUT for `target_count`, the previous tool call omitted the argument. Retry once using `next_call_example` and include `"target_count": "all"` or a positive integer.
39
- ```
1
+ # boss-chat
2
+
3
+ Bundled chat-page automation skill shipped with `boss-recommend-mcp`.
4
+
5
+ Package: `@reconcrap/boss-recommend-mcp` (npm)
6
+ Source: `https://github.com/reconcrap-cpu/boss-recommend-mcp`
7
+
8
+ Use this skill when the user wants a chat-only Boss workflow without installing `boss-chat` separately.
9
+
10
+ ## Stable Prompt Template (Trae-CN)
11
+
12
+ Use the following prompt when host agents are prone to loop detection in long conversations:
13
+
14
+ ```text
15
+ Please run a Boss chat-only task (do not switch to recommend flow).
16
+
17
+ Execution order:
18
+ 1) Call boss_chat_health_check.
19
+ 2) Call prepare_boss_chat_run once (empty params allowed) to fetch job_options and missing fields.
20
+ 3) Ask for these required fields in one shot: job, start_from (unread/all), target_count, criteria.
21
+ 4) After user reply, call start_boss_chat_run exactly once to start the run.
22
+ 5) If ACCEPTED, reply only with run_id and "task started"; no auto polling.
23
+
24
+ Anti-loop rules:
25
+ - Do not repeat the same sentence across turns.
26
+ - On validation errors, list all missing/invalid fields once.
27
+ - Do not use start_boss_chat_run for preflight. It is only for the final start call and must include job/start_from/target_count/criteria.
28
+ - Do not call start_boss_chat_run repeatedly in one turn.
29
+ - Do not call get_boss_chat_run unless user explicitly asks for progress.
30
+
31
+ target_count mapping:
32
+ - Positive integer means explicit cap (for example 20).
33
+ - `all` / `-1` / `unlimited` / `全部` / `不限` / `扫到底` / `全量` means unlimited.
34
+ - `全部候选人` / `所有候选人` must also be treated as unlimited.
35
+ - Always write the argument key as `target_count`.
36
+ - For unlimited mode, prefer `"target_count": "all"` in the tool call; `-1` is accepted for compatibility and used internally by the CLI.
37
+ - If the tool/UI shows `扫到底(必须传 target_count="all")`, copy that literal into the next tool call instead of paraphrasing it.
38
+ - If start_boss_chat_run returns NEED_INPUT for `target_count`, the previous tool call omitted the argument. Retry once using `next_call_example` and include `"target_count": "all"` or a positive integer.
39
+ ```
@@ -1,93 +1,93 @@
1
- ---
2
- name: "boss-chat"
3
- description: "Use when users want Boss chat-page screening/outreach via the bundled boss-chat runtime inside boss-recommend-mcp."
4
- ---
5
-
6
- # Boss Chat Skill
7
-
8
- ## Goal
9
-
10
- 当用户要在 Boss 聊天页单独跑筛选/沟通任务时,必须走内置的 chat 工具,而不是要求用户单独安装 `boss-chat`。
11
-
12
- 适用范围是“chat-only 会话”。若用户意图包含推荐页找人(尤其是“先推荐再沟通”),必须先让 `boss-recommend-pipeline` 完成推荐页任务;推荐完成后如用户仍要聊天页处理,再显式走本 skill。
13
-
14
- ## Tool Routing
15
-
16
- - 健康检查:`boss_chat_health_check`
17
- - 预备并获取岗位列表:`prepare_boss_chat_run`
18
- - 启动异步任务:`start_boss_chat_run`
19
- - 查询进度:`get_boss_chat_run`
20
- - 暂停:`pause_boss_chat_run`
21
- - 继续:`resume_boss_chat_run`
22
- - 取消:`cancel_boss_chat_run`
23
-
24
- ## Required Inputs
25
-
26
- - `job`
27
- - `start_from`: `unread|all`
28
- - `target_count`
29
- - `criteria`
30
-
31
- 可选:
32
-
33
- - `profile`(默认 `default`)
34
- - `greeting_text`(兼容 `greetingText`,可选自定义首条打招呼消息)
35
- - `port`
36
- - `dry_run`
37
- - `no_state`
38
- - `safe_pacing`
39
- - `batch_rest_enabled`
40
-
41
- `greeting_text` 默认规则:
42
-
43
- - 本次显式传入 `greeting_text`:使用本次值
44
- - 本次未传,但当前 `profile` 有历史输入:使用历史值
45
- - 两者都没有:使用内置默认招呼语(`Hi同学,能麻烦发下简历吗?`)
46
-
47
- `target_count` 填写规则(关键):
48
-
49
- - 正整数:如 `20`
50
- - 扫到底:`all` / `-1` / `unlimited` / `全部` / `不限` / `扫到底` / `全量`
51
- - 同义短语也可直接用:`全部候选人` / `所有候选人`(等价于扫到底)
52
-
53
- ## Hard Rules
54
-
55
- - LLM 配置必须复用 `boss-recommend-mcp` 的 `screening-config.json`;不要再向用户单独要 `baseUrl/apiKey/model`。
56
- - 路由护栏(强制):
57
- - 只在用户明确是 chat-only 任务时使用本 skill。
58
- - 只要用户提到推荐页、先找人后沟通、或需要推荐筛选阶段,禁止直接调用 `start_boss_chat_run`;必须先交给 `boss-recommend-pipeline` 完成推荐页任务。
59
- - 不得在 recommend 任务尚未完成时并行启动独立 chat run。
60
- - 启动或准备 chat run 时,若本机默认 `127.0.0.1:9222` Chrome DevTools 端口不可连,工具会自动打开 Chrome 并导航到 `https://www.zhipin.com/web/chat/index`。
61
- - 只有工具返回 `BOSS_LOGIN_REQUIRED` / `requires_login=true` 时,才要求用户在自动打开的 Chrome 窗口人工登录 Boss 后重试;不要把“没开 9222 Chrome”当作缺参。
62
- - 若本机找不到 Chrome,可提示用户设置 `BOSS_MCP_CHROME_PATH` 或 `BOSS_RECOMMEND_CHROME_PATH`;非本机 debug host 不自动启动。
63
- - `job` / `start_from` / `criteria` 缺一不可;缺参时只补缺口。
64
- - `target_count` 在 chat-only 启动前也是必填项,不能默认省略。
65
- - 当用户说“全部候选人/所有候选人”时,必须按“扫到底(unlimited)”处理,不要再追问正整数。
66
- - 参数名必须写 `target_count`(不要写“目标数量”等中文键名)。
67
- - 当用户选择“扫到底/全部候选人/所有候选人”时,调用参数优先写:`"target_count": "all"`;`-1` 只作为兼容输入和内部 CLI 表示。
68
- - `greeting_text` 是可选项,不能因为缺少它阻塞启动或追加必填追问。
69
- - 若工具或提问选项里出现“扫到底(必须传 `target_count=\"all\"`)”之类字样,下一次工具调用时必须直接照抄这个字面量,不要只保留“扫到底”语义。
70
- - 禁止 agent 自行补全 `job/start_from/criteria` 并直接执行,必须由用户明确给出或确认。
71
- - chat-only 启动流程必须先进入聊天页并拉取岗位列表,再让用户从列表中选择 `job`。
72
- - 必须先用空参调用 `prepare_boss_chat_run` 获取 `job_options`;不要用 `start_boss_chat_run` 做预备调用。
73
- - `start_boss_chat_run` 只能用于真正启动,必须一次性传齐 `job` / `start_from` / `target_count` / `criteria`。
74
- - 若 `start_boss_chat_run` 返回 `NEED_INPUT` 且 `missing_fields` 包含 `target_count`,说明你没有把用户选择写入工具参数;下一次调用必须照 `next_call_example` 原样补上 `"target_count": "all"` 或正整数,不要重复空调用。
75
- - 默认不自动轮询;只有用户要求查进度时才调用 `get_boss_chat_run`。
76
- - `start_boss_chat_run` 返回 `ACCEPTED` 后,默认立即结束当前回合,不得主动连续调用 `get_boss_chat_run`。
77
- - 只有当用户明确给出“轮询频率/间隔”(例如“每30分钟查一次”)时,才允许按该频率查询进度。
78
- - 长任务场景禁止高频轮询;若需持续观察,默认按 30 分钟间隔查询一次状态(除非用户明确要求更频繁)。
79
- - `pause/resume/cancel` 必须复用同一个 `run_id`。
80
-
81
- ## Handoff Rule (Recommend -> Chat)
82
-
83
- - 若用户先运行了 recommend 流水线,并在手动状态检查时确认 recommend 已完成,且用户目标是“立即进入聊天沟通”:
84
- - 先调用 `prepare_boss_chat_run` 获取聊天页岗位列表与缺参。
85
- - 显式确认 `job/start_from/target_count/criteria` 后再调用 `start_boss_chat_run`。
86
- - 不要查找或依赖 `follow_up.chat`;该自动衔接路径属于 legacy-only 行为。
87
-
88
- ## Response Style
89
-
90
- - 用结构化中文。
91
- - 首轮建议先调用一次 `prepare_boss_chat_run`(可空参)获取 `job_options` 与 `pending_questions`。
92
- - 缺参时必须逐项确认:`job`(来自岗位列表)、`start_from`(`unread|all`)、`target_count`、`criteria`。
93
- - 若健康检查失败,明确提示共享配置文件 `screening-config.json` 不可用。
1
+ ---
2
+ name: "boss-chat"
3
+ description: "Use when users want Boss chat-page screening/outreach via the bundled boss-chat runtime inside boss-recommend-mcp."
4
+ ---
5
+
6
+ # Boss Chat Skill
7
+
8
+ ## Goal
9
+
10
+ 当用户要在 Boss 聊天页单独跑筛选/沟通任务时,必须走内置的 chat 工具,而不是要求用户单独安装 `boss-chat`。
11
+
12
+ 适用范围是“chat-only 会话”。若用户意图包含推荐页找人(尤其是“先推荐再沟通”),必须先让 `boss-recommend-pipeline` 完成推荐页任务;推荐完成后如用户仍要聊天页处理,再显式走本 skill。
13
+
14
+ ## Tool Routing
15
+
16
+ - 健康检查:`boss_chat_health_check`
17
+ - 预备并获取岗位列表:`prepare_boss_chat_run`
18
+ - 启动异步任务:`start_boss_chat_run`
19
+ - 查询进度:`get_boss_chat_run`
20
+ - 暂停:`pause_boss_chat_run`
21
+ - 继续:`resume_boss_chat_run`
22
+ - 取消:`cancel_boss_chat_run`
23
+
24
+ ## Required Inputs
25
+
26
+ - `job`
27
+ - `start_from`: `unread|all`
28
+ - `target_count`
29
+ - `criteria`
30
+
31
+ 可选:
32
+
33
+ - `profile`(默认 `default`)
34
+ - `greeting_text`(兼容 `greetingText`,可选自定义首条打招呼消息)
35
+ - `port`
36
+ - `dry_run`
37
+ - `no_state`
38
+ - `safe_pacing`
39
+ - `batch_rest_enabled`
40
+
41
+ `greeting_text` 默认规则:
42
+
43
+ - 本次显式传入 `greeting_text`:使用本次值
44
+ - 本次未传,但当前 `profile` 有历史输入:使用历史值
45
+ - 两者都没有:使用内置默认招呼语(`Hi同学,能麻烦发下简历吗?`)
46
+
47
+ `target_count` 填写规则(关键):
48
+
49
+ - 正整数:如 `20`
50
+ - 扫到底:`all` / `-1` / `unlimited` / `全部` / `不限` / `扫到底` / `全量`
51
+ - 同义短语也可直接用:`全部候选人` / `所有候选人`(等价于扫到底)
52
+
53
+ ## Hard Rules
54
+
55
+ - LLM 配置必须复用 `boss-recommend-mcp` 的 `screening-config.json`;不要再向用户单独要 `baseUrl/apiKey/model`。
56
+ - 路由护栏(强制):
57
+ - 只在用户明确是 chat-only 任务时使用本 skill。
58
+ - 只要用户提到推荐页、先找人后沟通、或需要推荐筛选阶段,禁止直接调用 `start_boss_chat_run`;必须先交给 `boss-recommend-pipeline` 完成推荐页任务。
59
+ - 不得在 recommend 任务尚未完成时并行启动独立 chat run。
60
+ - 启动或准备 chat run 时,若本机默认 `127.0.0.1:9222` Chrome DevTools 端口不可连,工具会自动打开 Chrome 并导航到 `https://www.zhipin.com/web/chat/index`。
61
+ - 只有工具返回 `BOSS_LOGIN_REQUIRED` / `requires_login=true` 时,才要求用户在自动打开的 Chrome 窗口人工登录 Boss 后重试;不要把“没开 9222 Chrome”当作缺参。
62
+ - 若本机找不到 Chrome,可提示用户设置 `BOSS_MCP_CHROME_PATH` 或 `BOSS_RECOMMEND_CHROME_PATH`;非本机 debug host 不自动启动。
63
+ - `job` / `start_from` / `criteria` 缺一不可;缺参时只补缺口。
64
+ - `target_count` 在 chat-only 启动前也是必填项,不能默认省略。
65
+ - 当用户说“全部候选人/所有候选人”时,必须按“扫到底(unlimited)”处理,不要再追问正整数。
66
+ - 参数名必须写 `target_count`(不要写“目标数量”等中文键名)。
67
+ - 当用户选择“扫到底/全部候选人/所有候选人”时,调用参数优先写:`"target_count": "all"`;`-1` 只作为兼容输入和内部 CLI 表示。
68
+ - `greeting_text` 是可选项,不能因为缺少它阻塞启动或追加必填追问。
69
+ - 若工具或提问选项里出现“扫到底(必须传 `target_count=\"all\"`)”之类字样,下一次工具调用时必须直接照抄这个字面量,不要只保留“扫到底”语义。
70
+ - 禁止 agent 自行补全 `job/start_from/criteria` 并直接执行,必须由用户明确给出或确认。
71
+ - chat-only 启动流程必须先进入聊天页并拉取岗位列表,再让用户从列表中选择 `job`。
72
+ - 必须先用空参调用 `prepare_boss_chat_run` 获取 `job_options`;不要用 `start_boss_chat_run` 做预备调用。
73
+ - `start_boss_chat_run` 只能用于真正启动,必须一次性传齐 `job` / `start_from` / `target_count` / `criteria`。
74
+ - 若 `start_boss_chat_run` 返回 `NEED_INPUT` 且 `missing_fields` 包含 `target_count`,说明你没有把用户选择写入工具参数;下一次调用必须照 `next_call_example` 原样补上 `"target_count": "all"` 或正整数,不要重复空调用。
75
+ - 默认不自动轮询;只有用户要求查进度时才调用 `get_boss_chat_run`。
76
+ - `start_boss_chat_run` 返回 `ACCEPTED` 后,默认立即结束当前回合,不得主动连续调用 `get_boss_chat_run`。
77
+ - 只有当用户明确给出“轮询频率/间隔”(例如“每30分钟查一次”)时,才允许按该频率查询进度。
78
+ - 长任务场景禁止高频轮询;若需持续观察,默认按 30 分钟间隔查询一次状态(除非用户明确要求更频繁)。
79
+ - `pause/resume/cancel` 必须复用同一个 `run_id`。
80
+
81
+ ## Handoff Rule (Recommend -> Chat)
82
+
83
+ - 若用户先运行了 recommend 流水线,并在手动状态检查时确认 recommend 已完成,且用户目标是“立即进入聊天沟通”:
84
+ - 先调用 `prepare_boss_chat_run` 获取聊天页岗位列表与缺参。
85
+ - 显式确认 `job/start_from/target_count/criteria` 后再调用 `start_boss_chat_run`。
86
+ - 不要查找或依赖 `follow_up.chat`;该自动衔接路径属于 legacy-only 行为。
87
+
88
+ ## Response Style
89
+
90
+ - 用结构化中文。
91
+ - 首轮建议先调用一次 `prepare_boss_chat_run`(可空参)获取 `job_options` 与 `pending_questions`。
92
+ - 缺参时必须逐项确认:`job`(来自岗位列表)、`start_from`(`unread|all`)、`target_count`、`criteria`。
93
+ - 若健康检查失败,明确提示共享配置文件 `screening-config.json` 不可用。
@@ -1,12 +1,12 @@
1
- # Boss Recommend Pipeline Skill
2
-
3
- 用于 Boss 推荐页的人选筛选流水线。
4
-
5
- 核心规则:
6
-
7
- - 先确认推荐页 filters
8
- - 再确认筛选 criteria
9
- - 再确认本次运行统一动作 `favorite` 或 `greet`
10
- - 只确认一次 `post_action`,不要逐个候选人反复确认
11
- - 运行中临时中断请使用 `pause_recommend_pipeline_run`(按 run_id),不要靠自然语言“暂停/继续”指令
12
- - 继续执行请使用 `resume_recommend_pipeline_run`;状态查询默认按用户指令触发,不自动轮询
1
+ # Boss Recommend Pipeline Skill
2
+
3
+ 用于 Boss 推荐页的人选筛选流水线。
4
+
5
+ 核心规则:
6
+
7
+ - 先确认推荐页 filters
8
+ - 再确认筛选 criteria
9
+ - 再确认本次运行统一动作 `favorite` 或 `greet`
10
+ - 只确认一次 `post_action`,不要逐个候选人反复确认
11
+ - 运行中临时中断请使用 `pause_recommend_pipeline_run`(按 run_id),不要靠自然语言“暂停/继续”指令
12
+ - 继续执行请使用 `resume_recommend_pipeline_run`;状态查询默认按用户指令触发,不自动轮询