Prompt template library editor
If you reuse prompts, you have probably lost a great one in a chat history.
This editor gives you a private, browser-local library: create templates, tag and
search them, mark fill-in variables with {{double_braces}}, and export the whole
set as JSON for backup or portability. It is a full CRUD tool — create, read,
update, delete — with no account and no server. Everything lives in your
browser’s localStorage, so it is yours alone.
How it works
You add templates with a name, a body, and optional comma-separated tags. The
editor scans the body for {{variable}} patterns and lists them so you know what
each template needs before use. A search box filters across names, bodies, and
tags. Selecting a template loads it for editing or deletion. Every change is
persisted to localStorage immediately, guarded so a corrupted or partial store
never breaks the tool. Export copies the whole library to your clipboard as JSON;
import takes that JSON pasted back in, merging by name.
The case for a personal prompt library
The value of a prompt library compounds over time in a way that is not obvious at first use. A single reusable template saves a few minutes per use. A library of thirty well-organised templates, developed over several months of real work, becomes a personal knowledge base of what actually works — far more valuable than the time saved per use.
The important characteristic of a personal library (vs. a public one) is that it reflects your specific tasks, workflows, and standards. Public prompt libraries include templates for generic use cases; your library includes templates for your actual recurring tasks, calibrated on your actual models, with variables pre-designed to match your real input structure.
Designing good templates
The quality of a template library depends on how well the templates are structured. A few principles that make the difference between a template you reach for and one you stop using:
Keep the fixed parts truly fixed. A template is most reusable when everything that varies is in a variable, and the surrounding instructions never need to be edited. If you find yourself editing the instruction text every time you use a template, the instructions are too specific — move that specificity into a variable.
Name variables after what they represent, not their position. {{company_name}} is immediately understandable; {{var1}} is not, especially when you return to the template after a few weeks.
Write the template in the second person to the model. “You are a…” and “Your task is to…” read naturally. Third-person descriptions of what the model should do (“The model will…”) are common in documentation but perform less consistently as actual instructions.
Include the output format in the template body. Format instructions are the part of a prompt most often forgotten when adapting a template for a new use. Building them directly into the template body, with a {{format}} variable as an override when needed, ensures they are never accidentally dropped.
Using tags effectively
Tags are the primary navigation tool once your library grows beyond ten or fifteen templates. A few tagging conventions that scale well:
- Task type —
summarise,draft,review,classify,extract,rewrite - Domain —
legal,marketing,code,finance,support - Model —
claude,gpt4,geminiwhere a template is model-specific - Status —
tested,draft,deprecatedto track maturity
Combining tags with the name search covers most retrieval needs. A template named “Support ticket first response — formal” tagged with support and email can be found either by searching “support” or by searching “email” or by browsing all templates tagged support.
Tips and examples
- Use variables for the parts that change.
Summarize {{document}} in {{n}} bullet pointsis reusable; a hard-coded version is not. - Tag by use case. Tags like
email,code-review, ormarketingmake a growing library searchable in seconds. - Export regularly. Clearing browser data wipes localStorage — a periodic JSON export is your backup.
- Keep names distinct. Import merges by name, so unique, descriptive names prevent accidental overwrites when moving libraries between machines.