npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

h2o-agent

v0.1.8

Published

AI-powered local resume and cover letter generator for H2O

Readme

h2o-agent

AI-powered local resume and cover letter generator for H2O.

Start the server in a working directory, submit a job description, and it uses the Cursor CLI agent to produce tailored resume.md / cover.md files plus PDF output.

Requirements

  • Node.js 18+
  • Cursor CLI with agent available on your PATH
  • Chrome/Chromium for PDF generation (Puppeteer will download a matching browser on first PDF convert if needed)

Quick start

Run from the directory where you want resumes created (profile + job folders live here):

cd /path/to/your/resume-workspace
npx h2o-agent

Or install globally:

npm install -g h2o-agent
cd /path/to/your/resume-workspace
h2o
# or: h2o-agent

Note: The npm package name is h2o-agent (not h2o-server). Use npx h2o-agent.

Default port is 3000. Override with:

PORT=4000 npx h2o-agent

First run

In the current working directory the server will:

  1. Ask for your name (used in PDF filenames)
  2. Create career_profile.md — replace the placeholder with your real career details
  3. Create .h2o-resume-prompt.md — generation instructions (editable)

Then fill in career_profile.md before submitting jobs. Thin/placeholder profiles produce weak resumes.

Generate a resume

# Health check
curl -s http://localhost:3000/health

# Submit a job
curl -s -X POST http://localhost:3000/generate \
  -H "Content-Type: application/json" \
  -d '{
    "name": "acme/senior-frontend-engineer",
    "description": "We are looking for a senior frontend engineer...",
    "theme": "modern"
  }'

# Poll status (use requestId from the response)
curl -s http://localhost:3000/status/REQUEST_ID

Output appears under ./<name>/ in your working directory, for example:

acme/senior-frontend-engineer/
  job_description.txt
  resume.md
  cover.md
  YourName_resume.pdf
  YourName_cover.pdf

Regenerate PDFs only (no AI re-run)

If markdown already exists for that job name:

curl -s -X POST http://localhost:3000/generate \
  -H "Content-Type: application/json" \
  -d '{
    "name": "acme/senior-frontend-engineer",
    "theme": "executive",
    "pdf_only": true
  }'

API

GET /health

Health check.

GET /themes

Lists PDF themes.

{
  "themes": ["classic", "modern", "minimal", "executive", "newspaper"],
  "default": "classic",
  "descriptions": {
    "classic": "Traditional professional with uppercase section headers and subtle line separators",
    "modern": "Contemporary with accent color and custom bullet points",
    "minimal": "Clean and simple with maximum readability",
    "executive": "Sophisticated serif headers with centered name",
    "newspaper": "Editorial newspaper-inspired layout"
  }
}

POST /generate

Queue a generation job (returns immediately).

| Field | Required | Description | | --- | --- | --- | | name | yes | Job folder / identifier | | description | for full runs | Job description text | | theme | no | classic (default), modern, minimal, executive, newspaper | | pdf_only | no | true = rebuild PDFs from existing markdown only |

Example response:

{
  "requestId": "a1b2c3d4e5f6g7h8",
  "name": "acme/senior-frontend-engineer",
  "theme": "modern",
  "pdf_only": false,
  "status": "pending",
  "message": "Job accepted and queued for processing"
}

GET /status/:requestId

Poll job status: pendingprocessingcompleted or failed.

Customizing generation

Edit .h2o-resume-prompt.md in your working directory to change how resumes are written. On startup, if that file differs from the built-in template, the server asks before replacing it.

Tips

  • Always start the server from your resume workspace (cd there first), not from the package install directory.

  • Keep career_profile.md detailed — the agent only uses facts from that file plus the job description.

  • First PDF conversion may need Puppeteer Chrome installed:

    npx puppeteer browsers install chrome

Chrome extension

Pair with the H2O Chrome extension from the GitHub repo to capture job descriptions from the browser and submit them to this local server.

License

MIT