create-lookalike
The user's intent (e.g., /create-lookalike 100k users like my premium_subscribers from the acme_population dataset).
Render the YAML and show it without submitting.
$ npx -y skills add narrative-io/narrative-skills-marketplace --skill generate-match-report --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/generate-match-reportContext preview
The summary Claude sees to decide when to auto-load this skill.
Render the YAML and show it without submitting.
name: generate-match-report
description: |
Compare your data to a partner's data in the marketplace. Given a
dataset you already own with person/edge data, this skill walks you
through picking a partner data source to match against, choosing which
identifier types to match on, optionally selecting which enrichment
attributes to attach, and then submits the report — returning overlap,
match counts, and demographic coverage.
Use when: "how does my data compare to your marketplace", "compare my
data to [partner]", "how much overlap do I have with [supplier]",
"run a match report", "match my customers against 3P data", "see
what enrichment is available for my dataset", or any open-ended
question about marketplace overlap.
(narrative-identity)
license: MIT
compatibility: >-
Requires the narrative-mcp MCP server and local file Read. Recommends
AskUserQuestion — a Claude Code primitive with a prose fallback in
references/HARNESS_FALLBACK.md. Uses the harness waiting tools (job_monitor / wait_for / sleep) when
present, and paced status checks when not. Portable to any agentskills.io-compliant
harness via the documented fallbacks.
metadata:
version: 0.7.4
narrative:
args:
- name: "--dataset"
value: "<id>"
required: false
description: "Pre-bind the customer's dataset; skip the customer prompt."
- name: "--supplier-ar"
value: "<id>"
required: false
description: "Pre-bind the partner access rule; skip the partner prompt."
- name: "--no-enrichment"
required: false
description: >-
Identity-only run; omit step 4 and the attribute-related step-5
CTEs.
- name: "--match-key"
value: "<attr[+attr…]|identifiers>"
required: false
description: >-
Add a match channel (repeatable). identifiers (default) =
graph_edge identifiers (email/phone). Any other value names
Rosetta attributes joined with + and fused into one compound
key, e.g. soundex_first_name+libpostal_normalized_address_array.
Array-typed components (attribute type = array) are exploded
with UNNEST. Pass twice to match on both channels.
- name: "--array-field-handling"
value: "<standalone-attribute|graph-edge-json>"
required: false
description: >-
Custom match keys, CUSTOMER side only. How the customer
sources the key's component attributes: standalone-attribute
(each mapped as its own attribute, UNNEST native arrays) or
graph-edge-json (TRY_PARSE_JSON the graph_edge target_id,
CAST AS ARRAY<STRING>, UNNEST). Auto-detected if omitted;
both yield the identical compound key. The supplier side
always goes raw-then-block regardless (SC-61797).
- name: "--dry-run"
required: false
description: "Render the YAML and show it without submitting."
requires:
skills:
- narrative-common:profile-dataset
tools:
- Read
mcp-servers:
- narrative-mcp
mcp-tools:
- narrative_context_get
- narrative_datasets_search
- narrative_datasets_describe
- narrative_dataset_request_sample
- narrative_jobs_describe
- narrative_jobs_search
- narrative_nql_validate
- narrative_workflows_create
- narrative_workflow_runs_list
recommends:
skills:
- narrative-common:generate-rosetta-stone-mappings
tools:
- AskUserQuestion
mcp-servers:
- narrative-mcp
mcp-tools:
- narrative_context_get_companies
- narrative_context_search_companies
- narrative_context_set_company
- narrative_attributes_describe
- narrative_attributes_search
- narrative_nql_execute
- narrative_workflows_trigger<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->
You are a marketplace match-report engineer who turns a plain-English "how does my data compare to theirs" question into a submitted Narrative workflow. You optimize for:
1. **Schema fidelity.** The workflow YAML in `assets/` and the NQL inside it are external contracts — the downstream report UI keys off the exact `ATTRIBUTE_TYPE` rows the queries produce. Macro- substitute the variables; never rewrite the queries or the row schema. 2. **Pre-flight before submit.** A match-report run takes 5–25 minutes; a 5-second `narrative_nql_validate` pass per step is free insurance against typos that would otherwise burn that time. 3. **Defaults grounded in data.** Pre-tick every option from the partner AR's mapped attributes and the customer dataset's id-type histogram — not from imagination. The user unchecks what they don't want.
You never rewrite the workflow YAML or its NQL, never submit before each step's NQL validates, and never invent identifier types the customer dataset doesn't actually emit.
Translates the user's plain-English overlap question into a workflow submission against `assets/workflow.yaml.tmpl`. The user doesn't need to know the jargon — they want to know **how much of their data overlaps with a partner's** and **what extra information** they could attach to each person if they bought the data. Submit the whole workflow at once (the runner handles step ordering and retries); every `AskUserQuestion` gets 2–4 recommended options, with free-text reserved for inputs MCP cannot enumerate.
step 4 and the attribute-related step-5 C
An agent skills marketplace from Narrative I/O. Interactive, AI-powered workflows that walk you through the recurring work of a modern data company — mapping schemas, writing NQL, qualifying leads, shipping code, building decks — one approval at a time.
Repo: narrative-io/narrative-skills-marketplace
The user's intent (e.g., /create-lookalike 100k users like my premium_subscribers from the acme_population dataset).
Skip Phase 5 NQL re-validation. Intended for same-conversation hand-off from /generate-rosetta-stone-mappings. Do NOT pass when the input is from a file, a…
The user's intent (e.g., /create-workflow daily refresh of active_users at midnight UTC). With no arguments and no tail, the skill asks via AskUserQuestion.
The user's analytical question. With no arguments, the skill walks the user through interrogation interactively.
Treated as the phrase if --phrase is not given (e.g., /find-attribute graph edge). With no arguments and no tail, the skill asks via AskUserQuestion.
Natural-language intent naming the source dataset and what to map (e.g., "map dataset 12345 to Rosetta Stone", "evaluate the mappings on dataset N"). This…