Skip to main content

Core Concepts

This guide explains the fundamental concepts you need to understand when working with ASCEND. These concepts form the foundation of how ASCEND governs AI agent operations.

Agents

An agent is any autonomous or semi-autonomous system that performs actions on behalf of users or processes. In ASCEND, agents are the primary actors that require governance.

Agent Types

ASCEND supports different agent types based on their level of autonomy:

Agent TypeDescriptionTypical Use Cases
supervisedAgents that operate under human oversightCustomer service bots, data analysts
autonomousFully automated agents with minimal human interventionScheduled jobs, monitoring systems
mcp_serverMCP (Model Context Protocol) servers providing toolsDatabase connectors, file systems

Agent Identity

Every agent in ASCEND has a unique identity defined by:

client = AscendClient(
agent_id="customer-service-bot-001", # Unique identifier
agent_name="Customer Service Bot", # Human-readable name
agent_type="supervised"
)
FieldPurposeExample
agent_idUnique identifier across your organizationcs-bot-001, data-pipeline-prod
agent_nameHuman-readable display nameCustomer Service Bot
agent_typeClassification for policy matchingsupervised, autonomous

Agent Capabilities

Agents declare their capabilities during registration. Capabilities describe what an agent can do:

client.register(
agent_type="supervised",
capabilities=[
"data_access", # Can read data
"data_modification", # Can write/update data
"transaction", # Can perform financial transactions
"file_operations" # Can read/write files
],
allowed_resources=[
"customer_db", # Specific database
"/var/log/app" # Specific file path
]
)

Capabilities help ASCEND match appropriate policies and assess risk.

Actions

An action is any operation an agent attempts to perform that requires authorization. Every action goes through ASCEND before execution.

Action Structure

Actions have a standardized structure:

decision = client.evaluate_action(
action_type="database.query", # Category.operation format
resource="production_db", # What resource is involved
parameters={ # Action-specific details
"sql": "SELECT * FROM customers",
"limit": 100
},
context={ # Additional context
"user_request": "Show me all customers",
"session_id": "sess_12345"
}
)

Action Types

Actions are categorized using a hierarchical naming convention:

CategoryAction TypeDescription
Datadata_accessReading data from any source
data_modificationCreating, updating, or deleting data
data_exportExporting data outside the system
Databasedatabase.querySQL SELECT operations
database.writeSQL INSERT/UPDATE operations
database.deleteSQL DELETE operations
database.adminDDL operations (CREATE, DROP, ALTER)
Filefile.readReading file contents
file.writeWriting to files
file.deleteDeleting files
Financialfinancial.refundProcessing refunds
financial.transferMoney transfers
financial.paymentPayment processing
Systemsystem.configConfiguration changes
system.restartService restarts
api_callExternal API invocations
Communicationcommunication.emailSending emails
communication.smsSending SMS messages

Action Lifecycle

Every action follows a defined lifecycle:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│ Submit │────▶│ Evaluate │────▶│ Decide │
│ Action │ │ Policy │ │ │
└─────────────┘ └─────────────┘ └──────┬──────┘

┌──────────────────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Allowed │ │ Pending │ │ Denied │
│ │ │ Approval │ │ │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Execute │ │ Review │ │ Log & │
│ Action │ │ & Approve │ │ Reject │
└──────┬──────┘ └──────┬──────┘ └─────────────┘
│ │
│ ▼
│ ┌─────────────┐
│ │ Approved / │
│ │ Denied │
│ └──────┬──────┘
│ │
▼ ▼
┌─────────────────────────────────────┐
│ Log Completion │
│ (Success or Failure) │
└─────────────────────────────────────┘

Decisions

A decision is ASCEND's response to an action evaluation request. Every action receives exactly one decision.

Decision Types

DecisionValueMeaning
AllowedallowedAction is permitted; proceed with execution
DenieddeniedAction is blocked; do not execute
PendingpendingAction requires human approval before execution

Decision Response

The decision response contains comprehensive information:

decision = client.evaluate_action(...)

# Decision properties
decision.action_id # Unique ID for audit trail
decision.decision # allowed, denied, or pending
decision.risk_score # 0-100 risk assessment
decision.reason # Human-readable explanation
decision.policy_violations # List of violated policies (if any)
decision.approval_request_id # ID to track approval (if pending)
decision.conditions # Any conditions applied

Handling Decisions

from ascend import Decision

decision = client.evaluate_action(
action_type="financial.refund",
resource="payment_gateway",
parameters={"amount": 500, "customer_id": "cust_123"}
)

if decision.decision == Decision.ALLOWED:
# Safe to proceed
result = process_refund()
client.log_action_completed(decision.action_id, result)

elif decision.decision == Decision.PENDING:
# Requires human approval
print(f"Approval required. Notify approvers.")
# Optionally wait: decision = client.wait_for_decision(decision.action_id)

elif decision.decision == Decision.DENIED:
# Not allowed
print(f"Action denied: {decision.reason}")
for violation in decision.policy_violations:
print(f" - {violation}")

Policies

A policy is a rule that defines how ASCEND should evaluate and respond to specific actions. Policies are the core of ASCEND's governance model.

Policy Components

ComponentDescriptionExample
NameHuman-readable identifier"High Value Refund Approval"
ConditionsWhen the policy appliesaction_type == "financial.refund"
ActionWhat to do when conditions matchrequire_approval, deny, allow
PriorityOrder of evaluation (higher = first)100

Policy Types

ASCEND supports several policy action types:

ActionBehavior
allowPermit the action immediately
denyBlock the action
require_approvalRoute to human approvers
flagAllow but create an alert
modifyAllow with modifications (e.g., add conditions)

Policy Matching

Policies are matched against actions using conditions:

{
"name": "Block PII Export",
"conditions": {
"action_type": "data_export",
"resource": {"$contains": "customer"},
"parameters.includes_pii": true
},
"action": "deny",
"reason": "Exporting PII requires special authorization"
}

Policy Hierarchy

Policies are evaluated in priority order. The first matching policy determines the decision:

Priority 100: Deny all database.admin actions        → Checked first
Priority 75: Require approval for financial > $1000 → Checked second
Priority 50: Allow read-only data_access → Checked third
Priority 0: Default policy → Fallback

Risk Scoring

Risk scoring quantifies the potential impact of an action on a scale from 0 to 100. Higher scores indicate higher risk.

Risk Score Ranges

LevelScore RangeTypical Response
Low0-44Auto-approve
Medium45-69Allow with logging
High70-84Require approval
Critical85-100Block or escalate

Risk Factors

ASCEND considers multiple factors when calculating risk:

FactorDescriptionImpact
Action TypeSome actions are inherently riskierDELETE > SELECT
Resource SensitivityPII, financial data, production systems+20-40 points
Data VolumeNumber of records affectedScales with volume
Agent Trust LevelEstablished vs. new agentsLower trust = higher risk
Time of DayActions outside business hours+10-20 points
Historical BehaviorPast policy violations+15-30 points

Risk Indicators

You can provide risk hints to help ASCEND assess risk more accurately:

decision = client.evaluate_action(
action_type="data_access",
resource="customer_db",
parameters={"query": "SELECT * FROM customers"},
risk_indicators={
"pii_involved": True,
"financial_data": False,
"external_transfer": False,
"data_sensitivity": "high"
}
)

Organizations and Tenants

ASCEND is a multi-tenant platform where each organization has complete isolation.

Organization Isolation

AspectIsolation Level
DataComplete database isolation via Row-Level Security
API KeysKeys work only for issuing organization
PoliciesPolicies apply only within organization scope
AgentsAgents registered to specific organizations
Audit LogsLogs visible only to organization members

Organization Hierarchy

Organization (Company)
├── Users (Admin, Analyst, Viewer)
├── API Keys (For programmatic access)
├── Agents (Registered AI agents)
├── Policies (Governance rules)
└── Resources (Protected assets)

Audit Trail

Every action in ASCEND creates an immutable audit trail record for compliance purposes.

Audit Record Contents

FieldDescription
timestampWhen the action occurred (UTC)
action_idUnique action identifier
agent_idWhich agent performed the action
action_typeType of action
resourceTarget resource
decisionAuthorization decision
risk_scoreCalculated risk score
policy_matchedWhich policy determined the decision
approverWho approved (if applicable)
completion_statusSuccess or failure
hashCryptographic hash for integrity

Compliance Features

  • Immutability: Audit records cannot be modified or deleted
  • Hash Chaining: Each record includes a hash of the previous record
  • WORM Storage: Write-Once-Read-Many storage pattern
  • Retention: Configurable retention periods (default: 7 years)

Summary

ConceptPurposeKey Points
AgentActor performing actionsHas ID, name, type, capabilities
ActionOperation requiring authorizationHas type, resource, parameters
DecisionAuthorization responseAllowed, denied, or pending
PolicyGovernance ruleConditions, actions, priority
Risk ScoreQuantified risk assessment0-100 scale
OrganizationTenant isolation boundaryComplete data separation
Audit TrailCompliance recordImmutable, hash-chained

Next Steps

Now that you understand the core concepts:

  1. Platform Architecture: See how these concepts fit together
  2. Register Your First Agent: Put these concepts into practice
  3. Create Your First Policy: Define your governance rules

Last Updated: 2026-01-20