This document suggests a small set of commonly useful metadata keys.
These are not mandatory exchange-format rules. They are implementation-level recommendations intended to improve interoperability between tools that use git-meta.
To propose a new standard key, change to an existing one, or report an issue with this list, open a GitHub issue.
Metadata Keys
Agents
Agent-generated metadata is likely to be common, so a stable namespace is useful.
These keys can be attached to commit, change-id or branch targets.
Implementations should avoid storing secrets in agent metadata keys.
agent:provider
stringservice or runtime provider that produced the content
openaianthropiclocalagent:model
stringmodel identifier used for generation or analysis
gpt-5claude-sonnet-4llama-3.3-70bagent:session-id
stringprovider or tool session identifier
opaque stable string from the originating system
agent:prompt
stringcanonical prompt or final instruction associated with the target
agent:summary
stringhuman-readable summary of what the agent did or concluded
agent:transcript
listordered record of the agent session, one message per list item
each item is a single JSON Lines (JSONL) record encoding one message (role, content, and any tool calls)
Commit Data
These keys cover common commit/change level metadata that often needs to live alongside or after the commit itself.
These keys can generally be attached to commit, or change-id targets, though some only make sense on commit as it's contents cannot change (such as signoffs).
branch-id
stringstable identifier of the branch the commit originated on, preserved across squash, rebase, or merge operations that would otherwise erase the source branch name
signed-off
setidentities that have signed off on the commit (e.g. DCO sign-offs, legal or security approvals)
each entry is Name <email> or another stable identifier for the signer
review:reviewed
setidentities of users that reviewed the change
each entry is Name <email> or another stable identifier for the signer
review:approved
setidentities that approved the change (a subset of reviewers with an explicit approve verdict)
each entry is Name <email> or another stable identifier for the signer
conventional:type
setconventional commit style high-level classification of the change
featfixdocsrefactorchorebreakingreleased-in
setrelease tags or versions that introduced this change
attestation
listattestations describing how the content was built or verified, using something like gitsign
each list item is an Signed JSON (DSSE) envelope
Branch Data
These keys cover common branch level metadata that describes the purpose, lifecycle, and integration state of a branch.
These keys are attached to branch targets.
description
stringhuman-readable description of the branch's purpose
status
stringlifecycle state of the branch
draftreadyin-reviewmergedabandonedarchivedreview:url
stringcanonical pull-request, merge-request, or change-list URL or identifier associated with the branch
ci:url
stringcanonical URL of the most recent CI run for the branch
issue:id
setexternal issue or ticket references the branch addresses
GH-1234JIRA-5678issue:url
setcanonical URLs for issues this branch addresses
label
setfree-form tags or labels applied to the branch
securityinfraexperimentPath Data
These keys describe ownership, provenance, and documentation for a file or directory path in the project. They are useful for replacing checked-in helper files like CODEOWNERS and for annotating vendored or imported code.
These keys are attached to path targets, but most can also be attached to project if they are the default for all paths.
owner
setidentities or teams that own the path
each entry is Name <email>, a team handle, or another stable identifier
reviewer
setidentities or teams that should be automatically requested to review changes to this path
each entry is Name <email>, a team handle, or another stable identifier
description
stringhuman-readable description of what the file or directory is for
topic
setdomain topics this path relates to
authbillingsearchlicense
stringSPDX license identifier for paths whose license differs from the project default
Apache-2.0MITGPL-3.0-or-laterupstream:url
stringcanonical origin URL for vendored or imported code at this path
upstream:version
stringpinned upstream version, tag, or commit identifier for vendored or imported code
docs:url
stringcanonical documentation URL for this module or path
agent:instructions
stringpersistent instructions, system prompt, or rules provided to the agent when working on this path
Project Data
These keys cover project-wide metadata that applies to the repository as a whole.
These keys are attached to project targets.
description
stringhuman-readable description of the project
homepage:url
stringcanonical URL for the project's homepage
repository:url
stringcanonical URL of the project's source repository
license
stringSPDX license identifier for the project
Apache-2.0MITGPL-3.0-or-laterThe meta: namespace is reserved for git-meta protocol configuration (auto-pruning, serialization filters, and similar tooling rules). Project metadata that is not protocol configuration should use a different namespace.
meta:prune:since
stringretention window used when auto-pruning is triggered during serialization
ISO-8601 date (e.g. 2025-01-01) or relative duration (90d, 6m, 1y)
meta:prune:max-keys
stringinteger threshold; when the total number of metadata keys in the serialized tree exceeds this value, an auto-prune is triggered
10000meta:prune:max-size
stringsize threshold; when the total size of all blobs in the serialized tree exceeds this value, an auto-prune is triggered
integer with optional human-friendly suffix (512k, 10m, 1g)
meta:prune:min-size
stringminimum subtree size threshold passed through to the prune operation; target subtrees smaller than this are kept in full regardless of age
integer with optional human-friendly suffix (512k, 10m)
meta:filter
setshared serialization filter rules that exclude keys from serialization or route them to alternative refs
each entry is <action> <pattern> [<destination>] where action is exclude or route, pattern is a :-segmented glob, and destination is required for route
exclude draft:**route myteam:** privatemeta:local:filter
setpersonal serialization filter rules that are themselves never serialized; same format as meta:filter
each entry is <action> <pattern> [<destination>]
exclude scratch:**route myname:** mineFormat Recommendations
Naming
Keys should use a stable namespace-like structure with : separators.
Recommended conventions:
- use short, lowercase segments
- kebab/dash case preferred (
branch-idrather thanbranchIdorbranch_id) - use a broad domain first, then more specific segments
- prefer singular nouns for scalar values
- reserve plural concepts for collection-typed keys
- keep the same key meaning across all target types when possible
- tool specific fields should top-level namespace (ie
gitbutler:orgoogle:)
Format
Where possible, string values should use simple portable text formats:
- timestamps as RFC 3339 / ISO 8601 UTC strings
- UUIDs in canonical lowercase hyphenated form
- commit IDs as full Git object IDs unless a host system has a stronger stable identifier
- enums as short lowercase tokens like
pending,success,failed
If a value needs structured payloads, implementations should prefer:
- multiple related keys
- a collection type
- a stable serialized string format such as JSON only when necessary