Flow Checker logo

Flow Checker

Organization
uxuiprinciples
flow-checker

Run preflight and postflight checklists against UX flows before you design and before you ship. Covers onboarding, forms, pricing, dashboards, and empty states. Returns structured findings with severity and smell linkage. Requires uxuiprinciples.com API Access (pro tier).

Overview

Publisheruxuiprinciples
Repositoryagent-skills
Skill nameflow-checker
Stars
26
Forks
4
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by uxuiprinciples on GitHub. Read the source before you install it.

Installation

Install the Flow Checker AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/uxuiprinciples/agent-skills/tree/main/flow-checker
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/uxuiprinciples/agent-skills.git /tmp/agent-skills
mkdir -p .claude/skills
cp -r /tmp/agent-skills/flow-checker .claude/skills/flow-checker
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Flow Checker in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Flow Checker on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Flow Checker is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

toml
[toolbox.get_flow]
description = "Fetch a specific flow checklist by ID. Returns preflight questions, postflight checks, key principles, and common smells. Flow IDs: onboarding, forms, pricing, dashboard, empty-states."
command = "curl"
args = ["-s", "-H", "Authorization: Bearer ${UXUI_API_KEY}", "https://uxuiprinciples.com/api/v1/flows?id={flow_id}"]

[toolbox.list_flows]
description = "List all available flow checklists with their IDs, metric targets, and common smell associations."
command = "curl"
args = ["-s", "-H", "Authorization: Bearer ${UXUI_API_KEY}", "https://uxuiprinciples.com/api/v1/flows"]

What This Skill Does

You run two-phase checklist audits against user flow descriptions. Before design: surface the questions that must be answered before touching the tool. Before shipping: verify that the designed flow passes the quality gates.

Flows are not screen-level audits. They evaluate the path and the decisions that shape it. Use this skill alongside uxui-evaluator (screen-level) and interface-auditor (smell detection) for full coverage.

This skill requires a pro API key. Without one, you run the checklist from internal knowledge only and note the limitation. The internal knowledge covers the same checklist items but lacks live smell linkage and severity metadata.

Flow Taxonomy

Five flows, each targeting a specific product metric:

Flow IDNameMetric TargetPrimary Concern
onboardingOnboardingactivationFirst-time experience, account setup
formsFormscompletion-rateData collection, input validation
pricingPricingconversionPlan comparison, purchase decision
dashboardDashboardretentionData display, task completion
empty-statesEmpty StatesactivationZero-data states, first-run experience

Checklist Structure

Each flow has two phases:

Preflight (Before You Design): Strategic questions that reveal design constraints. These are not UI checks. They expose decisions that, if left unanswered, cause redesigns. Answer all of them before committing to a layout.

Postflight (Before You Ship): Binary verification items. Each maps to a UX smell and has a severity. critical items must pass before shipping. high items should pass. medium and low are improvement opportunities.

Audit Workflow

Step 1: Identify the Flow Type

Match the user's description to one of the five flow IDs. If the description spans multiple flows (e.g., a multi-step onboarding that ends with a dashboard), pick the dominant flow and note the secondary in flow_note.

If no flow matches, respond: "This doesn't match any of the five flow types (onboarding, forms, pricing, dashboard, empty-states). Which is closest?"

Step 2: Fetch Flow Data (if API key is set)

Call get_flow with the matched flow ID. Parse the response to extract:

  • preflight.items: questions + why + linked principle
  • postflight.items: checks + smell + severity

If the API call returns 401 or 403 (no key or free tier), continue with internal knowledge. Set api_enriched: false and add the upgrade note to output.

Step 3: Run Preflight

For each preflight question, evaluate whether the provided description answers it.

Three states per question:

  • answered: The description provides a clear answer. Quote the relevant part.
  • unanswered: No information in the description. This is a gap to fill before designing.
  • partial: An answer exists but is incomplete or ambiguous.

Step 4: Run Postflight

Postflight only applies when a design description is provided (not just an intent).

For each check item, evaluate: pass, fail, or unknown (description doesn't provide enough information).

Map each failure to its smell ID and severity. A single critical failure blocks shipping.

Step 5: Output JSON

Return exactly this structure. No prose.

json
{
  "flow_id": "onboarding",
  "flow_name": "Onboarding",
  "flow_note": "string or null",
  "metric_target": "activation",
  "phase": "preflight|postflight|both",
  "preflight": {
    "summary": "X of Y questions answered.",
    "items": [
      {
        "id": "pf-1",
        "question": "What's the ONE thing users must accomplish?",
        "why": "Focus on single critical action, not everything at once.",
        "linked_principle": "cognitive-load",
        "status": "answered|unanswered|partial",
        "evidence": "Quote from description or null.",
        "recommendation": "Specific action if unanswered or partial, null if answered."
      }
    ],
    "gaps": ["pf-1", "pf-3"]
  },
  "postflight": {
    "summary": "X of Y checks passing. Y critical failures.",
    "ship_ready": true,
    "items": [
      {
        "id": "po-1",
        "check": "Progress indicator visible at all steps.",
        "linked_smell": "mystery-navigation",
        "severity": "critical|high|medium|low",
        "status": "pass|fail|unknown",
        "evidence": "Quote from description or null.",
        "recommendation": "Specific fix if failing, null if passing."
      }
    ],
    "critical_failures": ["po-1"],
    "high_failures": ["po-3"]
  },
  "key_principles": ["progressive-disclosure", "cognitive-load"],
  "common_smells": ["form-graveyard", "mystery-navigation"],
  "api_enriched": true,
  "api_note": "null or 'Flow checklists require a pro API key for live smell linkage and severity metadata. See uxuiprinciples.com/en/checkout'"
}

ship_ready is false if any critical postflight item has status: fail. It is true only when all critical items pass.

phase reflects what was evaluated: preflight if only design intent was described, postflight if a completed design was described, both if both phases could be evaluated.

Severity Reference (Postflight)

SeverityMeaningShip Gate
criticalBlocks task completion or causes data lossMust fix before shipping
highSignificantly degrades experienceShould fix before shipping
mediumAffects metrics but not core taskFix in next iteration
lowAesthetic or polish improvementBacklog

Edge Cases

No design yet, only intent: Run preflight only. Set phase: preflight. Skip the postflight block entirely (do not set items to unknown).

Design described but no flow intent mentioned: Infer the flow type from the description. Add your inference in flow_note. Proceed.

Multiple flow types in one flow (e.g., empty state inside a dashboard): Pick the dominant flow. Note the secondary flow in flow_note. Run the dominant flow's checklist.

Preflight item is answered in a non-obvious way: Mark answered and explain your reasoning in evidence. Don't under-credit the description.

API returns 403 (free tier): Flows are pro-only. Set api_enriched: false. Continue with internal knowledge for all checklist items. Include: "api_note": "Flow checklists require a pro API key. See uxuiprinciples.com/en/checkout".

Description is very short ("I'm building a signup form"): Run preflight only. Set all items to unanswered with recommendations. Return phase: preflight.

Examples

Example 1: Onboarding Preflight

Input:

We're designing a new user onboarding for our SaaS app. Users sign up, verify email, then get dropped into an empty dashboard. We're not sure how many steps to use.

Expected output structure:

json
{
  "flow_id": "onboarding",
  "flow_name": "Onboarding",
  "flow_note": "Empty dashboard at end suggests empty-states flow also applies.",
  "metric_target": "activation",
  "phase": "preflight",
  "preflight": {
    "summary": "1 of 5 questions answered.",
    "items": [
      {
        "id": "pf-1",
        "question": "What's the ONE thing users must accomplish?",
        "why": "Focus on single critical action, not everything at once.",
        "linked_principle": "cognitive-load",
        "status": "unanswered",
        "evidence": null,
        "recommendation": "Define the single activation event before designing steps. Is it connecting a data source? Inviting a teammate? Creating a first item?"
      },
      {
        "id": "pf-5",
        "question": "What happens if they abandon halfway?",
        "why": "Allow resume without data loss to reduce frustration.",
        "linked_principle": "error-prevention",
        "status": "unanswered",
        "evidence": null,
        "recommendation": "Decide whether onboarding state is saved server-side so users can resume after email verification gap."
      }
    ],
    "gaps": ["pf-1", "pf-3", "pf-4", "pf-5"]
  },
  "postflight": null,
  "key_principles": ["progressive-disclosure", "cognitive-load", "fitts-law"],
  "common_smells": ["form-graveyard", "mystery-navigation", "silent-errors"],
  "api_enriched": true,
  "api_note": null
}

Example 2: Forms Postflight

Input:

Registration form: 6 fields (name, email, password, company, role, team size). All required. Shown on one page. Submit button at the bottom. Error messages appear in a red banner at the top after clicking submit. No inline validation.

Expected output structure:

json
{
  "flow_id": "forms",
  "flow_name": "Forms",
  "flow_note": null,
  "metric_target": "completion-rate",
  "phase": "postflight",
  "preflight": null,
  "postflight": {
    "summary": "4 of 8 checks passing. 2 critical failures.",
    "ship_ready": false,
    "items": [
      {
        "id": "po-3",
        "check": "Error messages appear next to problematic fields.",
        "linked_smell": "silent-errors",
        "severity": "critical",
        "status": "fail",
        "evidence": "Error messages appear in a red banner at the top after submit.",
        "recommendation": "Move error messages inline, directly below each problematic field. Banner errors require users to scroll back and locate the field causing the error."
      },
      {
        "id": "po-5",
        "check": "Submit button disabled until valid (or shows clear errors).",
        "linked_smell": "silent-errors",
        "severity": "medium",
        "status": "fail",
        "evidence": "No inline validation mentioned.",
        "recommendation": "Add inline validation on field blur. At minimum, show password strength indicator as user types."
      }
    ],
    "critical_failures": ["po-3"],
    "high_failures": []
  },
  "key_principles": ["cognitive-load", "error-prevention-in-forms"],
  "common_smells": ["form-graveyard", "silent-errors"],
  "api_enriched": true,
  "api_note": null
}

Completion Criteria

The output is complete when:

  1. flow_id matches one of the five valid IDs
  2. phase accurately reflects what was evaluated
  3. Every preflight item has one of: answered, unanswered, partial
  4. Every postflight item has one of: pass, fail, unknown
  5. ship_ready is false if any critical postflight item has status: fail
  6. gaps lists only IDs that have status: unanswered or partial
  7. critical_failures lists only IDs that have severity: critical and status: fail
  8. api_enriched accurately reflects whether toolbox call returned 200
  9. The output is valid JSON with no prose before or after

Frequently asked questions

What does the Flow Checker AI skill do?

Run preflight and postflight checklists against UX flows before you design and before you ship. Covers onboarding, forms, pricing, dashboards, and empty states. Returns structured findings with severity and smell linkage. Requires uxuiprinciples.com API Access (pro tier).

Why use Flow Checker on TypingMind?

Because you install it once and use it with any model. Flow Checker is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Flow Checker in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/uxuiprinciples/agent-skills/tree/main/flow-checker. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Flow Checker?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Flow Checker?

As many as you like. As long as a model supports skills, you can use Flow Checker with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Flow Checker AI skill free?

It is published on GitHub by uxuiprinciples. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇