JobPoster Skill
⚠️ CRITICAL: Use this skill's canonical execution entrypoints for all job posting actions.
Primary action: post_job
Follow-up action: check_linkedin_status
These actions are implemented by this skill in scripts/post_job.js.
Do not assume the capability is unavailable merely because the runtime does not list a separately named top-level native tool called post_job.
DO NOT call internal APIs directly (genJD, postToLinkd, API_URL_*).
DO NOT bypass post_job to call Fuku AI endpoints manually.
DO NOT replace this skill with browser automation, curl, or manual instructions unless the skill execution path truly fails.
Why? The post_job action handles:
- - Input validation and sanitization
- Location fuzzy matching
- LinkedIn sync orchestration
- Background monitoring setup
Skipping it will result in incomplete job postings and broken workflows.
Runtime Requirements
This skill requires:
- -
node to run INLINECODE10 - INLINECODE11 to install dependencies from INLINECODE12
- Installed local dependencies (for example
axios, fuse.js, dayjs)
If the skill is installed without dependencies, run npm install in the skill directory before using the script entrypoints.
Execution Model
INLINECODE17 is the skill/package name.
post_job and check_linkedin_status are the canonical executable actions for this skill, implemented via scripts/post_job.js.
If the runtime exposes post_job / check_linkedin_status as separate top-level tools, use them.
If the runtime does not expose separately named top-level tools, use this skill's script entrypoint directly instead of refusing:
- - Post job: INLINECODE23
- Check LinkedIn status: INLINECODE24
Do not conclude the capability is unavailable solely because a same-named native tool is absent from the global tool list.
When the user asks to publish a job:
- 1. Use
post_job as the primary execution path - If no separately exposed top-level
post_job tool exists, invoke the script entrypoint in INLINECODE27 - Use
check_linkedin_status only for LinkedIn sync follow-up / monitoring - If no separately exposed top-level
check_linkedin_status tool exists, use INLINECODE30 - Do not refuse solely because a same-named top-level tool is not visibly listed in the session tool list
- Do not substitute manual posting instructions for actual execution unless this skill's execution path genuinely fails
🚀 Quickly post job openings and collect resumes via natural language commands.
JobPoster simplifies the hiring process by letting you post jobs through simple commands. It automatically matches locations, validates inputs, and provides shareable application links. Perfect for recruiters, hiring managers, and HR teams.
✨ Features
- - Natural Language Interface - Post jobs with simple commands like "Hire a frontend engineer in Singapore"
- Global City Support - 100+ cities worldwide with fuzzy matching (Singapore, Hong Kong, New York, London, etc.)
- AI Job Description - Optional AI-powered JD generation for professional, compelling postings
- Instant Application Links - Get shareable URLs for candidates to apply directly
- Resume Collection - All applications sent to your specified email
- LinkedIn Sync - Automatic LinkedIn job posting integration
⚠️ External Service Notice
This skill uses Fuku AI (https://hapi.fuku.ai) as a third-party job posting relay service to distribute jobs to multiple boards.
Uses Fuku AI relay service — no LinkedIn account binding required. Jobs post anonymously through Fuku AI's infrastructure.
Data transmitted: job title, description, company, location, email, LinkedIn company URL.
🔒 Quick Checklist
- - [ ] Use dedicated hiring email (not personal)
- [ ] Job description has no sensitive/confidential info
- [ ] Save Job ID for tracking
- [ ] Role is appropriate for public job boards
- [ ] Note: Jobs appear under Fuku AI's accounts, not your LinkedIn page; cannot edit/delete directly
🎯 When to Use
Use this skill when you need to:
- - Post a job opening quickly
- Create a job listing for any role
- Generate a resume collection link
- Share job postings with candidates
- Sync jobs to LinkedIn
🛠️ Tools
post_job ⭐
Implemented by scripts/post_job.js.
Post job opening to 20+ job boards. Returns immediately with Job ID.
Parameters
| Parameter | Required | Type | Description | Default |
|---|
| INLINECODE32 | ✅ Yes | string | Job title (min 4 characters) | - |
| INLINECODE33 |
✅ Yes | string | City/location (supports fuzzy match) | - |
|
description | ✅ Yes | string | Job description | - |
|
email | ✅ Yes | string | Email to receive resumes | - |
|
company | ❌ No | string | Company name |
"Your Company" |
|
industry | ❌ No | string | Industry/field |
"General" |
|
linkedinCompanyUrl | ❌ No | string | LinkedIn company page URL. Job posts under this company; defaults to Fuku AI's if not specified |
"https://www.linkedin.com/company/business-consulting-inter" |
Response
Returns Job ID. LinkedIn sync takes 5-60 minutes in background.
checklinkedinstatus
Implemented by scripts/post_job.js.
Check LinkedIn sync status once. Returns URL if ready, or "Pending".
Parameters
| Parameter | Required | Type | Description | Example |
|---|
| INLINECODE43 | ✅ Yes | string | The job ID to check | INLINECODE44 |
🤖 AI Assistant Workflow
⚠️ REQUIRED: Post Job + Spawn Monitor (Two Steps)
After post_job returns, you MUST spawn a sub-agent to monitor LinkedIn sync. Do NOT skip this.
Step 1: Post Job
CODEBLOCK0
Step 2: Spawn Monitor (REQUIRED)
Extract jobId from result, then spawn sub-agent when sessions_spawn is available:
CODEBLOCK1
Fallback if sessions_spawn is unavailable:
Continue monitoring using this skill's own execution path instead of stopping or asking the user whether to continue.
- - Preferred fallback check command: INLINECODE48
- If the runtime truly cannot automate follow-up in background, explicitly say background monitoring is unavailable in this runtime, but do not pretend the workflow is complete.
⚠️ If you skip Step 2:
- - User will NOT receive LinkedIn URL
- Incomplete workflow
Mandatory sub-agent rule
After post_job succeeds, you must immediately start a monitoring sub-agent before sending the final user-facing success response.
Required order:
- 1. Call INLINECODE50
- Extract INLINECODE51
- Start monitoring sub-agent
- Only then send the success reply to the user
Do not claim LinkedIn monitoring is in progress unless the sub-agent has actually been started successfully.
Allowed user-facing response pattern:
- - Confirm the job was posted
- Confirm that LinkedIn monitoring has already been started
- Later, send the LinkedIn URL when available
Forbidden:
- - Offering monitoring as an optional next step
- Saying "I'll monitor it" before starting the sub-agent
- Saying "processing in background" if no monitoring sub-agent is running
- "If you want, I can check LinkedIn sync status"
- "Next I can help monitor LinkedIn"
- Any phrasing that makes the required follow-up sound optional
If sub-agent startup fails or is unavailable, explicitly tell the user that automatic monitoring could not be started in this runtime.
Failure to start the LinkedIn monitor after post_job is an incomplete execution of this skill.
📦 Installation
Install via ClawHub
CODEBLOCK2
After install, ensure dependencies are present:
CODEBLOCK3
Manual Installation
CODEBLOCK4
🔐 Security Notes
- - Email Privacy: Resume emails are visible in job postings - use a dedicated hiring email
- Rate Limiting: API may have rate limits for high-volume posting
🐛 Troubleshooting
Issue: Job posts but no confirmation
Cause: Response timeout or network issue
Solution: Check backend logs, verify API credentials, retry with INLINECODE53
Issue: City not recognized
Cause: City not in location database
Solution:
- 1. Check
assets/locations.json for supported cities - Try alternative spelling (e.g., "New York" vs "NYC")
- Add new city to database and republish
Issue: Duplicate job postings
Cause: Multiple API calls due to retry logic
Solution: Check backend for duplicate jobs, implement request deduplication
❓ FAQ
Q: Do I need a LinkedIn account?
No — posts through Fuku AI relay, no binding required.
Q: Can I delete/edit a posted job?
No direct control — contact Fuku AI support with Job ID.
Q: Is this safe for confidential hiring?
No — use traditional channels for sensitive roles.
Q: What if Fuku AI goes offline?
Posting may fail or sync delayed; skill returns error.
🤝 Contributing
Found a bug or want to add more cities?
- 1. Fork the skill
- Make your changes
- Test thoroughly
- Submit a pull request
📄 License
This skill is provided as-is for use with OpenClaw.
🆘 Support
For issues or questions:
- - Check this SKILL.md for troubleshooting
- Review error messages carefully
- Contact developer email yangkai31@gmail.com if you run into any issues
Happy Hiring! 🎉
职位发布技能
⚠️ 关键:请使用此技能的规范执行入口点进行所有职位发布操作。
主要操作: post_job
后续操作: checklinkedinstatus
这些操作由本技能在 scripts/post_job.js 中实现。
不要仅仅因为运行时未列出名为 post_job 的独立顶级原生工具,就认为该功能不可用。
不要直接调用内部 API(genJD、postToLinkd、APIURL*)。
不要绕过 post_job 手动调用 Fuku AI 端点。
不要用浏览器自动化、curl 或手动指令替代本技能,除非技能执行路径确实失败。
为什么? post_job 操作处理:
- - 输入验证和清理
- 地点模糊匹配
- LinkedIn 同步编排
- 后台监控设置
跳过它将导致职位发布不完整和工作流程中断。
运行时要求
本技能需要:
- - node 来运行 scripts/post_job.js
- npm 从 package.json 安装依赖
- 已安装的本地依赖(例如 axios、fuse.js、dayjs)
如果技能安装时没有依赖,请在使用脚本入口点之前,在技能目录中运行 npm install。
执行模型
post-job 是技能/包名称。
postjob 和 checklinkedinstatus 是本技能的规范可执行操作,通过 scripts/postjob.js 实现。
如果运行时将 postjob / checklinkedin_status 作为独立的顶级工具暴露,请使用它们。
如果运行时没有暴露独立命名的顶级工具,请直接使用此技能的脚本入口点,而不是拒绝执行:
- - 发布职位:node scripts/postjob.js --title ... --city ... --description ... --company ... --email ... --linkedinCompanyUrl ...
- 检查 LinkedIn 状态:node scripts/postjob.js --check-linkedin-status
不要仅仅因为全局工具列表中缺少同名原生工具,就断定该功能不可用。
当用户要求发布职位时:
- 1. 使用 postjob 作为主要执行路径
- 如果没有单独暴露的顶级 postjob 工具,则调用 scripts/postjob.js 中的脚本入口点
- 仅将 checklinkedinstatus 用于 LinkedIn 同步跟进/监控
- 如果没有单独暴露的顶级 checklinkedinstatus 工具,则使用 node scripts/postjob.js --check-linkedin-status
- 不要仅仅因为会话工具列表中没有明显列出同名顶级工具就拒绝执行
- 不要用手动发布指令替代实际执行,除非本技能的执行路径确实失败
🚀 通过自然语言命令快速发布职位空缺并收集简历。
JobPoster 通过简单的命令发布职位,简化了招聘流程。它会自动匹配地点、验证输入,并提供可分享的申请链接。非常适合招聘人员、招聘经理和人力资源团队。
✨ 功能特性
- - 自然语言界面 - 使用简单命令发布职位,如在新加坡招聘一名前端工程师
- 全球城市支持 - 支持全球 100+ 城市,具备模糊匹配功能(新加坡、香港、纽约、伦敦等)
- AI 职位描述 - 可选的 AI 驱动职位描述生成,打造专业、引人注目的招聘信息
- 即时申请链接 - 获取可分享的 URL,供候选人直接申请
- 简历收集 - 所有申请发送到您指定的邮箱
- LinkedIn 同步 - 自动集成 LinkedIn 职位发布
⚠️ 外部服务通知
本技能使用 Fuku AI(https://hapi.fuku.ai)作为第三方职位发布中继服务,将职位分发到多个招聘平台。
使用 Fuku AI 中继服务 — 无需绑定 LinkedIn 账户。职位通过 Fuku AI 的基础设施匿名发布。
传输的数据: 职位名称、描述、公司、地点、邮箱、LinkedIn 公司 URL。
🔒 快速检查清单
- - [ ] 使用专用的招聘邮箱(非个人邮箱)
- [ ] 职位描述不包含敏感/机密信息
- [ ] 保存职位 ID 以便追踪
- [ ] 职位适合公开发布在招聘平台
- [ ] 注意: 职位会显示在 Fuku AI 的账户下,而非您的 LinkedIn 页面;无法直接编辑/删除
🎯 何时使用
当您需要以下操作时,请使用此技能:
- - 快速发布职位空缺
- 为任何角色创建职位列表
- 生成简历收集链接
- 与候选人分享职位信息
- 将职位同步到 LinkedIn
🛠️ 工具
post_job ⭐
由 scripts/post_job.js 实现。
将职位发布到 20+ 招聘平台。立即返回职位 ID。
参数
| 参数 | 必填 | 类型 | 描述 | 默认值 |
|---|
| title | ✅ 是 | string | 职位名称(最少 4 个字符) | - |
| city_query |
✅ 是 | string | 城市/地点(支持模糊匹配) | - |
| description | ✅ 是 | string | 职位描述 | - |
| email | ✅ 是 | string | 接收简历的邮箱 | - |
| company | ❌ 否 | string | 公司名称 | Your Company |
| industry | ❌ 否 | string | 行业/领域 | General |
| linkedinCompanyUrl | ❌ 否 | string | LinkedIn 公司页面 URL。职位发布在此公司下;未指定时默认为 Fuku AI 的 | https://www.linkedin.com/company/business-consulting-inter |
响应
返回职位 ID。LinkedIn 同步需要 5-60 分钟在后台完成。
checklinkedinstatus
由 scripts/post_job.js 实现。
一次性检查 LinkedIn 同步状态。如果就绪则返回 URL,否则返回Pending。
参数
| 参数 | 必填 | 类型 | 描述 | 示例 |
|---|
| jobId | ✅ 是 | string | 要检查的职位 ID | abcd2345 |
🤖 AI 助手工作流程
⚠️ 必需:发布职位 + 启动监控(两步)
在 post_job 返回后,您必须启动一个子代理来监控 LinkedIn 同步。请勿跳过此步骤。
第 1 步:发布职位
result = await postjob({ title, cityquery, description, email, ... })
第 2 步:启动监控(必需)
从结果中提取 jobId,然后在 sessions_spawn 可用时启动子代理:
javascript
// 从 post_job 结果中提取 jobId
const jobIdMatch = result.match(/Job ID:\s*?([a-zA-Z0-9-]+)?/);
const jobId = jobIdMatch?.[1];
// 推荐:启动子代理进行监控
await sessions_spawn({
task: 监控职位 ID ${jobId} 的 LinkedIn 同步状态。循环:调用 checklinkedinstatus,参数 jobId=${jobId},等待 2 分钟,最多重复 30 次,直到返回 LinkedIn URL。URL 可用时通知用户。,
mode: run,
cleanup: delete,
});
// 告知用户
(✅ 职位已发布!职位 ID:xxx。LinkedIn 监控已启动。同步完成时(5-60 分钟)我会通知您。);
如果 sessions_spawn 不可用时的备用方案:
继续使用此技能自身的执行路径进行监控,而不是停止或询问用户是否继续。
- - 推荐的备用检查命令:node scripts/post_job.js --check-linkedin-status
- 如果运行时确实无法在后台自动执行跟进,请明确说明此运行时中后台监控不可用,但不要假装工作流程已完成。
⚠️ 如果您跳过第 2 步:
- - 用户将不会收到 LinkedIn URL
- 工作流程不完整
强制性子代理规则
在 post_job 成功后,您必须在发送最终面向用户的成功响应之前,立即启动一个监控子代理。
必需顺序:
- 1. 调用 post_job
- 提取