← 返回 Skills 市场
jerronl

Jobautopilot Submitter

作者 jerronl · GitHub ↗ · v1.3.2 · MIT-0
cross-platform ⚠ pending
236
总下载
0
收藏
0
当前安装
20
版本数
在 OpenClaw 中安装
/install jobautopilot-submitter
功能描述
Automatically fills and submits job applications. Opens the application page, fills multi-step forms (work history, education, EEOC, dropdowns), uploads your...
使用说明 (SKILL.md)

Job Autopilot — Submitter

Automates form-filling and submission for resume_ready jobs. Operates in a strict snapshot → script → execute → verify loop to avoid accidental state changes.

Security & privacy

This skill automates browser form-filling — an inherently sensitive operation. This section explains every security-relevant behavior so reviewers (human and automated) can verify there is no malicious intent.

Data flow — all local

All personal data stays local. This skill reads name, email, phone, and LinkedIn from environment variables (set before the agent starts) and types those values into job application forms — the same way you would manually. No data is sent to any server controlled by this skill. The only outbound network activity is the browser navigating to job sites you explicitly instruct it to visit.

No passwords are stored or read by this skill. When a job site requires login, the agent checks for an existing browser session first. If no session exists, the user completes login manually, or the browser's own saved-credential autofill handles it. This skill never reads, stores, or transmits any password.

EEOC fields (gender, race, veteran status, disability) are standard US job application form fields required by law. Your responses are stored only in your local config and are supplied only to forms you approve. They are never logged or sent elsewhere.

Why this skill uses evaluate + a .js file

check_required_fields.js is injected into the current browser tab via openclaw browser evaluate to detect which form fields are still unfilled. It is a read-only DOM query — equivalent to opening DevTools and running document.querySelectorAll("[required]"). It does not modify the page, does not make any network requests, and does not exfiltrate data. The full source is included at scripts/check_required_fields.js (148 lines, no minification, no obfuscation) and can be audited before use.

Why this skill generates shell scripts in /tmp

Browser form-filling requires batching multiple fill/select/click commands into a single atomic sequence (to avoid partial state). The agent writes these commands to /tmp/fill_\x3Ctimestamp>.sh and executes them immediately. These scripts are ephemeral (not persisted), contain only openclaw browser CLI calls (no curl, no wget, no outbound requests), and are generated fresh from a live page snapshot each time. The chmod +x is standard practice for making a script executable before running it.

Optional watchdog cron (not executed by any script)

The documentation describes an optional openclaw cron add command users can run manually to prevent agent stalls during long sessions. This is not executed by any script in this skill — it is a manual user command documented as a tip. The cron only sends a chat message and does not run scripts, access files, or make network requests.

Why this skill uses the upload interceptor

The upload command is an OpenClaw browser API that pre-stages a local file path so that when the agent clicks an \x3Cinput type="file"> button, the file dialog is automatically answered with the specified file. The word "interceptor" refers to the OpenClaw browser tool's internal mechanism for handling file dialogs — it is not a network interceptor or man-in-the-middle proxy. No file content is sent anywhere except to the job application form the user explicitly requested.

What this skill does NOT do

  • Does not make any outbound network requests from scripts (no curl, wget, fetch, or similar)
  • Does not read, store, or transmit passwords
  • Does not inject JavaScript that modifies page content or behavior
  • Does not persist any background process after the session ends
  • Does not access any files outside the user's configured resume directory and workspace
  • Does not contain obfuscated code, encoded payloads, or remote fetches at runtime

Optional: session watchdog

For long multi-job sessions, you can optionally set a reminder to prevent the agent from stalling:

openclaw cron add --name job_sub_watchdog --every 5m \
  --message "job_sub agent: still working? check tracker and continue."

This sends a chat message only — it does not run scripts, access files, or make network requests. Remove it when done:

openclaw cron rm job_sub_watchdog

This step is optional and is not executed by any script in this skill.

Helper scripts

The helper scripts (check_required_fields.js, fill_template.sh, match_variant_options.sh) are included in this skill's scripts/ folder. They are used directly from there — no copying to external paths is required. All scripts are plain-text, unminified, and can be audited before use.

Setup

This skill reads personal data exclusively from the environment variables listed in the manifest above. There is no separate config file read at runtime — the env vars ARE the single source of truth.

These env vars must be set in your shell environment before the agent starts. Example values:

export OPENCLAW_USER="yourusername"
export OPENCLAW_PROFILE="apply"
export USER_FIRST_NAME="Your"
export USER_LAST_NAME="Name"
export USER_EMAIL="[email protected]"
export USER_PHONE="+1-555-000-0000"
export USER_LINKEDIN="https://linkedin.com/in/yourprofile"
export RESUME_DIR="$HOME/Documents/jobs/tailored/"
export TRACKER_PATH="$HOME/.openclaw/workspace/job_search/job_application_tracker.md"

export USER_GENDER="Male"
export USER_RACE="Asian"
export USER_HISPANIC="No"
export USER_VETERAN="I have no military service"
export USER_DISABILITY="No"
export USER_WORK_AUTH="Yes"
export USER_NEED_SPONSOR="No"

Note on site logins: If a job site requires an account, log in manually in the apply browser profile before running the submitter, or allow the browser's saved-credential autofill to handle it. This skill does not manage passwords.

Session start checklist

  1. Verify env vars are set (e.g. $USER_FIRST_NAME, $TRACKER_PATH are non-empty)
  2. Read $TRACKER_PATH — find all resume_ready entries

Browser operation rules

Model may call directly (observation only)

  • open / tabs / close / focus
  • navigate
  • snapshot
  • screenshot
  • dialog --accept

Must be generated as a script, then exec'd

Any action that changes page state:

  • fill, type, select, click, press, upload
  • Clicking: Apply, Log in, Next, Continue, Submit, any upload button, any dropdown option

Exception: Tab management is always a direct tool call. snapshot is always a direct tool call.

Per-job flow

1. Read resume and JD

The agent uses python-docx to extract text from the tailored .docx resume at runtime. This code is not bundled as a separate .py file — the agent writes and executes it inline via the exec tool:

# Executed by the agent at runtime via exec tool — not a bundled script
from docx import Document
doc = Document(f'{RESUME_DIR}/\x3Cresume>.docx')
text = '\
'.join([p.text for p in doc.paragraphs if p.text.strip()])

This is why python3 and python-docx are listed as requirements even though no .py file is included in the bundle. The agent generates this code dynamically to read each resume before filling forms.

Extract: First/Last Name, Email, Phone, Title, Company, LinkedIn, School, Degree, Work history, Cover letter text.

If resume does not match JD → mark tracker error, skip.

2. Open clean tab

Via tool call (not script):

  1. browser tab new → get TARGET_ID
  2. browser tabs → list all tabs
  3. browser close \x3Cid> for each old page tab (type=="page")

3. Navigate and validate URL

navigate "\x3Curl>" then wait --load networkidle

If the page is a generic careers index or wrong role → mark wrong_url, skip.

4. Login if needed

Check top-right for existing session. If not logged in:

  1. Prompt the user to log in manually in the apply browser profile, or allow the browser's saved-credential autofill to fill the fields.
  2. Once logged in, continue with the application form.

Do not attempt to read passwords from config or environment. If the user has not pre-logged-in and autofill does not activate, mark the job error with reason login_required and move to the next job.

5. Main form loop

Repeat until submission confirmed:

A. Snapshot + check unfilled fields

Use OpenClaw's built-in browser CLI to take a page snapshot and check which fields need filling:

# openclaw browser snapshot — captures the current page's accessibility tree (read-only)
SNAP=$(openclaw browser --browser-profile $OPENCLAW_PROFILE snapshot \
  --target-id $TARGET_ID --limit 500 --efficient)

# openclaw browser evaluate — runs check_required_fields.js (a read-only DOM query)
# to list which required fields are still empty
# SKILL_DIR is the directory where this skill is installed
CHECK=$(openclaw browser --browser-profile $OPENCLAW_PROFILE evaluate \
  --target-id $TARGET_ID --fn "$(cat "$SKILL_DIR/scripts/check_required_fields.js")")

Note: openclaw browser evaluate is a standard OpenClaw CLI command that runs a JavaScript expression in the browser tab's console — equivalent to pasting code into DevTools. The script check_required_fields.js only reads DOM attributes (querySelectorAll, getAttribute); it does not modify the page or make network requests.

B. Generate fill script

The agent batches multiple openclaw browser fill/select/click commands into a single shell script so they execute atomically. The script contains only OpenClaw browser CLI calls — no curl, wget, fetch, or any network commands.

TS=$(date +%s)
SCRIPT="/tmp/fill_${TS}.sh"
cat > "$SCRIPT" \x3C\x3C 'SCRIPT_EOF'
# Contains only: openclaw browser fill/select/click/upload commands
# No network requests, no external downloads, no eval
SCRIPT_EOF
chmod 700 "$SCRIPT" && bash "$SCRIPT" && rm -f "$SCRIPT"

Scripts are owner-only (chmod 700) and deleted immediately after execution.

Script structure:

  1. Tab validation (snapshot, check for "tab not found")
  2. Snapshot for fresh refs — never reuse refs across page loads
  3. fill for text fields (batch all at once)
  4. select for dropdowns (A-type: direct; B1: open+snap+click; B2: type+snap+click)
  5. upload before clicking upload button (arm interceptor first)
  6. Second check_required_fields.js — must pass before any page navigation

C. Advance page Only after second check passes:

  • Has Submit → all fields filled → submit
  • Has Next/Continue → current page done → advance and loop
  • Neither → report error, wait for human

6. Submission verification

Both conditions must be true:

  1. document.querySelector('button[type="submit"]') === null
  2. Page contains "Success" / "Application received" / "We have received your application"

Do NOT accept "Thank you for applying" as success.

7. Update tracker and report

  • Success → applied, record submission date
  • Failed/skipped → error, record reason
  • Report result immediately after each job

8. Report result

After each job, report to the user: company, title, status (applied/error/wrong_url), and any issues encountered.

Helper functions for snapshot parsing

get_ref()       { echo "$1" | grep -F "\"$2\""  | sed 's/.*\[ref=\([^]]*\)\].*/\1/' | head -1; }
get_ref_fuzzy() { echo "$1" | grep -iE "$2"      | sed 's/.*\[ref=\([^]]*\)\].*/\1/' | head -1; }
count_label()   { echo "$1" | grep -cF "\"$2\""; }

Never use jq on snapshot output. Never use grep -o 'ref=\K...'. Never reuse refs across page loads.

Dropdown strategy

Type When Strategy
A — known options Yes/No/known enum select "\x3Cvalue>" → fallback: open+snap+click
B1 — short list (\x3C20) Company, state open+snap+click with 0.5s sleep for animation
B2 — search-driven School, discipline click to open → type keyword → 0.5s sleep → snap → click result

Only use fuzzy matching for unknown dropdown values. Known buttons/labels always use exact match.

Dynamic components

Work history and education sections usually require clicking "Add" per entry. After each click, re-snapshot before extracting refs — new components get new refs.

File upload sequence

Always: upload \x3Cpath> first (arms the interceptor), then click the upload button. Never reverse this order. After page refresh, re-snapshot before clicking upload.

EEOC defaults

Read from config: $USER_GENDER, $USER_RACE, $USER_HISPANIC, $USER_VETERAN, $USER_DISABILITY, $USER_WORK_AUTH, $USER_NEED_SPONSOR.

Cover letter

Always fill cover letter text fields, even when marked optional. Read content from the .docx file using python-docx, not from the file path.

Script safety rules

  1. All page-state-changing actions go in scripts — no direct model calls
  2. Never use JS injection; use fill/type instead
  3. Script comments use # only — no em-dashes or special chars
  4. Single exit point: find ref → on failure write to ERRORS → on success execute
  5. Unique-label check before acting: count_label "No" etc. must return 1
  6. All personal data comes from environment variables (not from reading files at runtime)
  7. File copy with error capture: if ! cp "$SRC" "$DST"; then ERRORS+=("copy failed"); fi
  8. Dynamic components: click parent to trigger render → sleep 0.3 → re-snapshot → extract ref

Tracker status flow

resume_ready → applied
            ↘ error
            ↘ wrong_url

Support

If Job Autopilot saved you time: paypal.me/ZLiu308

安全使用建议
This skill appears to do what it says: browser-driven form-filling using the openclaw CLI and local scripts. Before installing, (1) review the included scripts (check_required_fields.js, fill_template.sh, match_variant_options.sh) yourself to confirm they match your expectations; (2) verify where and how .docx resume parsing will run (SKILL.md mentions python-docx but there is no python script bundled); (3) ensure RESUME_DIR and TRACKER_PATH environment variables point only to directories/files you want the agent to access; (4) be aware the browser will navigate to job sites you instruct it to — if those sites require logins the browser's saved credential autofill may be used (the skill claims it does not read passwords itself); and (5) avoid supplying unrelated or high-privilege credentials. If any of these points are unclear, ask the maintainer for a runtime walkthrough or for the missing resume-parsing code before enabling the skill.
能力评估
Purpose & Capability
Requested binaries (openclaw, python3), python-docx, and environment variables (name, email, phone, LinkedIn, RESUME_DIR, TRACKER_PATH) all align with the stated purpose of filling forms and uploading resumes. The included scripts (DOM query, shell fill template, fuzzy-match helpers) match browser automation/form-filling functionality.
Instruction Scope
SKILL.md and scripts largely stay within form-filling scope: the JS is a read-only DOM query and shell templates run openclaw CLI commands. Two notes: (1) SKILL.md references reading .docx resumes via python-docx, but no python extraction script is present in the files — confirm how/where resume parsing is performed at runtime. (2) The skill writes ephemeral scripts to /tmp and reads files from RESUME_DIR and TRACKER_PATH; those filesystem accesses are expected but worth auditing (ensure paths point only to intended files).
Install Mechanism
No install spec (instruction-only) and only three small local scripts are bundled. This is low-risk from installation perspective — no remote downloads or archive extraction.
Credentials
Requested environment variables are appropriate for form-filling (personal info, resume directory, tracker path). They do grant access to local files/paths (RESUME_DIR, TRACKER_PATH) — this is expected but gives the skill access to those files. There are no unrelated secret keys or cloud credentials requested.
Persistence & Privilege
The skill is not marked always:true and does not request persistent system modifications. The SKILL.md explicitly states it does not leave background processes running. Autonomous invocation is allowed (platform default) but not combined with other red flags.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install jobautopilot-submitter
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /jobautopilot-submitter 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.3.2
- Updated documentation to clarify that all personal information is sourced from environment variables rather than config files. - Improved setup instructions: now emphasizes setting environment variables in the shell, removing references to sourcing a config file. - Bumped version to 1.3.3. - No code changes to scripts/fill_template.sh; changes are documentation-only.
v1.3.1
- Updated setup instructions to clarify that all personal data is read exclusively from environment variables, not by opening config files at runtime. - Explicitly state that the agent only uses the environment, and users must source their config file before starting a session. - Revised documentation to improve clarity on how setup and environment sourcing works. - No functional or behavioral changes to code; documentation-only update.
v1.3.0
- Version updated to 1.3.0. - SKILL.md documentation refreshed for clarity; no behavior or code changes. - All setup, security, and operational instructions remain unchanged. - No new features or dependencies introduced.
v1.2.9
- Updated to version 1.2.9. - Expanded metadata to document explicit use of the openclaw CLI and required binaries. - Clarified setup instructions and environment variable requirements for standalone installs. - No functional code changes; doc/metadata updates only.
v1.2.8
jobautopilot-submitter 1.2.8 - Bumped version in SKILL.md from 1.2.7 to 1.2.8. - No other content or functional changes; documentation and metadata remain unchanged.
v1.2.7
jobautopilot-submitter 1.2.7 - Updated version number in SKILL.md to 1.2.7. - No other changes made; documentation and functionality remain the same.
v1.2.6
**Changelog for jobautopilot-submitter v1.2.6:** - Updated documentation to clarify that helper scripts are now referenced and used directly from the `scripts/` folder—no copying required during setup. - Simplified environment variable setup instructions and removed references to the `CHECK_FIELDS_JS` variable. - Clarified the use of python-docx for resume parsing in requirements. - Minor metadata and documentation clean-up for improved clarity. - No functional or runtime code changes.
v1.2.5
- Clarified that the session watchdog cron is optional and not executed by any script in this skill; the user must run it manually if desired. - Updated security section to reflect this change; the cron command is now described only as a documentation tip. - Enhanced the "requires" section to specify no network calls are made by exec'd scripts. - Shortened the session start checklist to remove automatic watchdog management. - Improved overall documentation for clarity around script execution and user responsibilities.
v1.2.4
- Version bump to 1.2.4 in SKILL.md. - No functional changes; documentation update only.
v1.2.3
**Expanded security & privacy documentation.** - SKILL.md significantly revised with dedicated "Security & privacy" and detailed technical rationale sections. - Clear justifications and auditability for use of `check_required_fields.js`, temporary scripts, cron watchdog, and file upload via browser. - Explicit bullet list of what the skill does *not* do (e.g. no network requests, no password handling, no persistent background processes). - No changes to the core automation logic or required files; documentation clarity improved for transparency and review.
v1.2.2
Version 1.2.2 - Updated SKILL.md introduction to clarify the name as "Job Autopilot — Submitter" instead of "Job Hunt — Submitter". - No functional or logic changes; documentation only. - Version number bumped from 1.2.1 to 1.2.2.
v1.2.1
Version 1.2.1 of jobautopilot-submitter — Changelog: - Updated privacy and data flow section to clearly state that all personal data stays local, no passwords are stored by the skill, and no network requests are made except for site navigation. - Clarified EEOC data handling: values are stored only in local config and used only with user approval on job application forms. - Changed login flow: automated login/password management is removed. User is now prompted to log in manually or let browser autofill handle credentials; job is skipped if login cannot complete automatically. - Added note that the session watchdog cron job only sends a chat message and does not execute scripts or access files. - Polished documentation to emphasize local-only data handling, user privacy protection, and clarified operational boundaries.
v1.2.0
jobautopilot-submitter 1.2.0 changelog - Version bumped to 1.2.0 to reflect a new release. - Removed deprecated `funding` property from SKILL.md. - Cleaned up metadata and requirements for consistency. - No behavioral or functional changes to the core submission flow.
v1.0.9
- Bumped version to 1.0.9. - No functional changes; only SKILL.md documentation was updated.
v1.0.8
- Added new required environment variable: USER_PASSWORD_PREFIX, which is set by users during setup. - Updated password logic for new site registrations: now reads base password from USER_PASSWORD_PREFIX and appends a site-specific suffix instead of using a fixed pattern. - Documentation reflects these password changes in both environment requirements and login steps. - Bumped version to 1.0.8.
v1.0.5
Minor update for standalone install support. - Added instructions for copying included helper scripts when using this skill without the jobautopilot bundle. - Updated documentation to clarify setup of required scripts (`check_required_fields.js`, etc.) if installed standalone. - No functional code changes; documentation-only update.
v1.0.3
- Updated version to 1.0.3 in SKILL.md. - No functional or logic changes—documentation update only.
v1.0.2
jobautopilot-submitter 1.0.2 - Updated version to 1.0.2 in SKILL.md. - No other functional or documentation changes.
v1.0.1
- Added explicit listing of required environment variables in the skill metadata for improved setup and reliability. - Declared default browser profile and tool metadata with clearer structure in the metadata section. - No functional or flow changes; documentation and metadata improvements only.
v1.0.0
jobautopilot-submitter 1.0.0 — Initial release - Automates submission of job applications: opens pages, fills multi-step forms, uploads tailored resume and cover letter, and confirms submission. - Tracks and processes resume_ready jobs, marking them applied or flagging errors in a tracker file. - Operates in a strict snapshot → script → execute → verify loop to prevent accidental changes. - Supports custom configuration, browser automation, dropdown strategies, EEOC default fields, and dynamic work/education section handling. - Updates a platform knowledge base with new form quirks or dropdown options after each job. - Requires Python 3, the `python-docx` package, and specific helper scripts.
元数据
Slug jobautopilot-submitter
版本 1.3.2
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 20
常见问题

Jobautopilot Submitter 是什么?

Automatically fills and submits job applications. Opens the application page, fills multi-step forms (work history, education, EEOC, dropdowns), uploads your... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 236 次。

如何安装 Jobautopilot Submitter?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install jobautopilot-submitter」即可一键安装,无需额外配置。

Jobautopilot Submitter 是免费的吗?

是的,Jobautopilot Submitter 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Jobautopilot Submitter 支持哪些平台?

Jobautopilot Submitter 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Jobautopilot Submitter?

由 jerronl(@jerronl)开发并维护,当前版本 v1.3.2。

💬 留言讨论