antiquities-extractor
Extract and structure data from documents about the illegal antiquities trade, including dealers, collectors, artifacts, locations, and relationships. Use when processing news reports, academic articles, legal documents, encyclopedia entries, or research materials pertaining to looted artifacts, antiquities trafficking, provenance research, or cultural heritage crimes. Returns structured JSON with entities (persons, organizations, artifacts, locations) and their relationships.
Best use case
antiquities-extractor is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Extract and structure data from documents about the illegal antiquities trade, including dealers, collectors, artifacts, locations, and relationships. Use when processing news reports, academic articles, legal documents, encyclopedia entries, or research materials pertaining to looted artifacts, antiquities trafficking, provenance research, or cultural heritage crimes. Returns structured JSON with entities (persons, organizations, artifacts, locations) and their relationships.
Teams using antiquities-extractor should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/antiquities-extractor/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How antiquities-extractor Compares
| Feature / Agent | antiquities-extractor | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Extract and structure data from documents about the illegal antiquities trade, including dealers, collectors, artifacts, locations, and relationships. Use when processing news reports, academic articles, legal documents, encyclopedia entries, or research materials pertaining to looted artifacts, antiquities trafficking, provenance research, or cultural heritage crimes. Returns structured JSON with entities (persons, organizations, artifacts, locations) and their relationships.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Antiquities Trade Data Extractor
Extract structured intelligence from documents about the illegal antiquities trade.
## Overview
This skill helps extract and structure information from any document relating to the illicit antiquities trade—including dealers, collectors, looters, auction houses, museums, artifacts, and the networks connecting them. The output is machine-readable JSON suitable for database ingestion, network analysis, and provenance research.
## Core Entity Types
Extract four main entity types, each with a specific canonical ID format:
**PERSON**: Individuals involved in the trade
- Canonical ID: `firstname_lastname` (lowercase, underscores)
- Attributes: role, nationality, birth/death dates, known aliases, specialization
- Roles include: dealer, collector, looter, archaeologist, official, restorer, consultant, auction_house_official
- Specialization: Geographic, temporal, or typological focus (e.g., "South-East Asian antiquities", "Greek pottery", "Egyptian Middle Kingdom artifacts")
**ORGANIZATION**: Institutions and businesses
- Canonical ID: `abbreviated_name` (e.g., `j_paul_getty_museum`, `christie_s`)
- Add `entity_type`: museum, gallery, auction_house, law_enforcement, university, customs, government, restoration_lab
- Attributes: location, founded_date, known_involvement (if any), collection_focus
- Collection_focus: Primary areas of collecting or dealing (e.g., "Pre-Columbian art", "Asian antiquities", "Classical Mediterranean")
**ARTIFACT**: Cultural objects
- Canonical ID: `descriptive_identifier` (e.g., `euphronios_sarpedon_krater`, `egyptian_canopic_jar_louvre_e_14384`)
- Add `object_type`: pottery, sculpture, manuscript, coin, textile, tomb_goods, etc.
- Attributes: origin_location, estimated_date, condition, legal_status (looted, disputed, recovered, etc.), current_location, provenance_notes
**LOCATION**: Geographic places where artifacts were looted, found, traded, or stored
- Canonical ID: `place_name_geography` (e.g., `geneva_freeport`, `el_minya_egypt`, `tomb_kv62_valley_of_kings`)
- Add `location_type`: excavation_site, freeport, dealer_location, museum, auction_house, country, region
- Attributes: significance (why mentioned), archaeological_importance
## Relationship Types
Identify connections between entities with these relation types:
- `looted_from`: ARTIFACT ← PERSON/ORGANIZATION, or ARTIFACT ← LOCATION
- `sold_to`: PERSON/ORGANIZATION → PERSON/ORGANIZATION (with date and artifact details)
- `handled_by`: ARTIFACT → PERSON/ORGANIZATION (dealer, restorer, auctioneer, etc.)
- `located_in`: ARTIFACT/ORGANIZATION → LOCATION
- `employed_by`: PERSON → ORGANIZATION
- `collaborated_with`: PERSON → PERSON (dealers working together)
- `recovered_by`: ARTIFACT ← PERSON/ORGANIZATION (law enforcement, customs)
- `displayed_at`: ARTIFACT → ORGANIZATION (museum exhibition)
- `authenticated_by`: ARTIFACT → PERSON (expert who verified provenance)
- `repatriated_to`: ARTIFACT → ORGANIZATION/LOCATION (return to origin)
- `specialized_in`: PERSON/ORGANIZATION → SPECIALIZATION_AREA (geographic region, time period, or object type)
## Extraction Workflow
1. **Read thoroughly** for context about each entity before extracting
2. **Identify entities** by their mention in the text (not just what's explicitly stated)
3. **Create canonical IDs** using the format guidelines—consistency is critical for later linking
4. **Collect mentions** (all text variants: "Medici", "Giacomo Medici", "the dealer Medici")
5. **Record attributes** from context clues, dates, roles, descriptions
6. **Find relationships** by looking for verbs and actions: sold, looted, handled, recovered, authenticated, employed
7. **Include dates** in relationship attributes whenever available
8. **Note uncertainty** in attributes or mention uncertain relationships only if strongly indicated
## Key Extraction Principles
- **Canonicalize consistently**: Use the same canonical_id every time a person/organization is mentioned, even if the text uses different forms
- **Be precise with roles**: A person may have multiple roles (dealer AND collector); include both if supported by the text
- **Capture specializations**: When text indicates a person or organization's area of focus, extract it as `specialization` or `collection_focus`. Look for patterns like:
- "X collected [geographic/temporal/type] antiquities"
- "dealer specializing in [area]"
- "museum's collection of [area]"
- "expert in [area]"
- **Include context**: Relationship attributes should capture what, when, and how (e.g., `artifact: "Euphronios krater"`, `date: "1967"`, `context: "sold at Sotheby's London"`)
- **Preserve ambiguity**: If a relationship is implied but not explicit, note it only if the text strongly suggests it
- **Track locations**: Every artifact should have provenance history (looted from, sold in, recovered from)
- **Capture aliases**: Some dealers used multiple names; list known aliases in the `mentions` array
## Specialization Extraction Patterns
Look for these language patterns when extracting areas of interest:
**Geographic focus:**
- "collected [region] antiquities" → South-East Asian, Egyptian, Roman, etc.
- "dealer in [region] art"
- "specialized in objects from [location]"
**Temporal focus:**
- "specialist in [period] artifacts" → Bronze Age, Tang Dynasty, Classical Period
- "[era] expert"
**Typological focus:**
- "focused on [object type]" → pottery, sculpture, coins, textiles
- "dealt primarily in [category]"
**Multiple specializations:**
- Extract all mentioned areas as an array
- Prioritize primary specialization if explicitly stated
## Reference Materials
See `references/extraction-schema.md` for complete JSON schema specification and examples.
See `references/entity-patterns.md` for common language patterns and clues that signal different entity types and relationships.
See `references/known-figures.md` for reference profiles of historically significant dealers and collectors (for disambiguation and attribute enrichment).
## Output Format
Always return valid JSON with this structure:
```json
{
"entities": [
{
"canonical_id": "string",
"type": "PERSON|ORGANIZATION|ARTIFACT|LOCATION",
"full_name": "string (required for PERSON, optional for others)",
"mentions": ["array", "of", "text", "mentions"],
"attributes": {
"role": "string or array (PERSON)",
"nationality": "string (PERSON)",
"birth_date": "YYYY (PERSON)",
"death_date": "YYYY (PERSON)",
"known_aliases": ["array (PERSON)"],
"specialization": "string or array of geographic, temporal, or typological focus (PERSON)",
"entity_type": "museum|gallery|auction_house|law_enforcement|university|customs|government|restoration_lab (ORGANIZATION)",
"location": "string (ORGANIZATION)",
"founded_date": "YYYY (ORGANIZATION)",
"known_involvement": "string (ORGANIZATION)",
"collection_focus": "string or array of primary collecting areas (ORGANIZATION)",
"object_type": "pottery|sculpture|manuscript|coin|textile|tomb_goods|etc (ARTIFACT)",
"origin_location": "string (ARTIFACT)",
"estimated_date": "string (ARTIFACT)",
"condition": "string (ARTIFACT)",
"legal_status": "looted|disputed|recovered|legitimate|unknown (ARTIFACT)",
"current_location": "string (ARTIFACT)",
"provenance_notes": "string (ARTIFACT)",
"location_type": "excavation_site|freeport|dealer_location|museum|auction_house|country|region (LOCATION)",
"country": "string (LOCATION)",
"significance": "string (LOCATION)",
"archaeological_importance": "string (LOCATION)"
}
}
],
"relationships": [
{
"source_id": "canonical_id",
"target_id": "canonical_id",
"relation_type": "looted_from|sold_to|handled_by|located_in|employed_by|collaborated_with|recovered_by|displayed_at|authenticated_by|repatriated_to|specialized_in",
"attributes": {
"date": "YYYY or YYYY-MM-DD if known",
"artifact": "artifact name or canonical_id",
"context": "brief description if needed",
"source_text": "optional direct quote or page reference"
}
}
],
"metadata": {
"source_document": "title or reference",
"extraction_notes": "any ambiguities, missing information, or uncertainties"
}
}
```
## Validation Guidelines
When extracting specializations, ensure they are:
- **Specific enough to be meaningful** - not just "antiquities" but "Egyptian New Kingdom antiquities"
- **Consistent in terminology** across entities - standardize geographic and temporal terms
- **Supported by explicit or strongly implied text evidence** - don't infer specialization without textual basis
- **Formatted as arrays** when multiple specializations exist
- **Distinguished from roles** - "dealer" is a role, "Greek pottery dealer" has role AND specialization
Always validate that:
- All `source_id` and `target_id` values in relationships correspond to actual entities in the entities array
- Use underscores, not spaces
- Specializations use consistent terminology (create a controlled vocabulary as you extract)
- Multiple specializations are captured when a person/organization worked across areasRelated Skills
resume-extractor
Extract and categorize yearly career data into structured components (what_i_did, my_thoughts, performance). Use when processing raw yearly markdown files into organized sections.
email-extractor
Expert in email content extraction and analysis. **Use whenever the user mentions .eml files, email messages, says "Extract email information", "Using the email information", or requests to extract, parse, analyze, or process email files.** Handles email thread parsing, attachment extraction, and converting emails to structured markdown format for AI processing. (project, gitignored)
article-extractor
Extract clean article content from URLs (blog posts, articles, tutorials) and save as readable text. Use when user wants to download, extract, or save an article/blog post from a URL without ads, navigation, or clutter.
bgo
Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.
web-design-guidelines
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
voxanne-branding-expert
Strategic branding, business development, and UI/UX design expertise for Voxanne AI. Combines business strategy, visual design principles, and market positioning to create enterprise-grade branding assets and go-to-market strategies. Use when designing logos, creating brand guidelines, developing marketing strategies, or positioning products against competitors like ChatGPT, Anthropic, and Google.
vibe-techdesign
Create a Technical Design Document for your MVP. Use when the user wants to plan architecture, choose tech stack, or says "plan technical design", "choose tech stack", or "how should I build this".
vapor-ui
Vapor UI design system component and icon guide, UI mockup generator, and Figma design converter. Provides component catalog, icon lookup, usage patterns, props documentation, and converts Figma designs to production-ready vapor-ui code. Use when user asks "vapor-ui components", "vapor-ui icons", "아이콘 찾기", "vapor-ui 사용법", "vapor-ui를 사용해서 시안 구현", "convert figma", "figma to code", "implement design from figma", provides a Figma URL, or mentions specific components like "Button", "Input", "Modal".
ux-visualizer
Analyzes source code or requirements to generate high-fidelity screen and state transition diagrams. Specialized in SPA state mapping.
ux-ui-exp
UI/UX design intelligence with Bootstrap 5, Font Awesome, SweetAlert2. Use: /ux-ui-exp {command}
ux-spec-author
Converts UX/design intent into testable design specifications that feed requirements. Use when defining user flows, accessibility, or design constraints.
ux-expert-dialogue
Runs interactive expert review sessions where a senior UX composite persona (Nielsen, Krug, Kahneman, Cialdini, Ilincev) challenges decisions, provides direct critique with data-backed reasoning, and brainstorms alternatives section-by-section. Use when creating a new website/landing page and need expert challenge, want section-by-section review with quantified impact estimates, need an opponent who questions assumptions, brainstorming design alternatives, or preparing for major redesign or launch. Trigger phrases include "expert review", "critique my design", "challenge my assumptions", "section-by-section review". NOT for quick fixes with known solutions (use ux-optimization), implementing proven patterns directly, or when you want agreement rather than challenge.