Back to skills
SkillHub ClubAnalyze Data & AIFull StackData / AI

x-recruiter

用于在 X (x.com) 发布招聘帖子。包含文案规范、图片生成提示和自动化发布脚本。发布 AI 相关岗位或设计类岗位时优先使用。

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
19,123
Hot score
99
Updated
March 20, 2026
Overall rating
C5.5
Composite score
5.5
Best-practice grade
B77.6

Install command

npx @skill-hub/cli install iofficeai-aionui-x-recruiter

Repository

iOfficeAI/AionUi

Skill path: skills/x-recruiter

用于在 X (x.com) 发布招聘帖子。包含文案规范、图片生成提示和自动化发布脚本。发布 AI 相关岗位或设计类岗位时优先使用。

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Data / AI.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: iOfficeAI.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install x-recruiter into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/iOfficeAI/AionUi before adding x-recruiter to shared team environments
  • Use x-recruiter for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: x-recruiter
description: 用于在 X (x.com) 发布招聘帖子。包含文案规范、图片生成提示和自动化发布脚本。发布 AI 相关岗位或设计类岗位时优先使用。
---

# X Recruiter (X 招聘助手)

本技能用于快速在 X 发布招聘信息,包含文案规则、封面/详情图提示与自动化发布脚本。

## 核心工作流

### 1. 信息收集

向用户确认:

- **岗位名称**
- **核心职责 & 要求**
- **投递邮箱/链接**

### 2. 生成视觉素材

使用 `scripts/generate_images.js` 生成图片。

- **操作**:
  ```bash
  node scripts/generate_images.js
  ```
- **产出**:`cover.png`, `jd_details.png`

### 3. 生成文案

生成符合 X 调性的文案,控制在 280 字符内。

- **规则**:参考 `assets/rules.md`。
- **要求**:简洁、清晰、带核心职责与投递方式。

### 4. 自动化发布

使用 `scripts/publish_x.py` 启动浏览器进行发布。

**前置要求**:

- 安装 Playwright: `pip install playwright`
- 安装浏览器驱动: `playwright install chromium`

**执行命令**:

```bash
python3 scripts/publish_x.py "post_content.txt" "cover.png" "jd_details.png"
```

**交互流程(更清晰的步骤说明)**:

1. 观察浏览器窗口:脚本已打开 X 首页或发帖页。
2. 若出现登录页,请完成登录。
3. 登录完成后,脚本会自动填充文案与图片。
4. 请在浏览器中检查内容,确认无误后点击“Post”。

## 资源文件

- **assets/rules.md**: 文案规则与限制。
- **assets/design_philosophy.md**: 视觉风格指南。
- **scripts/generate_images.js**: 图片生成脚本。
- **scripts/publish_x.py**: 发布自动化脚本。


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### scripts/generate_images.js

```javascript
const fs = require('fs');

// Placeholder generator instructions. Replace with real image generation if needed.
const output = ['Generate cover.png and jd_details.png with 1080x1350 resolution.', 'Cover: role title + short tagline + company name.', 'Details: responsibilities, requirements, apply method.'].join('\n');

fs.writeFileSync('image_instructions.txt', output);
console.log('Wrote image_instructions.txt');

```

### scripts/publish_x.py

```python
import sys
import time
from pathlib import Path

from playwright.sync_api import sync_playwright


def read_text(path: str) -> str:
    return Path(path).read_text(encoding="utf-8").strip()


def main() -> None:
    if len(sys.argv) < 2:
        print("用法: python3 scripts/publish_x.py <post_content.txt> [cover.png] [jd_details.png]")
        sys.exit(1)

    content_path = sys.argv[1]
    cover_path = sys.argv[2] if len(sys.argv) > 2 else None
    details_path = sys.argv[3] if len(sys.argv) > 3 else None

    content = read_text(content_path)

    print("🚀 X 发布脚本已启动")
    print("操作指南:")
    print("1) 观察浏览器窗口:脚本会打开 X 首页或发帖页。")
    print("2) 若出现登录页,请完成登录。")
    print("3) 登录完成后,脚本会自动填充文案与图片。")
    print("4) 请在浏览器中检查内容,确认无误后点击“Post”。")

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()

        page.goto("https://x.com/home", wait_until="domcontentloaded")
        page.wait_for_timeout(2000)

        # If not logged in, X will redirect to login or show a login wall.
        if "login" in page.url or "i/flow/login" in page.url:
            print("⏳ [步骤 2] 等待登录:请在浏览器窗口完成登录。")
            print("   脚本将自动检测登录完成后继续;如检测不到,请回到终端按 Enter 继续。")
            try:
                page.wait_for_url("https://x.com/home", timeout=120000)
            except Exception:
                input("登录完成后回到终端,按 Enter 继续...")
                page.goto("https://x.com/home", wait_until=\"domcontentloaded\")
            page.wait_for_timeout(2000)

        # Focus composer
        composer = page.locator("div[role='textbox'][data-testid='tweetTextarea_0']")
        if not composer.is_visible():
            # Try clicking the compose button if needed
            compose_btn = page.locator("a[data-testid='SideNav_NewTweet_Button'], div[data-testid='SideNav_NewTweet_Button']")
            if compose_btn.is_visible():
                compose_btn.click()
            page.wait_for_timeout(1000)

        composer = page.locator("div[role='textbox'][data-testid='tweetTextarea_0']")
        composer.wait_for(timeout=10000)
        composer.click()
        composer.fill(content)

        # Upload images if provided
        if cover_path or details_path:
            files = [p for p in [cover_path, details_path] if p]
            file_input = page.locator("input[type='file'][data-testid='fileInput']")
            file_input.set_input_files(files)
            page.wait_for_timeout(3000)

        # Click Post
        post_btn = page.locator("div[data-testid='tweetButtonInline']")
        post_btn.wait_for(timeout=10000)
        post_btn.click()

        # Wait a bit to ensure posting
        page.wait_for_timeout(3000)
        print("✅ 已提交发布,请在 X 上确认。")
        time.sleep(5)

        context.close()
        browser.close()


if __name__ == "__main__":
    main()

```

### assets/rules.md

```markdown
# X Post Rules

- Keep within 280 characters.
- Include role title, key requirements, and application method.
- Avoid sensitive or discriminatory language.
- Prefer 1-2 relevant hashtags.

```

x-recruiter | SkillHub