详细分析 ▾
运行时依赖
版本
humanos-openclaw 0.1.0 - Adds skill documentation describing how to require verifiable human approval before high-risk agent actions. - Explains usage scenarios such as approvals, signatures, sensitive data access, and agent delegation. - Lists environment prerequisites (VIA_API_KEY, VIA_SIGNATURE_SECRET) and supported platforms (macOS, Linux). - Details example workflows, API endpoints, and command-line usage for creating and managing approval requests. - Provides rules for request creation, required data formats, and signing/authentication procedures.
安装命令 点击复制
技能文档
AI agents can execute actions. Humanos lets them prove human authorization before they do.
Require a mandate signature before high-risk execution.
什么 做
- Collect human approval 之前 sensitive agent actions
- Issue machine-verifiable mandate signatures
- Support scoped delegation (amount, 持续时间, action 类型)
- Enable revocation 的 previously granted authority
Humanos provides the authorization proof. Your runtime decides whether to execute.
当...时 到 使用
Use Humanos when your agent can:
- 移动 money 或 签名 transactions
- Initiate payouts, refunds, 或 batch payments
- 修改 或 删除 用户 data
- 导出 或 分享 sensitive data
- 更改 账户 permissions 或 roles
- Rotate API keys 或 security credentials
- 更新 billing details 或 subscription plans
- Execute contracts 或 legal agreements
- Accept updated terms 在...上 behalf 的 用户
- Grant 第三个-party access 到 data
- Release funds 从 escrow
- Increase 事务 或 withdrawal limits
- File claims, applications, 或 regulatory forms
- Approve loan 或 credit changes
- Post 或 发布 在...下 用户's identity
- Control IoT 或 physical access devices
- Act 在...上 behalf 的 用户
- Delegate authority 到 另一个 agent
If the action affects money, data, identity, ownership, or legal position, require a mandate signature.
如何 Works
- Agent prepares structured action
- Agent calls
requestMandate(action, constraints) - Human approves 通过 SMS, email, wallet, API, 或 任何 programmable channel
- Humanos returns signed mandate signature
- Agent verifies 带有
verifyMandate(signature) - Agent decides whether 到 execute
No valid mandate signature -> execution should not proceed.
Core API
requestMandate(action, constraints) -> mandate_signature
verifyMandate(mandate_signature) -> true / false
revokeMandate(mandate_signature)
Simple. Programmable. Deterministic.
通过 Humanos - Operational Instructions 对于 Agents
Use this skill whenever the agent is about to do something that requires a human to say "yes" first. It sends a secure approval request to the right person - they receive a link, review the details, and approve or reject. The result comes back as a W3C Verifiable Credential with cryptographic proof that the action was authorized.
agent 应该 NEVER proceed 带有 sensitive action (payment, signing, data access, transfer) 没有 第一个 使用 skill 到 获取 authorization.
当...时 到 使用 skill
Use this skill when the user says things like:
- "I 需要 approval 从 [someone] 之前 正在做 [something]"
- "获取 authorization 从 my manager 对于 payment"
- "发送 contract/document 到 [someone] 对于 signing"
- "Check 如果 [someone] approved 请求"
- "有 mandate 已 approved 或 rejected?"
- "验证 person's identity 之前 proceeding"
- "获取 consent 从 用户 对于 data 处理中"
- "取消 待处理 approval 请求"
- "Look up 用户 [email/phone/做过]"
- " mandate 仍然 有效?"
Also use this skill when the agent is about to:
- 使 payment 或 transfer — 获取 approval 第一个
- 签名 或 发送 contract — collect digital signature
- Access sensitive data — 验证 authorization exists
- Execute high-值 action — check mandate constraints (amount limits, 时间 bounds)
- 开始 onboarding flow — combine contract + 表单 + consent 在...中 one 请求
Trigger keywords: approval, authorize, mandate, sign, consent, credential, KYC, identity verification, human approval, compliance, permission, delegation.
Prerequisites
- 通过 Protocol 账户 带有 API 键 从 app.humanos.id
- Environment variables 设置:
VIA_API_KEY — Bearer 令牌 对于 API authentication
- VIA_SIGNATURE_SECRET — HMAC secret 对于 请求 signing
- 可选: VIA_API_URL — Override API base URL (默认: https://api.humanos.id)Windows note: this skill is currently supported on macOS/Linux shells. On Windows, use WSL or Git Bash with bash, curl, jq, and openssl installed.
Authentication
All API requests require:
Authorization: Bearer $VIA_API_KEY
X-Timestamp:
X-Signature:
Use the signing script: scripts/sign-request.sh
Official API documentation: https://humanos.mintlify.app/essentials/introduction
Operation 索引 (Fast Lookup)
Use this as the primary lookup table before reading detailed sections.
| Goal | Script | Method | Endpoint | Required Args | ||
|---|---|---|---|---|---|---|
| Create approval request | scripts/create-request.sh | POST | /v1/request | --contact, --type, --name | ||
| Check request status | scripts/get-request.sh | GET | /v1/request/:id | --id | ||
| Find requests | scripts/find-requests.sh | GET | /v1/request?contact | did | internalId | one of --contact, --did, --internal-id |
| Get credential proof | scripts/get-credential.sh | GET | /v1/credential/:id | --id | ||
| Get mandate | scripts/get-mandate.sh | GET | /v1/via/mandates/:id | --id | ||
| Get mandate VC | scripts/get-mandate-vc.sh | GET | /v1/via/mandates/:id/vc | --id | ||
| Resolve DID | scripts/resolve-did.sh | GET | /v1/via/dids/:did | --did | ||
| Look up user | scripts/get-user.sh | GET | /v1/user?contact | did | internalId | one of --contact, --did, --internal-id |
| Cancel request | scripts/cancel-request.sh | DELETE | /v1/request/:id | --id | ||
| Resend OTP | scripts/resend-otp.sh | PATCH | /v1/request/resend/:id | --id (and optional --contact) |
创建 请求 Rules (Critical)
Follow these rules to avoid generic 400 Failed to generate credentials request responses.
- 使用
--类型作为:document,consent, 或json(lowercase 输入框; script converts internally). 表单不 supported 作为 inline credential 在...中 script. 使用 resource IDs 对于 forms.--data应该 JSON 数组 的 fields. single 对象 也 accepted 和 auto-wrapped.- Every 字段 应该 关注:
label (字符串)
- 类型 (字符串, 数字, 布尔值, 日期, url, pdf, 对象, 数组)
- 值 (matches 类型)
- hidden (布尔值; defaults 到 假)
- 类型-specific mandatory fields:
consent: 必须 include {"label":"text","类型":"字符串","值":"...","hidden":假}
- document: 必须 include {"label":"pdf","类型":"pdf","值":"","hidden":假} 有效 examples (复制/paste)
Consent (recommended 对于 simple approvals):
scripts/create-request.sh \
--contact "+351919307983" \
--type "consent" \
--name "Football approval" \
--data '[{"label":"text","type":"string","value":"I approve football tomorrow.","hidden":false}]'
JSON mandate:
scripts/create-request.sh \
--contact "user@example.com" \
--type "json" \
--name "Hotel Booking Authorization" \
--data '[
{"label":"amount","type":"number","value":450,"hidden":false},
{"label":"currency","type":"string","value":"EUR","hidden":false}
]'
Document signature:
scripts/create-request.sh \
--contact "user@example.com" \
--type "document" \
--name "NDA Signature" \
--data '[{"label":"pdf","type":"pdf","value":"","hidden":false}]'
Signing Algorithm (Exact Bytes, Critical)
All 401 Invalid signature incidents should be debugged against this section.
- Build 请求 body once.
- Keep body 作为 compact JSON 字符串.
- Generate
时间戳在...中 unix milliseconds (13 digits). - Compute payload 作为:
时间戳 + "." + body 当...时 body 不 空
- 时间戳 当...时 body 空
- Compute
signature = HMAC_SHA256_HEX(payload, VIA_SIGNATURE_SECRET). - 发送 exactly 相同 body bytes 在...中 HTTP 请求.
Deterministic checklist
- 使用
jq -c或jq -n到 build compact JSON. - 使用
printf, 不echo, 当...时 signing (avoid accidental newline). - 做 不 reformat body 之后 signature generation.
- 签名 和 发送 immediately (avoid stale timestamps).
- Keep UTF-8 text unchanged (accents 和 symbols 必须 match).
Common failure modes
- 时间戳 includes non-digits (对于 示例,
%3Nincompatibility 在...上 macOS). - Body 是 pretty-printed 对于 signing 但是 compacted 对于 sending (或 vice versa).
- Body 键 order/escaping changed 之间 signature 和 请求.
- Wrong base URL 或 environment points 到 不同 backend.
- Secret/令牌 mismatch 之间 environments.
Core Operations
1. 创建 Credential 请求 (获取 Human Approval)
When the agent needs human authorization for an action:
scripts/create-request.sh \
--contact "user@example.com" \
--type "json" \
--name "Hotel Booking Authorization" \
--security "CONTACT" \
--data '[{"label":"amount","type":"number","value":450,"hidden":false}]'
Parameters:
--contact— Email 或 phone 数字 的 person 谁 必须 approve (必填)--类型— 类型 的 credential:document,json, 或consent(必填).表单inline 不 supported.--name— Human-readable name 对于 approval (必填)--security— Security level:CONTACT,ORGANIZATION_KYC,HUMANOS_KYC(默认: CONTACT)--data— JSON 数组 的 mandate fields (可选 对于json; strongly recommended 对于consent/document)--language— Language 对于 approval UI:ENG或PRT(默认: ENG)--redirect— URL 到 redirect 用户 之后 approval (可选)--internal-id— internal reference ID (可选)
什么 happens:
- API creates 请求 和 sends OTP code 到 contact
- person opens 链接, enters code, 和 sees approval
- 它们 approve 或 reject 带有 可选 digital signature
- 您 接收 webhook 或 poll 对于 结果
响应 includes: requestId — 保存 到 check status later.
2. Check 请求 Status
scripts/get-request.sh --id "request-id-here"
Returns the full request with all credentials and their statuses (PENDING, APPROVED, REJECTED).
3. 查找 Requests 由 用户
scripts/find-requests.sh --contact "user@example.com"
# or
scripts/find-requests.sh --did "did:key:z6Mk..."
# or
scripts/find-requests.sh --internal-id "order-123"
4. 获取 Credential 带有 Proofs
scripts/get-credential.sh --id "credential-id-here"
Returns the W3C Verifiable Credential with cryptographic proofs that the human authorized the action.
5. 获取 Mandate
scripts/get-mandate.sh --id "mdt_uuid-here"
Returns mandate details including scope, validity period, and constraints.
6. 获取 Mandate 作为 Verifiable Credential
scripts/get-mandate-vc.sh --id "mdt_uuid-here"
Returns the mandate in W3C Verifiable Credential format for use in Verifiable Presentations.
7. Resolve 做过
scripts/resolve-did.sh --did "did:key:z6Mk..."
Returns the DID Document with verification methods. Use this to verify signatures on credentials.
8. Look Up 用户
scripts/get-user.sh --contact "user@example.com"
Returns user details, identity information, and associated DIDs.
9. 取消 请求
scripts/cancel-request.sh --id "request-id-here"
Cancels a pending request. This is irreversible.
10. Resend OTP
scripts/resend-otp.sh --id "request-id-here" --contact "user@example.com"
Resends the verification code to the user if they didn't receive it.
Decision Flow
When you need human approval, follow this flow:
- 创建 请求 →
scripts/创建-请求.sh - Wait 对于 approval → Poll 带有
scripts/获取-请求.sh或 wait 对于 webhook - Check 结果:
APPROVED → Proceed 带有 action. credential contains cryptographic proof.
- REJECTED → 做 不 proceed. Inform 用户 action 是 denied.
- 待处理 → 仍然 waiting. Ask 用户 如果 它们 want 到 resend OTP.Security Levels
| Level | Description | Use When |
|---|---|---|
CONTACT | OTP verification only | Low-risk actions (view data, basic approvals) |
ORGANIZATION_KYC | Organization-level identity check | Medium-risk (sign documents, access records) |
HUMANOS_KYC | Full KYC with identity verification | High-risk (payments, legal signatures) |
HUMANOS_REVALIDATION | Re-verification of previously verified identity | Periodic re-checks |
Credential Types
| Type | Description | User Experience |
|---|---|---|
document | PDF document for review and signature | User sees PDF, can draw signature |
form | Dynamic form with fields | User fills form fields step by step |
json | Structured data for review | User sees data and approves/rejects |
consent | Consent text or URL | User reads and agrees to terms |
Rate Limits
- 请求 creation: 60 requests per 60 seconds
- Max 10 credentials per 请求
- Max 100 contacts per 请求
错误 Handling
- 401 Unauthorized — Check VIA_API_KEY 和 signature
- 404 不 Found — 请求 或 credential doesn't exist
- 429 Too Many Requests — Rate limit hit, wait 和 重试
- 400 Bad 请求 — Check 请求 body 格式
401 无效 Signature Playbook
Follow this exact sequence before escalating:
- Confirm endpoint
https://api.humanos.id. - Confirm 时间戳 13-digit numeric milliseconds.
- Confirm signing payload exactly:
时间戳 + "." + body (non-空 body), 或
- 时间戳 (空 body).
- Confirm signed body bytes 相同 bytes sent 到
curl. - Confirm
VIA_SIGNATURE_SECRET和VIA_API_KEYcome 从 相同 environment. - 重试 带有 minimal JSON payload (single credential, 否 可选 fields).
- 如果 获取 works 和 POST 仍然 fails, capture 请求 metadata 对于 backend support:
sha256(body)
- signature 格式 (hex/base64)Escalation note for support: "GET succeeds with same key/secret, POST returns 401 Invalid signature using payload=timestamp.body."
输出 格式
Always present results to the user in this format:
对于 请求 creation:
Request created successfully. An approval link has been sent to [contact].
Request ID: [id]
Status: PENDING
对于 status checks:
Request [id] — Status: [APPROVED/REJECTED/PENDING]
Credential: [name] — [status]
Approved by: [contact] on [date]
对于 errors:
Failed to [action]: [error message]
Suggestion: [what to do next]
External Endpoints
| Endpoint | Data Sent | Purpose |
|---|---|---|
$VIA_API_URL/v1/request | Contacts, credential data | Create approval requests |
$VIA_API_URL/v1/request/:id | Request ID | Check approval status |
$VIA_API_URL/v1/credential/:id | Credential ID | Retrieve signed credentials |
$VIA_API_URL/v1/via/mandates/:id | Mandate ID | Get mandate details |
$VIA_API_URL/v1/via/mandates?scope= | Scope, tool name | Query mandates for policy checks |
$VIA_API_URL/v1/via/dids/:did | DID identifier | Resolve DID documents |
$VIA_API_URL/v1/user | Contact/DID/internal ID | Look up users |
https://api.humanos.id when VIA_API_URL is not set.Security 和 Privacy
- API keys 读取 从 environment variables, never hardcoded
- 所有 requests signed 带有 HMAC-SHA256
- Credentials contain W3C Verifiable Credential proofs (EdDSA)
- 用户 contact information (email/phone) sent 到 通过 API 对于 OTP delivery
- 否 data stored locally 由 skill
免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制