santifer/career-opsPublic

Open-source AI job search: scan job portals, evaluate listings with a structured A-F rubric into a 1.0-5.0 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)

AI summary: A holistic toolset for tracking, optimizing, and strategically planning software engineering careers.

Stars
63K
+206 today
Forks
12.4K
Watchers
254
Open issues
123
Open PRs
92
Contributors
~220
Commits
994
Branches
7

JavaScriptMITCreated Apr 4, 2026Last push 2d agoLatest release career-ops-v1.23.0+814 stars this week+814 this month

Star history

since Apr 5, 2026
020K40K60KApr 2026May 2026Jun 2026Aug 2026
63K stars as of Aug 6, 2026, tracked back to Apr 5, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 3 commits2026-04-05: 20 commits2026-04-06: 12 commits2026-04-07: 12 commits2026-04-08: 16 commits2026-04-09: 5 commits2026-04-10: 19 commits2026-04-11: 0 commits2026-04-12: 14 commits2026-04-13: 14 commits2026-04-14: 6 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 1 commit2026-04-18: 0 commits2026-04-19: 11 commits2026-04-20: 0 commits2026-04-21: 2 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 16 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 3 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 2 commits2026-05-04: 0 commits2026-05-05: 1 commit2026-05-06: 2 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 6 commits2026-05-13: 1 commit2026-05-14: 0 commits2026-05-15: 29 commits2026-05-16: 1 commit2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 5 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 6 commits2026-05-23: 1 commit2026-05-24: 0 commits2026-05-25: 2 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 5 commits2026-06-03: 4 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 6 commits2026-06-08: 1 commit2026-06-09: 25 commits2026-06-10: 13 commits2026-06-11: 35 commits2026-06-12: 10 commits2026-06-13: 3 commits2026-06-14: 0 commits2026-06-15: 6 commits2026-06-16: 4 commits2026-06-17: 9 commits2026-06-18: 24 commits2026-06-19: 3 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 18 commits2026-06-24: 7 commits2026-06-25: 14 commits2026-06-26: 12 commits2026-06-27: 2 commits2026-06-28: 10 commits2026-06-29: 41 commits2026-06-30: 7 commits2026-07-01: 11 commits2026-07-02: 27 commits2026-07-03: 18 commits2026-07-04: 27 commits2026-07-05: 13 commits2026-07-06: 25 commits2026-07-07: 32 commits2026-07-08: 10 commits2026-07-09: 1 commit2026-07-10: 39 commits2026-07-11: 12 commits2026-07-12: 3 commits2026-07-13: 20 commits2026-07-14: 23 commits2026-07-15: 19 commits2026-07-16: 44 commits2026-07-17: 9 commits2026-07-18: 3 commits2026-07-19: 2 commits2026-07-20: 27 commits2026-07-21: 23 commits2026-07-22: 7 commits2026-07-23: 7 commits2026-07-24: 2 commits2026-07-25: 2 commits2026-07-26: 0 commits2026-07-27: 54 commits2026-07-28: 35 commits2026-07-29: 25 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
989 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    62,971 stars

  • Very active

    989 commits in 52 weeks

  • Community-driven

    ~220 contributors

  • Outside contributions

    74% of recent commits from the community

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    17 trending appearances

What career-ops does

Career Ops approaches personal career development with the rigorous methodology typically applied to software engineering operations. It provides a structured system to document accomplishments, track skill progression, and manage professional networks systematically. The project includes templates for brag documents, resume generation scripts, and strategic planning workflows. It integrates with Git to track contributions across various repositories, building a comprehensive portfolio automatically. By treating a career as an engineering project, it helps developers intentionally guide their professional growth rather than leaving it to chance.

Designed for software engineers, engineering managers, and technical professionals who want a structured approach to career growth. No specific prerequisites, though familiarity with Git and markdown is helpful.

  • Automated portfolio generation: Aggregates commits and PRs from GitHub to build a dynamic resume.
  • Brag document templates: Provides structured formats for recording key achievements for performance reviews.
  • Skill tracking dashboard: Visualizes proficiency levels across different technologies over time.
  • Network CRM: Acts as a lightweight CRM to manage professional contacts and mentorship relationships.
  • Goal setting workflows: Implements OKR-style tracking for personal career objectives.

Where teams use it

Performance review preparation

Helps engineers easily compile concrete data and achievements when asking for a promotion.

Job hunting

Automatically generates tailored resumes based on the specific skills required for different roles.

Continuous learning

Tracks progress on new technologies and suggests relevant resources based on career goals.

Professional networking

Manages follow-ups and maintains relationships with key industry contacts systematically.

Getting started: git clone https://github.com/santifer/career-ops.git

README

main branch

career-ops

career-ops Multi-Agent Job Search System

I spent months applying to jobs the hard way. So I engineered the system I wish I had.
Companies use AI to filter candidates. I just gave candidates AI to choose companies.
Now it's open source.

santifer%2Fcareer-ops | Trendshift

career-ops on Claude | Product Hunt

FEATURED IN

WIRED       Business Insider


career-ops Demo

740+ job listings evaluated · 100+ personalized CVs · 1 dream role landed

Live star telemetry of santifer/career-ops

Discord

Latest release

Built with Claude Code

Also runs on any agent-skill-standard CLI. See Supported CLIs.
Claude Code OpenCode Antigravity CLI Codex Qwen Kimi GitHub Copilot Grok Build CLI
Node.js Go Playwright Bubble Tea MIT Trademark Policy

What Is This

career-ops (career-ops.org, also known as careerops) turns any AI coding CLI into a full job search command center. Instead of manually tracking applications in a spreadsheet, you get an AI-powered pipeline that:

  • Evaluates offers with a structured evaluation -- blocks A-F scored across 5 weighted dimensions, plus block G, a separate posting-legitimacy assessment that never affects the 1-5 score
  • Generates tailored PDFs -- ATS-optimized CVs customized per job description
  • Scans portals automatically (Greenhouse, Ashby, Lever, company pages)
  • Processes in batch -- evaluate 10+ offers in parallel with sub-agents
  • Tracks everything in a single source of truth with integrity checks
  • Researches companies and finds the right person to contact -- applications get you in the queue; research gets you a conversation

Important: This is NOT a spray-and-pray tool. career-ops is a filter -- it helps you find the few offers worth your time out of hundreds. The system strongly recommends against applying to anything scoring below 4.0/5. Your time is valuable, and so is the recruiter's. Always review before submitting.

career-ops is agentic: whichever AI coding CLI you choose navigates career pages with Playwright, evaluates fit by reasoning about your CV vs the job description (not keyword matching), and adapts your resume per listing.

Heads up: the first evaluations won't be great. The system doesn't know you yet. Feed it context -- your CV, your career story, your proof points, your preferences, what you're good at, what you want to avoid. The more you nurture it, the better it gets. Think of it as onboarding a new recruiter: the first week they need to learn about you, then they become invaluable.

Built by someone who used it to evaluate 740+ job offers, generate 100+ tailored CVs, and land a Head of Applied AI role. Read the full case study.

The CareerOps Manifesto

career-ops is the first reference implementation of the CareerOps Manifesto. read it. if it says what you believe, sign it. your signature becomes a commit.

Features

Feature Description
Auto-Pipeline Paste a URL, get a full evaluation + PDF + tracker entry
A-G Evaluation Role summary, CV match, level strategy, comp research, personalization, interview prep (STAR+R) -- plus a Block G posting-legitimacy check that flags scams and ghost jobs, and a Work-Auth signal that flags an explicit no-sponsorship JD as a hard blocker
Interview Story Bank Accumulates STAR+Reflection stories across evaluations -- 5-10 master stories that answer any behavioral question
Negotiation Scripts Salary negotiation frameworks, geographic discount pushback, competing offer leverage
ATS PDF Generation Keyword-injected CVs with Space Grotesk + DM Sans design
Cover Letter Generator Research-backed cover letters with keyword mirroring, four interactive angle prompts (why/problems/approach/tone), draft-in-chat approval gate, and A4 PDF via the same HTML + Playwright pipeline as CVs. Auto-drafts on every evaluation; complete and generate on demand via /career-ops cover
Application Email Drafts Formal recruiter/referral/cold application emails from a report or pasted JD, with subject line, attachment checklist, source-backed fit points, and a profile-driven contact block. Draft-only -- career-ops never sends, submits, or clicks anything.
Portal Scanner 100+ companies pre-configured (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + custom queries across Ashby, Greenhouse, Lever, Wellfound
Batch Processing Parallel evaluation with headless CLI workers (claude -p / opencode run)
Dashboard TUI Terminal UI to browse, filter, and sort your pipeline
Human-in-the-Loop AI evaluates and recommends, you decide and act. The system never submits an application -- you always have the final call
Pipeline Integrity Automated merge, dedup, status normalization, health checks
Interview Suite Time-blocked prep plans, practice sessions with feedback, post-interview debriefs (interview/), and a company red-flag detector (interview-redflag)
Offer Stage Contract reading companion -- clause walk plus a lawyer question list (offer-prep) -- and a desired/advertised/actual salary-gap analyzer (salary-gap.mjs)
Follow-ups & Replies Follow-up cadence calculator and seeded reminders (followup-cadence.mjs, followup-seed.mjs); employer reply classification into tracker updates (reply-watch)
Pattern Analysis Rejection patterns and per-ATS-channel advance rates (analyze-patterns.mjs), lifetime funnel stats (stats.mjs), repost/ghost-job detection (detect-reposts.mjs)
Plugin System Opt-in integrations (Gmail, Notion, Apify + a community registry), disabled by default -- see docs/PLUGINS.md
Beyond the CV Company research (deep) surfaces AI strategy, recent moves, engineering culture, and the angle your profile should take. Contact discovery (contacto) identifies the hiring manager, recruiter, or team peer worth reaching out to and drafts a ≤300-character LinkedIn message tuned to each contact type. Formal application email drafts (email) turn an evaluated report or pasted JD into a subject line, body, and attachment checklist without sending, submitting, or clicking anything. Applications get you in the queue; research gets you a conversation.

Quick Start

Fastest way — one command:

npx @santifer/career-ops init

💡 npx ships with Node.js — it runs the installer once, without installing anything globally. No Node yet? Install it first. (Already using a Claude Code / Gemini / Codex CLI? Then you already have it.)

This clones the latest release into ./career-ops and installs dependencies. Then:

cd career-ops
claude   # or codex / qwen / opencode / agy / grok — open your AI CLI here

On first launch, career-ops walks you through setup — your CV, profile and target roles — just by chatting. Nothing to edit by hand.

Prefer to set it up manually? (git clone)
git clone https://github.com/santifer/career-ops.git
cd career-ops && npm install
npx playwright install chromium   # only needed for PDF generation

# 2. Check setup
npm run doctor                     # Validates all prerequisites

# 3. Configure
cp config/profile.example.yml config/profile.yml  # Edit with your details
cp templates/portals.example.yml portals.yml       # Customize companies

# 4. Add your CV
# Create cv.md in the project root with your CV in markdown

# 5. Open your AI CLI in this directory
claude   # or codex / opencode / qwen / agy / grok

# Then ask your CLI to adapt the system to you:
# "Change the archetypes to backend engineering roles"
# "Translate the modes to English"
# "Add these 5 companies to portals.yml"
# "Update my profile with this CV I'm pasting"

# 6. Start using
# Paste a job URL or JD text to trigger auto-pipeline
# If your CLI supports slash commands, use /career-ops (or its CLI-specific alias)
# In Codex, ask for the same mode in plain language, e.g.:
# "Run the career-ops scan mode"
# "Run the career-ops pipeline mode for data/pipeline.md"
# "Run the career-ops pdf mode for the latest evaluated role"
# "Run the career-ops tracker mode and summarize the current statuses"

The system is designed to be customized by your AI coding CLI itself. Modes, archetypes, scoring weights, negotiation scripts -- just ask it to change them. It reads the same files it uses, so it knows exactly what to edit.

See docs/SETUP.md for the full setup guide, docs/RUNNING_ON_A_BUDGET.md for instructions on running career-ops cheaply using custom or local models, docs/AUTOMATION.md for scheduling recurring scans and a zero-token triage-to-shortlist recipe, docs/APPLY_AUTOFILL.md for details on the ATS auto-fill flow, and docs/FAQ.md for answers to common setup questions. Design principles live in ARCHITECTURE.md; runtime flows in docs/ARCHITECTURE.md.

Antigravity CLI Integration

career-ops supports Antigravity CLI natively, the same way it supports Claude Code and OpenCode. All slash commands are available through the shared skill entrypoint, using the same modes/*.md evaluation logic.

Google has transitioned consumer Gemini CLI access to Antigravity CLI. GEMINI.md is now a no-op compatibility guard so Antigravity does not duplicate the full project instructions when it reads both AGENTS.md and GEMINI.md.

Native Antigravity CLI

# 1. Run in the career-ops directory
cd career-ops
agy

# 2. Use the unified /career-ops command with subcommands:
/career-ops "Senior AI Engineer at Anthropic..."
/career-ops pipeline
/career-ops scan
/career-ops pdf
/career-ops tracker

The skill is defined using the open standard in .agents/skills/career-ops/SKILL.md and symlinked/referenced for each supported CLI (e.g. .claude/, .cursor/, .qwen/, .antigravitycli/, .grok/).

Codex Integration

career-ops supports Codex through the same shared router, but the invocation model is different from CLIs that auto-register slash commands. For the full guide, see docs/CODEX.md.

Interactive Codex

cd career-ops
codex

Slash commands are not guaranteed in Codex. If /career-ops is unavailable, ask Codex to run the mode directly in plain language:

Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123
Run the career-ops scan mode and summarize new matches.
Run the career-ops pipeline mode for data/pipeline.md.
Run the career-ops pdf mode for the latest evaluated role.
Run the career-ops tracker mode and summarize the current statuses.

One-shot Codex (codex exec)

codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"
codex exec "Run career-ops scan mode in this repo and summarize new matches."
codex exec "Run career-ops pipeline mode for data/pipeline.md."
codex exec "Run career-ops pdf mode for the latest evaluated role."
codex exec "Run career-ops tracker mode and summarize the current statuses."

Grok Build CLI Integration

career-ops supports Grok Build CLI natively, the same way it supports Claude Code and OpenCode. AGENTS.md is auto-loaded as project rules, and all slash commands are available through the shared skill entrypoint.

Native Grok Build CLI

# 1. Run in the career-ops directory
cd career-ops
grok

# 2. Use the unified /career-ops command with subcommands:
/career-ops "Senior AI Engineer at Anthropic..."
/career-ops pipeline
/career-ops scan
/career-ops pdf
/career-ops tracker

For headless batch workers, use grok -p "prompt" (add --yolo to auto-approve tool executions).

Standalone Gemini API Script (No CLI install needed)

# 1. Get a free API key at https://aistudio.google.com/apikey
cp .env.example .env
# Edit .env, set GEMINI_API_KEY=your_key_here

# 2. Install dependencies
npm install

# 3. Evaluate a job description
node gemini-eval.mjs "We are looking for a Senior AI Engineer..."
node gemini-eval.mjs --file ./jds/my-job.txt
node agent-inbox.mjs add "..."   # queue a request for the next session
npm run gemini:eval -- "JD text here"

Free tier: Both options work without billing. Native CLI uses Google OAuth; the API script uses gemini-3.6-flash (rate limits are model- and tier-dependent; see Google AI docs for current quotas).

Usage

career-ops uses a shared command router. In CLIs that register slash commands, it looks like this:

/career-ops                → Show all available commands
/career-ops {paste a JD}   → Full auto-pipeline (evaluate + PDF + tracker)
/career-ops scan           → Scan portals for new offers
/career-ops pdf            → Generate ATS-optimized CV
/career-ops cover          → Cover letter generator (paste JD or /career-ops cover {slug})
/career-ops email          → Formal application email draft (draft-only; never sends, submits, or clicks)
/career-ops batch          → Batch evaluate multiple offers
/career-ops tracker        → View application status
/career-ops apply          → Fill application forms with AI
/career-ops outcome        → Record application outcome & archive artifacts
/career-ops pipeline       → Process pending URLs
/career-ops contacto       → Find hiring manager / recruiter / peer + draft a ≤300-char LinkedIn message per contact type
/career-ops deep           → Generate a structured 6-axis research prompt (AI strategy, recent moves, culture, challenges, competitors, candidate angle)
/career-ops training       → Evaluate a course/cert
/career-ops project        → Evaluate a portfolio project

Or just paste a job URL or description directly -- career-ops auto-detects it and runs the full pipeline.

In Codex, slash commands are not guaranteed. Use the same mode names in a prompt instead, or call them from codex exec.

How It Works

You paste a job URL or description
        │
        ▼
┌──────────────────┐
│  Archetype       │  Classifies: LLMOps / Agentic / PM / SA / FDE / Transformation
│  Detection       │
└────────┬─────────┘
         │
┌────────▼─────────┐
│  A-G Evaluation  │  Match, gaps, comp research, STAR stories, legitimacy
│  (reads cv.md)   │
└────────┬─────────┘
         │
    ┌────┼────┐
    ▼    ▼    ▼
 Report  PDF  Tracker
  .md   .pdf  entry

Pre-configured Portals

The scanner comes with 100+ companies ready to scan and 45+ search queries across major job boards. Copy templates/portals.example.yml to portals.yml and add your own:

AI Labs: Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone Voice AI: ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI AI Platforms: Retool, Airtable, Vercel, Temporal, Glean, Arize AI Contact Center: Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys Enterprise: Salesforce, Twilio, Gong, Dialpad LLMOps: Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics Automation: n8n, Zapier, Make.com European: Factorial, Attio, Tinybird, Clarity AI, Travelperk

Job boards searched: 55+ provider modules cover ATS APIs, board-wide feeds, XML/RSS feeds, markdown feeds, and local parsers. See Supported job boards for the full table.

By default node scan.mjs (a.k.a. npm run scan) trusts what each ATS feed returns. Some companies leave stale postings in their public API even after the role is closed, so those expired entries can leak into pipeline.md. Pass --verify to launch Playwright after the API pass and drop expired postings before they hit the pipeline:

node scan.mjs --verify          # zero-token discovery + Playwright liveness check

The verification is sequential and only runs against new offers (after dedup), so the cost stays bounded.

Dashboard TUI

The built-in terminal dashboard lets you browse your pipeline visually:

npm run serve:dashboard   # launch the TUI
npm run build:dashboard   # optional: build the standalone binary

Features: 6 filter tabs, 4 sort modes, grouped/flat view, lazy-loaded previews, inline status changes.

There is also an experimental web UI (alpha, opt-in — nothing runs unless you start it): see web/README.md.

Project Structure

career-ops/
├── AGENTS.md                    # Canonical agent instructions (all CLIs)
├── CLAUDE.md                    # Claude Code wrapper (imports AGENTS.md)
├── CODEX.md                     # Codex wrapper (imports AGENTS.md)
├── OPENCODE.md                  # OpenCode wrapper (imports AGENTS.md)
├── GEMINI.md                    # Legacy no-op guard to avoid Antigravity duplicate context
├── cv.md                        # Your CV (create this)
├── article-digest.md            # Your proof points (optional)
├── config/
│   └── profile.example.yml      # Template for your profile
├── modes/                       # Skill modes
│   ├── _shared.md               # Shared context (customize this)
│   ├── oferta.md                # Single evaluation
│   ├── pdf.md                   # PDF generation
│   ├── cover.md                 # Cover letter generation
│   ├── email.md                 # Formal application email drafts
│   ├── scan.md                  # Portal scanner
│   ├── batch.md                 # Batch processing
│   └── ...
├── templates/
│   ├── cv-template.html         # ATS-optimized CV template
│   ├── portals.example.yml      # Scanner config template
│   └── states.yml               # Canonical statuses
├── batch/
│   ├── batch-prompt.md          # Self-contained worker prompt
│   └── batch-runner.sh          # Orchestrator script
├── dashboard/                   # Go TUI pipeline viewer
├── data/                        # Your tracking data (gitignored)
├── reports/                     # Evaluation reports (gitignored)
├── output/                      # Generated PDFs (gitignored)
├── fonts/                       # Space Grotesk + DM Sans
├── docs/                        # Setup, customization, budget guide, architecture
└── examples/                    # Sample CV, report, proof points

Tech Stack

Claude Code Node.js Playwright Go Bubble Tea

  • Agent: AI coding CLI with shared skills and modes (AGENTS.md + CLI wrapper)
  • PDF: Playwright + HTML template
  • Cover letters: HTML template + Playwright (A4 PDF, same pipeline as CVs)
  • Scanner: Playwright + Greenhouse API + WebSearch
  • Dashboard: Go + Bubble Tea + Lipgloss (Catppuccin Mocha theme)
  • Data: Markdown tables + YAML config + TSV batch files

Also Open Source

  • cv-santiago -- The portfolio website (santifer.io) with AI chatbot, LLMOps dashboard, and case studies. If you need a portfolio to showcase alongside your job search, fork it and make it yours.

FAQ

What is career-ops? career-ops is an open-source, CLI-agnostic job-search command center. It turns any AI coding CLI into a pipeline that evaluates job offers against your CV, generates ATS-tailored PDFs, finds the right person to contact, and tracks everything in one place — while you keep the final decision. It is the first reference implementation of the CareerOps Manifesto. More at career-ops.org.

Can I run career-ops for free, or on a cheaper / local model? Yes. career-ops is CLI-agnostic and runs on free and local models — via OpenRouter free models, Ollama, or any OpenAI-compatible endpoint — so you are not tied to a paid subscription. See docs/RUNNING_ON_A_BUDGET.md for the full setup.

Which AI CLIs does career-ops work with? career-ops runs on any major AI coding CLI — Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen and more — through the open Agent Skill Standard, so it is never locked to a single vendor. Use the CLI you already have.

How do I install career-ops on Windows? career-ops runs on Windows. If skills fail to load with a symlink error during install, the fix is in docs/FAQ.md. Full steps are in docs/SETUP.md.

Does career-ops auto-apply to jobs for me? No. career-ops is a filter, not a spray-and-pray auto-applier. The AI evaluates, ranks and drafts; you review and decide. It never submits, sends, or clicks anything — you always have the final call. That human-in-the-loop design is the whole point.

Is career-ops free and open source? Yes. career-ops is free and open source, and for the candidate it always will be — it is the first reference implementation of the CareerOps Manifesto. Read it, and if it says what you believe, sign it.

About the Author

I'm Santiago Fernández de Valderrama Aparicio (santifer) -- Head of Applied AI, former founder (built and sold a business that still runs with my name on it). I built career-ops to manage my own job search. It worked: I used it to land my current role.

Curious how this repo is maintained in ~4 hours a week? Read Agentic maintenance: how career-ops is run by a fleet of AI agents.

My portfolio and other open source projects → santifer.io

Wikidata: Santiago Fernández de Valderrama Aparicio · career-ops.

Disclaimer

career-ops is a local, open-source tool, NOT a hosted service. By using this software, you acknowledge:

  1. You control your data. Your CV, contact info, and personal data stay on your machine and are sent directly to the AI provider you choose (Anthropic, OpenAI, etc.). We do not collect, store, or have access to any of your data.
  2. You control the AI. The default prompts instruct the AI not to auto-submit applications, but AI models can behave unpredictably. If you modify the prompts or use different models, you do so at your own risk. Always review AI-generated content for accuracy before submitting.
  3. You comply with third-party ToS. You must use this tool in accordance with the Terms of Service of the career portals you interact with (Greenhouse, Lever, Workday, LinkedIn, etc.). Do not use this tool to spam employers or overwhelm ATS systems.
  4. No guarantees. Evaluations are recommendations, not truth. AI models may hallucinate skills or experience. The authors are not liable for employment outcomes, rejected applications, account restrictions, or any other consequences.

See LEGAL_DISCLAIMER.md for full details. This software is provided under the MIT License "as is", without warranty of any kind.

Contributors

Every person who has shipped code, docs, translations or tests is listed in CONTRIBUTORS.md — including non-code contributions, which the graph above cannot show.

Got hired using career-ops? Share your story!

License & Trademark

The code is licensed under MIT. The "career-ops" name and brand are governed by the Trademark Policy, permissive for community use, reserved for commercial product naming and endorsement.

Let's Connect

Website LinkedIn X Discord Email

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

27 total
  1. web: v0.4.0web-v0.4.0Jul 28, 2026

    ## [0.4.0](https://github.com/santifer/career-ops/compare/web-v0.3.0...web-v0.4.0) (2026-07-28) ### Features * **providers:** add VDAB zero-auth provider ([#2084](https://github.com/santifer/career-ops/issues/2084)) ([6164384](https://github.com/santifer/career-ops/commit/6164384768fa47b7e164e2c36f53e86b2fd620cc)) ### Bug Fixes * **deps:** update dependency next to v16.2.11 [security] ([#2198](https://github.com/santifer/career-ops/issues/2198)) ([b6d1c87](https://github.com/santifer/career-ops/commit/b6d1c871d985c278af51d26fa51ef09274c1076b)) * **web:** resolve nested postcss and sharp advisories via overrides ([#2216](https://github.com/santifer/career-ops/issues/2216)) ([ec02af8](https://github.com/santifer/career-ops/commit/ec02af816abc81b500475f81bf1c2753727a1e79))

  2. career-ops: v1.23.0career-ops-v1.23.0Jul 28, 2026

    ## [1.23.0](https://github.com/santifer/career-ops/compare/career-ops-v1.22.0...career-ops-v1.23.0) (2026-07-28) ### Features * **batch:** add batch-tailor.mjs for bulk CV tailoring of high-scoring roles ([#1882](https://github.com/santifer/career-ops/issues/1882)) ([d5384ef](https://github.com/santifer/career-ops/commit/d5384efd43d2d73c88e4267ab2f5ec7099e95df1)), closes [#1836](https://github.com/santifer/career-ops/issues/1836) * **cli:** add Cursor as a supported CLI host ([#2115](https://github.com/santifer/career-ops/issues/2115)) ([119d75c](https://github.com/santifer/career-ops/commit/119d75ceec5b5182b9380f0c9b48919c73245206)) * **cv:** support declarative section HTML partials from disk ([#2184](https://github.com/santifer/career-ops/issues/2184)) ([aefed14](https://github.com/santifer/career-ops/commit/aefed14a625bb078218fb197a7e2430d826beca7)), closes [#2183](https://github.com/santifer/career-ops/issues/2183) * **dashboard:** add a RESPONDED filter tab to the pipeline screen ([#2000](https://github.com/santifer/career-ops/issues/2000)) ([eff33e6](https://github.com/santifer/career-ops/commit/eff33e66367279803a0c737444481e283e6d6edb)), closes [#1999](https://github.com

  3. career-ops: v1.22.0career-ops-v1.22.0Jul 21, 2026

    ## [1.22.0](https://github.com/santifer/career-ops/compare/career-ops-v1.21.0...career-ops-v1.22.0) (2026-07-21) ### Features * **cv:** Chinese minimal CV template ([#1990](https://github.com/santifer/career-ops/issues/1990)) ([7cefd61](https://github.com/santifer/career-ops/commit/7cefd616da4700984982b325d9fa817cf5c1eee9)) * **cv:** improve profile-photo configuration and preview ([#1991](https://github.com/santifer/career-ops/issues/1991)) ([7e90f46](https://github.com/santifer/career-ops/commit/7e90f46c1ce9cbb1bdcf679d6d5b249c0f3eaaa0)) * **expand:** add /expand mode to discover missing CV competencies ([#1533](https://github.com/santifer/career-ops/issues/1533)) ([1ea5ee6](https://github.com/santifer/career-ops/commit/1ea5ee6379a90dfb1bec17b01aa538a624953848)), closes [#1521](https://github.com/santifer/career-ops/issues/1521) * **gemini-eval:** static prefix as systemInstruction for implicit caching ([#1840](https://github.com/santifer/career-ops/issues/1840)) ([bb748d8](https://github.com/santifer/career-ops/commit/bb748d8c6064127ca4ce23b55d59f58984fac2d2)) * **i18n:** Simplified Chinese interview modes (plan/practice/debrief) ([#1977](https://github.com/santifer/career-op

  4. career-ops: v1.21.0career-ops-v1.21.0Jul 17, 2026

    ## The signals release Every evaluation now ends with a **Risk Summary**: one table joining the five company-risk signals (posting legitimacy, employment classification, culture screen, interview red flags, AI claims vs infrastructure) — aggregation only, and "not evaluated" is stated honestly instead of hidden. On top of it, eleven new behavioral signals and guards landed across oferta, interview and apply modes, the scanner now persists a per-posting trust score, and reserved report numbers can no longer race each other. **The CareerOps Manifesto** keeps growing on its own — 30+ signatures, each one a commit. This release routes to it from every surface (README, first scan, dashboard `m`, post-update note), and if you signed with your first-ever public GitHub contribution, your certificate now says so. New here? `npm run manifesto` · https://career-ops.org/manifesto --- ## [1.21.0](https://github.com/santifer/career-ops/compare/career-ops-v1.20.0...career-ops-v1.21.0) (2026-07-17) ### Features * **apply:** warn before reapplying to a repeat company ([#1921](https://github.com/santifer/career-ops/issues/1921)) ([6cdca85](https://github.com/santifer/career-ops/commit/6cdca8

  5. career-ops: v1.20.0career-ops-v1.20.0Jul 14, 2026

    ## The CareerOps Manifesto > Companies use AI to filter candidates. > We gave candidates AI to choose companies. This release ships with something bigger than a feature: **[The CareerOps Manifesto](https://github.com/santifer/career-ops/blob/main/MANIFESTO.md)** — nine rights every job seeker should have, and the name for the practice this tool exists to serve. Read it at [career-ops.org/manifesto](https://career-ops.org/manifesto). If it reads like your rights too, **sign it** — it takes 10 seconds, your signature becomes a public commit with your name on the wall. For many signers it is their first contribution on GitHub. Or from your terminal: ``` npm run manifesto ``` career-ops remains what it always was: local-first, human-in-the-loop, AI-agnostic, and free. --- ## What's in 1.20.0 ## [1.20.0](https://github.com/santifer/career-ops/compare/career-ops-v1.19.0...career-ops-v1.20.0) (2026-07-14) ### Features * **onboarding:** surface the CareerOps Manifesto after updates and setup ([84f2e53](https://github.com/santifer/career-ops/commit/84f2e534dfba7ac3831f0fda670bc6c3eaced788)) ### Bug Fixes * **upskill:** correct inverted known-skill suppression in targeted mode (

Code frequency

additions and deletions
+48.3K-48.3KWeek of 2026-03-29: +6,259 linesWeek of 2026-03-29: -12 linesWeek of 2026-04-05: +11,014 linesWeek of 2026-04-05: -1,168 linesWeek of 2026-04-12: +2,513 linesWeek of 2026-04-12: -242 linesWeek of 2026-04-19: +1,933 linesWeek of 2026-04-19: -327 linesWeek of 2026-04-26: +739 linesWeek of 2026-04-26: -206 linesWeek of 2026-05-03: +681 linesWeek of 2026-05-03: -1,003 linesWeek of 2026-05-10: +3,179 linesWeek of 2026-05-10: -858 linesWeek of 2026-05-17: +3,033 linesWeek of 2026-05-17: -406 linesWeek of 2026-05-24: +6 linesWeek of 2026-05-24: -2 linesWeek of 2026-05-31: +1,137 linesWeek of 2026-05-31: -47 linesWeek of 2026-06-07: +11,707 linesWeek of 2026-06-07: -1,538 linesWeek of 2026-06-14: +6,213 linesWeek of 2026-06-14: -493 linesWeek of 2026-06-21: +7,534 linesWeek of 2026-06-21: -404 linesWeek of 2026-06-28: +48,301 linesWeek of 2026-06-28: -1,564 linesWeek of 2026-07-05: +35,494 linesWeek of 2026-07-05: -11,051 linesWeek of 2026-07-12: +7,131 linesWeek of 2026-07-12: -917 linesWeek of 2026-07-19: +10,230 linesWeek of 2026-07-19: -781 linesWeek of 2026-07-26: +23,516 linesWeek of 2026-07-26: -1,882 linesMar 29, 2026Jul 26, 2026
+180.6K lines added, -22.9K removed over the last year.

Commits per week

last 52 weeks
1410Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 3 commitsWeek of 2026-04-05: 84 commitsWeek of 2026-04-12: 35 commitsWeek of 2026-04-19: 13 commitsWeek of 2026-04-26: 19 commitsWeek of 2026-05-03: 5 commitsWeek of 2026-05-10: 37 commitsWeek of 2026-05-17: 12 commitsWeek of 2026-05-24: 2 commitsWeek of 2026-05-31: 9 commitsWeek of 2026-06-07: 93 commitsWeek of 2026-06-14: 46 commitsWeek of 2026-06-21: 53 commitsWeek of 2026-06-28: 141 commitsWeek of 2026-07-05: 132 commitsWeek of 2026-07-12: 121 commitsWeek of 2026-07-19: 70 commitsWeek of 2026-07-26: 114 commitsAug 3, 2025Jul 26, 2026
989 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 2 commitsSun 1:00 — 1 commitsSun 2:00 — 1 commitsSun 3:00 — 1 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 2 commitsSun 7:00 — 5 commitsSun 8:00 — 8 commitsSun 9:00 — 6 commitsSun 10:00 — 11 commitsSun 11:00 — 8 commitsSun 12:00 — 6 commitsSun 13:00 — 15 commitsSun 14:00 — 7 commitsSun 15:00 — 4 commitsSun 16:00 — 2 commitsSun 17:00 — 0 commitsSun 18:00 — 3 commitsSun 19:00 — 2 commitsSun 20:00 — 6 commitsSun 21:00 — 1 commitsSun 22:00 — 2 commitsSun 23:00 — 4 commitsMon 0:00 — 8 commitsMon 1:00 — 1 commitsMon 2:00 — 4 commitsMon 3:00 — 1 commitsMon 4:00 — 4 commitsMon 5:00 — 7 commitsMon 6:00 — 1 commitsMon 7:00 — 2 commitsMon 8:00 — 4 commitsMon 9:00 — 17 commitsMon 10:00 — 9 commitsMon 11:00 — 10 commitsMon 12:00 — 10 commitsMon 13:00 — 16 commitsMon 14:00 — 11 commitsMon 15:00 — 13 commitsMon 16:00 — 17 commitsMon 17:00 — 6 commitsMon 18:00 — 14 commitsMon 19:00 — 12 commitsMon 20:00 — 14 commitsMon 21:00 — 2 commitsMon 22:00 — 8 commitsMon 23:00 — 12 commitsTue 0:00 — 10 commitsTue 1:00 — 1 commitsTue 2:00 — 10 commitsTue 3:00 — 6 commitsTue 4:00 — 17 commitsTue 5:00 — 4 commitsTue 6:00 — 0 commitsTue 7:00 — 2 commitsTue 8:00 — 3 commitsTue 9:00 — 3 commitsTue 10:00 — 5 commitsTue 11:00 — 18 commitsTue 12:00 — 10 commitsTue 13:00 — 14 commitsTue 14:00 — 8 commitsTue 15:00 — 4 commitsTue 16:00 — 10 commitsTue 17:00 — 11 commitsTue 18:00 — 9 commitsTue 19:00 — 15 commitsTue 20:00 — 23 commitsTue 21:00 — 4 commitsTue 22:00 — 14 commitsTue 23:00 — 3 commitsWed 0:00 — 4 commitsWed 1:00 — 8 commitsWed 2:00 — 5 commitsWed 3:00 — 12 commitsWed 4:00 — 2 commitsWed 5:00 — 5 commitsWed 6:00 — 3 commitsWed 7:00 — 3 commitsWed 8:00 — 3 commitsWed 9:00 — 7 commitsWed 10:00 — 8 commitsWed 11:00 — 9 commitsWed 12:00 — 6 commitsWed 13:00 — 6 commitsWed 14:00 — 9 commitsWed 15:00 — 3 commitsWed 16:00 — 4 commitsWed 17:00 — 6 commitsWed 18:00 — 6 commitsWed 19:00 — 4 commitsWed 20:00 — 5 commitsWed 21:00 — 2 commitsWed 22:00 — 3 commitsWed 23:00 — 1 commitsThu 0:00 — 2 commitsThu 1:00 — 3 commitsThu 2:00 — 1 commitsThu 3:00 — 3 commitsThu 4:00 — 2 commitsThu 5:00 — 1 commitsThu 6:00 — 1 commitsThu 7:00 — 3 commitsThu 8:00 — 7 commitsThu 9:00 — 8 commitsThu 10:00 — 15 commitsThu 11:00 — 10 commitsThu 12:00 — 11 commitsThu 13:00 — 6 commitsThu 14:00 — 12 commitsThu 15:00 — 8 commitsThu 16:00 — 9 commitsThu 17:00 — 16 commitsThu 18:00 — 14 commitsThu 19:00 — 8 commitsThu 20:00 — 9 commitsThu 21:00 — 5 commitsThu 22:00 — 2 commitsThu 23:00 — 4 commitsFri 0:00 — 3 commitsFri 1:00 — 8 commitsFri 2:00 — 7 commitsFri 3:00 — 2 commitsFri 4:00 — 3 commitsFri 5:00 — 4 commitsFri 6:00 — 3 commitsFri 7:00 — 4 commitsFri 8:00 — 1 commitsFri 9:00 — 5 commitsFri 10:00 — 9 commitsFri 11:00 — 10 commitsFri 12:00 — 7 commitsFri 13:00 — 7 commitsFri 14:00 — 5 commitsFri 15:00 — 4 commitsFri 16:00 — 7 commitsFri 17:00 — 17 commitsFri 18:00 — 10 commitsFri 19:00 — 5 commitsFri 20:00 — 17 commitsFri 21:00 — 2 commitsFri 22:00 — 9 commitsFri 23:00 — 3 commitsSat 0:00 — 3 commitsSat 1:00 — 2 commitsSat 2:00 — 2 commitsSat 3:00 — 6 commitsSat 4:00 — 0 commitsSat 5:00 — 4 commitsSat 6:00 — 1 commitsSat 7:00 — 0 commitsSat 8:00 — 2 commitsSat 9:00 — 1 commitsSat 10:00 — 3 commitsSat 11:00 — 2 commitsSat 12:00 — 3 commitsSat 13:00 — 0 commitsSat 14:00 — 1 commitsSat 15:00 — 4 commitsSat 16:00 — 8 commitsSat 17:00 — 2 commitsSat 18:00 — 0 commitsSat 19:00 — 3 commitsSat 20:00 — 2 commitsSat 21:00 — 0 commitsSat 22:00 — 3 commitsSat 23:00 — 2 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits249 (26%)
Community commits720 (74%)

969 commits in total over the last year.

DateListRankStars gained
Jul 3, 2026daily#10+13
Jun 10, 2026daily#24+18
Jun 9, 2026daily#19+20
Jun 7, 2026daily#15+82
Apr 21, 2026daily#16+102
Apr 20, 2026daily#24+95
Apr 17, 2026daily#23+87
Apr 16, 2026daily#22+109
Apr 13, 2026daily#22+126
Apr 12, 2026daily#18+292
Apr 11, 2026daily#15+344
Apr 10, 2026daily#10+317
Apr 9, 2026daily#4+545
Apr 8, 2026daily#2+978
Apr 7, 2026daily#3+1,102
  • public-apis/public-apis

    A collective list of free APIs

    454.9K stars · Python

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • jwasham/coding-interview-university

    A complete computer science study plan to become a software engineer.

    358.1K stars