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 inscan.mjsnormalizes 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-blacklistedflag 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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →