VPPChat Quickstart
Follow the tuned, VPP-enforced flow from the app.
Open quickstart
Run VPP with strict tag + footer enforcement, tuned defaults, and a workflow built for real transcripts.

Why VPP
Why VPP — when to use VPP, how it differs from other prompt grammars, and what “strict” means in practice.
Viable-Prompt Protocol:
User sends !<tag> on line 1 (g,q,o,c,o_f,e,e_o) with optional --correct|--incorrect,
--minor|--major, and --<tag> (valid with !<o> --correct and !<e>).
I mirror the tag, prepended to my output: `<tag>`. !<x>→<x>, except !<e> --<tag>→<tag>
and !<e_o>→<o>. Non-negotiable: ALWAYS prepend the tag line to EVERY reply.
Only the first line is parsed; later bangs are ignored as content.
<g> is concept-only (snippets ok; no full files).
<o> is a realized draft with Assumptions, Citations, Tests when relevant.
<q> is rough-context question/probing/diagnostic only. Ask general questions when appropriate.
<c> is a fine-context locum questioning/probing. Ask clarifying questions when appropriate. Otherwise, clarify.
<o_f> is the final, desired output with Assumptions, Citations, Tests when relevant. Any <o> could be <o_f>.
<e> is an escape tag, which is paired with a modifier tag to escape to another part in
the loop (e.g. !<e> --<g>). Special case <e_o> escapes to <o> immediately.
Loop is flexible: g→q→o→c→…→o_f (any order/length).
After 3 cycles I propose !<e> --<tag> or !<e_o>.
Non-negotiable: ALWAYS append the compliance footer line to EVERY reply:
[Version=v1.4 | Tag=<x_n> | Sources=<none|web> | Assumptions=<n> | Cycle=<i>/3 | Locus=<name?>]
Do not add any text outside the tagged content and the footer.
Full spec: https://cdn.jsdelivr.net/gh/cbassuarez/viable-prompt-protocol@main/spec/latest/spec.mdAdd the header snippet to the model's custom instructions or system prompt once.
Viable Prompt Protocol (VPP) is a compact grammar for human ↔ LLM collaborations. Every user turn begins with !<tag> [--modifier ...] on line 1. Every assistant turn mirrors the tag and ends with a compliance footer.
<g> for grounding, <q> for questioning, <o> for drafting, <c> for critique, <o_f> for final delivery, and <e> / <e_o> for controlled escapes defined in the spec.--correct, --incorrect, --minor, --major, --<tag>, and custom flags such as --assumptions=3.[Version=vX.Y | Tag=<tag_n> | Sources=<...> | Assumptions=<n> | Cycle=<i>/3 | Locus=<name?>].The protocol guide elaborates on pipelines, loci, and recovery strategies. The FAQ captures pragmatic adoption questions.
docs/spec/v1.4/spec/latest/spec.mdThese paths back the CDN mirrors used by downstream tooling, so they remain stable across releases.
/spec/ — Machine-readable spec copies used by the CDN./docs/spec/ — Versioned modules, examples, and header snippets./corpus/ — Versioned transcript corpora (JSON schema, index, and per-session logs)./experiments/ — Node runners and analyzers for protocol-retention, user-only, prompt-injection, and task-injection studies./scripts/ — Validators and transcript tooling.This repository ships with strict automation to keep transcripts and docs trustworthy:
npx markdownlint-cli2 **/*.md enforces formatting across specs, guides, and corpus notes.npx cspell --no-progress "docs/**/*.md" "spec/**/*.md" "website/docs/**/*.md" "README.md" protects terminology and protocol jargon.node scripts/test-transcripts.mjs validates transcript fixtures against the parser schema.npm run docs:build, ensuring the public docs match the main branch.See the Validator & CI page for details on extending these checks.
!<g> or !<q> on line 1.!<o_f> once the deliverable is production-ready.Share corpus additions or protocol findings by opening a pull request—automation validates transcripts and docs before merge.