Concept

Commitments

A commitment is a tracked promise — “I'll send you the doc Friday,” “Call you back tomorrow,” “Quarterly review on the 15th.” Cortex auto-extracts commitments from messages and meetings via the consolidation engine, or your app creates them explicitly. The lifecycle state machine (open → snoozed → resolved / delegated / expired) is a first-class primitive, not buried in episode-store details.

Lifecycle

Every commitment moves through a state machine:

  • open — default state at creation. Either auto-extracted from an episode (via consolidation Phase 2) or explicitly created via commitments.create.
  • snoozed — user deferred. snoozed_until field carries the target time; transition back to open happens automatically when the time arrives.
  • resolved — user marked complete (or substrate detected completion from a follow-up episode). Terminal.
  • delegated — commitment ownership handed off to a Trusted Delegate. V2 only.
  • expired — due date passed without resolution. Terminal; feeds into the social-debt surface (FR84a) and morning-briefing prompts.

The five tools

Auto-extraction from the consolidation engine

You don't have to populate commitments manually. The consolidation engine's Phase 2 (per Pattern 5.2) detects commitment-shaped phrases in episodes and creates commitments automatically with source_episode_id linking back to the originating message or meeting. Your app reads via commitments.list — the auto-extracted and explicit commitments share the same surface.

Example: rendering an inbox sidebar

ts
// Render the user's open commitments inbox in your app's sidebar
const open = await cortex.tools.call('commitments.list', {
  state: 'open',
  limit: 25,
});

return (
  <CommitmentsInbox>
    {open.items.map(c => (
      <Row key={c.commitment_id}>
        <Subject>{c.subject}</Subject>
        {c.counterparty_id && <Counterparty id={c.counterparty_id} />}
        {c.due_at && <DueAt date={c.due_at} />}
        <Actions>
          <ResolveBtn onClick={() => cortex.tools.call('commitments.resolve', { commitment_id: c.commitment_id })} />
          <SnoozeBtn onClick={() => openSnoozePicker(c)} />
        </Actions>
      </Row>
    ))}
  </CommitmentsInbox>
);

Web dashboard surface

Per FR34d, the Cortex web dashboard hosts a non-delegable commitments inbox surface for direct user review — review, snooze, resolve affordances. Your app's commitments UI is additive; the web dashboard is the always-available admin path.

Cross-references

  • Concept: Counterparty depth — commitments are scoped per-counterparty; the per-counterparty trust graph and commitments share the same entity model.
  • Concept: Subscriptions — subscribe to commitment_due events to receive dispatches as commitments approach their due date.
  • ADR-0021 §read-API (Family C — Commitments).