jobissimo
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 6 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Agent-operated job-search pipeline that gamifies the process in the CLI: find, score, and write truth-audited, ATS-optimized applications, and improve from your own telemetry. Truth guardrails outrank ATS score.
Jobissimo
An agent-operated job-search pipeline: it finds postings, scores them for fit,
generates truth-audited ATS-optimized applications, tracks outcomes, and
improves itself from its own telemetry. Plain-markdown slash commands hold the
judgement; a handful of deterministic Python scripts hold anything that must be
exact — lifecycle state, truth auditing, ATS scoring, export. Runs in
Claude Code and
Codex from the same files; runnable by
any capable LLM agent.
The principle
Truth guardrails outrank ATS score. The system is a librarian, not an
author: it selects and rephrases real bullets from your own knowledge base.
It never invents a fact, never combines metrics across two bullets, never
claims an unproven skill. A keyword with no evidence goes to a gaps file,
never into the CV — even when it costs points.
Everything else in this project exists to serve that line. It is enforced
mechanically by scripts/audit.py, which is a hard gate before scoring and
export, and it is not configurable.
Pipeline
/setup documents first → extract knowledge → minimum config → first result
↓
/hunt browse: extract JD → score → find employer URL → record
↓ (shortlisted | discarded)
/prepare evidence map → drafts → truth audit (hard gate) → ATS score →
targeted regeneration → export to DOCX/PDF → ready
↓
/apply assisted browser form-fill (stretch; NEVER submits autonomously)
↓
/track natural-language outcome updates → dashboard
↓
/optimise funnel + run telemetry → evidence-backed improvement diffs
(to config/profile/pack — never the engine; user approves each)
/enrich answer the highest-impact profile gaps in five minutes
/dashboard read-only pipeline views any time
/refresh liveness check on open postings; mark dead ones missed
/cycle the scheduled pass: reconcile → hunt → prepare → one report
/doctor config health, value provenance, drift detection
Lifecycle: found → scored → discarded | shortlisted → generated → ready → applied → responded → closed (+ on_hold, missed, skipped). Transitions
are validated by scripts/db.py; closed carries an outcome
(no_response / rejected / interview / offer / withdrawn).
Requirements
- Python 3 — standard library only for the core scripts; no pip install.
- pandoc for DOCX export; an optional PDF engine
(tectonic, xelatex, or
LibreOffice) for PDF. Neither is required to run the pipeline or the tests. - An LLM agent to run the commands — Claude Code or Codex (see
Running with Codex). - A browser is optional. Discovery works through a logged-in browser, a
headless one, plain HTTP fetch (company career pages + public ATS board
APIs), or fully manual URL paste — whichever your session has.
Install
New to all this? docs/getting-started.md walks
through everything, from installing Claude Code or Codex to connecting the
browser and mail to the first /setup. The short version, for an agent you
already have:
git clone https://github.com/iliasedelkin/jobissimo.git
cd jobissimo
python3 scripts/scrub_check.py --install-hook # PII pre-commit gate
python3 -m unittest discover -s tests -p 'test_*.py' # optional: verify offline
claude # or: codex
Then, inside the agent:
/setup # Claude Code
$setup # Codex
First run
/setup asks for documents before questions. Drop in every CV you have
(any format, any language), a LinkedIn export, old cover letters, project
READMEs, and job descriptions of roles you want — the more the better,
because the differences between CV versions are signal. It extracts
everything it can, shows you a completeness ledger, and asks you only to
correct what it got wrong rather than compose from scratch. Then it
generates a real, truth-audited, ATS-scored CV and cover letter against a
sample posting so you see a result in the first session.
Target: about fifteen minutes from /setup to a scored draft when you supply
one decent CV. Everything not needed for that first result is deferred to a
queue that /enrich and the dashboard keep surfacing later.
$ /setup
Setup: 8/8 (deferred: targets 2-3, metric rescue, watchlist)
Ingested: 3 documents (en, it) → 3 roles, 9 bullets, 8 skills (6 evidenced)
Profile strength: 71/100
First result: audit PASS, ATS 93/100 (≥75 ✓)
applications/2026-01-15_sample001_nimbus-metrics_product-manager/
Next: /hunt · /enrich · /dashboard
Commands
Claude Code takes them as /name, Codex as $name. Arguments are the same
(/prepare 0123 ≙ $prepare 0123).
| Command | What it does |
|---|---|
/setup |
Configure the pipeline from your own documents; reach a first result |
/enrich |
Answer the highest-impact profile gaps in five minutes |
/hunt |
Find, score, and record postings in one pass; originate employer URLs |
/prepare |
Evidence map → drafts → truth audit → ATS score → export |
/apply |
Assisted form-fill; hard stop before submit (never autonomous) |
/track |
Natural-language outcome updates → dashboard |
/optimise |
Analyze telemetry; propose approved-per-item improvements |
/dashboard |
Read-only funnel, stats, lists, single-job views |
/refresh |
Verify open postings are still live; mark dead ones missed |
/cycle |
The scheduled pass: reconcile, hunt, prepare, one report (daily or weekly) |
/doctor |
Config health, value provenance, drift detection |
Running with Codex
Codex reads AGENTS.md (the operating contract; CLAUDE.md imports the same
file) and runs each command through a thin skill in .agents/skills/<name>/.
The skill points at the same .claude/commands/<name>.md that Claude Code
uses, so the pipeline logic, guardrails, and scripts are identical in both
agents. Full details: docs/codex.md.
1. Install, then open the repo root and trust the project
npm install -g @openai/codex # or: brew install --cask codex — or the ChatGPT desktop app
cd jobissimo
codex
Trusting the project also loads .codex/rules/jobissimo.rules, so the
pipeline scripts run without approval prompts, as in Claude Code.
2. Give Codex your workspace and the network. Codex's default sandbox
writes only inside the repo and blocks network access from the shell.$setup creates your workspace as a sibling directory by default
(python3 scripts/paths.py prints it once it exists), and the public ATS-API
fetches and /sync need the network. Add this to your personal~/.codex/config.toml before $setup, then restart Codex. Never commit it
here.
[sandbox_workspace_write]
writable_roots = ["/absolute/path/to/your/jobissimo-workspace"]
network_access = true
For a single session, codex --add-dir /absolute/path/to/workspace does
the same for writes.
3. Optional: browser and mail
- Browser (ChatGPT desktop app only): in Computer Use, install the
ChatGPT browser extension, then @-mention the browser in chat
($hunt @Chrome). It drives your own logged-in Chrome (codex-chrome
adapter). The Codex CLI has no browser integration; a headless Playwright
MCP is the CLI option. - Mail: install the Gmail plugin and connect the mailbox that gets
your job alerts (read-only by contract). Otherwise useimapor nothing.
Neither is required: without a browser, discovery runs on public ATS APIs and
pasted URLs, and preparing applications is unaffected.
4. Run it
$setup # once: documents → knowledge → config → first result
$hunt # find and score postings
$prepare <job_id> # tailored, truth-audited, ATS-scored CV + letter
$apply <job_id> # assisted form-fill; you click submit
$track <what happened> # "rejected by Acme", "interview with Nimbus Friday"
$cycle # or all of the above as one daily pass
$dashboard # where things stand
Unattended: run codex exec --sandbox workspace-write '$cycle' from the repo
root (see docs/scheduling.md). CLI runs have no browser,
so the hunt uses public ATS APIs and mail.
Differences from Claude Code
- Questions come as plain chat.
- The Chrome plugin asks before it types personal data into a form.
- Everything else, including the truth audit and the stop before submit,
behaves the same.
How it works
Four config layers resolve last-wins: engine (scripts, command files,
rules — maintained here), pack (a domain's role clusters, ATS lexicons,
board catalogue, locale conventions — community-contributed), config (this
install's identity, targets, languages, boards — written by /setup), and
profile (your knowledge base and every generated artefact). A pack is
never edited in place; a user override lands in config/. /optimise only
ever proposes changes to config, profile, and pack overrides — never the
engine — and never applies anything without your approval. See
docs/architecture.md.
Configuration
Everything specific to you lives in your workspace ($JOBISSIMO_HOME):
identity, targets, languages, boards, and capabilities in config/, and
knowledge, positioning, and artefacts alongside them. It is all gitignored by
this public repo; the shipped *.example.yaml templates live intemplates/config/. /doctor explains where any config value came from —
which setup stage wrote it, from what evidence, when.
Sync and backup
Because the workspace is gitignored, it is also unbacked-up by default. /sync
makes it its own private git repo with a private remote, entirely separate
from this public one, so you can version it and move it between machines
without any risk of personal data reaching the public repo. The pipeline
database is treated as a runtime artefact: db.py export-csv commits a
diff-friendly CSV record, db.py import-csv rebuilds the DB on the other
machine. Engine changes still flow here as ordinary commits. See
docs/sync.md.
Languages
The pipeline generates each application in the posting's language, while
section headers, dates, and skills-inventory names stay canonical English so
the deterministic audit/ATS chain keeps working. It never writes above the
proficiency you declared — you have to defend every line in an interview.
Market conventions (does a CV carry a date-of-birth block here? a photo?) are
per-locale: en and it ship verified, de/fr/es/nl/pt ship as neutral
stubs. Adding or verifying a locale is a small, high-impact contribution —
see docs/languages.md.
Packs
A domain pack is the role family the pipeline targets: its role clusters
and canonical competencies, ATS keyword/synonym lexicons, board catalogue,
evaluation rubric, and locale conventions. product (product/analyst roles)
ships as the reference pack; generic is a minimal fallback. Building a pack
for your domain is the highest-value contribution — see
docs/packs.md.
Privacy
All personal data lives under config/ and profile/, both gitignored.
Nothing is uploaded anywhere — the pipeline talks only to the job boards and
mailbox you point it at, and only reads (never sends) mail. A scrub_check.py
pre-commit hook blocks personal strings (emails, phone numbers, profile
handles, job-ids) from ever entering a commit, and CI re-runs it over the
whole tree and full history.
Limits and ethics
- No autonomous submission, ever.
/applystops before submit with a
screenshot and a field-by-field summary naming each value's source; a human
clicks submit. This is a project boundary, not a setting. - No captcha or interstitial bypass. A Cloudflare challenge is logged and
skipped, never worked around. - Respect each board's terms of service and rate limits. A browser adapter
means you, driving your own logged-in session — not a scraper. - Single-user, personal use.
- The truth guardrails are not configurable. A fork that weakens the
audit, automates submission, or bypasses site protections is a different
project.
Contributing
The two highest-value paths are new domain packs and verifying a locale
stub. See CONTRIBUTING.md. No personal data in PRs, ever;
run tests/ and scrub_check.py before opening one.
License
MIT — see LICENSE.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found