Portable files · version 1
What is inside a template file?
A PromptKB file is a small JSON object containing a name, instructions and optional filled values. You can inspect it in a text editor or create it with another tool. This reference describes the current importer—not a new format or a model API.
For the normal workflow, follow the worked-example guide. You do not need to edit JSON by hand. This page and its downloads work without JavaScript; the workbench requires JavaScript to import and fill files locally.
A complete small example
This fictional example includes filled values. Save JSON as UTF-8 text. Malformed UTF-8 bytes are rejected before replacement, rather than silently changed to replacement characters. A leading UTF-8 byte-order mark (BOM) is accepted. Strings use JSON double quotes and escape newlines as \n; comments and trailing commas are not valid JSON.
{
"version": 1,
"name": "Small explanation",
"template": "Explain {{topic}} to {{audience}}.\nGive one example.",
"values": {
"topic": "bicycle gears",
"audience": "a new rider"
}
}
Download this filled example or download the same instructions with empty values. Open the workbench, choose Import template, then select the downloaded file.
The filled example renders this exact prompt, not a model answer:
Explain bicycle gears to a new rider. Give one example.
Both files use the same format. Template-only export is the default and writes "values": {}. Export with filled values writes the current active field values. Filename endings such as .template.promptkb.json and .filled.promptkb.json describe the export choice; they are not different format versions.
Neither export is automatic redaction. Both retain the name and literal template text, which may contain sensitive information even when values are empty. Review files before sharing. A plain-text download contains the rendered prompt, not this re-importable JSON object.
The four required properties
versionThe number
1, not the string"1". Other versions are not currently accepted.nameA single-line string used as the template name, without carriage returns (CR) or line feeds (LF). It may be empty. Export filenames are derived from this name, but changing the filename does not change the name inside the file.
templateA string containing your instructions and any placeholders. It may be empty or plain text with no placeholders.
valuesAn object, including
{}when no values are supplied. Do not omit it or use an array ornull. Keys matching active placeholders must have string values. A missing key or an empty/whitespace-only value leaves its placeholder visible in the rendered prompt.
How placeholders match values
- A recognized name starts with an ASCII letter, followed by ASCII letters, digits or underscores: for example
{{topic}}or{{context_2}}. Surrounding whitespace inside the braces is allowed. - Names are case-sensitive:
{{topic}}and{{Topic}}are different fields. A repeated name shares one value. - Unsupported name syntax such as
{{2topic}}or{{topic-name}}stays ordinary template text, not a generated field. - Filled text is inserted literally, not interpreted as HTML/code or recursively substituted. A value containing
{{another_field}}remains that literal text. This is text substitution, not a programming language or a model call.
Current limits—and their units
These are application limits, not model token limits. A file can meet its byte limit and still exceed a field or expanded-output limit.
- Import file and JSON export
At most 1,000,000 bytes each (decimal, not 1 MiB). File size includes JSON punctuation, escaping, whitespace and any extra properties. Export with values can exceed this even when individual fields fit.
- Name
At most 120 UTF-16 code units.
- Template and each active value
At most 100,000 UTF-16 code units each.
- Distinct recognized placeholders
At most 100. Repeated occurrences of one name count as one distinct field. If editing the template creates more, field editors pause until you reduce the distinct placeholders. The on-screen template and values are retained, but the over-limit draft cannot be saved or exported as JSON; an older saved copy may remain. Preview, copy and text download still use retained values and unfilled placeholders, subject to the separate expanded-output limit.
- Expanded prompt
Preview, Copy prompt and Download text pause above 1,000,000 UTF-16 code units. Repetition can multiply a small source into a much larger output. Source editing and JSON export remain available within their own limits; the result is not silently truncated.
JavaScript counts strings in UTF-16 code units. For example, A is one code unit and the emoji 😀 is two; their UTF-8 encodings use one and four bytes respectively. These counts are neither visible-character counts nor model tokens.
Successful import/export does not guarantee that Remember can save the file: browser storage has its own availability and quota limits. Check the storage notice and keep an exported copy of important work.
What import keeps, drops and replaces
- Import replaces; it does not merge. The page asks before replacing edited or imported work. A failed import leaves the current work intact. A pending file read is canceled by newer edits or relevant workbench actions; select the file again if needed.
- Text must fit the editors without silent line-ending changes. Names cannot contain CR or LF line breaks. Template text and active filled values may contain LF newlines (
\nin JSON strings), but CR characters—including the CR in\r\n—are rejected before replacement. Native browser controls would otherwise remove name line breaks or normalize textarea line endings. Use a single-line name and convert template/value line endings to LF in a separate copy, then import again; no conversion is done silently. When editing JSON, this means its affected string contents (for example,"First\r\nsecond"becomes"First\nsecond"), not just the file’s whitespace formatting. Literal backslash text such as\\ris not a carriage return. CRLF whitespace between JSON properties remains valid. - Only recognized content is kept. Extra top-level properties and values for names not currently present as recognized placeholders are ignored and are not preserved in later exports. Do not use the workbench as an archive for arbitrary JSON metadata or hidden values.
- Use unique JSON property names. The importer uses the browser's JSON parser; duplicate names are not a reliable way to preserve multiple values. Keep your original file if you need to inspect or recover its exact contents.
- Older saved copies are checked too. A saved draft containing unsupported editor line breaks is not loaded or automatically rewritten. The warning explains the problem, and the existing saved bytes remain until an action replaces or removes them. Keep the original/exported file for recovery; old open page versions can still behave differently.
- The file is not modified. Import reads the selected file locally. It does not overwrite the original, upload prompt content, or automatically enable Remember or optional action counts. If Remember was already on, importing attempts to save the replacement draft and reports any storage problem.
This is a description of the current version-1 implementation, not a JSON Schema validator or a promise that unrelated metadata will round-trip. JSON property order and formatting need not match these examples; the four properties and their types do.
Storage and privacy details. This reference has no script or event reporting; public page/example downloads still create ordinary web requests. Existing visitor summaries do not include guide routes or example downloads.
Published November 3, 2026. Agent-authored documentation checked against the importer with synthetic fixtures; not human usability research, model-quality validation or a guarantee about every device.