惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
I
InfoQ
Engineering at Meta
Engineering at Meta
D
DataBreaches.Net
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
GbyAI
GbyAI
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
美团技术团队
罗磊的独立博客
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
M
MIT News - Artificial intelligence
D
Docker
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 叶小钗

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - farhan0167/cv-claw: Tailor your resume to any jo...
farhan0167 · 2026-05-16 · via Hacker News: Show HN

Hand Claude a PDF, a screenshot, or a job posting and ask in plain language — "turn this into a resume," "tailor it for this role," "make the name bigger" — and get back a polished, print-ready HTML document you can open and export to PDF. Keep your resume working with Claude instead of fighting a document editor.

The problem. The common advice is to tailor your resume to each job description — but maintaining that by hand is a pain. The template generally stays the same; what changes is the content that goes into it. AI chat can rewrite the words and style them — but each conversation is a one-off: a fresh document, regenerated from scratch, with no canonical original behind it. Run it again for the next job and the styling drifts; tailor five roles and you're juggling five unrelated files with no shared source of truth. There's no clean separation between what your resume says and how it looks, so the two can't vary independently.

What cv-claw does. It splits a resume into structured content (JSON, validated against a fixed schema) and a visual template (Jinja2 + CSS), then renders the two into a single self-contained HTML file — no browser automation, no dev server, no frontend toolchain. Structured content is what makes the resume editable by an agent: Claude works on JSON and templates, then runs one command to produce the artifact. You talk to Claude; cv-claw renders.

The template side is just as open. Because it's plain Jinja2 + CSS that Claude writes, there's no design barrier — you're not picking from a fixed gallery. Describe the look you want, or hand over a reference, and Claude authors the template to match — and because content and template are separate, swapping the layout never touches a word of your resume. Any layout you can describe is a layout you can render.

📦 Install

cv-claw is a standalone CLI. Install it however you manage Python tools:

# pip
pip install cv-claw

# uv (installs the CLI on your PATH, isolated)
uv tool install cv-claw

Either way you get the cv-claw command. To enable the optional PDF backend, install the corresponding extra:

pip install 'cv-claw[pdf]'     # native PDF export

🚀 Quickstart

cv-claw is built to be driven by Claude. The fastest path is to install the CLI and the skill, then describe what you want in plain language — Claude produces the JSON and runs the render for you. Start here.

Use it through Claude

The skills/cv-claw/ directory ships a single Agent Skill covering four resume tasks — ingest (PDF/image/text → JSON), tailor (adapt for a job description), tweak-template (restyle the current render), and create-template (new Jinja2 layout). The main SKILL.md stays small; each task lives under references/ and is loaded on demand.

Claude Code (recommended)

Every release attaches a packaged cv-claw-skill.zip. The link below always points at the newest release:

# Install the CLI
pip install cv-claw   # or: uv tool install cv-claw

# Drop the skill into Claude's skills directory
mkdir -p ~/.claude/skills
curl -fsSL -o /tmp/cv-claw-skill.zip \
  https://github.com/farhan0167/cv-claw/releases/latest/download/cv-claw-skill.zip
unzip -o /tmp/cv-claw-skill.zip -d ~/.claude/skills

This leaves you with ~/.claude/skills/cv-claw/. Point your agent at it and start producing resume JSON. Substitute a project-local .claude/skills/ for the home directory if you want it scoped to one workspace.

claude.ai and Claude Desktop

Download the same cv-claw-skill.zip and import it through the Skills UI — no CLI or unzipping needed. Open Settings → Capabilities → Skills, choose Upload skill, and select the zip.

From a clone

If you've cloned this repo, copy skills/cv-claw/ into your workspace's skills directory directly — it's the same content the release zip is built from.

Drive the CLI by hand

If you'd rather work without the skill, write the bundled example resume to start from, then render it:

cv-claw init                  # → writes resume.json (a complete example)
cv-claw render resume.json    # → writes resume.html next to the JSON

cv-claw init won't clobber an existing file — pass a path or --force (cv-claw init my-resume.json). The example is a full, realistic resume exercising every section kind; edit it into your own and re-render.

cv-claw renders whichever path you give it — the JSON can live anywhere. To keep generated HTML out of the way:

cv-claw render path/to/resume.json --output-dir build/
# → writes build/resume.html

Open the HTML in a browser and use the browser's print dialog to export to PDF. classic is the only bundled template; run cv-claw list-templates to see what's available.

⚙️ CLI

init

cv-claw init [path] [flags]

Write the bundled example resume JSON to path (default resume.json). Refuses to overwrite an existing file unless --force is given. Parent directories are created as needed.

Flag Default Description
[path] resume.json Destination file for the example JSON.
--force off Overwrite an existing file at the destination.

render

cv-claw render <input.json> [flags]

Validate the JSON, look up the template, and write a standalone HTML file. By default the output lands next to the input with an .html suffix.

Flag Default Description
-o, --output <path> <input>.html Single explicit output file. Wins over --output-dir.
--output-dir <dir> Output directory; filename is <input-stem>.html. Directory is created if missing.
--template <name> from JSON Override the template field in the resume JSON for this render only.
--templates-dir <dir> auto-discover Replace the default search roots (workspace + bundled) with a single directory.

list-templates

cv-claw list-templates [flags]

Print discovered template names, one per line. Default output annotates each entry with its source: (workspace) for templates under ./.cvclaw/templates/, (bundled) for those shipped inside cv-claw.

Flag Default Description
--templates-dir <dir> auto-discover Replace the default search roots with a single directory; drops the source annotation.

validate

cv-claw validate <input.json>

Run schema validation only. Exits 0 on success, non-zero on failure. Useful as a sanity check before rendering.

Global

Flag Description
--version Show version and exit.

🧬 Schema

A resume is a JSON document with a template, a header, and a list of sections. Each section is one of four kinds — prose, keyvalue, list, or timeline — and is dispatched to the matching renderer in the template.

🎨 Templates

Templates live in two roots, both auto-discovered:

  1. Bundled — ship inside the cv-claw package (e.g. classic). Read-only; they come down with pip install cv-claw.
  2. Workspace — under ./.cvclaw/templates/<name>/ in your current working directory. Optional; created on first use by the skill.

A workspace template shadows a bundled template of the same name — that's the supported way to fork. The .cvclaw/ prefix is reserved for cv-claw workspace state; today it holds templates/, and future versions may add cache or config under the same prefix.

A typical workspace tree:

my-resume-workspace/
├── resumes/                       # or wherever you keep your JSON
│   └── default.json
└── .cvclaw/
    └── templates/
        └── minimalist/
            ├── minimalist.html.j2 # entry point
            ├── minimalist.css     # inlined into the rendered HTML
            └── _macros.html.j2    # optional section renderers

Files and directories starting with _ are treated as partials and are skipped by template discovery. Add a new template by dropping in a new folder with the same shape (the create-template task automates the scaffolding).

📄 Resume JSON conventions

cv-claw doesn't impose a directory for your resume JSON — pass any path on the CLI and it just works. The bundled skill (used by Claude Code and other agent surfaces) asks the user once where resume JSON should live and can record the answer in your workspace CLAUDE.md under a ## cv-claw: resume location heading so future sessions don't re-ask.

🛠️ Development

make install     # uv sync --all-extras
make lint        # ruff check
make format      # ruff format
make check       # ruff check + ruff format --check
make render      # render resumes/example.json
make clean       # remove caches and build artifacts

📜 License

MIT — see LICENSE.