prawo-eu-eurlex · v2.1.0 · 2026-10-05 · sha256 a20094e14739c1f0
prawo-eu-eurlex v2.1.0A
Immutable. This exact content never changes and is served at /api/v1/blob/a20094e14739c1f0.
---
name: prawo-eu-eurlex
version: 2.1.0
description: >-
Odpytuje OFICJALNE repozytorium prawa UE — CELLAR/EUR-Lex Urzędu Publikacji (SPARQL + REST,
bez klucza): wyszukiwanie aktów, pełny tekst PO POLSKU i w 23 innych językach, WERSJE
SKONSOLIDOWANE, pojedyncze artykuły, metadane, nowelizacje, uchylenia, sprostowania, podstawa prawna —
po numerze CELEX lub ELI. Używaj przy KAŻDYM pytaniu o prawo UE: rozporządzenia (RODO/GDPR,
AI Act, DORA, DSA, DMA, MiCA, eIDAS), dyrektywy (NIS2, konsumenckie, ePrivacy, PSD2),
decyzje, traktaty i Karta — TAKŻE gdy przepis nie jest jeszcze znany. Wywołuj PRZED
wyszukiwaniem w internecie: treść przepisu UE cytuj WYŁĄCZNIE z EUR-Lex/CELLAR, nigdy
z pamięci ani portali; internet tylko do orzecznictwa TSUE i doktryny. Polską implementację
dyrektywy sprawdzaj skillem prawo-pl-eli. Wyzwalaj przy: „co mówi RODO/AI Act o…", „art. X
rozporządzenia/dyrektywy…", „CELEX", „czy zgodne z prawem UE", „od kiedy stosuje się…".
EU law from the official EUR-Lex/CELLAR — always use for EU law questions BEFORE web search.
---
# Prawo UE z oficjalnego repozytorium CELLAR/EUR-Lex
Skill do pracy z prawem Unii Europejskiej — przy **każdym pytaniu o prawo UE** oraz przy **tworzeniu
i analizie umów i pism**, gdzie trzeba przywołać przepis unijny, zweryfikować podstawę prawną lub datę
stosowania. Cytowanie przepisów UE z pamięci albo z portali jest zawodne (nowelizacje, sprostowania,
różne daty stosowania) — ten skill sięga do **źródła pierwotnego**: CELLAR, wspólnego repozytorium
Urzędu Publikacji UE, które zasila EUR-Lex (SPARQL + REST, bez rejestracji i klucza).
## Kolejność źródeł (przepis ≠ internet)
1. **Treść przepisu UE — wyłącznie z EUR-Lex/CELLAR.** Nigdy nie cytuj brzmienia z pamięci ani
z portali. Jeśli wynik wyszukiwania internetowego podał brzmienie — zweryfikuj przez `eurlex.py`,
zanim go użyjesz w odpowiedzi.
2. **Internet — tylko do orzecznictwa TSUE (curia.europa.eu), doktryny i identyfikacji aktów.**
Po identyfikacji wróć do CELLAR po tekst.
3. **Pytanie bez wskazanego przepisu** („czy to zgodne z prawem UE…", „czy RODO pozwala…") to też
zadanie dla tego skilla — najpierw ustal akt (tabela niżej lub `szukaj`), pobierz przepisy
(`tekst --fragment`), dopiero potem ewentualnie internet po orzecznictwo.
4. **Granica PL/UE:** rozporządzenie UE stosuje się wprost; dyrektywa działa przez TRANSPOZYCJĘ —
polską ustawę wdrażającą sprawdzaj skillem **prawo-pl-eli** (ELI Sejmu). Przy pytaniach mieszanych
(np. RODO + polska ustawa o ochronie danych) używaj OBU skilli.
5. **Delegując research subagentowi**, wpisz do jego promptu: „treść przepisów UE pobieraj wyłącznie
przez `scripts/eurlex.py` (skill prawo-eu-eurlex); internet tylko do orzecznictwa i doktryny".
## Narzędzie
Wszystko robi helper `scripts/eurlex.py` (tylko biblioteka standardowa Pythona — bez instalacji,
bez klucza API). Skrypt leży **obok tego pliku SKILL.md** — NIE zakładaj, że to `~/.claude/skills/`
(skill zainstalowany jako plugin leży w katalogu pluginów; w Claude Code:
`${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex`). Uruchamiaj wyłącznie helper z bieżącego pakietu:
```
# 1) Claude Code: przy ładowaniu skilla podstawia ${CLAUDE_PLUGIN_ROOT} (pełna ścieżka poniżej).
EURLEX="${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex/scripts/eurlex.py"
# 2) Codex / Claude Desktop / instalacja ręczna: katalog TEGO pliku SKILL.md (Claude Code podaje go
# jako „Base directory for this skill”, Codex w liście skilli) — podstaw go zamiast <katalog skilla>.
[ -f "$EURLEX" ] || EURLEX="<katalog skilla>/scripts/eurlex.py"
# 3) Piaskownica (Cowork, czat z code execution): katalog pluginu bywa NIEWIDOCZNY dla powłoki — wtedy
# pobierz DOKŁADNIE tę wersję helpera (tag = wersja z nagłówka tego pliku). Suma SHA-256 jest
# sprawdzana w kodzie przed zapisem i przed każdym uruchomieniem; niezgodna = helper nie startuje.
[ -f "$EURLEX" ] || EURLEX=$(python3 - <<'EOF'
import hashlib, os, sys, urllib.request
WERSJA, SHA256 = "2.1.0", "b6530c1b4eb29ff0213466cf185fe9c829a5e4c1246329250056d13ade4d92b5"
URL = f"https://raw.githubusercontent.com/jamarpl21/prawo-pl-eli/v{WERSJA}/plugins/prawo-eu-eurlex/skills/prawo-eu-eurlex/scripts/eurlex.py"
p = os.path.join(os.environ.get("TMPDIR", "/tmp"), f"prawo-eu-eurlex-{WERSJA}", "eurlex.py")
try:
dane = open(p, "rb").read() if os.path.exists(p) else urllib.request.urlopen(URL, timeout=30).read()
except Exception as e:
sys.exit(f"BŁĄD: nie udało się pobrać helpera ({e}). Bez helpera NIE cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")
if hashlib.sha256(dane).hexdigest() != SHA256:
os.path.exists(p) and os.remove(p)
sys.exit("BŁĄD: suma SHA-256 helpera nie zgadza się z SKILL.md — helper NIE zostanie uruchomiony. Nie cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")
os.makedirs(os.path.dirname(p), exist_ok=True); open(p, "wb").write(dane); print(p)
EOF
) && [ -f "$EURLEX" ] || exit 1
python3 "$EURLEX" <komenda> [...]
```
Nie szukaj helpera przez `find` po katalogach użytkownika ani systemu i nie pobieraj go z żadnego innego źródła niż przypięty tag z sumą wyżej (żadnego `main`, żadnej innej wersji z cache) — inna wersja helpera to inne wyniki.
(W przykładach niżej `python3 scripts/eurlex.py` oznacza `python3 "$EURLEX"`, jeśli nie jesteś
w katalogu skilla.)
Identyfikator aktu to numer **CELEX** (np. `32016R0679` = sektor 3 legislacja, rok 2016, R =
rozporządzenie, nr 0679); akceptowane też: `CELEX:32016R0679`, forma ELI `reg/2016/679`,
wersje skonsolidowane `02016R0679-20160504`, sprostowania `32016R0679R(01)`, traktaty `12012E/TXT`.
### Komendy
- **szukaj** — znajdź akt po frazie z tytułu (domyślnie tytuły polskie):
`python3 scripts/eurlex.py szukaj "sztucznej inteligencji" --typ REG --limit 5`
(opcje: `--typ REG|DIR|DEC`, `--rok`, `--jezyk pol|eng|…`, `--obowiazujace`, `--limit`)
Fraza dopasowuje się DOSŁOWNIE do tytułu, a tytuły są odmienione — podawaj RDZEŃ albo formę
z tytułu („danych osobowych"/„osobow", nie „dane osobowe"; RODO ma w tytule „ochrony osób
fizycznych w związku z przetwarzaniem danych osobowych"). Zero trafień z mianownika to NIE
dowód, że aktu nie ma.
- **meta** — metadane: pełny tytuł, typ, daty, status, ELI: `python3 scripts/eurlex.py meta 32016R0679`
- **Daty pochodzą z metadanych AKTU BAZOWEGO.** CELLAR trzyma wejście w życie i daty rozpoczęcia
stosowania w JEDNEJ właściwości: jedna data = „Wejście w życie"; kilka dat = „Wejście w życie /
stosowanie" i pod nią rodzaj każdej daty z adnotacji CELLAR (np. RODO: `2016-05-24: wejście w
życie (data publikacji +20 patrz art. 99)`, `2018-05-25: stosowanie (patrz art. 99)`); bez
adnotacji — uwaga, że CELLAR ich nie opisuje. Zakres daty i tak ustal z przepisów końcowych
(`tekst --fragment` na wskazanym artykule).
- **Dyrektywa:** osobno „Termin transpozycji" (bywa kilka — różne zakresy); polską ustawę
wdrażającą sprawdź skillem prawo-pl-eli. Starsze dyrektywy nie mają pola transpozycji, tylko
ogólny termin (deadline) — `meta` pokazuje go z przepisem (32002L0012: 2003-09-20, „najpóźniej
patrz art. 3.1") i każe potwierdzić, że to termin transpozycji. Pozostałe terminy z aktu
(przeglądy, sprawozdania, okresy przejściowe) — linia „Inne terminy z aktu (deadline…)".
- **Koniec obowiązywania ≠ częściowy upływ ważności.** CELLAR podaje w jednej właściwości datę
końca AKTU i daty wygaśnięcia POJEDYNCZYCH przepisów. Gdy jest 9999-12-31, akt nie ma daty końca,
a pozostałe daty to „Częściowy upływ ważności: <data> — art. N …" (32009R0470: 2022-01-27, art. 30,
status OBOWIĄZUJE); gdy CELLAR nie wskazuje przepisu — tak wprost („CELLAR nie podaje, których
przepisów dotyczy"). Nie powołuj się na datę częściowego upływu jako na koniec obowiązywania aktu.
Opisy dat to osobne zapytanie: jego awaria daje `UWAGA` i nie blokuje wyniku (także w `--strict`).
- **`meta` na CELEX-ie skonsolidowanym** (`0…-YYYYMMDD`) pokazuje „Stan na (konsolidacja)", listę
aktów ujętych w konsolidacji oraz daty i status **aktu bazowego** — data w CELEX-ie konsolidacji
NIE jest datą wejścia w życie ani stosowania aktu.
- **Akt zmieniany** (lista aktów zmieniających): narzędzie ostrzega, że daty stosowania z aktu
bazowego mogą być nieaktualne (nowelizacja mogła przesunąć terminy — tak AI Act po 2026/1744) i
każe sprawdzić artykuł o stosowaniu w najnowszej wersji skonsolidowanej. Same sprostowania nie
zmieniają dat i nie wywołują ostrzeżenia.
- **skonsolidowany** — WERSJE SKONSOLIDOWANE aktu (odpowiednik tekstu jednolitego; data w CELEX
= stan prawny na): `python3 scripts/eurlex.py skonsolidowany 32006L0112`
- **tekst** — treść aktu (XHTML → czysty tekst), domyślnie po polsku. **Do pojedynczego artykułu
używaj `--fragment`** (pełny akt to setki tysięcy znaków):
`python3 scripts/eurlex.py tekst 02016R0679-20160504 --fragment "art. 28"`
`python3 scripts/eurlex.py tekst 32024R1689 --fragment "profilowanie"` (pełnotekstowo)
`--jezyk eng` — inna wersja językowa; `--pdf ŚCIEŻKA` zapisuje urzędowy PDF.
Starsze akty (np. `31995L0046`, e-Privacy `32002L0058`) mają w CELLAR tylko HTML (bez XHTML)
i PDF pod innym plikiem niż `DOC_1` — `tekst` i `--pdf` pobierają je normalnie. 404 na akcie
bazowym narzędzie wyjaśnia: „sprawdź numer CELEX" tylko gdy aktu nie ma w metadanych; gdy akt
istnieje, mówi, czego brakuje (języka → `--jezyk`, HTML → `--pdf`).
**Akt tylko w PDF.** Część starszych aktów CELLAR ma w danym języku WYŁĄCZNIE PDF (np. polskie
wydanie specjalne Dz.Urz. UE: `32004R0883`, `32004L0037`, `31994R0114`). Wtedy `tekst` (także
z `--fragment`) czyta urzędowy PDF przez `pdftotext -layout` (poppler; opcjonalny: `brew install
poppler` / `apt install poppler-utils`): nagłówek „tekst z urzędowego PDF przez pdftotext -layout",
linia `EURLEX_TEXT_SOURCE_PDF=<URL>` ze źródłem, łamy rozdzielone, zawinięte wiersze i dzielone
wyrazy sklejone, nagłówki stron usunięte, przypisy zebrane na końcu (fragment artykułu ich nie
ciągnie). Tabele bywają rozsypane, a tekst PDF bywa wadliwy (883/2004: dwa razy „1." w art. 11 —
to treść PDF, poprawiona sprostowaniem) — do dosłownego cytatu weź `--pdf`. Bez pdftotext
zostaje komunikat z odesłaniem do `--pdf`. `--strict` przepuszcza tekst z WŁASNEGO PDF aktu,
ale dalej blokuje akt ze sprostowaniem albo wersją skonsolidowaną.
**Sprostowania.** Tekst aktu bazowego (i jego PDF) to brzmienie z Dz.U. SPRZED sprostowań. Gdy
w danym języku istnieje sprostowanie (`…R(nn)`), `tekst` wypisuje je (CELEX, data, poprawione
artykuły) i wskazuje wersję skonsolidowaną, która je zawiera; przy `--fragment "art. N"`
dotkniętym sprostowaniem — osobne „art. N SPROSTOWANO … brzmienie NIESPROSTOWANE". Przykład:
RODO po polsku, art. 4 pkt 1 w akcie bazowym „informacje", po sprostowaniu `32016R0679R(02)`
„wszelkie informacje" (też art. 10; art. 82 ust. 2 — `R(03)`) → cytuj z `02016R0679-20160504`
albo z aktu bazowego RAZEM ze sprostowaniem.
**Załącznik i dokument dołączony.** Trafienie spoza samego aktu poprzedza linia `[w załączniku:
ZAŁĄCZNIK …]` albo `[w dokumencie dołączonym do aktu (to NIE przepis samego aktu): UMOWA …]`
(decyzja o podpisaniu umowy: „art. 2" = art. 2 decyzji i, oznaczony, art. 2 Umowy — 32006D0370).
Fragment kończy się na granicy jednostki redakcyjnej (następny artykuł/rozdział/załącznik) oraz
na końcu części normatywnej: formuła „Sporządzono w…", podpisy i blok przypisów końcowych
(rozpoznawany po strukturze XHTML CELLAR) NIE wchodzą do fragmentu ostatniego artykułu; formuła
„Niniejsze rozporządzenie wiąże w całości…" zostaje przy nim. Przypisy czytaj bez `--fragment`
albo frazą z przypisu.
404 na wersji skonsolidowanej z listy `skonsolidowany` (np. pierwsza, tożsama z aktem bazowym)
oznacza, że CELLAR nie serwuje już tej ZASTĄPIONEJ wersji — narzędzie wskazuje najnowszą.
- **odniesienia** — nowelizacje, sprostowania, **uchylenia w obie strony** („UCHYLONY PRZEZ" /
„Uchyla", także dorozumiane), akty zmieniane, podstawa prawna; na akcie uchylonym pierwsza linia
mówi wprost „AKT UCHYLONY przez … — NIE OBOWIĄZUJE"; daty częściowego upływu ważności są
oznaczone jako takie (szczegóły: `meta`). Każda relacja raz (`--json`: lista `{kier, c2}`;
status i daty aktu — `meta --json`):
`python3 scripts/eurlex.py odniesienia 32016R0679` (→ uchyla 31995L0046)
- każda komenda przyjmuje `--json` oraz `--strict`; obie flagi działają przed komendą i po niej.
Zero trafień / nierozpoznana odpowiedź API kończą się komunikatem i kodem wyjścia ≠ 0 — także z `--json`
(nie dostaniesz pustego JSON-a, który wyglądałby jak „sprawdzone, nic nie ma”; dotyczy też `szukaj`).
`--json` dla `meta` zwraca obiekt: `meta` (surowe wiersze tej pracy), `akt_bazowy` (na wersji
skonsolidowanej), `zmieniajace`, `sprostowania` (w języku `--jezyk`), `wersje_skonsolidowane`,
`koniec_obowiazywania` (`akt`: data końca aktu, `9999-12-31` = brak; `czesciowy_uplyw`: lista dat),
`opisy_dat` (adnotacje CELLAR: pole, data, typ, komentarz, surowe; `null` = niepobrane), `ostrzezenia`.
- **Co sprawdza `--strict`, a czego nie.** Każda kontrola wykonuje się PRZED emisją wyniku; awaria
kontroli (SPARQL niedostępny) blokuje wynik zamiast udawać „brak". Blokuje: `tekst` (i `--pdf`)
aktu bazowego, gdy istnieją wersje skonsolidowane albo SPROSTOWANIE w danym języku (tekst
niesprostowany), i starszą wersję skonsolidowaną, gdy jest nowsza (także w
`meta`); `meta` AKTU BAZOWEGO, gdy akt był zmieniany (daty stosowania mogą być nieaktualne —
użyj `meta`/`tekst` najnowszej konsolidacji). Nie blokuje: `meta` aktu bazowego bez nowelizacji
(konsolidacja z samych sprostowań i same sprostowania → tylko ostrzeżenie), `meta` najnowszej
wersji skonsolidowanej
(daty aktu bazowego idą z ostrzeżeniem). `--strict` NIE weryfikuje treści dat z przepisami
końcowymi ani nie wykrywa zmian, których CELLAR jeszcze nie zaindeksował.
Narzędzie samo ostrzega: na akcie bazowym podpowiada najnowszą wersję skonsolidowaną i wymienia
sprostowania w danym języku; na wersji skonsolidowanej przypomina o jej dokumentacyjnym charakterze,
o nowszych wersjach i o sprostowaniach, których ta wersja nie obejmuje. Nie ignoruj tych ostrzeżeń.
### Akty bazowe najczęstszych aktów (pomiń `szukaj`)
Numery CELEX są niezmienne — dla poniższych zaczynaj od `skonsolidowany <CELEX>` (a przy braku
wersji skonsolidowanych czytaj akt bazowy):
| Akt | CELEX |
|---|---|
| RODO / GDPR | `32016R0679` |
| AI Act (akt o sztucznej inteligencji) | `32024R1689` |
| DORA (operacyjna odporność cyfrowa) | `32022R2554` |
| NIS2 (dyrektywa o cyberbezpieczeństwie) | `32022L2555` |
| DSA (akt o usługach cyfrowych) | `32022R2065` |
| DMA (akt o rynkach cyfrowych) | `32022R1925` |
| MiCA (rynki kryptoaktywów) | `32023R1114` |
| eIDAS (identyfikacja elektroniczna) | `32014R0910` |
| PSD2 (usługi płatnicze) | `32015L2366` |
| Dyrektywa o prawach konsumentów | `32011L0083` |
| ePrivacy (łączność elektroniczna) | `32002L0058` |
| Karta praw podstawowych UE | `12012P/TXT` |
| TFUE (Traktat o funkcjonowaniu UE) | `12012E/TXT` |
## Zasady (ważne — dlaczego)
1. **Najpierw właściwy akt i wersja, potem cytat.** Typowy przepływ: tabela wyżej (albo `szukaj`) →
`skonsolidowany <CELEX>` → `tekst <najnowsza wersja> --fragment "art. N"`. Cytowanie aktu
bazowego sprzed nowelizacji to częsty błąd.
2. **Wejście w życie ≠ rozpoczęcie stosowania ≠ termin transpozycji.** RODO weszło w życie
24.05.2016, a stosuje się od 25.05.2018; AI Act stosuje się ETAPAMI (różne daty dla różnych
rozdziałów); dyrektywa wiąże państwa od terminu transpozycji. `meta` pokazuje wszystkie daty
CELLAR (bez rozróżnienia, która to stosowanie) — przy kilku datach sprawdź przepisy końcowe
aktu (`tekst --fragment` na ostatnim artykule) i odnieś do DATY zdarzenia/sprawy. **Po
nowelizacji daty z metadanych aktu bazowego mogą być nieaktualne** (AI Act: art. 113 zmieniony
przez 2026/1744 — część terminów przesunięta) — wtedy artykuł o stosowaniu czytaj z najnowszej
wersji skonsolidowanej, a daty z `meta` traktuj jako pierwotne. Data w CELEX-ie wersji
skonsolidowanej to „stan na" konsolidacji, nie data aktu.
3. **Wersja skonsolidowana ma charakter dokumentacyjny** (nie jest tekstem autentycznym) — świetna
do analizy, ale w piśmie urzędowym/sądowym wskaż akt bazowy RAZEM ZE SPROSTOWANIAMI i aktami
zmieniającymi (`odniesienia`). Sam „akt bazowy + zmiany" to tekst niesprostowany. Do
DOSŁOWNEGO cytatu pobierz urzędowy PDF (`tekst … --pdf`) — a przy sprostowaniu także PDF
sprostowania (`tekst <CELEX>R(nn) --pdf …`).
4. **Wszystkie wersje językowe są równorzędnie autentyczne.** Przy wątpliwości interpretacyjnej
porównaj polską z angielską: `tekst <CELEX> --jezyk eng --fragment "art. N"`.
5. **Zawsze podawaj CELEX i ELI** przy cytacie (np. „art. 28 ust. 3 RODO, CELEX 32016R0679",
`meta` zwraca ELI). To pozwala odbiorcy zweryfikować źródło.
6. Baza może nie mieć najświeższych zmian (indeksacja bywa opóźniona) — przy sprawie na konkretną
datę zaznacz w odpowiedzi: „stan wg CELLAR na dzień X — do potwierdzenia".
## Czego ten skill NIE obejmuje
- **orzecznictwa TSUE z uzasadnieniami** (wyroki → curia.europa.eu; CELLAR ma sektor 6, ale tylko
metadane i sentencje — nie analizuj wyroków samym tym skillem),
- **prawa krajowego, w tym polskiej transpozycji dyrektyw** — użyj skilla **prawo-pl-eli**,
- **projektów w toku procesu legislacyjnego** (COM/SEC, prace PE i Rady — inne źródła),
- **wyszukiwarki pełnotekstowej EUR-Lex** (SOAP, wymaga rejestracji — ten skill jej nie używa;
`szukaj` działa po tytułach, frazy w treści szukaj przez `tekst --fragment`).
Jeśli zagadnienie wymaga tych źródeł — powiedz to wprost, nie udawaj, że CELLAR je pokryje.
## Przykładowy przepływ
Pytanie: „czy klauzula powierzenia w tej umowie jest zgodna z art. 28 RODO?" (przykład — stan na
czerwiec 2026):
1. Tabela: RODO = `32016R0679` → `skonsolidowany 32016R0679` → najnowsza wersja `02016R0679-20160504`.
2. `tekst 02016R0679-20160504 --fragment "art. 28"` → pełna treść artykułu po polsku
(+ automatyczne przypomnienie o dokumentacyjnym charakterze wersji skonsolidowanej).
3. Porównaj klauzulę z wymogami art. 28 ust. 3 lit. a–h; przy wątpliwości językowej:
`tekst … --jezyk eng --fragment "art. 28"`.
4. W odpowiedzi: cytat, CELEX, ELI i data stanu prawnego; polska ustawa wdrożeniowa (UODO) →
skill prawo-pl-eli.