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

# Prompt sets

> How curated prompt sets form the measurement instrument for answer-engine visibility.

A prompt set is the list of questions the platform sends to answer engines. It is the measurement instrument. Changing the prompts changes what gets measured.

## Why a curated prompt set

A raw list of every query a brand ranks for is not a useful measurement instrument. It is dominated by branded navigation queries, long-tail noise, and queries that no LLM user would type. The platform curates:

* For question-shape: queries that look like natural language questions
* For intent coverage: prompts that span the six registered intents
* For demand: queries with real search volume from GSC
* For bias: prompts that do not lead, favour, or name the tracked brand

The result is a prompt set where each question tests a specific visibility dimension.

## The six intents

Every prompt carries one intent label. The intents are defined in `src/geo/prompts/__init__.py`:

| Intent             | What it tests                                 | Example shape                            |
| ------------------ | --------------------------------------------- | ---------------------------------------- |
| `discovery`        | Explore a category or set of options          | "What are the best tools for..."         |
| `problem_solution` | Find an answer to a stated problem            | "How do I fix \[problem]?"               |
| `use_case`         | Find a product for a specific situation       | "What works for \[specific scenario]?"   |
| `comparison`       | Compare named options or ask for alternatives | "How does X compare to Y?"               |
| `expert`           | Specialist guidance or evaluation criteria    | "What should I look for in \[category]?" |
| `brand_research`   | Research the tracked brand directly           | "Is \[brand] good for \[use case]?"      |

The `comparison` intent allows competitor names (the tracked brand is still forbidden). The `brand_research` intent is the only one that requires the tracked brand name — this is the intent for branded reputation measurement.

## What quotas mean

A quota is the target number of prompts per intent. The prompt generator produces candidates per intent, scores them by demand and importance, and selects the best candidates up to the quota. Quotas are set per workspace and vary with the prompt set size.

Quotas prevent any single intent from dominating the set. A prompt set with 80% `discovery` prompts would under-represent comparison and problem-solution visibility, which are often where brand mentions cluster.

## How prompts are seeded from GSC

The seed pipeline (`src/geo/prompts/seed.py`) reads GSC queries, filters for question-shaped text, deduplicates, and ranks by impressions. Seeds are tagged by source:

* `brand_seed`: the query matched the brand's regex
* `gsc`: organic query that did not match the brand
* `brain`: from the workspace's ICP research artifacts

High-impression seeds produce higher demand scores. A `discovery` prompt seeded from a 10,000-impression query carries more weight than one from a 50-impression query.

## Generation and discrimination

The generator (`src/geo/prompts/generate.py`) takes seeds, intent templates, and the workspace ICP description, and calls an LLM (Claude Sonnet 5 via OpenRouter) to produce candidate prompts.

Each candidate passes through discrimination (`src/geo/prompts/discriminate.py`):

* **Deterministic checks.** Rejects prompts that name the tracked brand (except `brand_research`), use leading language, or contain prohibited terms.
* **Model-assisted critic.** A second LLM evaluates the candidate for bias, leading questions, and unnatural phrasing.
* **Deduplication.** Semantic clustering prevents near-duplicate prompts.

The discrimination step exists because LLM-generated prompts inherit the generating model's biases. A prompt that subtly favours a category or vendor would produce misleading visibility data. The critic rejects those.

Accepted candidates retain lineage — the job, provider, and seed references that produced them. Rejected candidates are stored for inspection.

## Why prompts are not hand-written

Hand-written prompt sets have three problems:

* **Scale.** A useful measurement instrument needs hundreds of prompts across all intents and categories. Hand-writing that many is expensive and slow.
* **Bias.** A human writing prompts naturally includes known brands and preferred categories. This inflates visibility for familiar brands and deflates it for unknowns.
* **Freshness.** Search demand changes. A hand-written set from three months ago misses new queries.

The generated, discriminated pipeline produces prompt sets that are larger, more neutral, and more current than hand-written alternatives. The trade-off is that prompt generation consumes provider credits and requires completed research artifacts.

## Prompt lifecycle

Prompts have a lifecycle state: active, archived, or rejected. Active prompts enter measurement runs. Archived prompts retain history but are not sent. Archive state is managed in the web UI.

Regeneration does not overwrite user-authored prompts. Only generated prompts are replaced.

See [Prompts](/prompts) for the management interface and [Runs](/runs) for how prompts enter a measurement.
