Skip to main content

Verify Capability

Overview

Check that a human or agent is eligible for a capability (via LCEF evidence) — or discover who holds matching skills — before routing work or minting authority. Verification is evidence-backed, not self-asserted.

Why Verify Capabilities?

  • Trust but verify: Don't rely on self-reported skills
  • Safe routing: Match tasks to qualified humans/agents
  • Compliance: Demonstrate qualified personnel for regulated work
  • Quality: Keep unqualified actors off critical paths

Think of it like: Checking a medical license before surgery — credentials, not claims.

How Capability Checks Work

HUMΛN ships three related surfaces (none named HumanOS.CapabilityGraph.verifyCapability):

  1. Eligibility snapshotclient.evidence.getEligibility(did) → derived capability IDs from verified evidence
  2. Capability queryPOST /v1/capabilities/query with required skills — find holders
  3. Grants you issuedclient.passport.grants.list — inspect/revoke authority you granted
Evidence (LCEF) ──► eligibility snapshot ──► eligible_capability_ids
       │
       └──► capabilities/query (skills, min_weight) ──► matching holders

SDK Examples

>
SDK:

REST API Example

GET /v1/evidence/eligibility?passport_did=did:human:alice-smith
Authorization: Bearer <DELEGATION_TOKEN>
POST /v1/capabilities/query
Authorization: Bearer <DELEGATION_TOKEN>
Content-Type: application/json

{
  "skills": ["ai_safety_evaluation"],
  "min_weight": 0.7,
  "limit": 10
}

Verify before route

import { HumanClient, humanCall } from '@human/sdk';

const client = new HumanClient({
  delegationToken: process.env.HUMAN_DELEGATION_TOKEN!,
});

const did = 'did:human:alice-smith';
const cap = 'ai_safety_evaluation';

const elig = await client.evidence.getEligibility(did);
if (!elig.eligible_capability_ids.includes(cap)) {
  throw new Error(`Not eligible for ${cap}`);
}

// Route via HumanOS (capability-first) or invoke a specific agent
await humanCall(
  client,
  {
    task_id: crypto.randomUUID(),
    task_type: 'safety_review',
    required_capabilities: [cap],
  },
  { delegation: process.env.HUMAN_DELEGATION_TOKEN! },
);

Do not call a fantasy HumanOS.Passport.delegate() after verify — mint with POST /v1/passports/:id/delegate or human delegation mint (see Delegate Access).

Portfolio deep-dive

const portfolio = await client.evidence.getPortfolio('did:human:alice-smith');
console.log(portfolio.by_class, portfolio.by_outcome);

Security Considerations

DO

Check eligibility (or query) before high-stakes routing

Require min_weight appropriate to risk

Ingest evidence via client.evidence.ingest — capabilities are earned

DON'T

Do not invent HumanOS.CapabilityGraph.verifyCapability / verifyOffline / verifyBatch

Treat capabilities/query as a substitute for delegation scope checks

Skip evidence freshness for regulated work

Next Steps

See Also

  • SDK: client.evidence.getEligibility / getPortfolio (packages/sdk/src/evidence.ts)
  • OpenAPI: POST /v1/capabilities/query (required skills)

← All patterns