Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/clyrisai/gitresolve/llms.txt

Use this file to discover all available pages before exploring further.

Batch mode lets you resolve an entire hiring pipeline at once. Point GitResolve at a CSV of portfolio links and a folder of PDF resumes, and it will process every candidate, aggregate results from multiple sources, and either print a summary table or write per-candidate JSON files to disk.

Batch Flags

FlagDescription
--portfoliosProcess portfolio URLs from the CSV file only
--resumesProcess PDF resumes from the resumes directory only
--allProcess both the CSV and the resumes directory
Running gitresolve with no URL argument and none of these flags defaults to --all.
# These three commands are equivalent
gitresolve
gitresolve --all
gitresolve --portfolios --resumes

Default Data Paths

SourceDefault PathOverride FlagEnvironment Variable
Portfolio CSV./data/portfolio_links.csv--portfolio-csv <path>PORTFOLIO_CSV
Resumes directory./data/resumes--resumes-dir <path>RESUMES_DIR

Custom Paths

# Custom CSV path
gitresolve --portfolios --portfolio-csv ./candidates/ats-export.csv

# Custom resumes directory
gitresolve --resumes --resumes-dir ./uploads/applications

# Both at once
gitresolve --all \
  --portfolio-csv ./candidates/ats-export.csv \
  --resumes-dir ./uploads/applications

Portfolio CSV Format

The CSV must contain a column that GitResolve can use as the URL source. Column names are checked in the following priority order:
  1. url
  2. URL
  3. link
  4. Link
  5. First column (fallback — used if none of the above are present)
name,url,notes
Jane Doe,https://janedoe.dev,Strong frontend
John Smith,https://github.com/jsmith,Backend focus
Alice Lee,https://gitlab.com/alicelee,
GitResolve applies the same URL normalization used in single-URL mode. Bare domains like janedoe.dev in the CSV are automatically prefixed with https:// before processing.
If your CSV column is named something other than the four supported names, rename the column or rely on the first-column fallback:
portfolio_url
https://janedoe.dev
https://github.com/jsmith

Resumes Directory Format

GitResolve scans the target directory and processes every file with a .pdf extension. Subdirectories are not traversed — all PDFs must be in the top-level folder.
data/
└── resumes/
    ├── jane-doe.pdf
    ├── john-smith.pdf
    └── alice-lee.pdf
Non-PDF files in the same directory are silently ignored.

Step-by-Step Setup

1

Create the data folders

Create the default directory structure in your project root.
mkdir -p data/resumes
2

Add portfolio links

Create data/portfolio_links.csv with a url column.
name,url
Jane Doe,https://janedoe.dev
John Smith,https://github.com/jsmith
Alice Lee,https://gitlab.com/alicelee
3

Add resume PDFs

Copy or move candidate resume PDFs into data/resumes/.
cp ~/Downloads/*.pdf data/resumes/
4

Run the batch command

Process all inputs with a single command.
gitresolve --all
To save results to disk instead of (or in addition to) the terminal:
gitresolve --all --output-dir ./results

Candidate Aggregation

When two or more sources — for example, a portfolio link from the CSV and a PDF resume — both resolve to the same Git username, GitResolve automatically merges them into a single AggregatedResult. Duplicate links are deduplicated by URL, and all source references are tracked in the sources and sourceTypes arrays.
# janedoe.dev and janedoe.pdf both resolve to github.com/janedoe
# → one merged AggregatedResult is written to results/resolved/janedoe.json
gitresolve --all --output-dir ./results

Example Aggregated Output

{
  "candidateUsername": "janedoe",
  "sources": [
    "https://janedoe.dev",
    "./data/resumes/janedoe.pdf"
  ],
  "sourceTypes": [
    "portfolio",
    "resume_file"
  ],
  "ownerProfile": {
    "url": "https://github.com/janedoe",
    "provider": "github",
    "type": "profile",
    "username": "janedoe"
  },
  "confidence": "high",
  "ownedRepos": [
    {
      "url": "https://github.com/janedoe/my-project",
      "provider": "github",
      "type": "repo",
      "username": "janedoe",
      "repo": "my-project"
    }
  ],
  "contributions": [
    {
      "url": "https://github.com/open-source-org/library/pull/42",
      "provider": "github",
      "type": "pull_request",
      "username": "janedoe",
      "repo": "library",
      "number": "42"
    }
  ],
  "externalRepos": [],
  "allLinks": [],
  "warnings": []
}
Candidates whose sources cannot be resolved to any Git username are written to unresolved/ with a sanitized filename rather than a username. See Output Options for the full directory structure.

Privacy

All processing happens locally on your machine. No candidate data — portfolio URLs, resume text, or resolved profiles — is sent to any external server by GitResolve. The only outbound network requests are the page fetches to the candidate URLs themselves.
It is good practice to add your data directories to .gitignore so that candidate materials are not accidentally committed to version control:
data/resumes/
data/portfolio_links.csv
results/

Build docs developers (and LLMs) love