How the Blacklist Gate in Career-Ops Functions to Block Unwanted Employers

The blacklist gate in career-ops reads your personal do-not-apply list from data/blacklist.md and enforces a hard stop in the pipeline before evaluation or application, unless explicitly overridden with the --include-blacklisted flag.

The career-ops repository provides an open-source job search automation framework that respects user boundaries through a strict gate mechanism. This blacklist gate prevents the system from processing postings from companies you have explicitly marked as undesirable, ensuring zero-touch automation for blacklisted employers across all pipeline modes.

Where the Blacklist Is Stored and Defined

The User-Layer Configuration File

The blacklist resides in data/blacklist.md, a user-layer file that the system never writes to automatically. You maintain this markdown table manually, adding employers you wish to avoid. If the file is missing, the gate initializes with an empty map and allows all postings through without filtering.

Loading and Normalizing Company Names

When the scanner starts, the loadBlacklist() function in scan.mjs reads data/blacklist.md and builds a Map of normalized company names. The normalizeCompany() helper strips punctuation and converts names to lowercase, enabling case- and punctuation-insensitive matching. For example, "Acme Corp." matches "acme corp" during the gate check.

How the Gate Enforces the Do-Not-Apply List

The Scanning Filter in scan.mjs

During the scanning phase, each job object is checked against the blacklist map. If a match is found, the posting receives a job.blacklisted = true property and a label such as blacklisted: <reason>. By default, these postings are excluded from further processing and counted in the run-summary statistic filtered_blacklist.

Hard Stop in Pipeline Modes

The auto-pipeline and oferta modes insert a dedicated Blacklist gate step before evaluation or form-filling. If a posting is flagged as blacklisted, the pipeline aborts immediately with a message like "⚠️ Blacklist gate – job is on your do‑not‑apply list". The apply mode also checks this gate before generating application emails, ensuring blacklisted companies never receive submissions.

Override Behavior with --include-blacklisted

Add the --include-blacklisted flag to node scan.mjs (or scan-ats-full.mjs) to disable the skip behavior. In this mode, blacklisted postings pass through the pipeline but remain annotated with their blacklisted status for audit purposes. This override does not remove the gate; it simply converts the hard stop into a labeled pass-through.

Code Examples

Run a standard scan that automatically excludes blacklisted companies:

node scan.mjs --company "Software Engineer"

Audit blacklisted matches without removing them from your list:

node scan.mjs --company "Software Engineer" --include-blacklisted

Manually add a company to your blacklist:

cat >> data/blacklist.md <<EOF
| Initech | 2026-03-01 | company | example |
EOF

Summary

  • The blacklist gate in career-ops functions as a hard-wired terminate-and-skip filter using data/blacklist.md.
  • The loadBlacklist() function in scan.mjs normalizes company names for case- and punctuation-insensitive matching.
  • Pipeline modes including auto-pipeline, oferta, and apply enforce the gate before evaluation or submission.
  • Use the --include-blacklisted flag to audit blacklisted postings without removing them from the list.
  • The system never automatically writes to data/blacklist.md, preserving user control over the do-not-apply list.

Frequently Asked Questions

What file format does career-ops use for the blacklist?

The blacklist uses a markdown table format stored in data/blacklist.md. You manually edit this file to add company names, dates, and reasons, following the user-layer data contract defined by the repository.

How do I temporarily view blacklisted postings without removing them?

Run your scan command with the --include-blacklisted flag. This allows blacklisted postings to appear in results with their blacklisted label attached, useful for reviewing your filter criteria without modifying data/blacklist.md.

Does the blacklist affect job scoring or ranking?

No. The blacklist gate functions as a binary filter, not a scoring signal. Blacklisted postings are blocked from entering the evaluation pipeline entirely and do not contribute to any score calculations in the auto-pipeline or oferta modes.

Which pipeline modes implement the blacklist gate?

The auto-pipeline, oferta, and apply modes all implement the blacklist gate according to the source documentation in modes/auto-pipeline.md and modes/oferta.md. They check the blacklist flag before proceeding with evaluation, form-filling, or application generation.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →