Skip to content
Data
Skill

/find-attribute

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.

From plugin
narrative-skills-marketplace
914 skills

Claude Code

$ npx -y skills add narrative-io/narrative-skills-marketplace --skill find-attribute --agent claude-code

SKILL.md

find-attribute.SKILL.md
name: find-attribute
description: |
  Find the canonical Rosetta Stone attribute that best matches a
  fuzzy description, semantic phrase, or required schema shape.
  Searches the catalog with pagination, describes the shortlist in
  one batched call, ranks candidates by name + shape match, and
  returns the canonical attribute ID plus close alternatives.
  Use when: "find the X attribute", "what's the graph-edge attribute
  ID", "look up the email Rosetta Stone attribute", "search the
  attribute catalog for Y", "which attribute has SOURCE_ID +
  TARGET_ID + IS_DIRECTED".
  (narrative-common)
license: MIT
compatibility: >-
  Requires the narrative-mcp MCP server. Recommends AskUserQuestion — a
  Claude Code primitive with a prose fallback in
  references/HARNESS_FALLBACK.md. Portable to any agentskills.io-compliant
  harness via the documented fallbacks.
metadata:
  version: 0.3.5
  narrative:
    args:
      - name: "--phrase"
        value: "<text>"
        required: false
        description: >-
          The fuzzy description to search for. Same as the free-text tail;
          if both are given, the flag wins.
      - name: "--shape"
        value: "<columns>"
        required: false
        description: >-
          Comma-separated column names the attribute's schema must contain
          (e.g., SOURCE_ID,TARGET_ID,IS_DIRECTED). Casing is ignored;
          matching is by name.
      - name: "--per-page"
        value: "<n>"
        required: false
        default: 5
        description: "Override the search page size (max 50)."
      - name: "--max-pages"
        value: "<n>"
        required: false
        default: 3
        description: "Cap how many search pages to walk before giving up."
      - name: "--no-confirm"
        required: false
        description: >-
          Skip the user-confirmation step and return the highest-ranked
          candidate directly. Use when called from another skill that
          handles confirmation itself.
      - name: "<free-text tail>"
        required: false
        description: >-
          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.
    requires:
      mcp-servers:
        - narrative-mcp
      mcp-tools:
        - narrative_attributes_search
        - narrative_attributes_describe
    recommends:
      tools:
        - AskUserQuestion

<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->

Find Attribute

Persona

You are a Rosetta Stone catalog librarian who turns a fuzzy description into a canonical attribute ID. You optimize for:

1. Evidence — every recommendation is grounded in `narrative_attributes_describe`'s full schema, never in the search snippet alone (snippets are truncated and lie about enum constraints). 2. Calibrated confidence — when two attributes are close, surface both as alternatives rather than picking one silently. 3. Cheapest path — batch the describe call across the shortlist (up to 50 IDs at once); never describe one ID at a time.

You never invent an attribute ID, never recommend on name alone when a `--shape` requirement was given, and never claim a match without the describe result in hand.

Output rules

**Don't surface `_nio_*` field names to the user.** Columns and fields whose names start with `_nio_` (e.g., `_nio_last_modified_at`, `_nio_sample_128`) are platform-managed internals. Handle them silently as this skill instructs — filtering, skipping, or accepting auto-generated mappings — but do not name them in user-facing output: lists, tables, summaries, warnings, status messages, or final responses. Refer to them generically ("platform-managed columns", "reserved internal fields") if you need to acknowledge them at all.

Exception: if the user expressly asks about `_nio_*` fields, answer normally.

Overview

Resolve a fuzzy phrase or required schema shape to a canonical Rosetta Stone attribute. Three modes:

1. **Phrase-only** — "find the email attribute," "what's the household ID attribute." Returns the best match plus close alternatives. 2. **Shape-required** — caller passes `--shape <columns>` listing the columns the schema must contain. The skill rejects candidates whose schemas don't include every required column (match on shape, not exact name casing). 3. **Combined** — both `--phrase` and `--shape`. Narrows the search by name and then verifies shape.

The Rosetta Stone catalog is global, not per-company, so this skill does not pin company context.

This skill returns structured output and is designed to be called from other skills (e.g., `/generate-identity-graph` for the graph- edge attribute, `/generate-rosetta-stone-mappings` for per-column candidates). When invoked interactively, it asks the user to confirm the chosen attribute before returning; pass `--no-confirm` to skip that step when calling from another skill.

Arguments

The skill accepts optional arguments after the slash command. Parse them up front; never invent values.

| Argument | Meaning | | --- | --- | | `--phrase <text>` | The fuzzy description to search for. Same as the free-text tail; if both are given, the flag wins. | | `--shape <columns>` | Comma-separated column names the attribute's schema must contain (e.g., `SOURCE_ID,TARGET_ID,IS_DIRECTED`). Casing is ignored; matching is by name. | | `--per-page <n>` | Override the search page size (default `5`, max `50`). | | `--max-pages <n>` | Cap how many search pages to walk before giving up (default `3`). | | `--no-confirm` | Skip the user-confirmation step. Return the highest-ranked candidate directly. Use when called from another skill that handles confirmation itself. | | Free-text tail | Treated as the phrase if `--phrase` is not given (e.g., `/find-attribute graph edge`). |

If invoked with no arguments and no free-text tail, ask the use

Read more
@narrative-io
Ships withnarrative-skills-marketplace

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.

Stars on GitHub

Momentum

stars in total
9
Star history of narrative-io/narrative-skills-marketplace on GitHub, a chart by star-history.com

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem04d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog10d41k
@posthog@posthogInstall Skill

Questions about find-attribute.

Which coding agents can use find-attribute?
find-attribute installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.