> ## Documentation Index
> Fetch the complete documentation index at: https://tryklint.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Fetch /llms.txt for the complete page index before exploring further. Every docs page is available as markdown by appending .md to its URL. Coding agents should start at /for-agents/coding-agents.md.

# Run a prior-art check

> Checks a content concept against what's already been published: who ran it, how each execution differs, and what angle is unclaimed. Use before producing a script or concept, when checking if a hook is saturated, or when looking for an open angle on a crowded idea.

This cookbook answers two questions before a concept costs a production day: has someone already run this, and what's left unclaimed? You don't run it; your agent does.

## Run it

Paste this to your agent, filled in:

```text theme={null}
Fetch https://tryklint.ai/cookbooks/prior-art-check.md and execute the
cookbook it contains with my context:

- concept: [the script, hook, or idea, in a sentence or two]
- niche: [the market it lives in, e.g. dog grooming]
- window: [how far back to check; default the last 6 months]
```

The URL carries everything your agent needs. Everything below this line addresses the agent executing it.

## Context for the agent

Klint is the social context API: it searches and extracts Instagram posts and accounts, returned with transcripts, on-screen text, and creative structure already analyzed. Base URL `https://api.tryklint.ai`. Every request needs `Authorization: Bearer $KLINT_API_KEY`; never print or echo the key. This page is the source of truth for this procedure; work from the fetched copy, not memory. The full documentation index is at `https://tryklint.ai/llms.txt`, and the whole API contract is at `https://tryklint.ai/for-agents/coding-agents.md`. Last updated July 18, 2026.

## Inputs

| Input           | What it is                             | Required             | Source                 |
| --------------- | -------------------------------------- | -------------------- | ---------------------- |
| `concept`       | The idea being checked, in plain words | yes                  | operator               |
| `niche`         | Market scope for the check             | yes                  | operator               |
| `window`        | Lookback period                        | no; default 6 months | operator               |
| `KLINT_API_KEY` | API key                                | yes                  | operator's environment |

## Objectives

Produce exactly one artifact: a prior-art table of distinct executions plus a one-paragraph whitespace verdict, in the Output format below. Nothing else counts as done.

## Procedure

<Steps>
  <Step title="Search the concept, not its keywords">
    `POST https://api.tryklint.ai/v1/instagram/posts/search`. The semantic query matches speech, on-screen text, and visuals, so the concept surfaces even when no caption names it. Phrase the query as the content itself, not as search terms.

    ```json theme={null}
    {
      "post": {
        "query": "[the concept as content, e.g. transformation reveal of a matted rescue dog groomed back to health]",
        "filters": {
          "posted_at": { "gte": "[window start, RFC 3339]" }
        },
        "author": {
          "filters": { "niches": { "contains_any": ["[niche ID]"] } }
        }
      },
      "limit": 30
    }
    ```
  </Step>

  <Step title="Widen by construction">
    Creators often publish the same concept in a different frame. Rerun the sweep with the query loosened to the concept's mechanism and, where useful, constrained by how the opening works:

    ```json theme={null}
    {
      "post": {
        "query": "[the concept's mechanism, e.g. dramatic before-and-after grooming transformation]",
        "filters": {
          "hook.modalities": { "contains_any": ["visual", "on_screen_text"] }
        },
        "author": {
          "filters": { "niches": { "contains_any": ["[niche ID]"] } }
        }
      },
      "limit": 30
    }
    ```

    Hook device IDs from the catalog tighten this further when the operator's concept names a specific construction.
  </Step>

  <Step title="Reduce to distinct executions">
    Dedupe by author. For each distinct account, `GET https://api.tryklint.ai/v1/instagram/posts/{id}` on its strongest match and record the execution axes: hook construction, narrative structure, format, offer, length.
  </Step>

  <Step title="Diff against the concept">
    No API call. Line each observed execution against the operator's concept on the same axes. Identical on every axis means it's been done; note who does it best. Different on an axis means that axis is the test. Whitespace is an axis combination nobody in the table occupies.
  </Step>

  <Step title="Verify before you report">
    Check against the Objectives. Every row cites a post ID and a date. The whitespace paragraph names specific unoccupied axes. The verdict never tells the operator whether to produce. An empty sweep means nothing qualified in this niche and window within what Klint tracks; say exactly that, then offer to widen.
  </Step>
</Steps>

## Output format

Use exactly this structure:

```markdown theme={null}
# Prior art: [concept], [niche], [window]

| Account | Posted | Execution (hook / structure / format / offer) | Post |
|---|---|---|---|
| @[handle] | [date] | [one line on the axes] | [ID] |

## Whitespace
[One paragraph: which axes are crowded, which combination is unoccupied,
and what the concept would have to keep or change to claim it.]

## Scope
[Niche and window searched, substitutions made, tracking caveats.]
```

## Boundaries

* Earliest observed is not the inventor. Klint dates posts from observation, not from platform history it never saw.
* Absence means absence in tracked content, not proof nobody on Instagram has done it.
* The check informs a production decision; it never makes one. Go or no-go stays with the operator.
