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

> Learn to configure AI Job Search for a specific countrys job market by enabling existing portal skills or generating new ones. Target jobs globally with ease.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: how-to-guide
- Published: 2026-08-25

---

**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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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:

```bash

# Check the enabled status in the skill configuration

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

```

Ensure the file contains:

```yaml
---
enabled: true
---

```

The `freehire-search` portal follows the same pattern in [`.agents/skills/freehire-search/SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.agents/skills/freehire-search/SKILL.md). According to the repository's [`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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:

```bash
ai-job-search /add-portal

```

The generator, as documented in [`.claude/commands/add-portal.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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:

```bash

# 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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/SKILL.md) files.

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

```bash
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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`.

### Can I run multiple country portals simultaneously during a single job search?

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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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.