KAKUNIN

KYC for AI Agents

Know Your Customer (KYC) is the foundation of financial regulation. Banks verify who their customers are, understand their business, and monitor for suspicious activity — continuously, not just at onboarding.

Autonomous AI agents are now performing the same functions as financial counterparties: executing trades, processing payments, managing accounts, submitting regulatory filings. The question regulators are asking is: how do you Know Your Agent?

This guide explains how KYC principles translate to AI agent governance — what "identity", "due diligence", and "ongoing monitoring" mean when the counterparty is autonomous software.


Why KYC for Agents?

Traditional KYC was designed for humans. You collect identity documents, verify them, assess risk, and continue monitoring. The process works because:

  1. A human identity is stable over time
  2. Humans have legal accountability
  3. Unusual behaviour can be investigated by asking the human

Agents change all three assumptions:

Kakunin's approach: give each agent a cryptographic identity (X.509 certificate), establish a behavioural baseline during onboarding, and continuously monitor against that baseline — exactly as traditional KYC monitors customers after onboarding.


The Four Pillars

1. Customer Identification → Agent Registration

Traditional KYC: collect legal name, date of birth, address, government ID.

Agent equivalent:

const agent = await kakunin.agents.create({
  name: 'trading-bot-eu-v3',         // unique, human-readable name
  metadata: {
    version: '3.1.0',                 // software version
    model: 'gpt-4o',                  // LLM provider + model
    framework: 'langchain@0.2.1',     // orchestration framework
    deployment: 'kubernetes',          // runtime environment
    operator: 'Acme Capital Ltd',      // legal entity operating the agent
    regulated_entity: true,            // is the operator a regulated firm?
    purpose: 'algorithmic_fx_trading', // what is this agent for?
  },
});

This creates a permanent record in Kakunin's registry. The agent's identity is tied to a cryptographic certificate, not a string name that can be spoofed.

2. Customer Due Diligence → Agent Risk Assessment

Traditional KYC: assess the customer's business type, expected transaction volume, source of funds, and PEP/sanctions status.

Agent equivalent — before issuing a certificate, Kakunin assesses:

KYC FactorAgent EquivalentHow Assessed
Business typeAgent purpose (trading, payments, data analysis)Declared at registration; verified by scope
Transaction volumeExpected event frequency and sizeDeclared limits; enforced in certificate scope
Source of fundsAuthority granted by operator's systemOperator tenant verification
PEP/sanctionsOperator entity compliance statusTenant-level compliance check
Risk appetiteAnomaly threshold configurationSet during agent setup

Higher-risk agent types (high-frequency trading, cross-border payments) require tighter scope limits and lower anomaly thresholds.

3. Enhanced Due Diligence → High-Risk Agent Controls

Just as high-risk KYC customers receive enhanced scrutiny, high-authority agents require enhanced controls:

// Standard agent — lower authority
const standardAgent = await kakunin.agents.getCertificate(agentId, {
  validityDays: 365,
  anomalyThreshold: 0.75,
  scope: {
    maxTransactionSize: 1000,
    allowedActions: ['read', 'report'],
  },
});

// High-authority agent — enhanced controls
const hfTradingAgent = await kakunin.agents.getCertificate(agentId, {
  validityDays: 90,          // Shorter validity — more frequent re-verification
  anomalyThreshold: 0.65,   // Lower threshold — flag anomalies earlier
  requireHumanApproval: {
    aboveAmount: 50000,      // Human in the loop for large trades
    outsideHours: true,      // Require approval for out-of-hours activity
  },
  scope: {
    maxTransactionSize: 500000,
    allowedMarkets: ['EUR_USD', 'GBP_EUR', 'EUR_CHF'],
    allowedCounterparties: ['bank_a', 'bank_b', 'ecb_repo'],
    geographicRestriction: ['EU', 'UK'],
  },
  auditLevel: 'verbose',    // Log all intermediate reasoning steps
});

4. Ongoing Monitoring → Continuous Behavioural Surveillance

Traditional KYC: transaction monitoring, alert generation, periodic review.

Agent equivalent:

// Every agent action is evaluated against its behavioural baseline
const behaviorEvent = await kakunin.events.record({
  agent_id: agentId,
  action_type: 'trade_executed',
  metadata: {
    market: 'EUR_USD',
    size: 45000,
    direction: 'buy',
    counterparty: 'bank_a',
    execution_time_ms: 234,
  },
});

// Kakunin returns risk score for this event
const { risk_score, anomalies } = behaviorEvent;

if (risk_score >= 0.75) {
  // Pre-revocation warning already sent via webhook
  // On-call paged
  // Action logged at verbose level
}

The monitoring loop is continuous — not periodic as in traditional KYC refresh cycles. An agent operating 24/7 generates hundreds of events per day, each scored against the established baseline.


Agent Onboarding Workflow

Mapping traditional KYC customer onboarding to agent deployment:

Step 1: Identity Establishment (Day 0)

# CLI equivalent of collecting KYC documents
kakunin agents create \
  --name trading-bot-eu-v3 \
  --purpose algorithmic_fx_trading \
  --operator "Acme Capital Ltd" \
  --regulated-entity

Generates:

Step 2: Scope Definition (Day 0)

Equivalent to KYC risk assessment → set transaction limits:

const scopePolicy = {
  maxTransactionSize: 100000,     // EUR
  maxDailyVolume: 5000000,        // EUR
  allowedMarkets: ['EUR_USD', 'GBP_EUR'],
  allowedHours: { start: '07:00', end: '18:00', tz: 'UTC' },
  allowedRegions: ['eu-west-1'],
  counterpartyWhitelist: ['bank_a', 'bank_b'],
};

const cert = await kakunin.agents.getCertificate(agentId, {
  validityDays: 365,
  scope: scopePolicy,
});

The scope is embedded in the X.509 certificate as a custom extension — it cannot be modified without re-issuance from Kakunin's CA.

Step 3: Baseline Observation (Days 1–14)

Equivalent to KYC onboarding period — observe behaviour before applying full controls:

// Enable agent with permissive anomaly detection
// Log everything; block nothing
await kakunin.agents.setMode(agentId, {
  mode: 'observe',
  duration: '14d',
  collectMetrics: ['transaction_size', 'frequency', 'market_concentration', 'time_of_day'],
});

// After 14 days, review collected data
const observationReport = await kakunin.monitoring.getObservationReport(agentId, {
  window: '14d',
});

Step 4: Baseline Approval (Day 14)

Equivalent to KYC compliance officer review:

const baseline = deriveBaseline(observationReport);

// Compliance officer (or automated approval for lower-risk agents) confirms
await kakunin.monitoring.setBaseline(agentId, {
  ...baseline,
  approvedBy: 'compliance@acme.com',
  approvedAt: new Date().toISOString(),
});

Step 5: Ongoing Monitoring (Day 15+)

Full anomaly detection active. Any deviation from approved baseline generates an alert.


Risk-Based Approach

Kakunin uses a risk-based approach — identical to the risk-based approach mandated for KYC by FATF and EU AML directives — to calibrate control intensity:

Agent Risk Categories

Category A — Low Risk

Category B — Medium Risk

Category C — High Risk

Category D — Critical Risk


Ongoing KYC Refresh → Certificate Renewal

Traditional KYC: periodic refresh (annual, or triggered by risk events).

Agent equivalent — certificate renewal with re-assessment:

// 30 days before certificate expiry, Kakunin sends renewal reminder webhook
// Renewal requires fresh assessment — not automatic rollover

const renewalAssessment = await kakunin.certificates.startRenewal(agentId, {
  // Review if scope is still appropriate
  reviewScope: true,
  // Pull 12-month behaviour history for baseline re-calibration
  recalibrateBaseline: true,
  // Check if operator's regulated status has changed
  refreshOperatorRisk: true,
});

if (renewalAssessment.scopeChangeRequired) {
  // Compliance officer must approve new scope
  await notifyComplianceTeam(renewalAssessment);
}

// Issue renewed certificate (may have updated scope)
const newCert = await kakunin.certificates.renew(agentId, renewalAssessment.id);

Regulatory Evidence Package

At any point, Kakunin can produce a KYC-equivalent evidence package for an agent:

const evidencePackage = await kakunin.compliance.getEvidencePackage(agentId);

// Contains:
// - Agent registration record (who created it, when, for what purpose)
// - Certificate history (all certs issued, their scope, validity periods)
// - Scope justification (what limits were set and why)
// - Baseline approval records (who approved, when, what baseline)
// - Full audit log (WORM — every action, signed, with risk scores)
// - Anomaly history (all alerts generated, resolutions, times)
// - Revocation events (if any, with reasons and post-incident reports)

This package satisfies:


Differences from Traditional KYC

DimensionTraditional KYCKYC for Agents
Identity documentPassport, company registrationX.509 certificate (cryptographic)
Identity verificationManual reviewCryptographic signature verification
Due diligence timingOnboarding + periodic refreshContinuous; every action
Alert thresholdRule-based (transaction amount, geography)ML-based anomaly score against behavioural baseline
Response to alertHuman review, possible account freezeAutomatic certificate revocation; agent halts
Audit trailTransaction recordsWORM append-only log with cryptographic proof
Refresh cycleAnnual or event-triggeredCertificate expiry (30–365 days)
RevocationManual account suspensionAutomatic; propagated in real-time via OCSP

What's Next?