Commitment Schema

Commitments are shared, signed agreements between agents. They represent what an agent commits to doing, optionally within a conversation or linked to a task or todo item.

Key design: Commitments work standalone. They do not require goals, tasks, conversations, or any other document type to be created first.

Schema

  • ID: https://hai.ai/schemas/commitment/v1/commitment.schema.json
  • Type: jacsType: "commitment"
  • Level: jacsLevel: "config" (editable, versioned)
  • Extends: header.schema.json via allOf

Required Fields

FieldTypeDescription
jacsCommitmentDescriptionstringHuman-readable description of the commitment
jacsCommitmentStatusenumLifecycle status

Status Lifecycle

pending -> active -> completed
                  -> failed
                  -> renegotiated
         -> disputed
         -> revoked
StatusMeaning
pendingCreated but not yet started
activeWork is underway
completedSuccessfully fulfilled
failedCould not be fulfilled
renegotiatedTerms changed, replaced by new commitment
disputedOne party contests the commitment
revokedWithdrawn by the owner

Optional Fields

FieldTypeDescription
jacsCommitmentTermsobjectStructured terms (deliverable, deadline, compensation, etc.)
jacsCommitmentDisputeReasonstringReason when status is disputed or revoked
jacsCommitmentTaskIduuidReference to a task document
jacsCommitmentConversationRefuuidThread ID of the conversation that produced this commitment
jacsCommitmentTodoRefstringTodo item reference in format list-uuid:item-uuid
jacsCommitmentQuestionstringStructured question prompt
jacsCommitmentAnswerstringAnswer to the question
jacsCommitmentCompletionQuestionstringQuestion to verify completion
jacsCommitmentCompletionAnswerstringAnswer verifying completion
jacsCommitmentStartDatedate-timeWhen the commitment period begins
jacsCommitmentEndDatedate-timeDeadline
jacsCommitmentRecurrenceobjectRecurrence pattern (frequency + interval)
jacsCommitmentOwnersignatureSingle-agent owner signature

Cross-References

Commitments can link to other document types:

  • Conversation: jacsCommitmentConversationRef holds a thread UUID
  • Todo item: jacsCommitmentTodoRef uses format list-uuid:item-uuid
  • Task: jacsCommitmentTaskId holds a task document UUID

These references are optional. Commitments work independently.

Multi-Agent Agreements

Commitments use the standard JACS agreement mechanism from the header schema. Two or more agents can co-sign a commitment using jacsAgreement.

Example

{
  "$schema": "https://hai.ai/schemas/commitment/v1/commitment.schema.json",
  "jacsCommitmentDescription": "Deliver Q1 analytics report by March 15",
  "jacsCommitmentStatus": "active",
  "jacsCommitmentTerms": {
    "deliverable": "PDF report with charts",
    "deadline": "2026-03-15T00:00:00Z"
  },
  "jacsCommitmentStartDate": "2026-01-15T00:00:00Z",
  "jacsCommitmentEndDate": "2026-03-15T00:00:00Z",
  "jacsType": "commitment",
  "jacsLevel": "config"
}

Rust API

#![allow(unused)]
fn main() {
use jacs::schema::commitment_crud::*;

// Create
let commitment = create_minimal_commitment("Deliver report").unwrap();

// With structured terms
let commitment = create_commitment_with_terms(
    "Weekly standup",
    serde_json::json!({"frequency": "weekly"}),
).unwrap();

// Update status
update_commitment_status(&mut commitment, "active").unwrap();

// Dispute
dispute_commitment(&mut commitment, "Terms not met").unwrap();

// Cross-references
set_conversation_ref(&mut commitment, &thread_id).unwrap();
set_todo_ref(&mut commitment, "list-uuid:item-uuid").unwrap();
set_task_ref(&mut commitment, &task_id).unwrap();
}

Versioning

Since commitments use jacsLevel: "config", they can be updated. Each update creates a new jacsVersion linked to the previous via jacsPreviousVersion. This provides a full audit trail of status changes and modifications.

See Also