A Promptfile declares prompt dependencies for a project. It specifies where prompts come from, how to fetch them, and how to verify their authenticity.
Prompts are the highest-privilege input to an LLM system. A Promptfile makes authorship verifiable and tampering auditable.
Full spec at promptfile.md.
A Promptfile is a TOML file named Promptfile with no extension.
version = 1
[prompts]
coder = {git = "https://github.com/alice/prompts", ref = "v1", path = "coder"}
reviewer = {git = "https://github.com/alice/prompts", release = "v1", asset = "reviewer.tar.gz"}
claude = {git = "https://github.com/alice/claude-md", ref = "v1", inline = true}
version = 1 is required. The only supported version.
Each entry under [prompts] maps an alias to a source. The alias is the local name used to reference the dependency.
Every entry must have a git URL and exactly one of ref or release.
Clone mode (ref) clones the repository and checks out the specified ref. The ref is auto-detected as a tag, branch, or commit SHA.
coder = {git = "https://github.com/alice/prompts", ref = "v1"}
Release mode (release) downloads a signed tarball from a GitHub or Codeberg release. Requires a .sigstore.json bundle alongside the tarball. Unsigned releases are rejected unless the implementation provides a force flag.
reviewer = {git = "https://github.com/alice/prompts", release = "v1"}
| Field | Applies to | Description |
|---|---|---|
path |
clone only | Subdirectory within the repo to extract |
asset |
release only | Non-standard asset filename (default: {repo}.tar.gz) |
inline |
both | Place a single-file prompt directly in the working directory instead of a subdirectory |
ref and release are mutually exclusivepath is invalid on release entriesasset is invalid on clone entriesgit must be an HTTPS or SSH URL pointing to a git repositoryResolving dependencies produces a Promptfile.lock that pins exact versions:
version = 1
[[prompt]]
name = "coder"
source = "git"
git = "https://github.com/alice/prompts"
ref = "v1"
ref_type = "tag"
commit = "a1b2c3d4e5f6..."
path = "coder"
digest = "sha256:..."
[[prompt]]
name = "reviewer"
source = "release"
git = "https://github.com/alice/prompts"
release = "v1"
asset = "reviewer.tar.gz"
digest = "sha256:..."
signer = "[email protected]"
The lockfile records:
tag, branch, or commit)Release mode uses Sigstore keyless signing. Authors sign tarballs with cosign sign-blob, producing a .sigstore.json bundle containing the signature, certificate, and transparency log proof.
The bundle is self-contained. Verification requires no contact with the author or any registry. The signer’s identity (email or OIDC URI) is extracted from the Fulcio certificate embedded in the bundle.