Treat prompts like code. Infere stores prompts as PML (Prompt Markup Language) files inside real Git repositories - every save creates a new version backed by a git commit, and every push is validated server-side before it can reach main.

ℹ️ PML Structure: A .pml file combines YAML frontmatter (name, version, model config, variables) with a body organized by XML-style section tags: <system>, <context>, <instructions>, <constraints>, <output_format>, and <examples>. Variables use {{mustache}} templating with built-in filters for strings, arrays, numbers, and JSON.
---

name: customer-support-agent

version: 2.1.0

model:

  provider: anthropic

  name: claude-sonnet-4-5

  temperature: 0.7

variables:

  - name: customer_name

    type: string

    required: true

---



<system>

You are a helpful customer support agent for Acme Corp.

</system>



<context>

Customer: {{customer_name}}

</context>



<output_format>

Respond in plain text, at most three paragraphs.

</output_format>

Author, Version, Deploy

  • Author - in the visual Prompt Editor or locally in your IDE with the PML CLI (pml init, pml validate, pml render, pml run) and the PML VS Code extension (syntax highlighting, validation, preview).
  • Test - try prompts live in the Playground against real models, or clone the repo and push to a branch.
  • Version - every "Save as New Version" produces a numbered version tied to a git commit hash, with history, badges, and side-by-side diffs.
  • Review - open a Pull Request from a feature branch; protected branches require reviews and status checks before merge.
  • Deploy - deploy a prompt to an API token from the UI, or push an ephemeral deploy ref (git push origin main:refs/heads/deploy/<prompt>/<token>). Deployments are 1:1 - a token holds exactly one prompt - and changes propagate to the edge within seconds.

Every push validates both .pml prompt files and .eml evaluator files - prompts and their evaluators are versioned together in the same repository.