How to Configure AI Job Search for a Specific Country's Job Market

AI Job Search uses a country-agnostic core where you enable existing portal skills or generate new ones via the /add-portal command to target specific job markets.

The MadsLorentzen/ai-job-search repository provides a modular framework for automating job searches across different countries. Its architecture separates market-specific data collection (portal skills) from the core automation logic, allowing you to configure AI Job Search for a specific country's job market without modifying the underlying codebase.

Understanding the Country-Agnostic Architecture

AI Job Search organizes job portal integrations as skills under the .agents/skills/ directory. Each skill is a self-contained directory that includes a SKILL.md file with YAML front-matter controlling its behavior.

The framework ships with two tiers of portal coverage:

  • Country-agnostic portals: linkedin-search and freehire-search are enabled by default in their respective SKILL.md files and work across international markets.
  • Demo portals: Four Danish-specific portals (jobindex-search, jobbank-search, jobdanmark-search, jobnet-search) are included but disabled by default, serving as templates for market-specific implementations.

Every portal skill adheres to a uniform contract including CLI interfaces, output formats, and an enabled: boolean flag in the YAML front-matter of its SKILL.md file.

Method 1: Enable Existing Country-Agnostic Portals

For broad international coverage, enable the default global portals. These require no code changes and work immediately for most markets.

Verify the LinkedIn portal is active by checking its front-matter:


# Check the enabled status in the skill configuration

cat .agents/skills/linkedin-search/SKILL.md

Ensure the file contains:

---
enabled: true
---

The freehire-search portal follows the same pattern in .agents/skills/freehire-search/SKILL.md. According to the repository's README.md, both portals ship with enabled: true by default, making them immediately available when you run the scraper.

Method 2: Add a New Market-Specific Portal

When targeting a country not covered by the default portals (for example, Germany, France, or Japan), generate a new portal skill using the built-in scaffolding command.

Generate the Portal Skill

Invoke the portal generator which creates a country-agnostic skill template:

ai-job-search /add-portal

The generator, as documented in .claude/commands/add-portal.md, prompts for:

  • Market: The target country or region (e.g., "Germany")
  • Language: The primary language of the job board (e.g., "German")
  • Site URL: The base URL of the job portal

This creates a new directory under .agents/skills/ (for example, example-de-search/) containing a CLI stub and a SKILL.md file with market-specific trigger phrases and help text.

Configure the SKILL.md Front-Matter

After generation, enable the new portal by modifying its configuration file:


# Enable the newly created German portal

sed -i 's/enabled: false/enabled: true/' .agents/skills/example-de-search/SKILL.md

Alternatively, open .agents/skills/example-de-search/SKILL.md in your editor and manually set enabled: true in the YAML front-matter. This toggle controls whether the /scrape command includes this portal in its execution cycle.

Verify Auto-Discovery

The job scraper automatically discovers all portal skills with enabled: true. As specified in .claude/skills/job-scraper/SKILL.md at line 63, the scraper honors the enabled toggle and skips any portals marked enabled: false during execution.

Complete Configuration Workflow

Follow these steps to configure AI Job Search for your target market:

  1. Run initial setup: Execute ai-job-search /setup or ai-job-search setup. This interactive command prompts for your Location (city and country). If you specify Denmark, the setup script automatically enables the four Danish demo portals; otherwise, it leaves them disabled.

  2. Select your approach:

    • For global coverage: Verify linkedin-search and freehire-search are enabled in their SKILL.md files.
    • For local markets: Run /add-portal and complete the generator prompts.
  3. Enable new portals: Set enabled: true in the front-matter of any newly generated SKILL.md files.

  4. Execute the scraper: Run the scraper with your target location:

ai-job-search /scrape --location "Berlin, DE"

The scraper invokes all enabled portals and returns unified job listings regardless of their original markets.

Key Configuration Files and Their Roles

.agents/skills/*/SKILL.md: Contains the YAML front-matter with the enabled: flag that controls portal activation. Each portal skill has its own file in this pattern.

.claude/commands/setup.md: Defines the interactive setup flow at line 336, which handles location detection and auto-enables Danish portals when the specified market is Denmark.

.claude/commands/add-portal.md: Documents the portal generation workflow at line 5, confirming the generator is country-agnostic and creates market-agnostic templates.

.claude/skills/job-scraper/SKILL.md: Defines how the scraper discovers and executes portal skills, specifically referencing the enabled: toggle at line 63.

README.md: Provides high-level documentation of the country-agnostic design and lists the default portal availability.

Summary

  • AI Job Search separates core logic from market-specific data collection through modular portal skills in .agents/skills/.
  • Enable existing global portals by verifying enabled: true in their SKILL.md files (LinkedIn and freehire are enabled by default).
  • Add new country-specific markets using the /add-portal command, which generates a skill template based on your specified country and language.
  • Control portal execution via the enabled: boolean in each skill's front-matter; only enabled portals participate in the /scrape command.
  • The setup command auto-detects Danish markets and enables local portals automatically, leaving them disabled for other countries.

Frequently Asked Questions

How do I enable the Danish job portals included in the repository?

Run ai-job-search /setup and specify a location in Denmark (such as "Copenhagen, DK"). The setup command, as implemented in .claude/commands/setup.md, automatically sets enabled: true for the four Danish demo portals (jobindex-search, jobbank-search, jobdanmark-search, and jobnet-search) when it detects a Danish market. For manual enabling, edit each portal's .agents/skills/[portal-name]/SKILL.md file and change enabled: false to enabled: true.

Yes. The /scrape command discovers and executes all portal skills with enabled: true regardless of their target markets. You can enable LinkedIn (global), a German-specific portal, and a French-specific portal simultaneously; the scraper aggregates results from all enabled sources into a unified output. Disable specific portals by setting enabled: false in their respective SKILL.md files if you want to narrow results to a single market.

What happens if I set enabled: false in a portal's SKILL.md?

The portal skill remains installed in .agents/skills/ but the job scraper skips it entirely during execution. As documented in .claude/skills/job-scraper/SKILL.md, the scraper checks the enabled: toggle before invoking any portal CLI. This allows you to keep portal code available for future use without incurring runtime execution costs or cluttering your search results with unwanted markets.

Do I need to restart the application after enabling a new portal?

No. AI Job Search reads the enabled: status from each SKILL.md file at runtime when executing the /scrape command. Changes to the front-matter take effect immediately on the next scraper invocation. However, if you add a completely new portal using /add-portal, ensure the skill directory is fully written to disk before running the scraper.

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 →