These are the main ideas:
- Mustache templates for the prompts, since Mustache is a mature, logic-less templating language which already has packages in a lot of languages I would ever want to target.
- Input schemas to render a prompt properly are inferred fully from the template. No separate interface to keep in sync, the parser in Sufleur figures out the schema, with some extensions I've added to the templating to aid this.
- Output JSON schemas also recorded on the prompts.
- Semver versioning and immutable versions after publishing.
- The CLI that allows installing/updating/removing prompts as dependencies, generating the code, and exposes all the authoring methods, so your AI agent can drive the prompt development cycle as well.
- No runtime dependency(!). The code is generated with all of the content inlined. The generated code allows you to render each prompt, provides methods to parse and validate the outputs, and access metadata fields (provider, model, model-parameters).
- Public and workspace private prompts. Public prompts can be installed without an account.
- Workspace rules can optionally enforce semver semantics (breaking change can't be patch-bumped) and mandatory eval thresholds.
The CLI is open source (written in go), with npm and pypi wrapper packages distributed. The platform itself has other features (evals, workspace management) all that jazz. Free to use for individuals or $2/seat/month for teams beyond 3 people.
Some honest limitations:
- It's a solo project.
- Only python and typescript codegen so far, but very open to extending that in the future when demand arises.
- Currently working on a representation of LLM tool-calls, they are not on the platform yet but soon will be.
- Pretty much no users so far (admittedly, haven't done much marketing either), so really looking forward to see some folks pick it up and get some honest criticism.
Docs: https://sufleur.com/docs
Curious to see what others use to version and share prompts today, most of the solutions I have seen focused mostly on tracing, without providing much structure around the prompts themselves.