boss-agent-cli-job-search
CLI tool for AI agents to search BOSS Zhipin jobs with welfare filtering, local shortlisting, and compliance-first automation
How do I install this agent skill?
npx skills add https://github.com/reason-machines/devtools-skills --skill boss-agent-cli-job-searchIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides a CLI tool for job searching that handles sensitive credentials locally and processes external job description data. While it includes safety boundaries, users should be aware of the data ingestion surface for indirect prompt injections and the management of AI API keys.
- Socketwarn
1 alert: gptAnomaly
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
boss-agent-cli Job Search Skill
Skill by ara.so — Devtools Skills collection.
What It Does
boss-agent-cli is a Python CLI tool designed for AI agents to assist with job searching on BOSS Zhipin (and other platforms like Zhilian). It operates in low-risk compliance mode by default, focusing on read-only operations, local organization, and user-initiated actions. Key features include:
- Job Search: Keyword search with 8-dimension filtering (city, salary, experience, etc.)
- Welfare Filtering: Auto-pagination to find jobs with specific benefits (e.g., "weekends off, five insurances")
- Local Shortlist: Save jobs locally with tags, notes, and comparison tools
- AI Enhancements: JD analysis, resume polishing, interview prep, communication coaching
- Schema-Driven: All commands output JSON envelopes (
{ok, data, error, hints}) to stdout - Multi-Platform: Supports BOSS Zhipin (default), Zhilian (read-only), 51job (placeholder)
Compliance boundaries: Sensitive operations (greeting, applying, exchanging contacts, recruiter candidate search) are blocked by default and return COMPLIANCE_BLOCKED. Users must complete these actions manually on the official platform.
Installation
# Install via uv (recommended)
uv tool install boss-agent-cli
# Install browser kernel (only needed for login/export)
patchright install chromium
# Or via pip
pip install boss-agent-cli
Requires Python ≥ 3.10. All state stored in ~/.boss-agent/.
Authentication & Setup
# Check environment and connectivity
boss doctor
# User-initiated login (interactive browser)
boss login
# Verify login status
boss status
# Optional: live probe with low-frequency read
boss status --live
Login credentials are encrypted locally with Fernet + PBKDF2 machine binding. No data leaves the machine except explicit API calls.
Core Commands
Job Discovery
# Basic search
boss search "Golang" --city 广州
# Search with welfare filtering (core differentiator)
boss search "Python" --city 上海 --welfare "双休,五险一金"
# Advanced filtering
boss search "前端" \
--city 北京 \
--salary 20-40 \
--experience 3-5 \
--degree 本科 \
--scale 100-499 \
--stage 已融资 \
--welfare "双休,五险一金,年终奖" \
--limit 50
# Show cached results by history number
boss show 3
# Get detailed job info (saves to local cache)
boss detail <security_id>
# View search history
boss history
Welfare filtering uses --welfare "benefit1,benefit2" with AND logic. The tool auto-paginates to fetch all matches and can sort by local match score with --sort score.
Local Shortlist & Organization
# Add job to local shortlist with tags
boss shortlist add <security_id> <job_id> --tags 后端,远程 --notes "Interesting tech stack"
# List shortlisted jobs
boss shortlist list
# Compare shortlisted jobs (offline)
boss shortlist compare --tag 远程
# Remove from shortlist
boss shortlist remove <shortlist_id>
# View funnel statistics
boss stats
# Watch job for updates
boss watch add <security_id> <job_id>
# Create search preset
boss preset save "golang-remote" --query "Golang" --city 广州 --welfare "远程,双休"
boss preset run "golang-remote"
AI-Powered Features
# Configure AI provider (required for AI commands)
boss ai config --provider openai --api-key-env OPENAI_API_KEY --model gpt-4o
# Or use Atlas Cloud (one key for multiple models)
boss ai config --provider atlas --api-key-env ATLAS_API_KEY --model deepseek-ai/deepseek-v4-pro
# Analyze job description
boss ai analyze-jd <security_id>
# Polish resume
boss ai polish ~/resume.txt
# Optimize resume for specific job
boss ai optimize ~/resume.txt <security_id>
# Match shortlist against resume
boss ai fit ~/resume.txt
# Prepare for interview
boss ai interview-prep <security_id> ~/resume.txt
# Get communication coaching
boss ai chat-coach <security_id> "想问一下团队规模"
Resume Management
# Set default resume
boss resume set ~/my-resume.pdf
# Show current resume
boss resume show
# View my profile
boss me
Recruiter Mode (BOSS Zhipin Only)
# List your job postings
boss hr jobs list
# Take job online/offline
boss hr jobs online <job_id>
boss hr jobs offline <job_id>
Note: Candidate data pipelines (search, resume, chat) are blocked by default in recruiter mode.
System & Configuration
# Show all available commands with JSON schema
boss schema
# Export as OpenAI/Anthropic tool definitions
boss schema --format openai-tools
boss schema --format anthropic-tools
# List supported platforms
boss platforms
# Export all data
boss export
# Configuration
boss config list
boss config set default_city 广州
boss config set default_salary_range "15-30"
boss config reset
# Clean cache
boss clean
Python SDK Usage
from boss_agent_cli import AuthManager, BossClient, AuthRequired
from boss_agent_cli.platforms.platform import Platform
# Initialize auth manager
auth_mgr = AuthManager()
# Option 1: Use existing session
if auth_mgr.is_authenticated():
with BossClient(auth_mgr) as client:
result = client.search_jobs(
query="Golang",
city="广州",
welfare_filter=["双休", "五险一金"],
limit=20
)
if result["ok"]:
for job in result["data"]["jobs"]:
print(f"{job['job_name']} at {job['brand_name']}")
print(f" Salary: {job['salary']}")
print(f" Welfare: {', '.join(job.get('welfare', []))}")
# Option 2: Handle auth requirement
else:
print("Please run: boss login")
# Get job details
with BossClient(auth_mgr) as client:
detail = client.get_job_detail("abc123xyz")
if detail["ok"]:
jd = detail["data"]
print(f"Description: {jd['description']}")
print(f"Requirements: {jd['experience']}, {jd['degree']}")
# Platform abstraction
platform = Platform.get_platform("zhipin") # or "zhilian", "qiancheng"
print(f"Using platform: {platform.name}")
Working with JSON Envelopes
All commands output structured JSON to stdout with this schema:
{
"ok": bool, # True if successful
"data": dict | None, # Command-specific data
"pagination": dict | None, # {page, page_size, total, has_more}
"error": { # Present if ok=False
"code": str, # e.g., "AUTH_EXPIRED", "COMPLIANCE_BLOCKED"
"message": str,
"recoverable": bool,
"recovery_action": str | None
} | None,
"hints": list[str] | None # User-facing suggestions
}
Parsing in Python:
import json
import subprocess
def run_boss_command(args: list[str]) -> dict:
"""Run boss command and parse JSON output."""
result = subprocess.run(
["boss"] + args,
capture_output=True,
text=True,
check=False
)
if result.returncode != 0:
# Parse error envelope
error_data = json.loads(result.stdout)
if error_data.get("error", {}).get("code") == "AUTH_EXPIRED":
# Trigger re-authentication
subprocess.run(["boss", "login"], check=True)
return run_boss_command(args) # Retry
raise RuntimeError(error_data["error"]["message"])
return json.loads(result.stdout)
# Example usage
search_result = run_boss_command([
"search", "Python",
"--city", "上海",
"--welfare", "双休,五险一金",
"--limit", "30"
])
if search_result["ok"]:
jobs = search_result["data"]["jobs"]
print(f"Found {len(jobs)} jobs")
# Add first result to shortlist
if jobs:
job = jobs[0]
shortlist_result = run_boss_command([
"shortlist", "add",
job["security_id"],
job["encrypt_job_id"],
"--tags", "python,remote"
])
Agent Integration Patterns
Pattern 1: MCP Server (Recommended for Claude Desktop / Cursor)
Add to claude_desktop_config.json or cursor/.cursorrules:
{
"mcpServers": {
"boss-agent": {
"command": "uvx",
"args": ["--from", "boss-agent-cli[mcp]", "boss-mcp"]
}
}
}
This exposes 35 low-risk tools to the MCP host. Install MCP extras: pip install boss-agent-cli[mcp]
Pattern 2: Subprocess Shell Agent
def get_boss_capabilities() -> dict:
"""Fetch self-describing schema."""
result = subprocess.run(
["boss", "schema", "--format", "openai-tools"],
capture_output=True,
text=True,
check=True
)
return json.loads(result.stdout)["data"]["tools"]
# Let agent discover capabilities
tools = get_boss_capabilities()
# Pass tools to LLM for function calling
Pattern 3: Direct Python Import
from boss_agent_cli import BossClient, AuthManager
from boss_agent_cli.ai.service import AIService
# Embed in your agent
class JobSearchAgent:
def __init__(self):
self.client = BossClient(AuthManager())
self.ai = AIService()
def find_and_analyze(self, query: str, city: str) -> dict:
"""Search jobs and analyze top result."""
search = self.client.search_jobs(query, city=city, limit=5)
if not search["ok"]:
return search
top_job = search["data"]["jobs"][0]
detail = self.client.get_job_detail(top_job["security_id"])
if detail["ok"]:
analysis = self.ai.analyze_jd(detail["data"])
return {"job": detail["data"], "analysis": analysis}
return detail
Configuration Reference
Config stored at ~/.boss-agent/config.json:
{
"default_city": "广州",
"default_salary_range": "15-30",
"default_experience": null,
"default_degree": null,
"request_interval": [2.0, 4.0],
"log_level": "INFO",
"login_timeout": 300,
"cdp_address": null,
"export_dir": "~/.boss-agent/exports",
"platform": "zhipin",
"ai": {
"provider": "openai",
"base_url": null,
"api_key_env": "OPENAI_API_KEY",
"model": "gpt-4o",
"temperature": 0.7,
"max_tokens": 2000
}
}
Update via boss config set <key> <value> or edit JSON directly.
Troubleshooting
Auth Issues
# Run full diagnostic
boss doctor --live-probe
# Check login status
boss status
# Re-authenticate
boss logout
boss login
Platform Switching
# Switch to Zhilian (read-only mode)
boss --platform zhilian search "Python"
# Set as default
boss config set platform zhilian
Rate Limiting / Risk Control
- Tool uses Gaussian delay (2-4s default) between requests
- Stops on platform risk detection (doesn't evade)
- Never use for bulk operations (blocked by design)
Error Codes
AUTH_REQUIRED: Runboss loginAUTH_EXPIRED: Session expired, re-loginCOMPLIANCE_BLOCKED: Operation not allowed in low-risk modePLATFORM_ERROR: Platform API issue, checkboss doctorNOT_SUPPORTED: Feature unavailable for this platform
Browser Bridge Issues
# Start daemon manually for debugging
python -m boss_agent_cli.bridge.daemon --serve
# Check bridge health (7 checks)
boss doctor --live-probe
Bridge only used for login and local export, not for evading detection.
Common Workflows
Workflow 1: Daily Job Hunt
# Morning: search for new jobs
boss search "Python后端" --city 上海 --welfare "双休,五险一金" --sort score
# Review details and add to shortlist
boss detail <security_id>
boss shortlist add <security_id> <job_id> --tags "interesting"
# Evening: review shortlist and stats
boss shortlist list
boss stats
Workflow 2: Targeted Application Prep
# Find job
boss search "DevOps" --city 北京 --experience 3-5
# Deep analysis
boss detail <security_id>
boss ai analyze-jd <security_id>
# Optimize resume
boss ai optimize ~/resume.pdf <security_id>
# Prepare interview
boss ai interview-prep <security_id> ~/resume.pdf
# Manual application on official site (not automated)
Workflow 3: Recruiter Job Management
# Check your postings
boss hr jobs list
# Take job online
boss hr jobs online <job_id>
# Monitor views/applications on official platform
# (candidate pipelines blocked in CLI)
Environment Variables
# AI providers
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export ATLAS_API_KEY="..." # Atlas Cloud unified key
# Optional: custom CDP endpoint
export BOSS_CDP_ADDRESS="http://localhost:9222"
# Optional: override config location
export BOSS_CONFIG_DIR="~/.custom-boss-config"
Platform Support Matrix
| Platform | Seeker | Recruiter | Status |
|---|---|---|---|
BOSS Zhipin (zhipin) | ✅ Full | ✅ Jobs only | Default |
Zhilian (zhilian) | 🟡 Read-only | ❌ Not supported | Write/social blocked |
51job (qiancheng) | 🚧 Placeholder | ❌ Not supported | Returns NOT_SUPPORTED |
# Use specific platform
boss --platform zhilian search "Java"
# Check available platforms
boss platforms
Best Practices for AI Agents
- Always check schema first:
boss schemais the source of truth for capabilities - Parse JSON envelopes: Check
okfield before processingdata - Handle errors gracefully: Use
recoverableandrecovery_actionfor retry logic - Respect compliance: Don't attempt to bypass
COMPLIANCE_BLOCKEDerrors - Use local shortlist: Store and compare jobs locally, don't spam searches
- Leverage AI features: Use
aicommands for analysis, don't just dump JDs to user - Configure once: Set defaults with
boss configto simplify subsequent calls
Further Reading
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/reason-machines/devtools-skills/boss-agent-cli-job-search">View boss-agent-cli-job-search on skillZs</a>