
Legalize Es Spanish Legislation
- 821 installs
- 66 repo stars
- Updated July 9, 2026
- aradotso/trending-skills
legalize-es-spanish-legislation is an agent skill that queries, diffs, and tracks 8,600+ Spanish laws stored as version-controlled Markdown for developers researching BOE legislation and regulatory changes.
About
legalize-es-spanish-legislation is an ara.so skill for working with the legalize-es Git repository containing 8,600+ Spanish laws as Markdown files with full Git history of legislative reforms. Agents can search Spanish law, browse BOE legislation, locate articles, compare versions, and track regulatory changes using repository triggers such as query BOE law or compare versions of Spanish law. Developers reach for legalize-es-spanish-legislation when building Spain-compliant products, drafting policy features, or auditing which legal articles changed over time. The skill navigates a legislation corpus rather than generating application payment or frontend UI code.
- Full-text search across 8,600+ Spanish laws using grep
- Exact version diffs with git diff between any two reforms
- Timeline of legislative changes using git log
- Historical state of any law at any past date with git show
- Complete Git history of every legislative reform since 1960
Legalize Es Spanish Legislation by the numbers
- 821 all-time installs (skills.sh)
- +9 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #567 of 3,301 Productivity & Planning skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aradotso/trending-skills --skill legalize-es-spanish-legislationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 821 |
|---|---|
| repo stars | ★ 66 |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 9, 2026 |
| Repository | aradotso/trending-skills ↗ |
How do you search Spanish law in Git?
Instantly query, diff, and track changes across 8,600+ Spanish laws stored as version-controlled Markdown.
Who is it for?
Developers or legal engineers building Spain-facing software who need searchable, versioned BOE legislation in Markdown.
Skip if: Teams outside Spanish regulatory scope or projects needing automated legal advice instead of corpus lookup.
When should I use this skill?
A task requires searching Spanish legislation, BOE articles, regulatory diffs, or tracking reforms in legalize-es.
What you get
Located law articles, version diffs, and reform history from the legalize-es Markdown corpus.
- law article lookup
- legislation version diff
By the numbers
- 8,600+ Spanish laws in the legalize-es repository
Files
Legalize ES — Spanish Legislation Git Repository
Skill by ara.so — Daily 2026 Skills collection.
What It Is
legalize-es is a Git repository containing 8,600+ Spanish laws as Markdown files, with every legislative reform recorded as a Git commit. Each law is a single .md file named by its BOE identifier (e.g. BOE-A-1978-31229.md for the Spanish Constitution). Reform history goes back to 1960.
Key capabilities:
- Full text search across all laws with
grep - Exact diff between any two versions of a law using
git diff - Timeline of all reforms to a specific law using
git log - Historical state of any law at any point in time using
git show/git checkout
---
Setup
# Clone the full repo (includes all history)
git clone https://github.com/legalize-dev/legalize-es.git
cd legalize-es
# Shallow clone if you only need current state (much faster)
git clone --depth 1 https://github.com/legalize-dev/legalize-es.git
cd legalize-esAll law files live in the spain/ directory.
---
File Structure
spain/
├── BOE-A-1978-31229.md # Constitución Española
├── BOE-A-1995-25444.md # Código Penal
├── BOE-A-2015-11430.md # Estatuto de los Trabajadores
├── BOE-A-2000-323.md # Ley de Enjuiciamiento Civil
└── ... (8,600+ laws)YAML Frontmatter
Every file starts with structured metadata:
---
titulo: "Constitución Española"
identificador: "BOE-A-1978-31229"
pais: "es"
rango: "constitucion"
fecha_publicacion: "1978-12-29"
ultima_actualizacion: "2024-02-17"
estado: "vigente"
fuente: "https://www.boe.es/eli/es/c/1978/12/27/(1)"
---`rango` values:
constitucionley-organicaleyreal-decreto-leyreal-decreto-legislativo
`estado` values:
vigente— currently in forcederogado— repealed
---
Key Commands
Find a Law by Topic
# Search law titles in frontmatter
grep -rl "trabajo" spain/ | head -20
# Search for a keyword across all law bodies
grep -rl "huelga" spain/
# Case-insensitive search for a concept
grep -rli "protección de datos" spain/Read a Specific Article
# Find Article 18 of the Constitution
grep -A 20 "Artículo 18" spain/BOE-A-1978-31229.md
# Find an article with context (10 lines before, 30 after)
grep -B 10 -A 30 "Artículo 135" spain/BOE-A-1978-31229.mdFind a Law by Its BOE Identifier
# If you know the BOE ID
cat spain/BOE-A-1995-25444.md
# Search by partial identifier
ls spain/ | grep "BOE-A-1995"Filter by Law Type
# List all Organic Laws
grep -rl 'rango: "ley-organica"' spain/
# List all currently active laws
grep -rl 'estado: "vigente"' spain/
# List all repealed laws
grep -rl 'estado: "derogado"' spain/---
Git History Commands
See All Reforms to a Law
# Full reform history of the Spanish Constitution
git log --oneline -- spain/BOE-A-1978-31229.md
# With dates
git log --format="%h %ad %s" --date=short -- spain/BOE-A-1978-31229.md
# With full commit messages (includes reform source URL)
git log -- spain/BOE-A-1978-31229.mdDiff Between Two Versions
# Diff of a specific reform commit
git show 6660bcf -- spain/BOE-A-1978-31229.md
# Diff between two commits
git diff 6660bcf^..6660bcf -- spain/BOE-A-1978-31229.md
# Diff between two dates
git diff $(git rev-list -1 --before="2011-01-01" HEAD) \
$(git rev-list -1 --before="2012-01-01" HEAD) \
-- spain/BOE-A-1978-31229.mdRead Historical Version of a Law
# State of the Constitution as of 2010-01-01
git show $(git rev-list -1 --before="2010-01-01" HEAD):spain/BOE-A-1978-31229.md
# Check out law at a specific commit (read-only inspection)
git show abc1234:spain/BOE-A-1978-31229.mdFind When a Specific Text Was Added or Removed
# Find which commit introduced "estabilidad presupuestaria"
git log -S "estabilidad presupuestaria" -- spain/BOE-A-1978-31229.md
# Find which commit changed a specific phrase
git log -G "límite de déficit estructural" --oneline -- spain/BOE-A-1978-31229.md---
Programmatic Access Patterns
Shell Script: Extract All Law Titles
#!/bin/bash
# Extract titles and identifiers from all laws
for file in spain/*.md; do
id=$(grep 'identificador:' "$file" | head -1 | sed 's/.*: "//;s/".*//')
title=$(grep 'titulo:' "$file" | head -1 | sed 's/.*: "//;s/".*//')
echo "$id | $title"
doneShell Script: Find Laws Updated After a Date
#!/bin/bash
# Laws updated after 2023-01-01
TARGET_DATE="2023-01-01"
grep -rl "ultima_actualizacion:" spain/ | while read file; do
date=$(grep 'ultima_actualizacion:' "$file" | head -1 | grep -o '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}')
if [[ "$date" > "$TARGET_DATE" ]]; then
echo "$date $file"
fi
done | sort -rPython: Parse Law Frontmatter
import os
import yaml
def parse_law(filepath):
"""Parse a law Markdown file and return frontmatter + body."""
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# Extract YAML frontmatter between --- delimiters
if content.startswith('---'):
parts = content.split('---', 2)
if len(parts) >= 3:
metadata = yaml.safe_load(parts[1])
body = parts[2].strip()
return metadata, body
return {}, content
# Example: list all active laws
laws_dir = 'spain'
active_laws = []
for filename in os.listdir(laws_dir):
if filename.endswith('.md'):
filepath = os.path.join(laws_dir, filename)
meta, body = parse_law(filepath)
if meta.get('estado') == 'vigente':
active_laws.append({
'id': meta.get('identificador'),
'titulo': meta.get('titulo'),
'rango': meta.get('rango'),
'ultima_actualizacion': meta.get('ultima_actualizacion'),
})
# Sort by last update
active_laws.sort(key=lambda x: x['ultima_actualizacion'] or '', reverse=True)
for law in active_laws[:10]:
print(f"{law['ultima_actualizacion']} [{law['rango']}] {law['titulo']}")Python: Get Reform History via Git
import subprocess
import json
def get_reform_history(boe_id):
"""Get all commits that modified a law file."""
filepath = f"spain/{boe_id}.md"
result = subprocess.run(
['git', 'log', '--format=%H|%ad|%s', '--date=short', '--', filepath],
capture_output=True, text=True
)
reforms = []
for line in result.stdout.strip().split('\n'):
if line:
hash_, date, subject = line.split('|', 2)
reforms.append({'hash': hash_, 'date': date, 'subject': subject})
return reforms
# Example usage
history = get_reform_history('BOE-A-1978-31229')
for reform in history:
print(f"{reform['date']} {reform['hash'][:7]} {reform['subject']}")Python: Compare Two Versions of a Law
import subprocess
def diff_law_versions(boe_id, commit_before, commit_after):
"""Get unified diff between two versions of a law."""
filepath = f"spain/{boe_id}.md"
result = subprocess.run(
['git', 'diff', f'{commit_before}..{commit_after}', '--', filepath],
capture_output=True, text=True
)
return result.stdout
def get_law_at_date(boe_id, date_str):
"""Get the text of a law as it was on a given date (YYYY-MM-DD)."""
filepath = f"spain/{boe_id}.md"
# Find the last commit before date
rev = subprocess.run(
['git', 'rev-list', '-1', f'--before={date_str}', 'HEAD'],
capture_output=True, text=True
).stdout.strip()
if not rev:
return None
content = subprocess.run(
['git', 'show', f'{rev}:{filepath}'],
capture_output=True, text=True
).stdout
return content
# Example: see Constitution before and after 2011 reform
old_text = get_law_at_date('BOE-A-1978-31229', '2011-09-26')
new_text = get_law_at_date('BOE-A-1978-31229', '2011-09-28')
print("Pre-reform length:", len(old_text))
print("Post-reform length:", len(new_text))Python: Search Across All Laws
import os
import re
def search_laws(query, laws_dir='spain', rango=None, estado='vigente'):
"""Search for a regex pattern across all laws."""
results = []
pattern = re.compile(query, re.IGNORECASE)
for filename in os.listdir(laws_dir):
if not filename.endswith('.md'):
continue
filepath = os.path.join(laws_dir, filename)
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# Filter by frontmatter fields
if estado and f'estado: "{estado}"' not in content:
continue
if rango and f'rango: "{rango}"' not in content:
continue
matches = list(pattern.finditer(content))
if matches:
titulo_match = re.search(r'titulo: "([^"]+)"', content)
titulo = titulo_match.group(1) if titulo_match else filename
results.append({
'file': filename,
'titulo': titulo,
'match_count': len(matches),
'first_match_context': content[max(0, matches[0].start()-100):matches[0].end()+100]
})
return sorted(results, key=lambda x: x['match_count'], reverse=True)
# Example: find all active organic laws mentioning "privacidad"
hits = search_laws("privacidad", rango="ley-organica")
for h in hits:
print(f"[{h['match_count']} matches] {h['titulo']}")
print(f" Context: ...{h['first_match_context'].strip()[:150]}...")
print()---
Common Workflows
Workflow 1: Research a Legal Topic
# 1. Find relevant laws
grep -rl "protección de datos personales" spain/ > relevant_laws.txt
# 2. Get titles of matching files
while read file; do
grep 'titulo:' "$file" | head -1
done < relevant_laws.txt
# 3. Find the primary law (LOPD/GDPR implementation)
grep -rl 'rango: "ley-organica"' spain/ | xargs grep -l "protección de datos" Workflow 2: Track a Specific Reform
# 1. Find when Article 135 changed (2011 constitutional reform)
git log -S "estabilidad presupuestaria" --oneline -- spain/BOE-A-1978-31229.md
# 2. View the exact changes
git show <commit-hash> -- spain/BOE-A-1978-31229.md
# 3. Read the commit message for official source
git show --format="%B" <commit-hash> | head -10Workflow 3: Export Laws to JSON
import os, yaml, json
laws = []
for fname in os.listdir('spain'):
if not fname.endswith('.md'):
continue
with open(f'spain/{fname}', 'r', encoding='utf-8') as f:
content = f.read()
if content.startswith('---'):
parts = content.split('---', 2)
if len(parts) >= 3:
meta = yaml.safe_load(parts[1])
meta['filename'] = fname
laws.append(meta)
with open('laws_index.json', 'w', encoding='utf-8') as f:
json.dump(laws, f, ensure_ascii=False, indent=2, default=str)
print(f"Exported {len(laws)} laws")---
Troubleshooting
Repo is Too Large to Clone
# Use shallow clone for current state only
git clone --depth 1 https://github.com/legalize-dev/legalize-es.git
# Or clone with limited history
git clone --depth 50 https://github.com/legalize-dev/legalize-es.gitGit Log Shows No History After Shallow Clone
# Fetch more history
git fetch --deepen=100
# Fetch full history
git fetch --unshallowEncoding Issues on Windows
# Force UTF-8 in git
git config core.quotepath false
git config i18n.logoutputencoding utf-8
# In Python, always open files with encoding='utf-8'Finding a Law Without Its BOE ID
# Search by partial title (case-insensitive)
grep -ril "enjuiciamiento civil" spain/ | head -5
# Or search in frontmatter only (faster)
grep -rl "Ley de Enjuiciamiento Civil" spain/---
Data Source & License
- Legislative content: Public domain — sourced from BOE Open Data API
- Repository structure, metadata, tooling: MIT License
- Official source per law: See
fuente:field in each file's frontmatter - Part of: Legalize multi-country project
- Upcoming: Programmatic API at legalize.dev
Related skills
FAQ
How many Spanish laws does legalize-es-spanish-legislation cover?
legalize-es-spanish-legislation works with the legalize-es repository containing 8,600+ Spanish laws stored as Markdown files, each with Git history of legislative reforms.
What tasks can legalize-es-spanish-legislation perform?
legalize-es-spanish-legislation can query, browse, and analyze Spanish legislation, find BOE articles, compare law versions, and track regulatory changes across the Markdown corpus.
Is Legalize Es Spanish Legislation safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.