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):
- Eligibility snapshot —
client.evidence.getEligibility(did)→ derived capability IDs from verified evidence - Capability query —
POST /v1/capabilities/querywith requiredskills— find holders - Grants you issued —
client.passport.grants.list— inspect/revoke authority you granted
Evidence (LCEF) ──► eligibility snapshot ──► eligible_capability_ids
│
└──► capabilities/query (skills, min_weight) ──► matching holders
SDK Examples
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
- 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(requiredskills)