Every operation in the Mentu protocol follows the same envelope structure. Whether it is a commit, capture, close, or any other operation, the outer shape is identical. Only the payload varies by operation type.
"ts" : " 2026-01-15T10:30:00Z " ,
"workspace" : " my-project " ,
Field Type Description idstring Unique identifier for this operation opstring Operation type (one of the twelve operations) tsstring ISO 8601 UTC timestamp actorstring Identity of who performed the operation workspacestring Workspace this operation belongs to payloadobject Operation-specific data (varies by op)
All Mentu identifiers follow the pattern {prefix}_{8chars}, where the prefix indicates the object type and the 8 characters are alphanumeric.
Prefix Object Example op_Operation op_a1b2c3d4mem_Memory mem_e5f6g7h8cmt_Commitment cmt_i9j0k1l2
IDs are generated at the point of creation using a random alphanumeric string. They must be unique within the workspace. Collision probability is negligible for typical workload sizes, but implementations should check for uniqueness before writing.
Actors identify who performed an operation. The format is {type}:{identity}:
Type Description Examples humanA person human:rashid, human:mariaagentAn AI agent or automated system agent:claude, agent:cisdkA client SDK sdk:bug-reporterciA CI/CD system ci:github-actionssystemThe Mentu system itself system:scheduler
The type portion is a well-known category (one of the types listed above)
The identity portion is a freeform string unique within the type
Actor identities should be consistent across operations — the same person should always use the same actor string
Actor mappings in the Genesis Key can translate external identities to Mentu actors
All timestamps are ISO 8601 format in UTC:
Always UTC (the Z suffix)
Millisecond precision is allowed but not required: 2026-01-15T10:30:00.123Z
Timestamps must be monotonically increasing within a single actor’s operation stream
Operations from different actors may have overlapping timestamps
The payload field contains operation-specific data. Below is the payload structure for each of the twelve operations.
"commitment_id" : " cmt_i9j0k1l2 " ,
"title" : " Fix invoice NaN bug " ,
"description" : " Handle empty discount field in calculateTotal() " ,
"tags" : [ " bugfix " , " invoices " ],
Field Required Description commitment_idYes ID for the new commitment titleYes Short description of the work descriptionNo Longer description with context tagsNo Classification tags (used for tier assignment) tierNo Explicit tier override (t1/t2/t3) refsNo Memory IDs this commitment relates to
"commitment_id" : " cmt_i9j0k1l2 "
Field Required Description commitment_idYes ID of the commitment to claim
"commitment_id" : " cmt_i9j0k1l2 " ,
"reason" : " Blocked by dependency "
Field Required Description commitment_idYes ID of the commitment to release reasonNo Why the commitment is being released
"commitment_id" : " cmt_i9j0k1l2 " ,
{ "kind" : " build " , "status" : " pass " , "log" : " ... " },
{ "kind" : " test " , "status" : " pass " , "summary" : " 24 passed " }
Field Required Description commitment_idYes ID of the commitment evidenceYes Array of evidence items evidence[].kindYes Evidence type: build, test, pr, review, screenshot, custom evidence[].statusNo pass or failevidence[].urlNo Link to the evidence (PR URL, build log, etc.) evidence[].logNo Inline log content evidence[].summaryNo Human-readable summary
"commitment_id" : " cmt_i9j0k1l2 " ,
{ "kind" : " pr " , "url" : " https://github.com/org/repo/pull/42 " },
{ "kind" : " build " , "status" : " pass " }
Field Required Description commitment_idYes ID of the commitment to submit evidenceNo Final evidence to attach with the submission
"commitment_id" : " cmt_i9j0k1l2 " ,
{ "kind" : " review " , "note" : " Fix verified, PR merged " }
Field Required Description commitment_idYes ID of the commitment to close verdictYes pass or failevidenceYes Evidence supporting the close (can be empty array for fail)
"commitment_id" : " cmt_i9j0k1l2 " ,
"reason" : " Regression found in production "
Field Required Description commitment_idYes ID of the commitment to reopen reasonNo Why the commitment is being reopened
"commitment_id" : " cmt_i9j0k1l2 " ,
"reason" : " Duplicate of cmt_m3n4o5p6 "
Field Required Description commitment_idYes ID of the commitment to dismiss reasonNo Why the commitment is being dismissed
"memory_id" : " mem_e5f6g7h8 " ,
"title" : " Invoice total shows NaN " ,
"body" : " Steps to reproduce... " ,
Field Required Description memory_idYes ID for the new memory kindYes Memory kind: bug, context, decision, note titleYes Short title bodyNo Full content metaNo Arbitrary metadata
"memory_id" : " mem_e5f6g7h8 " ,
"note" : " Confirmed: this only happens with empty string, not null "
Field Required Description memory_idYes ID of the memory to annotate noteYes Annotation text
"memory_id" : " mem_e5f6g7h8 " ,
"tags" : [ " invoices " , " calculation " ]
Field Required Description memory_idYes ID of the memory to triage severityNo low, medium, high, criticalpriorityNo Numeric priority (lower = higher priority) tagsNo Classification tags
"memory_id" : " mem_e5f6g7h8 " ,
"commitment_id" : " cmt_i9j0k1l2 " ,
Field Required Description memory_idYes ID of the memory commitment_idYes ID of the commitment relationNo Relationship type: fixes, relates_to, caused_by, blocks