by Stupidoodle
Search & apply to ~4,700 salary-transparent tech jobs across 7 countries (π¨ππ©πͺπ¬π§πΊπΈπ¨π¦π³π±π«π·) from your terminal or AI agent β zero-dependency Python CLI + MCP server + Claude Code plugin
# Add to your Claude Code skills
git clone https://github.com/Stupidoodle/swissdevjobs-cliGuides for using ai agents skills like swissdevjobs-cli.
Last scanned: 8/26/2026
{
"issues": [
{
"file": "README.md",
"line": 88,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell β review the source before running): \"curl -LsSf https://astral.sh/uv/install.sh | sh\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-08-26T04:39:15.196Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how swissdevjobs-cli compares with popular alternatives.
swissdevjobs-cli is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Stupidoodle. Search & apply to ~4,700 salary-transparent tech jobs across 7 countries (π¨ππ©πͺπ¬π§πΊπΈπ¨π¦π³π±π«π·) from your terminal or AI agent β zero-dependency Python CLI + MCP server + Claude Code plugin. It has 97 GitHub stars.
Yes. swissdevjobs-cli passed SkillsLLM's automated security scan β a dependency vulnerability audit plus prompt-injection heuristics β with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/Stupidoodle/swissdevjobs-cli" and add it to your Claude Code skills directory (see the Installation section above).
swissdevjobs-cli is primarily written in Python. It is open-source under Stupidoodle on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh swissdevjobs-cli against similar tools.
No comments yet. Be the first to share your thoughts!
β οΈ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
See comparison
Search, filter, and apply across 9 job boards in 8 countries β ~4,700 tech jobs with salary data, plus all ~50,000 Swiss postings on jobs.ch & jobup.ch and ~9,000 Singapore IT postings on MyCareersFuture β without leaving your terminal.
π¨π Switzerland Β· π©πͺ Germany Β· π¬π§ UK Β· πΊπΈπ¨π¦ US & Canada Β· π³π± Netherlands Β· π«π· France Β· πΈπ¬ Singapore
Every posting on swissdevjobs.ch β and its five sister boards covering Germany, the UK, the US & Canada, the Netherlands, and France β is required to publish a salary range. That makes them the rare job boards where you can filter by pay before you click. Since v0.5 the tool also searches jobs.ch and jobup.ch β Switzerland's two biggest boards, every industry, ~50,000 postings. It also searches MyCareersFuture, Singapore's government job portal, scoped to its ~9,000 Information Technology postings. One search, nine boards, JSON-first so an LLM agent can drive it.
It also remembers what you've already applied to, across every board, so the same job never shows up twice.
$ sdj list --tech Kubernetes --remote --min-salary 90000 --sort salary
57 shown Β· 57 match filters Β· 5521 in feed Β· 3 hidden (already applied)
----------------------------------------------------------------------------------------
6a60ec82β¦ devitjobs-us p=2026-07-22 Senior Maximo Systems Developer/Integrator TEKsystems c/o Allegis Gr Ottawa USD 208'000β270'400 remote API, Ansible, Bash, ESB, GIS, IBM
6a6cc9bdβ¦ devitjobs-us p=2026-07-31 Senior Solutions Architect TEKsystems c/o Allegis Gr Calgary USD 187'200β228'800 remote AI, API, Architect, Cloud, Docker
| π Nine boards, one tool | The all-IT devitjobs family across six countries, plus jobs.ch & jobup.ch for every industry in Switzerland and MyCareersFuture for Singapore IT roles β one search, per-board currencies |
| π° Salary is a first-class filter | --min-salary 130000 β no more opening 40 tabs to find the range |
| π Real posting dates | The site re-stamps activeFrom when it bumps a listing. This decodes the true creation time from the MongoDB ObjectId, so a "new" job that's actually four months old can't fool you |
| π§ Remembers where you applied | Local SQLite. Applied jobs vanish from list automatically |
| π€ Agent-native | An MCP server plus --json on every command; duplicates come back as data, not errors |
| π¦ Zero dependencies | Python stdlib only. No requests, no pydantic, no supply chain |
| π― Refuses to black-hole your application | Detects postings the site can't actually deliver and tells you where to apply instead |
This talks to somebody else's website, built by a small team who chose to make salary transparency mandatory. Keep your request volume human. Don't strip the caching. Don't fire off applications to postings you haven't read β that wastes a real recruiter's afternoon and poisons the well for everyone using the board honestly.
Read swissdevjobs.ch's terms before you automate anything on top of this.
/plugin marketplace add Stupidoodle/swissdevjobs-cli
/plugin install swissdevjobs@swissdevjobs
That's it. Claude Code prompts for your name, email, and CV path, then starts
the MCP server with uvx β nothing to install first, and no shell profile is
touched. Ask it "find me senior Python roles in Zurich over 140k" and go.
Requires uv on your PATH
(brew install uv, or curl -LsSf https://astral.sh/uv/install.sh | sh).
uv tool install git+https://github.com/Stupidoodle/swissdevjobs-cli
# pipx
pipx install git+https://github.com/Stupidoodle/swissdevjobs-cli
# from a checkout, editable
git clone https://github.com/Stupidoodle/swissdevjobs-cli
cd swissdevjobs-cli
uv tool install -e . # or: pipx install -e .
# no install at all β run it once
uvx --from git+https://github.com/Stupidoodle/swissdevjobs-cli sdj list --remote
Not published to PyPI.
Installs two equivalent binaries: sdj and swissdevjobs. Python 3.9+.
Three platforms, nine boards, one tool. The devitjobs family shares one backend across six countries β identical API, identical apply flow β the JobCloud platform (jobs.ch, jobup.ch) covers every industry in Switzerland, and MyCareersFuture is Singapore's government job portal, scoped to IT and publishing salary:
| Board | Country | Scope | Currency | Salary data | Direct apply | |
|---|---|---|---|---|---|---|
| π¨π | swissdevjobs.ch | Switzerland | IT | CHF | always | β |
| π©πͺ | germantechjobs.de | Germany | IT | EUR | always | β |
| π¬π§ | devitjobs.uk | United Kingdom | IT | GBP | always | β |
| πΊπΈπ¨π¦ | devitjobs.com | US & Canada | IT | USD | always | β |
| π³π± | devitjobs.nl | Netherlands | IT | EUR | always | β |
| π«π· | devitjobs.fr | France | IT | EUR | always | β |
| π¨π | jobs.ch | Switzerland | all industries | CHF | none | π via ATS |
| π¨π | jobup.ch | Switzerland (Romandie) | all industries | CHF | none | π via ATS |
| πΈπ¬ | MyCareersFuture | Singapore | IT | SGD | always | π on the posting page |
All boards are searched by default. A selector is a board id (just that one)
or a country code (every board there) β --board, with --source and
--country as accepted aliases:
sdj list --board jobsch # just jobs.ch
sdj list --board de --board uk # just Germany + UK, this once
sdj config --boards ch,de # persist: all CH boards + Germany
sdj config --boards swissdevjobs # persist: one board only
sdj config --boards all # back to everything
sdj boards (and the MCP tool list_boards) prints all of this as data β
no need to memorize which board does what:
$ sdj boards
9 boards β select with --board <id|country>, persist with `sdj config --boards`
----------------------------------------------------------------------------------------------------
swissdevjobs ch SwissDevJobs CHF enabled it Β· salary Β· unfilterable: workload
germantechjobs de GermanTechJobs EUR enabled it Β· salary Β· unfilterable: workload
devitjobs-uk uk DevITjobs UK GBP enabled it Β· salary Β· unfilterable: workload
devitjobs-us us DevITjobs US/CA USD enabled it Β· salary Β· unfilterable: workload
devitjobs-nl nl DevITjobs NL EUR enabled it Β· salary Β· unfilterable: workload
devitjobs-fr fr DevITjobs FR EUR enabled it Β· salary Β· unfilterable: workload
jobsch ch jobs.ch CHF enabled all-industries Β· no-salary Β· search-driven Β· no-native-apply Β· unfilterable: salary, remote, visa, level, tech, language Β· categories: it
jobup ch jobup.ch CHF enabled all-industries Β· no-salary Β· search-driven Β· no-native-apply Β· unfilterable: salary, remote, visa, level, tech, language Β· categories: it
mycareersfuture sg MyCareersFuture SGD enabled it Β· salary Β· search-driven Β· no-native-apply Β· unfilterable: visa, level, workload
jobs.ch and jobup.ch are search-driven. Their ~50k-job inventory can't be
mirrored (the API serves up to 200 rows per page and stops paging at 100 pages), so
they answer your query server-side, newest first β pass free text for real
coverage, and --category it to stay in tech:
$ sdj list "pflegefachfrau" --board jobsch --limit 2 # any industry, server-side
2 shown Β· 100 match filters Β· 100 in feed
----------------------------------------------------------------------------------------
40b2f214β¦ jobsch p=2026-08-25 Dauernachtwache - Dipl. Pflegefachperson HF / FH Stiftung entero Niederlenz β
b5367506β¦ jobsch p=2026-08-25 Dipl. Pflegefachfrau HF/FH mit Fachverantwortung Spital MΓ€nnedorf AG MΓ€nnedorf β
$ sdj list "python" --board ch --category it # CH tech across all three boards
They publish no salary data (rendered honestly as β) and have no native
apply β every posting routes to the company's own ATS, so direct-apply
refuses with the real apply URL instead of pretending.
MyCareersFuture is search-driven too. Singapore's government job portal (Workforce Singapore) carries ~9,000 active Info