career-ops

Open source-AI-agenten til jobsøgning.

English | Español | Deutsch | Français | Português (Brasil) | 한국어 | 日本語 | 简体中文 | 繁體中文 | Українська | Русский | Polski | Dansk | தமிழ் | العربية | हिन्दी | Türkçe | Tiếng Việt | Bahasa Indonesia

Santiago Fernández de Valderrama Aparicio  Skabt af @santifer, med    700+ bidragydere

Måneder med at sende CV'er ud i stilheden.
Så jeg byggede det filter, jeg havde brug for.

740 opslag vurderet. 68 ansøgt. 12 samtaler. 1 tilbud.
Jeg var den første bruger. Jeg fik jobbet. Så gjorde jeg det open source.

Indsæt et job. På din egen maskine fortæller den dig, om det stadig er åbent og om det passer til dig.
Den tilpasser dit CV og skriver udkast til dine svar. Du trykker på Send.

Forfatterens egen jobsøgning i career-ops-dashboardet: scorede opslag, et rødt tal for dem, der er markeret „søg ikke“, og derefter en fuld vurderingsrapport

Min egen jobsøgning, undervejs, med brugerfladen på spansk.

Virksomheder bruger AI til at filtrere kandidater.
Jeg gav kandidaterne AI, så de kan vælge virksomhederne.

Seks måneder senere forlod jeg det job.
Nu bygger vi career-ops, så du kan lande dit.

Prøv den på ét job ↓ · Læs hele historien →

Vil du helst undgå terminalen? Skriv dig på ventelisten til en webversion →


Hired with career-ops: public stories on the record

De, der kom efter mig, skrev ned, hvordan de blev ansat.

Ansættelseshistorier, du kan åbne og læse

Hvert kort er et offentligt issue, du kan åbne. Har du fået dit job? Efterlad dit kort →

⭐ Hvis career-ops har hjulpet dig, hjælper en stjerne den næste med at finde det.


WIRED      Business Insider

Vercel OSS Program

GitHub Trending: #1 repository of the day (Trendshift)      Featured on Product Hunt

## Din tur Indsæt ét job, du var ved at søge i aften. Kommer det tilbage som søg ikke, har du lige fået aftenen tilbage. Kommer det tilbage med en plan, ved du, hvad du skal gøre nu. ```bash npx @santifer/career-ops init ```

Open source. Lokalt. I den AI-CLI, du allerede bruger. Gratis og lokale modeller inkluderet.

## Du behøver ikke søge alene Stilheden, efter du trykker send, handler ikke om dig. Nok mennesker så det samme til at skrive praksissen ned, i seks linjer: > Søg bedre, til færre. Signal frem for volumen. Beviser frem for nøgleord. Et menneske beslutter. Lokalt først. Værdighed på begge sider af bordet.

CareerOps-manifestet: antal underskrivere, live

Et par af dem, med deres egne ord.

Tre underskrifter på CareerOps-manifestet, med deres egne ord

Hver underskrift er et commit, du kan efterprøve. Læs dem alle, eller tilføj din →


Rekruttering reparerer ikke sig selv. Det kan de, der går igennem den, og de er allerede i rummet, hvor de sammenligner noter og fikser hinandens opsætninger.

Animeret væg med bidragydernes GitHub-avatarer, der fyldes op i den rækkefølge, de kom til siden april 2026, med det næste felt holdt åbent.

[Det er her, rettelsen bliver skrevet](CONTRIBUTING.md). Et rum, ikke en klub. **Lad os bygge sammen.**

Discord: antal medlemmer på career-ops-serveren, live

## Sponsorer career-ops er gratis for kandidater, for altid. Disse virksomheder sponsorerer projektet:

SerpApi

SerpApi · Build a portfolio project with live search data. SerpApi gives developers structured JSON/Markdown from Google Search, Maps, Shopping, and other engines through a simple API call.

> Sponsorat køber tydeligt markeret synlighed, aldrig indflydelse: intet beløb ændrer køreplanen eller placerer noget i produktet. Sponsorer optræder aldrig i evalueringer, rangeringer eller anbefalinger. ## Hvad career-ops gør for dig Indsæt et job. Den fortæller dig, om aftenen er det værd. - **Stadig åbent?** Den tjekker, at opslaget stadig er aktivt, før du skriver et ord. - **Ikke dig?** Den scorer rollen op mod dit rigtige CV og siger, at du skal springe et svagt match over. Du kan tilsidesætte den. - **Værd at søge?** Den skriver udkast til CV, ansøgning og svar. Du læser dem. Du sender dem. - **Hvem skal jeg tale med?** Den finder personen og skriver udkast til beskeden. Den sender den aldrig. - **Hvor ender det hele?** Hver ansøgning bliver på din maskine. Intet bliver uploadet til os. - **Hvad bør jeg lære?** Efter en stribe afslag sætter den navn på hullet. De første kørsler er ujævne. Den kender dig ikke endnu. Tal med den: dit CV, hvad du vil, hvad du afviser. Tænk på det som en rekrutterers første uge. Ved første start spørger den om alt det i chatten. Intet at konfigurere i hånden. ## Hvad career-ops ikke gør - **Sende en ansøgning automatisk.** Den skriver udkast til svaret i hvert felt; du gennemgår og klikker Send. Scriptet laver aldrig et POST (`prepare-application.mjs`). - **Sender en e-mail.** Kun udkast. Der findes ingen mailtransport nogen steder i koden. - **Ringer hjem.** Ingen telemetri, ingen backend hos os. Dit CV går fra din maskine til den AI-udbyder, du har valgt, og ingen andre steder. Det eneste offentlige register er dette repository: `HIRED.md` og dets issues. - **Presser dig til at søge under 4,0/5.** Den siger, du skal lade være. Du kan tilsidesætte det, og den siger det. Den omformulerer dit CV; den må aldrig opdigte det. En kontrol i koden stopper en PDF med tal eller fakta, der hverken står i dit CV eller i `article-digest.md`, men den kan endnu ikke vurdere enhver omformulering. Læs hvert CV, før du sender det. Detaljer i [FAQ](#faq). ## Funktioner | Funktion | Beskrivelse | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | | **A-H-vurdering** | Rolleresumé, CV-match (med hvor meget hvert krav betyder for dette opslag, og om vægten kom fra jobbeskrivelsens egen ordlyd, dens struktur eller et skøn, mærket pr. krav; et skøn kan aldrig ligge i topbåndet), niveaustrategi, lønresearch, personalisering, samtaleforberedelse (STAR+R), plus et troværdighedstjek i blok G (er det stadig åbent, er det et genopslag: observationer, ikke domme), og et arbejdstilladelsessignal, der markerer en jobbeskrivelse med eksplicit ingen visumsponsorering som en hård blokering | | **Human-in-the-Loop** | AI vurderer og anbefaler, du beslutter og handler. Systemet indsender aldrig en ansøgning: du har altid det sidste ord | | **ATS-PDF-generering** | ATS-læsbare CV'er tilpasset hver jobbeskrivelse ud fra din egen erfaring, i Space Grotesk + DM Sans-design | | **Ansøgningsgenerator** | Researchbaserede ansøgninger med spejling af nøgleord, fire interaktive vinkelspørgsmål (hvorfor/problemer/tilgang/tone), godkendelse af udkast i chatten og A4-PDF via samme HTML + Playwright-pipeline som CV'er. Laver automatisk udkast ved hver vurdering; færdiggør og generér efter behov via `/career-ops cover` | | **Ud over CV'et** | Virksomhedsresearch ([`deep`](modes/deep.md)) afdækker AI-strategi, seneste træk, engineering-kultur og den vinkel, din profil bør tage. Kontaktsøgning ([`contacto`](modes/contacto.md)) finder den hiring manager, rekrutterer eller kollega, det er værd at kontakte, og skriver et LinkedIn-udkast på ≤300 tegn tilpasset hver kontakttype. Formelle udkast til ansøgningsmails ([`email`](modes/email.md)) gør en vurderet rapport eller indsat jobbeskrivelse til emnelinje, brødtekst og tjekliste over vedhæftninger uden at sende, indsende eller klikke på noget. Ansøgninger sætter dig i køen; research giver dig en samtale. | | **Mønsteranalyse** | Afslagsmønstre og fremgangsrater pr. ATS-kanal (`analyze-patterns.mjs`), tragtstatistik for hele søgningen (`stats.mjs`), registrering af genopslag, et muligt tegn på et spøgelsesjob (`detect-reposts.mjs`) |
Alt det andet, den gør | Funktion | Beskrivelse | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | | **Auto-pipeline** | Indsæt en URL, få en fuld vurdering + PDF + tracker-post | | **Interview-historiebank** | Samler STAR+Reflection-historier på tværs af vurderinger: 5-10 masterhistorier, du kan tilpasse til de adfærdsspørgsmål, du får | | **Forhandlingsscripts** | Rammer for lønforhandling, modsvar til geografisk rabat, brug af konkurrerende tilbud | | **Udkast til ansøgningsmails** | Formelle mails til rekrutterer, henvisning eller uopfordret ansøgning fra en rapport eller indsat jobbeskrivelse, med emnelinje, tjekliste over vedhæftninger, dokumenterede matchpunkter og en kontaktblok fra din profil. Kun udkast: career-ops sender, indsender eller klikker aldrig på noget. | | **Portalscanner** | 100+ forudkonfigurerede virksomheder (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + egne websøgninger på tværs af Ashby, Greenhouse, Lever, Wellfound | | **Find finansierede virksomheder** | Kommandoen `company:funded` (gennemse først) viser nyligt finansierede virksomheder og kildediagnostik fra strukturerede offentlige feeds uden at redigere dine data | | **Batch-behandling** | Parallel vurdering med headless CLI-workers (`claude -p` / `opencode run`) | | **Dashboard TUI** | Terminal-UI til at gennemse, filtrere og sortere din pipeline | | **Pipeline-integritet** | Automatisk sammenfletning, deduplikering, statusnormalisering, sundhedstjek | | **Interview-pakke** | Tidsblokkede forberedelsesplaner, øvesessioner med feedback, debriefs efter samtalen ([`interview/`](modes/interview/README.md)) og en detektor for røde flag hos virksomheden ([`interview-redflag`](modes/interview-redflag.md)) | | **Tilbudsfasen** | Følgesvend til kontraktlæsning: gennemgang klausul for klausul plus en spørgsmålsliste til advokaten ([`offer-prep`](modes/offer-prep.md)), og en analyse af gabet mellem ønsket, annonceret og faktisk løn (`salary-gap.mjs`) | | **Opfølgning og svar** | Beregner af opfølgningskadence og forberedte påmindelser (`followup-cadence.mjs`, `followup-seed.mjs`); klassificering af arbejdsgiverens svar til tracker-opdateringer ([`reply-watch`](modes/reply-watch.md)) | | **Plugin-system** | Tilvalgsintegrationer (Gmail, Notion, Apify + et community-register), slået fra som standard; se [docs/PLUGINS.md](docs/PLUGINS.md) |
## Sådan virker det

How it works: you paste a job URL or description. Archetype Detection classifies it as LLMOps, Agentic, PM, SA, FDE or Transformation. The A-H Evaluation reads cv.md and covers match, gaps, comp research, STAR stories and legitimacy. It produces a report (reports/*.md), the tailored CV in the format set by cv.output_format — a PDF by default — and a tracker entry (data/applications.md).

## Hurtig start **Hurtigste vej, én kommando:** ```bash npx @santifer/career-ops init ``` > 💡 `npx` følger med [Node.js](https://nodejs.org): det kører installationen én gang > uden at installere noget globalt. Ingen Node endnu? Installer den først. > (Bruger du allerede en Claude Code / Codex CLI? Så har du den allerede.) Det kloner den seneste udgivelse ind i `./career-ops` og installerer afhængigheder. Derefter: ```bash cd career-ops claude # or codex / qwen / opencode / agy / grok — open your AI CLI here ``` **Ved første start fører career-ops dig gennem opsætningen (dit CV, din profil og dine målroller) bare ved at chatte. Intet at redigere i hånden.**
Foretrækker du at sætte det op manuelt? (git clone) ```bash git clone https://github.com/career-ops-hq/career-ops.git cd career-ops && npm install npx playwright install chromium # only needed for PDF generation # On a non-Debian/Ubuntu Linux distro (Fedora, Arch, ...), Chromium's system # libraries aren't installed by the line above — install them yourself with # your distro's package manager if PDF generation fails to launch the browser # (Playwright's own docs list the required libraries per platform). # 2. Open your AI CLI in this directory. On first launch it walks you # through setup (your CV, profile and target roles) by chatting 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" # 3. Start using # Indsæt en job-URL eller teksten fra en jobbeskrivelse for at starte auto-pipeline. # Alle andre tilstande, og hvordan du beder om dem i din CLI: se Brug nedenfor. ```
### Global installation ```bash npm i -g @santifer/career-ops ``` Det installerer `career-ops`-binæren globalt, så du kan køre `career-ops init [folder]` uden `npx`. `init` er dens eneste kommando: den opretter et arbejdsområde, og alt derefter foregår i din AI-kodnings-CLI (se Brug nedenfor), ikke gennem denne binær. **Hvilken skal du bruge?** - `npx @santifer/career-ops init`: bedst til første brug; opretter en dedikeret projektmappe. - `npm i -g @santifer/career-ops`: hvis du hellere vil skrive `career-ops init` end `npx`-formen. Den tilføjer ingen andre kommandoer. ### Andre måder at køre det på - **Fra en vilkårlig mappe, som Claude Code-plugin:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md). - **Uden en AI-CLI:** selvstændige scripts til Gemini, Ollama og OpenAI-kompatible modeller vurderer en jobbeskrivelse på egen hånd. Se [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval). > **Systemet er designet til at blive tilpasset af din AI-kodnings-CLI selv.** Tilstande, arketyper, scorevægte, forhandlingsscripts: bed den bare om at ændre dem. Den læser de samme filer, som den bruger, så den ved præcis, hvad den skal redigere. Se [docs/SETUP.md](docs/SETUP.md) for den fulde opsætningsguide, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) for at køre career-ops billigt med egne eller lokale modeller (og [docs/FREE_TIER.md](docs/FREE_TIER.md) for at køre det gratis på Antigravity CLI's gratis niveau), [docs/AUTOMATION.md](docs/AUTOMATION.md) for planlægning af tilbagevendende scanninger og en opskrift på triage-til-shortlist uden tokens, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) for detaljer om ATS-autoudfyldningsflowet, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) for at krydstjekke en eksport af dine LinkedIn-forbindelser mod virksomhederne i din tragt, og [docs/FAQ.md](docs/FAQ.md) for svar på almindelige opsætningsspørgsmål, herunder [hvordan historiers oprindelse forhindrer opdigtede tal](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Designprincipper ligger i [ARCHITECTURE.md](ARCHITECTURE.md); runtime-flows i [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md). ## Brug Indsæt en job-URL eller jobbeskrivelse i din AI-CLI. career-ops tjekker, at et linket opslag stadig er aktivt (indsat tekst har intet link at tjekke), vurderer det op mod dit CV, skriver en rapport, tilpasser dit CV (som PDF som standard) og tilføjer en række til din tracker. Det dækker de fleste dage. Alt andet er en tilstand, du beder om ved navn. Hvis et opslag ikke kan læses, stopper pipelinen og beder dig indsætte teksten. ### Sådan beder du om en tilstand | CLI | Sådan beder du om `scan` | | --- | --- | | Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` | | Pi | `/skill:career-ops scan` | | Codex, Qwen, Cursor eller en hvilken som helst anden understøttet CLI | Almindeligt sprog: "Run the career-ops scan mode" | `/career-ops` uden noget efter sig viser kommandomenuen i de CLI'er, der bruger den. Almindeligt sprog virker i alle understøttede CLI'er. Som Claude Code-plugin er kommandoen `/career-ops:career-ops`. De deler alle én router, `.agents/skills/career-ops/SKILL.md`, og de samme `modes/*.md`-filer, så alle CLI'er router en forespørgsel på samme måde (browsertunge tilstande kræver også Playwright-værktøjer). Slash-kommandoer er ikke garanteret i Codex: bed om det i almindeligt sprog, eller kør ét prompt headless med `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Hvordan du kører det i hver understøttet CLI, headless-kommandoer hvor en CLI har en, og opsætningsnoter for den enkelte CLI står i [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md). ### Hverdagens kommandoer | Kommando | Hvad den gør | | --- | --- | | *indsæt en URL eller jobbeskrivelse* | Hele pipelinen: tjek af om opslaget stadig er aktivt (kun URL'er), A-G-vurdering plus H ved høje scorer, rapport, tilpasset CV (PDF som standard), tracker-række | | `scan` | Scan dine portaler for nye opslag og læg dem i indbakken (`data/pipeline.md`) | | `pipeline` | Gennemgår de URL'er, der venter i indbakken (standard- og premium-niveauet kan springe åbenlyse uoverensstemmelser over) | | `apply` | Udfyld en ansøgningsformular sammen med dig, felt for felt. Den stopper før Send | | `tracker` | Hvor hver ansøgning står | | `followup` | Hvilke ansøgninger der skal følges op, med udkast |
Alle kommandoer, efter fase i jobsøgningen `oferta`, `ofertas` og `contacto` beholder deres oprindelige spanske navne: tilbud, flere tilbud, kontakt. **Find stillinger** | Kommando | Hvad den gør | | --- | --- | | [`scan`](modes/scan.md) | Scan portaler og find nye opslag | | [`discover`](modes/discover.md) | Omsæt en liste over firmanavne til scanbare ATS-boards. Viser som standard kun en forhåndsvisning og føjer dem først til `portals.yml` med `--write` (uden tokens) | | [`pipeline`](modes/pipeline.md) | Behandl ventende URL'er fra indbakken (`data/pipeline.md`) | | [`triage`](modes/triage.md) | Hurtig første sortering (kør/kør ikke) ud fra `modes/_brief.md`, før en fuld vurdering (skriver ingen filer) | | [`batch`](modes/batch.md) | Vurdér mange opslag med headless-workers (parallelt med Claude, ét ad gangen med andre CLI'er) | | [`titles`](modes/titles.md) | Foreslå beslægtede jobtitler ud fra dit CV for at udvide søgningen | **Vurdér en stilling** | Kommando | Hvad den gør | | --- | --- | | *indsæt en URL eller jobbeskrivelse* | [Auto-pipeline](modes/auto-pipeline.md): vurdering + rapport + tilpasset CV (PDF som standard) + tracker-indgang | | [`oferta`](modes/oferta.md) | Kun vurdering, blok A til G plus H ved høje scorer (ingen PDF) | | [`ofertas`](modes/ofertas.md) | Sammenlign og rangér flere tilbud | | [`deep`](modes/deep.md) | Prompt til dybdegående research om virksomheden | | [`eu-swe`](modes/regional/eu-swe.md) | Kalibrér en europæisk softwareudviklingsansøgning før CV, ansøgning eller samtale | **Ansøg** | Kommando | Hvad den gør | | --- | --- | | [`pdf`](modes/pdf.md) | ATS-optimeret CV som PDF | | [`ats`](modes/ats.md) | ATS-venlighedstjek af et genereret CV: score og problemer, der kan rettes | | [`text`](modes/text.md) | Tilpasset CV som markdown (afspejler `cv.md`, ingen PDF) | | [`latex`](modes/latex.md) | Eksportér CV'et som LaTeX/Overleaf `.tex` | | [`latex-tex`](modes/latex-tex.md) | Tilpas din egen `resume.tex` direkte (valgfrit; `cv.md` forbliver standard) | | [`cover`](modes/cover.md) | Ansøgning, ud fra en indsat jobbeskrivelse eller en vurderet rapport (`cover {slug}`) | | [`email`](modes/email.md) | Udkast til formel ansøgningsmail. Kun udkast: sender, indsender eller klikker aldrig | | [`contacto`](modes/contacto.md) | Find den ansættende leder, en rekrutterer eller en kollega, og skriv udkast til en LinkedIn-besked | | [`apply`](modes/apply.md) | Live ansøgningsassistent (Playwright fra dette checkout). Sender ikke | **Samtale** | Kommando | Hvad den gør | | --- | --- | | [`interview-prep`](modes/interview-prep.md) | Virksomhedsspecifikt dokument til samtaleforberedelse | | [`interview/plan`](modes/interview/plan.md) | Tidsblokeret forberedelsesplan til en kommende samtale | | [`interview/practice`](modes/interview/practice.md) | Øvesamtale, ét spørgsmål ad gangen, med feedback | | [`interview/debrief`](modes/interview/debrief.md) | Debrief efter samtalen: luk huller, forudsig næste runde | | [`interview-redflag`](modes/interview-redflag.md) | Analysér en arbejdsgivers advarselstegn, før du siger ja | **Efter du har ansøgt** | Kommando | Hvad den gør | | --- | --- | | [`tracker`](modes/tracker.md) | Overblik over ansøgningsstatus | | [`followup`](modes/followup.md) | Opfølgningskadence: markér forfaldne ansøgninger, generér udkast | | [`reply-watch`](modes/reply-watch.md) | Klassificér arbejdsgiverens svar og foreslå tracker-opdateringer | | [`outcome`](modes/outcome.md) | Registrér udfaldet af en ansøgning og arkivér dens artefakter | | [`offer-prep`](modes/offer-prep.md) | Læs et modtaget tilbud eller en kontrakt sammen med dig: gennemgang af klausuler og spørgsmål til en advokat (ikke juridisk rådgivning) | **Din profil og dit CV** | Kommando | Hvad den gør | | --- | --- | | [`interview`](modes/interview.md) | Profilopsætning: et interaktivt interview om din erfaring, der bygger dit CV og din profil (ikke samtaletræning) | | [`intake`](modes/intake.md) | Opbyg eller udbyg din profil ud fra filer i `documents/` (master-CV, LinkedIn-eksport). Intet bliver skrevet uden din bekræftelse | | [`master-profile`](modes/master-profile.md) | Importér, gennemgå og validér din Master Career Profile, og forbered udvalgte fakta som punkter til CV'et | | [`add`](modes/add.md) | Tilføj et projekt, en artikel eller en rolle til dit CV (hent, forhåndsvis, bekræft) | | [`expand`](modes/expand.md) | Find kompetencer, der mangler i dit CV, ud fra dine profillinks | | [`retro`](modes/retro.md) | Gennemgå denne session og behold det, du lærte den, som regler (skriver kun dem, du accepterer) | **Forbedr din målretning** | Kommando | Hvad den gør | | --- | --- | | [`patterns`](modes/patterns.md) | Analysér afslagsmønstre og forbedr målretningen | | [`calibrate`](modes/calibrate.md) | Tjek om dine vurderingsscorer forudsiger dine faktiske resultater. Vejledende: ændrer aldrig scoringen | | [`upskill`](modes/upskill.md) | Analyse af kompetencegab på tværs af dine vurderede rapporter | | [`training`](modes/training.md) | Vurdér et kursus eller en certificering op mod din North Star | | [`project`](modes/project.md) | Vurdér en idé til et portfolioprojekt | **System** | Kommando | Hvad den gør | | --- | --- | | [`agent-inbox`](modes/agent-inbox.md) | Stil anmodninger i kø til næste session, og gennemgå dem dér (`data/agent-inbox.md`). `inbox` virker også | | [`update`](modes/update.md) | Opdatér career-ops' systemfiler, med diff-forhåndsvisning og kompatibilitetstjek |
## Forudkonfigurerede portaler Scanneren kommer med **100+ virksomheder** klar til scanning og **35+ søgninger** på tværs af de store jobportaler. Kopiér `templates/portals.example.yml` til `portals.yml` og tilføj dine egne: **AI-laboratorier:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone **Stemme-AI:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI **AI-platforme:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI **Kontaktcenter:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys **Enterprise:** Salesforce, Twilio, Gong, Dialpad **LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics **Automatisering:** n8n, Zapier, Make.com **Europa:** Factorial, Attio, Tinybird, Clarity AI, Travelperk **Jobportaler, der søges i:** 55+ udbydermoduler dækker ATS-API'er, feeds for hele portaler, XML/RSS-feeds, markdown-feeds og lokale parsere. Se [Understøttede jobportaler](docs/SUPPORTED_JOB_BOARDS.md) for den fulde tabel. Som standard stoler `node scan.mjs` (alias `npm run scan`) på det, hvert ATS-feed returnerer. Nogle virksomheder lader forældede opslag stå i deres offentlige API, selv efter stillingen er lukket, så de udløbne poster kan sive ind i `pipeline.md`. Giv `--verify` for at starte Playwright efter API-gennemløbet og frasortere udløbne opslag, før de rammer pipelinen: ```bash node scan.mjs --verify # zero-token discovery + Playwright liveness check ``` Verifikationen er sekventiel og kører kun på nye opslag (efter deduplikering), så omkostningen forbliver begrænset. ## Dashboard TUI Det indbyggede terminal-dashboard lader dig gennemse din pipeline visuelt: ```bash npm run serve:dashboard # launch the TUI npm run build:dashboard # optional: build the standalone binary ``` Funktioner: 10 filterfaner, 8 sorteringstilstande, grupperet/flad visning, forhåndsvisninger med lazy loading, statusændringer inline. Der findes også en **eksperimentel web-UI** (alfa og tilvalg: intet kører, medmindre du starter den): se [`web/README.md`](web/README.md). ## Projektstruktur ``` 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 ``` ## Ekstern datamappe (valgfri) Som standard ligger brugerlagets data (såsom `cv.md`, `portals.yml` og mapperne `data/`, `reports/`, `output/`) i projektets rodmappe. For at adskille dine personlige data fra koden (så det bliver lettere at skifte branch, hente opdateringer eller teste flere profiler) kan du konfigurere en ekstern datamappe med følgende rækkefølge: 1. **Miljøvariabler:** Sæt miljøvariablen `CAREER_OPS_ROOT` eller `CAREER_OPS_DATA_DIR`: ```bash export CAREER_OPS_ROOT=~/my-career-data ``` 2. **Markørfil:** Opret en `.career-ops-data`-fil i repository-roden med stien til din datamappe. 3. **Standard:** Repository-roden. Når det er afgjort, opløses og skrives alle brugerfiler relativt til den mappe, mens promptfiler og scripts fortsat opløses relativt til repositoryet. - **Tilsidesæt tracker:** Du kan også sætte `CAREER_OPS_TRACKER` for direkte at tilsidesætte stien til ansøgningstrackerens fil. - **Skrivninger:** Alle skriveoperationer (såsom sammenfletninger) retter sig kanonisk mod `{DATA_ROOT}/data/applications.md`. - **Scannerkonfiguration:** `portals.yml` læses og valideres i `{DATA_ROOT}/portals.yml`, så `node validate-portals.mjs` tjekker den samme fil, som `scan.mjs` læser. - **Genererede dokumenter:** Tilpassede CV'er og ansøgninger skrives under `{DATA_ROOT}/output/`, og PDF-manifestet, der knytter dem til en rapport, ligger i `{DATA_ROOT}/data/pdf-index.tsv`. Så længe `CAREER_OPS_TRACKER` ikke er sat, er trackerens arbejdsområde, som afgrænser de skrivninger, datamappen og ikke checkoutet. - **PDF'er med tilsidesat tracker:** `generate-pdf.mjs` opløser `CAREER_OPS_TRACKER`, før den udleder arbejdsområdet, så når tilsidesættelsen er sat, er arbejdsområdet den mappe, der indeholder trackeren (eller mappen over den, når trackeren ligger i en `data/`-mappe). CV'ets HTML og hver PDF skal så ligge inden for det arbejdsområde, og manifestet flytter til dets `data/pdf-index.tsv`. Ansøgninger skrives stadig til `{DATA_ROOT}/output/`, så de afvises, når den mappe ligger uden for trackerens arbejdsområde. - **Kodelaget bliver, hvor det er:** `node_modules/`, `providers/`, `modes/` og selve scriptene opløses altid i forhold til repositoryet, aldrig datamappen. Go-dashboardets TUI, Node.js-scripts og AI-agenttilstande respekterer alle automatisk denne rækkefølge. ## Teknologistak ![Claude Code](https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white) ![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white) ![Playwright](https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white) ![Go](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white) ![Bubble Tea](https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white) - **Agent**: AI-kodnings-CLI med fælles skills og tilstande (`AGENTS.md` + CLI-wrapper) - **PDF**: Playwright + HTML-skabelon - **Ansøgninger**: HTML-skabelon + Playwright (A4-PDF, samme pipeline som CV'er) - **Scanner**: Playwright + Greenhouse API + WebSearch - **Dashboard**: Go + Bubble Tea + Lipgloss (Catppuccin Mocha-tema) - **Data**: Markdown-tabeller + YAML-konfiguration + TSV-batchfiler

Latest release

Built with Claude Code

Kører også i enhver CLI, der følger agent skill-standarden. Se understøttede CLI'er.
Claude Code OpenCode Antigravity CLI Codex Qwen Kimi GitHub Copilot Grok Build CLI Pi
Node.js Go Playwright Bubble Tea MIT Trademark Policy

## Også open source - **[cv-santiago](https://github.com/santifer/cv-santiago)**: Porteføljesitet (santifer.io) med AI-chatbot, LLMOps-dashboard og casestudier. Hvis du har brug for en portefølje at vise frem ved siden af din jobsøgning, så fork det og gør det til dit eget. ## FAQ **Hvad er career-ops?** career-ops ([career-ops.org](https://career-ops.org), også kendt som **careerops**) er en open source AI-jobsøgning, der kører lokalt i din AI-kodnings-CLI (Claude Code, Codex, OpenCode og andre) og overlader hver beslutning til dig. Den vurderer jobopslag mod dit CV, genererer ATS-tilpassede PDF'er, finder den rette person at kontakte og holder styr på alt ét sted: du har altid det sidste ord. Den er den første referenceimplementering af [CareerOps-manifestet](https://career-ops.org/manifesto). **Kan det tilpassede CV finde på ting?** Det må det ikke, og prompterne siger det: omformuler, opdigt aldrig. `generate-pdf` blokerer et CV med tal eller fakta, der ikke står i dine kilder, medmindre du angiver `--skip-fact-check`. `pdf`-tilstanden kører også `cv-title-check.mjs`, som sammenligner hver jobtitel i det tilpassede CV med den titel, cv.md giver samme job (matchet på virksomhed og datoer), og spørger dig, om en afvigende titel skal beholdes eller rettes tilbage. Den advarer i stedet for at blokere, fordi en omformuleret titel nogle gange er dit valg. Intet bedømmer omformuleringer endnu: [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (troskabskontrol, der blokerer ved afvigelse) følger det. Indtil da: læs hvert CV, før du sender det. [Den juridiske ansvarsfraskrivelse](LEGAL_DISCLAIMER.md) siger det samme med flere ord. **Kan jeg køre career-ops gratis eller på en billigere / lokal model?** Ja. career-ops er CLI-uafhængig og kører på gratis og lokale modeller (gratis OpenRouter-modeller, Ollama eller ethvert OpenAI-kompatibelt endpoint), så du er ikke bundet til et betalt abonnement. Se [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) for den fulde opsætning. **Jeg betaler for Claude Pro/Max, men career-ops brænder API-kredit af. Hvorfor?** Fordi en `ANTHROPIC_API_KEY` i dit miljø går forud for dit indloggede abonnement: CLI'en bruger nøglen og fakturerer pr. token. Kør `echo $ANTHROPIC_API_KEY`, og hvis den udskriver noget, så fjern den fra din shell-profil, genstart terminalen og kør `/login`. Batch-tilstand er undtagelsen, da `claude -p`-workers ikke bruger det interaktive login: kør `claude setup-token` én gang og eksportér resultatet som `CLAUDE_CODE_OAUTH_TOKEN`. Fuld gennemgang i [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it). **Hvilke AI-CLI'er virker career-ops med?** career-ops kører på enhver større AI-kodnings-CLI (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen og flere) gennem den åbne Agent Skill Standard, så den er aldrig låst til én leverandør. Brug den CLI, du allerede har. **Hvordan installerer jeg career-ops på Windows?** career-ops kører på Windows. Platformspecifik opsætning og de kendte faldgruber (Git Bash-detektion, linjeskift, Opgavestyring) findes i [docs/WINDOWS.md](docs/WINDOWS.md). Hvis skills ikke indlæses med en symlink-fejl under installationen, findes løsningen i [docs/FAQ.md](docs/FAQ.md). Fulde trin findes i [docs/SETUP.md](docs/SETUP.md). **Søger career-ops job for mig automatisk?** Nej. career-ops er et filter, ikke en spray-and-pray-autosøger. AI'en vurderer, rangerer og skriver udkast; du gennemgår og beslutter. Den skriver udkast og udfylder felterne; den indsender aldrig. Du trykker på Send. Det human-in-the-loop-design er hele pointen. **Er career-ops gratis og open source?** Ja. career-ops er gratis og open source, og for kandidaten vil det altid være sådan. Det er den første referenceimplementering af [CareerOps-manifestet](https://career-ops.org/manifesto). Læs det, og hvis det siger, hvad du tror på, så skriv under. ## Om forfatteren Jeg er [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), tidligere stifter: jeg byggede og solgte en virksomhed, der stadig kører med mit navn på. Jeg byggede career-ops til at styre min egen jobsøgning, og det virkede: det skaffede mig en stilling som Head of Applied AI. Seks måneder senere forlod jeg den stilling for at fokusere på at bygge career-ops på fuld tid. Nysgerrig efter, hvordan et repository af denne størrelse vedligeholdes med en flåde af AI-agenter og et menneske, der beslutter hver merge? Læs [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet). Min portefølje og andre open source-projekter → [santifer.io](https://santifer.io) Wikidata: [Santiago Fernández de Valderrama Aparicio](https://www.wikidata.org/wiki/Q138710224) · [career-ops](https://www.wikidata.org/wiki/Q139007988). ## Juridisk ansvarsfraskrivelse **career-ops er et lokalt open source-værktøj, IKKE en hostet tjeneste.** Ved at bruge denne software anerkender du: 1. **Du kontrollerer dine data.** Dit CV, dine kontaktoplysninger og personlige data bliver på din maskine og sendes direkte til den AI-udbyder, du vælger (Anthropic, OpenAI osv.). Vi indsamler, gemmer eller har ikke adgang til nogen af dine data. 2. **Du kontrollerer AI'en.** Standardprompterne instruerer AI'en i ikke at indsende ansøgninger automatisk, men AI-modeller kan opføre sig uforudsigeligt. Hvis du ændrer prompterne eller bruger andre modeller, gør du det på egen risiko. **Gennemgå altid AI-genereret indhold for nøjagtighed, før du sender.** 3. **Du overholder tredjeparters vilkår.** Du skal bruge dette værktøj i overensstemmelse med vilkårene for de karriereportaler, du interagerer med (Greenhouse, Lever, Workday, LinkedIn osv.). Brug ikke dette værktøj til at spamme arbejdsgivere eller overbelaste ATS-systemer. 4. **Ingen garantier.** Vurderinger er anbefalinger, ikke sandhed. AI-modeller kan hallucinere færdigheder eller erfaring. Forfatterne er ikke ansvarlige for beskæftigelsesresultater, afviste ansøgninger, kontobegrænsninger eller andre konsekvenser. Se [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) for alle detaljer. Denne software leveres under [MIT-licensen](LICENSE) "som den er", uden nogen form for garanti. ## Bidragydere Alle, der har leveret kode, dokumentation, oversættelser eller tests, står i [CONTRIBUTORS.md](CONTRIBUTORS.md), inklusive bidrag uden kode, som grafen ovenfor ikke kan vise. Blev du ansat med career-ops? [Del din historie!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml) ## Licens og varemærke Koden er licenseret under [MIT](LICENSE). Navnet og brandet "career-ops" er underlagt [varemærkepolitikken](TRADEMARK.md), tilladende for community-brug, forbeholdt kommerciel produktnavngivning og anbefalinger. ## Stjernehistorik

Live star telemetry of career-ops-hq/career-ops

Skabt og vedligeholdt af Santiago Fernández de Valderrama Aparicio (@santifer)

## Lad os forbinde [![Website](https://img.shields.io/badge/santifer.io-000?style=for-the-badge&logo=safari&logoColor=white)](https://santifer.io) [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/in/santifer) [![X](https://img.shields.io/badge/X-000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/santifer) [![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/8pRpHETxa4) [![Email](https://img.shields.io/badge/Email-EA4335?style=for-the-badge&logo=gmail&logoColor=white)](mailto:hi@santifer.io)