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
811 skills
Install
$ npx -y skills add narrative-io/narrative-skills-marketplace --skill find-attribute --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/find-attribute

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

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.4
  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
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.

Get the whole plugin
Stats
8
Stars
0
Forks
Active
Maintenance
Go Template
Language
MIT
License
18h ago
Last commit
3mo ago
Created

Repo: narrative-io/narrative-skills-marketplace