Bounds Schema

FieldTypeRequiredDescription
profilestringYes-
read_accessstringYesAllow the agent to browse contacts, timelines, pipeline and tasks. Bulk export is governed separately by Export access.
export_accessstringYesAllow the agent to export the ENTIRE CRM in one call. Separate from read access because the risk is different in kind: reading one contact and extracting the whole customer database are not the same decision.
write_daily_maxnumberYesMaximum CRM write operations per day (creates, updates)
delete_daily_maxnumberYesMaximum CRM delete operations per day

Key order: profile, read_access, export_access, write_daily_max, delete_daily_max

Context Schema (local only)

FieldTypeRequiredDescription
contact_typestringYesContact types the agent may create, update or delete. Does NOT restrict reading — reads are governed by read_access.

Key order: contact_type

Full Definition

{
  "id": "github.com/humanagencyprotocol/hap-profiles/customers@0.6",
  "name": "Customer Management",
  "version": "0.6",
  "description": "Customer authority — governs CRM operations: contacts, activities, deals, tasks",
  "boundsSchema": {
    "keyOrder": [
      "profile",
      "read_access",
      "export_access",
      "write_daily_max",
      "delete_daily_max"
    ],
    "fields": {
      "profile": {
        "type": "string",
        "required": true
      },
      "read_access": {
        "type": "string",
        "required": true,
        "displayName": "Read access",
        "description": "Allow the agent to browse contacts, timelines, pipeline and tasks. Bulk export is governed separately by Export access.",
        "boundType": {
          "kind": "enum",
          "values": [
            "unlimited",
            "none"
          ]
        },
        "toolsDescription": "find_contacts, get_timeline, get_pipeline, list_tasks",
        "default": "unlimited"
      },
      "export_access": {
        "type": "string",
        "required": true,
        "displayName": "Export access",
        "description": "Allow the agent to export the ENTIRE CRM in one call. Separate from read access because the risk is different in kind: reading one contact and extracting the whole customer database are not the same decision.",
        "boundType": {
          "kind": "enum",
          "values": [
            "allowed",
            "none"
          ]
        },
        "toolsDescription": "export_crm",
        "default": "none"
      },
      "write_daily_max": {
        "type": "number",
        "required": true,
        "displayName": "Daily write limit",
        "description": "Maximum CRM write operations per day (creates, updates)",
        "unit": "count",
        "boundType": {
          "kind": "cumulative_count",
          "window": "daily"
        },
        "paths": [
          "customers-write"
        ],
        "appliesTo": [
          "write"
        ]
      },
      "delete_daily_max": {
        "type": "number",
        "required": true,
        "displayName": "Daily delete limit",
        "description": "Maximum CRM delete operations per day",
        "unit": "count",
        "boundType": {
          "kind": "cumulative_count",
          "window": "daily"
        },
        "paths": [
          "customers-delete"
        ],
        "appliesTo": [
          "delete"
        ]
      }
    }
  },
  "contextSchema": {
    "keyOrder": [
      "contact_type"
    ],
    "fields": {
      "contact_type": {
        "type": "string",
        "required": true,
        "displayName": "Contact types the agent may create or modify",
        "description": "Contact types the agent may create, update or delete. Does NOT restrict reading — reads are governed by read_access.",
        "enum": [
          "customer",
          "lead",
          "partner",
          "vendor"
        ],
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      }
    }
  },
  "executionContextSchema": {
    "fields": {
      "contact_type": {
        "source": "declared",
        "description": "Contact type being accessed",
        "required": true,
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "write_count_daily": {
        "source": "cumulative",
        "cumulativeField": "_count",
        "window": "daily",
        "description": "Running daily write operation count",
        "required": true,
        "constraint": {
          "type": "number",
          "enforceable": [
            "max"
          ]
        }
      }
    }
  },
  "requiredGates": [
    "bounds",
    "intent",
    "commitment",
    "decision_owner"
  ],
  "ttl": {
    "default": 86400,
    "max": 31536000
  },
  "retention_minimum": 7776000,
  "content_binding": {
    "version": "1",
    "kind": "jcs"
  }
}