What Are the Three Extension Points in the AI Job Search Framework?
The AI Job Search Framework provides three extension points—portal skills, document templates, and evaluation criteria—that allow you to customize job board integrations, CV generation, and ranking logic without modifying core source code.
According to the MadsLorentzen/ai-job-search repository, this lightweight extension model enables users to tailor the system to specific markets and workflows while maintaining compatibility with upstream updates.
Portal Skills: Adding Custom Job Board Integrations
Portal skills are self-contained CLI modules that query specific job boards. Each skill adheres to a strict contract defined in the framework’s skill system.
Skill Contract and Directory Structure
Portal skills reside in individual folders under .agents/skills/ and must implement a common interface. As specified in the README.md (see the "Portal skills" section), each skill must provide:
searchanddetailcommands for querying listings and retrieving full descriptions- Output formatters supporting JSON, table, and plain text modes
- An
enabled:flag in configuration to toggle activation - Dedicated test suites to validate functionality
The framework discovers these skills automatically at runtime, making it possible to add support for niche or regional job boards without touching the core application logic.
Creating a New Portal with /add-portal
To scaffold a new integration, use the built-in generator command:
/add-portal
This interactive command prompts for the portal URL and search pattern discovery, then generates a new folder under .agents/skills/ with boilerplate CLI code ready for implementation. For implementation examples, examine existing skills such as linkedin-search/SKILL.md within the .agents/skills/ directory.
Document Templates: Customizing CV and Cover Letter Generation
Document templates extend the framework’s document generation pipeline, allowing substitution of the default templates with custom LaTeX, Typst, or any toolchain capable of producing PDFs.
Template Registration via /add-template
New templates are registered using the /add-template command, which records the compilation workflow in the framework configuration. As documented in .claude/commands/add-template.md, the command requires:
--type: Document category (cvorcover-letter)--name: Unique identifier for the template--source-extension: File extension of source files (e.g.,.tex,.typ)--compile-command: Shell command to generate the PDF
Example registration for a LaTeX CV template:
/add-template \
--type cv \
--name mytemplate \
--source-extension .tex \
--compile-command "lualatex template.tex"
Integration with the Apply Workflow
Once registered, the framework validates the template structure and automatically rewires the /apply workflow to use the specified compilation command. The system stores these mappings persistently, ensuring that subsequent job applications use your custom document generation pipeline.
Evaluation Criteria: Personalizing Job Ranking and Filtering
Evaluation criteria are user-defined constraints and preferences stored in your profile that automatically filter and rank job postings during the /rank and /apply phases.
Profile-Based Deal Breakers
Criteria are defined as free-form entries in your user profile (typically documents/README.md). The framework parses these constraints during job analysis. For example, to set a minimum salary threshold:
- Minimum salary: 55 000 DKK per month
During execution of the /rank command, the system automatically discards or deprioritizes postings that fail to meet these thresholds.
The Language Gate Implementation
For language-specific requirements, the framework implements a Language Gate detailed in .claude/skills/job-scraper/04-job-evaluation.md. This component evaluates linguistic constraints and content requirements specified in your profile, ensuring that non-technical criteria (such as parental leave terms or on-call expectations) are properly assessed against job descriptions.
Summary
- Portal skills enable custom job board integrations through CLI modules in
.agents/skills/, scaffolded via/add-portal. - Document templates support arbitrary PDF generation toolchains (LaTeX, Typst) registered through
/add-templatewith source extensions and compile commands. - Evaluation criteria allow profile-driven filtering using natural language constraints evaluated by the Language Gate during ranking workflows.
Frequently Asked Questions
How do I create a custom portal skill for a niche job board?
Execute the /add-portal command to generate the folder structure under .agents/skills/. Implement the required search and detail CLI commands following the contract specified in existing skill documentation such as linkedin-search/SKILL.md. Ensure your module supports JSON, table, and plain output modes and includes an enabled: configuration flag.
What document formats does the template system support?
The template system supports any toolchain that produces PDFs. Common implementations use LaTeX (.tex) or Typst (.typ), but the framework accepts any source file extension paired with a valid shell compile command. The /add-template command registers these associations for use in the /apply workflow.
Where are evaluation criteria stored and how are they parsed?
Evaluation criteria reside in your user profile documents (typically documents/README.md) as natural language bullet points. The system extracts these constraints during the /rank and /apply phases, applying them through the Language Gate component defined in .claude/skills/job-scraper/04-job-evaluation.md to filter postings automatically.
Can I disable specific portal skills without deleting them?
Yes. Each portal skill includes an enabled: flag in its configuration. Setting this flag to false deactivates the skill without removing its code from the .agents/skills/ directory, allowing you to toggle job board integrations based on current search requirements.
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 →