Project-level, not per-conversation. Loads once, works on every commit and file.
Easiest Git Commits
Add TAP trailers to every commit. Paste into your CLAUDE.md or .cursorrules:
## Authorship (TAP)
When creating git commits, add TAP trailers after the commit message body:
TAP-Model: <exact model id, e.g. claude-opus-4-8>
TAP-Provider: <provider, e.g. anthropic>
TAP-Role: <what AI did: drafting, review, refactoring, translation>
TAP-Human: <human name>
TAP-Human-Role: <what human did: direction, review, editing>
TAP-Confidence: recorded
Example:
fix: resolve race condition in session handler
TAP-Model: claude-opus-4-8
TAP-Provider: anthropic
TAP-Role: drafting
TAP-Human: Alex
TAP-Human-Role: direction, review
TAP-Confidence: recorded
Protocol: Emergenti TAP v0.2
Spec: https://emergenti.dev
Standard File Headers
Add YAML front matter to markdown files:
## Authorship (TAP)
When creating or editing markdown files, add YAML front matter:
---
tap_version: 0.2
title: <file title>
source_type: collaborative # or: ai-only, human-only
authors:
- {type: human, name: <name>, roles: [<roles>]}
- {type: ai, name: <agent name>, model: <exact model id>, provider: <provider>, roles: [<roles>]}
updated: <YYYY-MM-DD>
---
For Python/shell files, use the same fields as a comment block.
Roles: ideation, research, drafting, editing, review, coding,
refactoring, translation, synthesis, illustration, narration,
curation, testing.
Protocol: Emergenti TAP v0.2
Spec: https://emergenti.dev
Full Git + Files + Web
Complete adoption: commits, file headers, and web markup.
## Authorship (TAP)
Follow the Transparent Authorship Protocol (TAP v0.2) for all output:
### Git commits
Add trailers after the commit message body:
TAP-Model: <exact model id>
TAP-Provider: <provider>
TAP-Role: <ai role>
TAP-Human: <human name>
TAP-Human-Role: <human role>
TAP-Confidence: recorded
### Files
Add YAML front matter to markdown files:
authors:
- {type: human, name: <name>, roles: [<roles>]}
- {type: ai, name: <name>, model: <model id>, provider: <provider>, roles: [<roles>]}
### Web / HTML
Add data attributes to bylines:
<span data-tap-version="0.2"
data-model="<model id>"
data-role="<ai role>"
data-human="<human name>"
data-tap-display="ai-involved">
Author byline
</span>
### Display values
human | ai-involved | ai-generated | ai-modified
### Roles
ideation, research, drafting, editing, review, coding, refactoring,
translation, synthesis, illustration, narration, curation, testing.
Protocol: Emergenti TAP v0.2
Spec: https://emergenti.dev
AGENTS.md Rule
Add this block to your workspace AGENTS.md. The agent follows it on every file and commit.
## Authorship (TAP v0.2)
When creating or editing files (.md, .py, .sh, .conf), add a provenance
header as the first content in the file:
For markdown - YAML front matter:
---
tap_version: 0.2
title: <title>
source_type: collaborative # collaborative | ai-only | human-only
authors:
- {type: human, name: <human>, roles: [<roles>]}
- {type: ai, name: <agent name>, model: <exact model id>, provider: <provider>, roles: [<roles>]}
updated: YYYY-MM-DD
---
For code files - comment block with the same fields.
When creating git commits, add TAP trailers:
TAP-Model: <exact model id>
TAP-Provider: <provider>
TAP-Role: <ai role>
TAP-Human: <human name>
TAP-Human-Role: <human role>
TAP-Confidence: recorded
Rules:
- model = exact id (claude-opus-4-8), not marketing name
- authors is always a list
- editing someone else's file: add yourself to authors, update date
- if you touched a file and did not sign it, the task is incomplete
Roles: ideation, research, drafting, editing, review, coding,
refactoring, translation, synthesis, illustration, narration,
curation, testing.
Protocol: Emergenti TAP v0.2
https://emergenti.dev
tap-policy.yaml (optional)
Central config for multi-site setups. All templates read from one file.
Hermes is a self-hosted agent with its own harness. Use AGENTS.md as the project-level TAP instruction file. The page gives you the entry point; details live in the skill and hook.
Easiest Project Policy (AGENTS.md)
Drop this file into your project root. Hermes reads it on every session and applies TAP to all files and commits.
# TAP / Transparent Authorship Protocol
Apply TAP to new/revised files, AI-assisted commits,
and published HTML where authorship is shown.
Do not retroactively rewrite the whole repo.
## Honesty rules
- Exact model IDs (gpt-5.4, claude-opus-4-8), not marketing names.
- `recorded` = captured live. `reconstructed:<source>` = inferred after.
- Do not invent metadata when unknown.
## Git commits
Add trailers in the commit message footer:
TAP-Model: gpt-5.4
TAP-Provider: openai-codex
TAP-Role: drafting, refactoring
TAP-Human: Alex
TAP-Human-Role: direction, review
TAP-Confidence: recorded
## Markdown files
YAML front matter:
---
tap_version: 0.2
source_type: collaborative
authors:
- {type: human, name: Alex, roles: [direction, review]}
- {type: ai, name: Tisha, model: gpt-5.4,
provider: openai-codex, roles: [drafting]}
updated: 2026-07-20
---
## Code files
Same fields as a language-appropriate comment header.
## Web / HTML
data-tap-version="0.2" data-model="gpt-5.4"
data-role="drafting" data-human="Alex"
data-tap-display="ai-involved"
Display states: human | ai-involved | ai-generated | ai-modified
## Decision boundary
Best-effort: project policy alone.
Enforced: + git hook, commit template, or CI validator.
Standard Git Hook (commit-msg.tap.py)
Enforcement layer: validates TAP trailers on every commit. If missing, appends a template and blocks until filled.
#!/usr/bin/env python3
"""Best-effort TAP commit-msg hook.
Behavior:
- If no TAP trailers are present, append a template block.
- If some TAP trailers are present but required ones are missing,
fail with a clear message.
- If all required trailers are present, exit 0.
Install:
cp hooks/commit-msg.tap.py .git/hooks/commit-msg
chmod +x .git/hooks/commit-msg
"""
from pathlib import Path
import sys
REQUIRED = [
"TAP-Model:",
"TAP-Provider:",
"TAP-Role:",
"TAP-Human:",
"TAP-Human-Role:",
"TAP-Confidence:",
]
TEMPLATE = """
TAP-Model: <exact model id, e.g. gpt-5.4>
TAP-Provider: <provider, e.g. openai-codex>
TAP-Role: <what AI did: drafting, review, refactoring, translation>
TAP-Human: <human name>
TAP-Human-Role: <what human did: direction, review, editing>
TAP-Confidence: recorded
""".strip("\\n")
def main() -> int:
if len(sys.argv) != 2:
print("usage: commit-msg <commit-msg-file>", file=sys.stderr)
return 2
path = Path(sys.argv[1])
text = path.read_text(encoding="utf-8")
present = [key for key in REQUIRED if key in text]
if not present:
new_text = text.rstrip() + "\\n\\n" + TEMPLATE + "\\n"
path.write_text(new_text, encoding="utf-8")
print("[TAP] Added trailer template to commit message. "
"Fill values, then re-run commit if needed.",
file=sys.stderr)
return 1
missing = [key for key in REQUIRED if key not in text]
if missing:
print("[TAP] Commit message has partial TAP metadata "
"but is missing required lines:", file=sys.stderr)
for key in missing:
print(f" - {key}", file=sys.stderr)
return 1
return 0
if __name__ == "__main__":
raise SystemExit(main())
All three components together. Recommended setup from the kit:
# TAP for Hermes - complete stack
1. AGENTS.md in project root
(Hermes reads it every session)
2. Skill: tap-authorship-protocol
(carrier selection: git/markdown/code/HTML/author.md)
3. Git hook for enforcement:
cp commit-msg.tap.py .git/hooks/commit-msg
chmod +x .git/hooks/commit-msg
No TAP = appends template, blocks commit.
Partial = lists missing fields, blocks.
All 6 fields present = passes.
EU AI Act
Article 50 (applicable from August 2, 2026) mandates disclosure of AI-generated content. TAP provides a voluntary, machine-readable format that satisfies the requirement.