← Back to Patterns

Verify Capability

Availablecapability graphbeginner

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):

  • Eligibility snapshotclient.evidence.getEligibility(did) → derived capability IDs from verified evidence
  • Capability queryPOST /v1/capabilities/query with required skills — find holders
  • 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 

    POST /v1/capabilities/query
    Authorization: Bearer 
    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

  • Grant Capability — evidence-first path
  • Query Skills
  • Simple Orchestration
  • See Also

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