# Programming Languages Used in the ai-job-search Project

> Discover the programming languages powering the ai-job-search project. Explore Python, LaTeX, YAML, and TypeScript used for automation, documentation, CI/CD, and utilities.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: programming-languages
- Published: 2026-07-25

---

**The ai-job-search repository combines Python for automation scripts, LaTeX for document templates, YAML for CI/CD workflows, and TypeScript for optional agent utilities.**

The MadsLorentzen/ai-job-search project orchestrates job application workflows through a polyglot codebase that handles PDF verification, CV generation, and security linting. Understanding the programming languages used in the ai-job-search project reveals how each component—from security guards to document compilation—interacts within the repository's architecture.

## Core Automation: Python

**Python** serves as the primary engine for the project's automation logic, driving CLI tools, security validation, and test suites.

### Security and Linting Tools

In [`tools/security_guards.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/security_guards.py), the project implements runtime safety checks that validate file integrity and permissions before execution. The [`tools/lint_skills.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/lint_skills.py) module enforces coding conventions across the codebase, ensuring consistent style in agent definitions and configuration files. Comprehensive unit coverage exists in [`tests/test_security_guards.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tests/test_security_guards.py), which validates these critical security functions using the standard library’s `unittest` framework.

```python

# tools/verify_pdf.py (simplified implementation)

from pathlib import Path
import subprocess

def is_searchable(pdf_path: Path) -> bool:
    """Return True if the PDF contains searchable text."""
    result = subprocess.run(
        ["pdfinfo", str(pdf_path)],
        capture_output=True,
        text=True,
    )
    return "Encrypted:" not in result.stdout

```

## Document Generation: LaTeX

**LaTeX** provides deterministic typographic control for professional PDF documents, maintaining version-friendly plain-text source files for résumés and cover letters.

### CV and Cover Letter Templates

The `cv/main_example.tex` file defines the résumé structure with precise geometric margins and font controls, while `cover_letters/cover_example.tex` provides the cover letter template. These sources compile into PDFs through automated pipelines, ensuring consistent output across different environments without proprietary software dependencies.

```latex
% cv/main_example.tex (excerpt)
\documentclass{article}
\usepackage{geometry}
\geometry{margin=1in}
\begin{document}
\section*{Professional Experience}
\textbf{Software Engineer} at TechCorp\\
Automated deployment pipelines using Python and GitHub Actions.
\end{document}

```

## Infrastructure and Configuration

### YAML for CI/CD Pipelines

The **[`.github/workflows/ci.yml`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.github/workflows/ci.yml)** file orchestrates continuous integration as code, triggering Python test suites and LaTeX compilation on every pull request. This YAML configuration ensures that document generation and security checks run automatically before code merges, enforcing quality gates at the repository level.

### JSON for Agent Settings

Structured configuration for Claude-based automation agents resides in **[`.claude/settings.json`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/settings.json)** and related JSON files. These settings decouple agent behavior from implementation logic, allowing users to modify parameters without editing Python source code.

## Documentation and Auxiliary Scripts

### Markdown Documentation

Project documentation utilizes **Markdown** files such as [`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md) and [`AGENTS.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/AGENTS.md) to provide human-readable setup guides, skill specifications, and usage instructions. These files follow standard GitHub-flavored Markdown syntax with fenced code blocks and tables for clarity.

### TypeScript Agent Utilities

While not required for core functionality, the repository includes **TypeScript** source files under the `.agents` directory, such as [`.agents/skills/linkedin-search/cli/src/helpers.ts`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.agents/skills/linkedin-search/cli/src/helpers.ts). These optional Node.js modules provide enhanced web scraping capabilities for LinkedIn and other job portals, complementing the primary Python automation layer.

## Summary

- **Python** powers the automation scripts, security validation in [`tools/security_guards.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/security_guards.py), and test coverage in [`tests/test_security_guards.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tests/test_security_guards.py).
- **LaTeX** generates professional PDF documents through templates located in `cv/main_example.tex` and `cover_letters/cover_example.tex`.
- **YAML** defines CI/CD pipelines in [`.github/workflows/ci.yml`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.github/workflows/ci.yml), automating test execution and document compilation.
- **JSON** configures agent behavior in [`.claude/settings.json`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/settings.json) and other configuration files.
- **Markdown** provides project documentation in [`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md) and specification files.
- **TypeScript** supports optional CLI agents for web scraping tasks, though these remain separate from the core Python workflow.

## Frequently Asked Questions

### What is the main programming language for automation logic in ai-job-search?

**Python** serves as the primary automation language, handling security checks in [`tools/security_guards.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/security_guards.py), linting in [`tools/lint_skills.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/lint_skills.py), and PDF verification utilities. The language’s extensive standard library and subprocess management capabilities make it ideal for the file manipulation and external tool orchestration required by the job search workflow.

### Why does the project use LaTeX instead of HTML or Word for documents?

**LaTeX** provides deterministic typographic control and version-friendly plain-text source, enabling precise CV formatting through `cv/main_example.tex` and cover letter templates in `cover_letters/cover_example.tex`. The [`.github/workflows/ci.yml`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.github/workflows/ci.yml) pipeline compiles these sources automatically, ensuring consistent PDF output across different environments without requiring proprietary software.

### Are the TypeScript files in the .agents directory required to run the core project?

No, the **TypeScript utilities are optional**. They provide enhanced functionality for specific tasks like LinkedIn scraping via files such as [`.agents/skills/linkedin-search/cli/src/helpers.ts`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.agents/skills/linkedin-search/cli/src/helpers.ts), but the core ai-job-search workflow operates entirely through Python scripts and LaTeX compilation. Users can utilize the main features without installing Node.js or the `.agents` dependencies.

### Where does the project define its continuous integration settings?

The CI/CD configuration resides in **[`.github/workflows/ci.yml`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.github/workflows/ci.yml)** as a YAML file. This workflow triggers Python test suites, runs security guards, and compiles LaTeX documents to verify that both code and CV templates remain functional after every commit.