# skillfactor — Occupational Skill Library (MVP) **skillfactor** ("KI mit Berufserfahrung") builds ready-to-use occupational skill packages for AI agents: public occupation databases (ESCO, O*NET) + live job-ad evidence (JSearch/Adzuna APIs) + expert knowledge (Wikipedia/Wikidata, literature) are compiled into one git repo per occupation and published to a git-native marketplace (Gitea). ## Architecture ```mermaid flowchart LR A[ESCO / O*NET / Crosswalk] --> DB[(MSSQL 'skillfactor')] J[Job ads via JSearch/Adzuna APIs] --> DB W[Wikipedia / Wikidata / literature] --> G DB --> G[Generator] G --> S[skills/<slug>/ packages] S --> M[Gitea marketplace
orgs: skills-core / skills-community / tenant-acme] ``` - **Evidence store: Microsoft SQL Server** (database `skillfactor`, local instance) — project requirement: the whole stack runs on MSSQL (Gitea itself included). No SQLite. - **Pipeline:** one script per phase in `pipeline/` (`p1_load.py`, …), orchestrated by `pipeline/run_all.py`. Downloads are cached in `data/raw/` (not committed). - **Skill package layout** (per occupation, language: English): ``` skills// ├── SKILL.md # frontmatter: name, description (synonyms + task │ # triggers), core workflow; < 300 lines ├── references/ │ ├── profile.md # occupation profile (ESCO), ESCO URI, ISCO code │ ├── tasks.md # O*NET task statements + detailed work activities │ ├── skills.md # ESCO skills (essential/optional) │ └── tools.md # O*NET tools & technology └── manifest.json # ids, sources, version, layer:"core", attribution ``` ## Setup 1. Python >= 3.11, `python -m venv .venv`, `pip install -r requirements.txt` 2. Copy `.env` (never committed): Gitea URL/token, JSearch/Adzuna keys, MSSQL credentials (see `.env` keys in `pipeline/db.py`) 3. `python pipeline/run_all.py` ## Data sources & licensing - **ESCO** (European Commission) — occupations/skills/relations. Usage per the [ESCO conditions](https://esco.ec.europa.eu/en/use-esco/download). - **O*NET** (U.S. Department of Labor, CC BY 4.0) — task statements, tools & technology, detailed work activities. Attribution included in every `manifest.json` and below. - Job ads exclusively via official APIs (JSearch, Adzuna) — no HTML scraping. - Wikipedia/Wikidata content is paraphrased, never copied; source URLs cited. > This product includes information from the O*NET Database by the U.S. > Department of Labor, Employment and Training Administration (USDOL/ETA), > used under the CC BY 4.0 license. skillfactor is not endorsed by USDOL/ETA. ## Data load smoke test (Phase 1) | Table | Rows | |---|---| | esco_occupation | 3,039 | | esco_skill | 13,939 | | esco_occ_skill | 126,051 | | esco_isco_group | 619 | | onet_occupation | 1,016 | | onet_task | 18,796 | | onet_software | 31,821 | | onet_task_dwa | 23,850 | | onet_dwa | 2,087 | | crosswalk_esco_onet | 4,210 | Note (O*NET 30.3): the former "Technology Skills" file is now called **"Software Skills"**; tools data loads from there. ## Status / TODO - [x] Phase 0 — setup (repo, venv, MSSQL evidence store, Gitea Actions + runner) - [x] Phase 1 — load ESCO/O*NET/crosswalk into MSSQL - [x] Phase 2 — generate ~100 core skill packages (exactly 100 published) ### Phase 2 spot check (5 samples read manually) `recruitment-consultant`, `accountant`, `marketing-manager`, `ict-help-desk-agent`, `market-research-analyst`: - structure complete (SKILL.md < 300 lines, 4 reference files, manifest) - ESCO description/competences and O*NET tasks/software are consistent with the occupation; crosswalk matches are plausible (recruiter → 13-1071.00) - known limitation: O*NET "hot technologies" for broad SOC codes contain generic office software — the job-ad market evidence (phase 3) is the corrective for that - first selection draft was ISCO-11..13-heavy (alphabetical fill); fixed via round-robin bucket selection across ISCO prefixes (11:7, 12:17, 13:11, 24:23, 25:13, 26:6, 33:24, 35:8, 42:6) - [x] Phase 3 — recruiter deep enrichment (glossary, literature, usecases, intake, quality, 5 evals) - [x] Phase 4 — published to Gitea: orgs `skills-core`/`skills-community` (public) + `tenant-acme` (private), 100 repos, marketplace, PR gates green (sanitize + eval on self-hosted act_runner, host mode) - [x] Phase 5 — screenshots in `docs/screenshots/` ### Market evidence (phase 3) — DONE 101 unique recruiter ads (us+gb) fetched via JSearch (11 of 200 monthly requests), entities extracted (1,859) into the MSSQL evidence store, aggregated at the ≥20 % threshold into the recruiter package: **ATS 54 %**, LinkedIn/LinkedIn Recruiter 26 %, candidate sourcing 48 %, full-cycle recruiting 33 %, candidate screening 27 %, talent pipelining 29 %. Remaining occupations follow the staged plan in `docs/batch-plan.md` (~30 occupations/month within the free tier). ### Open TODO - Structured-interview article on Wikipedia describes the survey-research method; the hiring context in `glossary.md` is our own framing. ### Environment notes (this deployment) - Gitea 1.24.5 on **Microsoft SQL Server**, served at `https://zeiterfassung.cloud/skillfactor/` (Caddy sub-path setup). - Gitea Actions: `github.server_url` does not include the sub-path (Gitea limitation) — Caddy additionally forwards the git smart-HTTP endpoints of the three skill orgs without the prefix so `actions/checkout` can clone. - act_runner 0.6.1, host mode, label `windows`; started via `Tools\gitea\act_runner\start-actrunner.ps1` (no autostart).