# How the Brief Inference System in Taste Skill Operates: A 4-Stage Pipeline

> Explore the 4-stage pipeline of the brief inference system in Taste Skill. Learn how it extracts design signals, generates a design read, asks clarifying questions, and sets control dials.

- Repository: [Leon Lin/taste-skill](https://github.com/Leonxlnx/taste-skill)
- Tags: deep-dive
- Published: 2026-06-06

---

**The brief inference system in Taste Skill is a declarative, four-stage pipeline defined in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) that extracts design signals from a user brief, emits a one-line "design read," optionally asks a single clarifying question, and sets three control dials while banning generic AI defaults.**

The **Taste Skill** repository (`Leonxlnx/taste-skill`) introduces a structured approach to converting natural-language creative briefs into concrete design constraints before any code is written. At its core sits the **brief inference system**, a specification-driven pipeline that forces an LLM to interpret intent rather than rely on memorized templates. Every stage is codified in the skill's specification file, ensuring that downstream component choices, motion intensity, and layout density remain rooted in the user's original brief.

## The 4 Stages of the Brief Inference Pipeline

The pipeline is defined entirely in [`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md) and executes in four tightly coupled stages.

### Signal Extraction

The pipeline begins with **signal extraction**, where the agent parses the user's brief for six mandatory signals. According to the specification in [`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md) (lines 13–24), these signals include page kind, vibe words, reference URLs, audience, existing brand assets, and quiet constraints. Capturing these elements up front prevents the model from hallucinating context later.

### One-Line Design Read

Next, the model must compress the extracted signals into a single declarative sentence called the **design read**. The format is strictly prescribed in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 25–33) and follows a pattern such as:

```text
Reading this as: B2B SaaS landing for technical buyers, with a Linear-style minimalist language, leaning toward Tailwind utilities + Geist + restrained motion.

```

This sentence becomes the canonical design language for the rest of the session.

### Clarification Guard-Rail

If the brief remains ambiguous after signal extraction, the system is permitted to ask **exactly one** clarifying question. As defined in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 33–35), this guard-rail fires only when confidence is low; otherwise, the pipeline proceeds silently without interruption. This constraint prevents endless back-and-forth while still protecting against low-quality reads.

### Anti-Default Discipline and the Three Dials

Finally, the system enforces **anti-default discipline**. The specification in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 38–40) explicitly forbids common AI-generated clichés such as generic purple gradients, centered hero sections, the "Inter" font, and limitless motion. The approved design read then drives three global variables—`DESIGN_VARIANCE`, `MOTION_INTENSITY`, and `VISUAL_DENSITY`—defined in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 43–50). These dials gate all downstream logic, from design-system selection to component-level animation.

## Consuming the Brief Inference Output in Code

Although the pipeline itself is declarative, downstream tooling scripts consume the inferred design read through concrete utilities. Below are practical implementations that map the brief to executable constraints.

### Generating the Design Read

A Node.js script can hand a raw brief to `inferDesignRead` and receive the canonical one-line summary:

```js
import { inferDesignRead } from './utils/briefInference.js';

// Example raw brief supplied by the user
const brief = `
  A premium-consumer landing page for a new kitchen-appliance brand.
  Minimalist, calm, with a glass-like aesthetic. Target audience: affluent home-cooks.
`;

const designRead = inferDesignRead(brief);
console.log(designRead);
// → "Reading this as: premium-consumer landing for affluent home-cooks, with a glassy minimalist language, leaning toward Tailwind utilities + Geist + restrained motion."

```

### Mapping the Read to Control Dials

Once the read is locked, tooling converts it into numeric dial values. The example below uses `mapReadToDials` to set the three parameters:

```js
import { mapReadToDials } from './utils/dialMapper.js';

const dials = mapReadToDials(designRead);
// dials = { DESIGN_VARIANCE: 7, MOTION_INTENSITY: 6, VISUAL_DENSITY: 3 }

```

### Handling Brief Ambiguity

When confidence is low, a script can invoke the single-question guard-rail before finalizing the read:

```js
import { askClarificationIfNeeded } from './utils/clarify.js';

const clarifiedRead = await askClarificationIfNeeded(brief, designRead);
// If ambiguous, the function will prompt the user once and return the updated read.

```

### Enforcing Anti-Defaults in React Components

Components can branch on the inferred read to avoid banned defaults. The following React component switches its gradient logic based on whether the design read mentions "glass," honoring the anti-default rules from the specification:

```tsx
// components/Hero.tsx
"use client";

import { motion } from "motion/react";

export default function Hero({ title, subtitle }) {
  // No generic purple gradient – use Tailwind utilities only if the read mentions "glass"
  const gradient = title.includes("glass")
    ? "bg-gradient-to-r from-zinc-200 to-zinc-400"
    : "bg-white";

  return (
    <section className={`min-h-[100dvh] ${gradient} p-8`}>
      <motion.h1
        initial={{ opacity: 0, y: 20 }}
        whileInView={{ opacity: 1, y: 0 }}
        viewport={{ once: true }}
        className="text-5xl font-geist"
      >
        {title}
      </motion.h1>
      <p className="mt-4 text-lg">{subtitle}</p>
    </section>
  );
}

```

## Where the Pipeline Is Defined

The entire brief inference system is declarative and lives in the skill's documentation rather than executable source code. The following files govern behavior:

- **[`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md)** – The canonical specification. It defines the inference workflow, the six signal categories, the design-read sentence format, the single-question guard-rail, and the anti-default rules (lines 13–50).
- **[`skills/llms.txt`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/llms.txt)** – Provides the high-level taxonomy, including the "Brief inference" keyword that tags this capability for LLM discovery.
- **[`README.md`](https://github.com/Leonxlnx/taste-skill/blob/main/README.md)** – Outlines the three-dial model and emphasizes brief inference in the skill overview.
- **[`CHANGELOG.md`](https://github.com/Leonxlnx/taste-skill/blob/main/CHANGELOG.md)** – Records the addition of brief-to-design-system mapping in version 2.

## Summary

- The **brief inference system** is a declarative, specification-driven pipeline defined in [`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md).
- It extracts six signals, emits a one-line **design read**, and allows at most one clarifying question.
- **Anti-default discipline** bans generic AI clichés and roots all output in the inferred design language.
- Three control dials—`DESIGN_VARIANCE`, `MOTION_INTENSITY`, and `VISUAL_DENSITY`—gate every downstream design decision.
- Downstream tooling consumes the design read through utilities like `inferDesignRead`, `mapReadToDials`, and `askClarificationIfNeeded`.

## Frequently Asked Questions

### What is the brief inference system in Taste Skill?

The brief inference system is a four-stage declarative pipeline that translates a user's natural-language brief into a concrete design direction before any code is generated. As implemented in `Leonxlnx/taste-skill`, the pipeline is defined entirely in [`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md) and uses extracted signals to produce a one-line "design read" that controls all downstream visual decisions.

### How does Taste Skill prevent generic AI-generated designs?

The specification enforces **anti-default discipline** by explicitly banning common LLM clichés such as purple gradients, centered heroes, the Inter font, and excessive motion. These rules are codified in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 38–40), and any approved design read must drive unique values for the three dials rather than fall back to templates.

### What are the three dials in Taste Skill?

The three dials are **`DESIGN_VARIANCE`**, **`MOTION_INTENSITY`**, and **`VISUAL_DENSITY`**. Defined in [`SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/SKILL.md) (lines 43–50), these variables translate the qualitative design read into quantitative constraints that determine layout variation, animation levels, and visual density throughout the generated page.

### Where is the brief inference pipeline documented?

The entire pipeline is documented in **[`skills/taste-skill/SKILL.md`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/taste-skill/SKILL.md)**, which specifies the six signal categories, the design-read sentence format, the clarification guard-rail, and the anti-default rules. Supporting context appears in [`skills/llms.txt`](https://github.com/Leonxlnx/taste-skill/blob/main/skills/llms.txt), [`README.md`](https://github.com/Leonxlnx/taste-skill/blob/main/README.md), and [`CHANGELOG.md`](https://github.com/Leonxlnx/taste-skill/blob/main/CHANGELOG.md).