A CLI tool to generate tailored resumes and cover letters from a job description using Gemini (Google) or OpenAI (ChatGPT).
This project requires Node.js v22 or higher.
If you don't have Node.js v22+ installed, we recommend using nvm (Node Version Manager) to install and manage Node.js versions:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# or
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bashsource ~/.bashrc
# or
source ~/.zshrcnvm install 22
nvm use 22
nvm alias default 22node --version # Should show v22.x.x
npm --versionYou can use cvgenx directly with npx without any installation:
npx cvgenx --helpOr install globally from npm:
npm install -g cvgenxClone the repo only if you want to contribute to the project:
git clone https://github.com/mrh-jishan/cvgenx.git
cd cvgenx
npm installYou can store your API keys in either a .env file in your project or a global config at ~/.cvgenx.env.
GEMINI_API_KEY=your_google_gemini_api_keyOPENAI_API_KEY=your_openai_api_key
To set up config interactively (with validation and default platform selection), run:
npx cvgenx --auth
- You will be prompted for your Gemini and OpenAI API keys (with validation).
- You can choose your default platform (Gemini or OpenAI) interactively.
- You can re-run this command anytime to update your keys or default platform.
npx cvgenx <job-description-file.txt> --type <resume|coverLetter|both> [options]
npx cvgenx job_description.txt --type resume
npx cvgenx job_description.txt --type coverLetter --platform openai
npx cvgenx job_description.txt --type both --user-template my-user.json
npx cvgenx --type both --output-format pdf
If you run npx cvgenx --type both --output-format pdf without specifying a job description file, you will be prompted to paste the job description directly into the terminal. When finished, press Ctrl+D (on Mac/Linux) or Ctrl+Z (on Windows) to submit the input.
To view the default user template in JSON:
npx cvgenx --show-user-template json
To view the default user template in YAML:
npx cvgenx --show-user-template yaml
To save the template to a file for editing:
npx cvgenx --show-user-template json > my-user.json
# or
npx cvgenx --show-user-template yaml > my-user.yaml
Edit the file as needed, then use it with the CLI:
npx cvgenx job.txt --type resume --user-template my-user.json
To interactively create or update your default user template:
npx cvgenx --edit-user-template- This will prompt you for all fields and save the result to
~/.cvgenx.user.json. - If the file already exists, your current values will be shown and you can update them.
To set an existing file as your default user template:
npx cvgenx --edit-user-template my-user.json
# or
npx cvgenx --edit-user-template my-user.yaml- This will copy the file to your home directory as
~/.cvgenx.user.json(converting from YAML if needed). - The CLI will always use this file as your default user info.
- Only
~/.cvgenx.user.jsonis used as the source of truth. No YAML file is created in your home directory.
To view your current default user template in JSON:
npx cvgenx --show-user-template jsonTo view it in YAML (converted on the fly from JSON):
npx cvgenx --show-user-template yaml- Keep only one default user template file: The CLI always uses the file at
~/.cvgenx.user.json. - If you want to switch formats, use the
--edit-user-templatecommand with the new file, and the CLI will update your default (always as JSON). - Avoid editing both files at once; always use the one set as default.
- Loads API keys from either local or home config
- Interactive config setup with
--auth(with validation and platform selection) - Generates resume or cover letter using Gemini or OpenAI
- Supports user info templates in JSON or YAML
- Interactive user template editing (education, projects, summary)
Contributions are welcome! To get started:
- Fork this repository.
- Create a new branch for your feature or bugfix.
- Make your changes and add tests if applicable.
- Run
npm testto ensure everything passes. - Submit a pull request with a clear description of your changes.
Please follow the existing code style and include relevant documentation updates.
If you have questions or suggestions, feel free to open an issue.
MIT