{
  "schemaVersion": "1.0",
  "item": {
    "slug": "volcengine-agent-identity",
    "name": "Volcengine Agent Identity",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/loveyana/volcengine-agent-identity",
    "canonicalUrl": "https://clawhub.ai/loveyana/volcengine-agent-identity",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/volcengine-agent-identity",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=volcengine-agent-identity",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/volcengine-agent-identity"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/volcengine-agent-identity",
    "agentPageUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent",
    "manifestUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Agent Identity",
        "body": "Use the agent-identity plugin for UserPool OIDC login (入站授权), TIP token (工作负载访问令牌), credential hosting (出站授权 OAuth2, API key), and optional tool risk approval (权限管控 AuthZ).\n\nVolcengine terminology: 用户池 (UserPool), 入站授权 (OIDC login), 出站授权 (credential fetch), 工作负载令牌 (TIP), 凭据托管 (credential hosting), 权限管控 (CheckPermission). Docs: Volcengine 智能体身份和权限管理.\n\nAgent flow: When the user asks to log in, add credentials, check status, bind env, etc., call the corresponding tools directly. Do not suggest slash commands for those. Slash commands below are for user-initiated use (e.g. /identity approve <id> when the user must approve in chat; agent must never call identity_approve_tool)."
      },
      {
        "title": "Slash commands (user-initiated)",
        "body": "CommandPurpose/identityShow help/identity whoamiIdentity brief/identity statusFull status: session, TIP, credentials, bindings/identity loginLog in via OIDC (returns auth URL)/identity logoutClear session and TIP/identity list-credentials or /identity list [page]List providers and credentials/identity list-tipsList valid TIP tokens/identity configShow plugin config (redacted)/identity fetch <provider> [--flow=...]Add credential/identity set <provider> <envVar>Bind credential to env var/identity unset <provider>Remove env binding/identity risk <command>Diagnose risk for a shell command/identity risk-patternsList built-in risky patterns/identity approve <approval_id>Approve high-risk tool call (user runs this; agent must not self-approve)/identity reject <approval_id>Reject high-risk tool call"
      },
      {
        "title": "Tools Overview",
        "body": "ToolParamsPurposeidentity_whoami—Identity brief: sub, login time, TIP expiryidentity_status—Full status: session/TIP (issued, expires, chain), credentials, bindingsidentity_login—Start OIDC login or refresh TIPidentity_logout—Clear session and TIPidentity_list_credentialspage?List providers and credentials (paginated)identity_list_tips—List valid TIP tokens and bindingsidentity_config—Show plugin config (secrets redacted)identity_config_suggestintent?, lang?Generate config snippets for openclaw.jsonidentity_fetchprovider, flow?, redirectUrl?, scopes?Add credentialidentity_set_bindingprovider, envVarBind provider → env var for tool injectionidentity_unset_bindingproviderRemove env bindingidentity_approve_toolapproval_idApprove a high-risk tool callidentity_risk_checkcommand?, toolName?, params?Diagnose risk for command or tool callidentity_list_risk_patterns—List built-in risky patterns and paths"
      },
      {
        "title": "Risk Detection and Approval",
        "body": "When authz.requireRiskApproval is on, the plugin classifies tool calls (e.g. exec, write, apply_patch) by risk. User-provided commands and file paths are evaluated:\n\nRule-based: Destructive patterns (rm -rf, sudo, curl|bash), sensitive paths (/etc, ~/.ssh).\nLLM-based (optional): When rules return \"medium\", an LLM re-evaluates for context (authz.enableLlmRiskCheck).\n\nHigh-risk calls require user approval. The approval message and block reason include the LLM risk explanation when available (e.g. \"Pipe-to-shell: network fetch piped to shell execution\")."
      },
      {
        "title": "identity_login",
        "body": "Starts OIDC login or refreshes TIP. Call when: \"login\", \"登录\", \"sign in\", \"我需要先登录\". Required before identity_fetch. No params."
      },
      {
        "title": "identity_whoami",
        "body": "Brief identity check. Call when: \"who am I\", \"查身份\", \"am I logged in\", \"当前登录状态\"\n\nReturns: sub, hasTip, loggedIn, sessionLoginAt, sessionExpiresAt, tipIssuedAt, tipExpiresAt, tipExpiresInSeconds, tipChain. No params."
      },
      {
        "title": "identity_status",
        "body": "Full status including credentials and bindings. Call when: \"status\", \"查看完整状态\", \"我的凭据和绑定\", \"show my credentials and bindings\"\n\nReturns: loggedIn, sub, hasTip, session (loginAt, expiresAt), tip (issuedAt, expiresAt, chain), credentialProviders, bindings. No params."
      },
      {
        "title": "identity_list_credentials",
        "body": "Lists available credential providers and what the user has stored. Call this when the user wants to see what they can connect or what credentials they have.\n\nUser prompts: \"有哪些服务可以连接\", \"what providers are available\", \"我添加了哪些凭据\", \"list my credentials\", \"show available providers\"\n\nParamTypeRequiredDescriptionpagenumberNoPage number (default: 1)\n\n{ \"page\": 2 }\n\nReturns: providers, storedOnly, page, hasMore."
      },
      {
        "title": "identity_fetch",
        "body": "Adds a credential for a provider (OAuth2 or API key). Call this when the user wants to add, get, or configure credentials.\n\nUser prompts that mean \"call identity_fetch\":\n\nEnglish: \"add/google my Google token\", \"get credentials for OpenAI\", \"connect my GitHub\", \"I need to use Google API\", \"set up API key for X\", \"authorize access to Y\", \"I want to use [provider] but have no key\"\n中文: \"帮我添加/获取 Google 凭据\", \"配置 OpenAI 的 API key\", \"连接我的 GitHub\", \"我要用某某服务但没有密钥\", \"授权访问某平台\", \"添加某某的 token\", \"获取某某的凭证\"\n\nFirst ensure user is logged in (identity_whoami); if not, use identity_login. Then call identity_fetch with the provider. Use identity_list_credentials to discover available providers.\n\nParamTypeRequiredDescriptionproviderstringYesProvider name (e.g. google, openai)flowstringNooauth2-user (default for 3LO), oauth2-m2m, or apikey. Auto-inferred when omitted.redirectUrlstringNoOAuth redirect URL (when provider requires custom)scopesstring[]NoOAuth scopes (e.g. [\"email\", \"profile\"])returnValuebooleanNoWhen true and fetch succeeds, include credential value in result for same-turn automation. Default false.\n\n{ \"provider\": \"google\" }\n\n{ \"provider\": \"openai\", \"flow\": \"apikey\", \"returnValue\": true }\n\nResponse:\n\nOAuth2-user: authUrl (user must open in browser). After authorization, success message sent to chat.\nOAuth2-m2m / apikey: success: true, message (completes immediately). If returnValue: true, also includes value (credential string) for same-turn use."
      },
      {
        "title": "identity_set_binding",
        "body": "Binds a stored credential to an env var so tools can use it at runtime. Call this when the user wants tools/agent to have access to a credential.\n\nUser prompts: \"让工具能用我的 Google 凭据\", \"bind/google my credential for tools\", \"把 Google token 注入给 agent\", \"inject my OpenAI key for API calls\", \"配置某某凭据给工具用\"\n\nCredential must exist first (identity_fetch). Common env vars: GOOGLE_ACCESS_TOKEN, OPENAI_API_KEY, GITHUB_TOKEN, etc.\n\nParamTypeRequiredDescriptionproviderstringYesProvider name (e.g. google)envVarstringYesEnv var for injection (e.g. GOOGLE_ACCESS_TOKEN). Must match [A-Za-z_][A-Za-z0-9_]*.\n\n{ \"provider\": \"google\", \"envVar\": \"GOOGLE_ACCESS_TOKEN\" }\n\nIf credential exists: binds it. Else: imports from process.env[envVar] as api_key (gateway must have that env set)."
      },
      {
        "title": "identity_unset_binding",
        "body": "ParamTypeRequiredDescriptionproviderstringYesProvider name to unbind (e.g. google)\n\n{ \"provider\": \"google\" }"
      },
      {
        "title": "identity_approve_tool",
        "body": "ParamTypeRequiredDescriptionapproval_idstringYesID from the approval prompt (e.g. after blocking a high-risk exec/write)\n\nOptional tool (not given to agent by default). For human approval, use /identity approve <id> or reply \"approve\" in chat. The agent must NOT call this tool to self-approve. The approval prompt includes the LLM risk reason when available.\n\n{ \"approval_id\": \"abc123\" }"
      },
      {
        "title": "identity_risk_check",
        "body": "Evaluates risk of a command or tool call before execution. Call when: \"这个命令安全吗\", \"is rm -rf dangerous\", \"check if this is risky\", \"帮我评估这个命令有没有风险\"\n\nParamTypeRequiredDescriptioncommandstringNo*Shell command to evaluate (treated as exec). Use for quick diagnosis.toolNamestringNo*Tool name (e.g. write, apply_patch). Use with params.paramsobjectNoTool params. For exec: {command}. For write: {path, content}.\n\n*Provide either command or toolName. Returns risk, reason, source (rules or llm). Uses LLM when authz.enableLlmRiskCheck is true and rules return medium.\n\n{ \"command\": \"rm -rf /\" }\n\n{ \"toolName\": \"write\", \"params\": { \"path\": \"/etc/hosts\", \"content\": \"...\" } }"
      },
      {
        "title": "identity_list_risk_patterns",
        "body": "Returns built-in dangerous command patterns and sensitive paths. No params. Use to query what triggers high-risk approval.\n\n{}"
      },
      {
        "title": "identity_config_suggest",
        "body": "Generates config snippets for the agent-identity plugin. Call when: user asks to configure identity, login, authz, risk approval, or \"如何配置 identity 插件\", \"帮我配置登录\", \"怎么开启权限检查\".\n\nParamTypeRequiredDescriptionintentstringNoidentity (AK/SK), userpool (OIDC login), authz (permission/approval), llm_risk (LLM re-eval), full (all). Default: fulllangstringNoen or zh for instructions. Default: en\n\nReturns: configPath, config (JSON to merge), instructions, nextSteps. When intent is identity or full, also returns identityDefaults (env vars, credential resolution order, config defaults, credential file format). User must manually add to openclaw.json and restart gateway.\n\n{ \"intent\": \"userpool\", \"lang\": \"zh\" }"
      },
      {
        "title": "Workflow: Adding a Credential",
        "body": "Check login: identity_whoami (brief) or identity_status (full). If not logged in, use identity_login first (user opens auth URL).\nAdd credential: identity_fetch with provider. For OAuth2-user, tell user to open authUrl; success message sent when done.\nBind for tools (optional): identity_set_binding so the credential is injected as an env var when tools run."
      },
      {
        "title": "Workflow: Checking Risk Before Running",
        "body": "Diagnose: identity_risk_check with command or toolName+params. Returns risk level and reason.\nList patterns: identity_list_risk_patterns to see what triggers high-risk approval."
      },
      {
        "title": "Configuration",
        "body": "Plugin config lives under plugins.entries.agent-identity.config:\n\nidentity: Identity API (endpoint, credentials, workloadPoolName, workloadName, roleTrn). When roleTrn is set (AssumeRole), workload name is omitted; backend uses roleName. When workload not found (404), plugin auto-creates via CreateWorkloadIdentity then retries.\nuserpool: OIDC (discoveryUrl, clientId, callbackUrl, or userPoolName+clientName)\nauthz: Optional AuthZ (toolCheck, skillReadCheck, requireRiskApproval, enableLlmRiskCheck, llmRiskCheck, namespaceName, lowRiskBypass). When enableLlmRiskCheck is true, rules returning \"medium\" are re-evaluated via LLM; the risk reason is shown in approval prompts and block messages."
      },
      {
        "title": "Notes",
        "body": "Requires the agent-identity plugin to be enabled.\n/identity and tools require session context (channel + sender); use from an active chat.\nidentity_risk_check and identity_list_risk_patterns do not require login."
      }
    ],
    "body": "Agent Identity\n\nUse the agent-identity plugin for UserPool OIDC login (入站授权), TIP token (工作负载访问令牌), credential hosting (出站授权 OAuth2, API key), and optional tool risk approval (权限管控 AuthZ).\n\nVolcengine terminology: 用户池 (UserPool), 入站授权 (OIDC login), 出站授权 (credential fetch), 工作负载令牌 (TIP), 凭据托管 (credential hosting), 权限管控 (CheckPermission). Docs: Volcengine 智能体身份和权限管理.\n\nAgent flow: When the user asks to log in, add credentials, check status, bind env, etc., call the corresponding tools directly. Do not suggest slash commands for those. Slash commands below are for user-initiated use (e.g. /identity approve <id> when the user must approve in chat; agent must never call identity_approve_tool).\n\nSlash commands (user-initiated)\nCommand\tPurpose\n/identity\tShow help\n/identity whoami\tIdentity brief\n/identity status\tFull status: session, TIP, credentials, bindings\n/identity login\tLog in via OIDC (returns auth URL)\n/identity logout\tClear session and TIP\n/identity list-credentials or /identity list [page]\tList providers and credentials\n/identity list-tips\tList valid TIP tokens\n/identity config\tShow plugin config (redacted)\n/identity fetch <provider> [--flow=...]\tAdd credential\n/identity set <provider> <envVar>\tBind credential to env var\n/identity unset <provider>\tRemove env binding\n/identity risk <command>\tDiagnose risk for a shell command\n/identity risk-patterns\tList built-in risky patterns\n/identity approve <approval_id>\tApprove high-risk tool call (user runs this; agent must not self-approve)\n/identity reject <approval_id>\tReject high-risk tool call\nTools Overview\nTool\tParams\tPurpose\nidentity_whoami\t—\tIdentity brief: sub, login time, TIP expiry\nidentity_status\t—\tFull status: session/TIP (issued, expires, chain), credentials, bindings\nidentity_login\t—\tStart OIDC login or refresh TIP\nidentity_logout\t—\tClear session and TIP\nidentity_list_credentials\tpage?\tList providers and credentials (paginated)\nidentity_list_tips\t—\tList valid TIP tokens and bindings\nidentity_config\t—\tShow plugin config (secrets redacted)\nidentity_config_suggest\tintent?, lang?\tGenerate config snippets for openclaw.json\nidentity_fetch\tprovider, flow?, redirectUrl?, scopes?\tAdd credential\nidentity_set_binding\tprovider, envVar\tBind provider → env var for tool injection\nidentity_unset_binding\tprovider\tRemove env binding\nidentity_approve_tool\tapproval_id\tApprove a high-risk tool call\nidentity_risk_check\tcommand?, toolName?, params?\tDiagnose risk for command or tool call\nidentity_list_risk_patterns\t—\tList built-in risky patterns and paths\nRisk Detection and Approval\n\nWhen authz.requireRiskApproval is on, the plugin classifies tool calls (e.g. exec, write, apply_patch) by risk. User-provided commands and file paths are evaluated:\n\nRule-based: Destructive patterns (rm -rf, sudo, curl|bash), sensitive paths (/etc, ~/.ssh).\nLLM-based (optional): When rules return \"medium\", an LLM re-evaluates for context (authz.enableLlmRiskCheck).\n\nHigh-risk calls require user approval. The approval message and block reason include the LLM risk explanation when available (e.g. \"Pipe-to-shell: network fetch piped to shell execution\").\n\nTool Parameters\nidentity_login\n\nStarts OIDC login or refreshes TIP. Call when: \"login\", \"登录\", \"sign in\", \"我需要先登录\". Required before identity_fetch. No params.\n\nidentity_whoami\n\nBrief identity check. Call when: \"who am I\", \"查身份\", \"am I logged in\", \"当前登录状态\"\n\nReturns: sub, hasTip, loggedIn, sessionLoginAt, sessionExpiresAt, tipIssuedAt, tipExpiresAt, tipExpiresInSeconds, tipChain. No params.\n\nidentity_status\n\nFull status including credentials and bindings. Call when: \"status\", \"查看完整状态\", \"我的凭据和绑定\", \"show my credentials and bindings\"\n\nReturns: loggedIn, sub, hasTip, session (loginAt, expiresAt), tip (issuedAt, expiresAt, chain), credentialProviders, bindings. No params.\n\nidentity_list_credentials\n\nLists available credential providers and what the user has stored. Call this when the user wants to see what they can connect or what credentials they have.\n\nUser prompts: \"有哪些服务可以连接\", \"what providers are available\", \"我添加了哪些凭据\", \"list my credentials\", \"show available providers\"\n\nParam\tType\tRequired\tDescription\npage\tnumber\tNo\tPage number (default: 1)\n{ \"page\": 2 }\n\n\nReturns: providers, storedOnly, page, hasMore.\n\nidentity_fetch\n\nAdds a credential for a provider (OAuth2 or API key). Call this when the user wants to add, get, or configure credentials.\n\nUser prompts that mean \"call identity_fetch\":\n\nEnglish: \"add/google my Google token\", \"get credentials for OpenAI\", \"connect my GitHub\", \"I need to use Google API\", \"set up API key for X\", \"authorize access to Y\", \"I want to use [provider] but have no key\"\n中文: \"帮我添加/获取 Google 凭据\", \"配置 OpenAI 的 API key\", \"连接我的 GitHub\", \"我要用某某服务但没有密钥\", \"授权访问某平台\", \"添加某某的 token\", \"获取某某的凭证\"\n\nFirst ensure user is logged in (identity_whoami); if not, use identity_login. Then call identity_fetch with the provider. Use identity_list_credentials to discover available providers.\n\nParam\tType\tRequired\tDescription\nprovider\tstring\tYes\tProvider name (e.g. google, openai)\nflow\tstring\tNo\toauth2-user (default for 3LO), oauth2-m2m, or apikey. Auto-inferred when omitted.\nredirectUrl\tstring\tNo\tOAuth redirect URL (when provider requires custom)\nscopes\tstring[]\tNo\tOAuth scopes (e.g. [\"email\", \"profile\"])\nreturnValue\tboolean\tNo\tWhen true and fetch succeeds, include credential value in result for same-turn automation. Default false.\n{ \"provider\": \"google\" }\n\n{ \"provider\": \"openai\", \"flow\": \"apikey\", \"returnValue\": true }\n\n\nResponse:\n\nOAuth2-user: authUrl (user must open in browser). After authorization, success message sent to chat.\nOAuth2-m2m / apikey: success: true, message (completes immediately). If returnValue: true, also includes value (credential string) for same-turn use.\nidentity_set_binding\n\nBinds a stored credential to an env var so tools can use it at runtime. Call this when the user wants tools/agent to have access to a credential.\n\nUser prompts: \"让工具能用我的 Google 凭据\", \"bind/google my credential for tools\", \"把 Google token 注入给 agent\", \"inject my OpenAI key for API calls\", \"配置某某凭据给工具用\"\n\nCredential must exist first (identity_fetch). Common env vars: GOOGLE_ACCESS_TOKEN, OPENAI_API_KEY, GITHUB_TOKEN, etc.\n\nParam\tType\tRequired\tDescription\nprovider\tstring\tYes\tProvider name (e.g. google)\nenvVar\tstring\tYes\tEnv var for injection (e.g. GOOGLE_ACCESS_TOKEN). Must match [A-Za-z_][A-Za-z0-9_]*.\n{ \"provider\": \"google\", \"envVar\": \"GOOGLE_ACCESS_TOKEN\" }\n\n\nIf credential exists: binds it. Else: imports from process.env[envVar] as api_key (gateway must have that env set).\n\nidentity_unset_binding\nParam\tType\tRequired\tDescription\nprovider\tstring\tYes\tProvider name to unbind (e.g. google)\n{ \"provider\": \"google\" }\n\nidentity_approve_tool\nParam\tType\tRequired\tDescription\napproval_id\tstring\tYes\tID from the approval prompt (e.g. after blocking a high-risk exec/write)\n\nOptional tool (not given to agent by default). For human approval, use /identity approve <id> or reply \"approve\" in chat. The agent must NOT call this tool to self-approve. The approval prompt includes the LLM risk reason when available.\n\n{ \"approval_id\": \"abc123\" }\n\nidentity_risk_check\n\nEvaluates risk of a command or tool call before execution. Call when: \"这个命令安全吗\", \"is rm -rf dangerous\", \"check if this is risky\", \"帮我评估这个命令有没有风险\"\n\nParam\tType\tRequired\tDescription\ncommand\tstring\tNo*\tShell command to evaluate (treated as exec). Use for quick diagnosis.\ntoolName\tstring\tNo*\tTool name (e.g. write, apply_patch). Use with params.\nparams\tobject\tNo\tTool params. For exec: {command}. For write: {path, content}.\n\n*Provide either command or toolName. Returns risk, reason, source (rules or llm). Uses LLM when authz.enableLlmRiskCheck is true and rules return medium.\n\n{ \"command\": \"rm -rf /\" }\n\n{ \"toolName\": \"write\", \"params\": { \"path\": \"/etc/hosts\", \"content\": \"...\" } }\n\nidentity_list_risk_patterns\n\nReturns built-in dangerous command patterns and sensitive paths. No params. Use to query what triggers high-risk approval.\n\n{}\n\nidentity_config_suggest\n\nGenerates config snippets for the agent-identity plugin. Call when: user asks to configure identity, login, authz, risk approval, or \"如何配置 identity 插件\", \"帮我配置登录\", \"怎么开启权限检查\".\n\nParam\tType\tRequired\tDescription\nintent\tstring\tNo\tidentity (AK/SK), userpool (OIDC login), authz (permission/approval), llm_risk (LLM re-eval), full (all). Default: full\nlang\tstring\tNo\ten or zh for instructions. Default: en\n\nReturns: configPath, config (JSON to merge), instructions, nextSteps. When intent is identity or full, also returns identityDefaults (env vars, credential resolution order, config defaults, credential file format). User must manually add to openclaw.json and restart gateway.\n\n{ \"intent\": \"userpool\", \"lang\": \"zh\" }\n\nWorkflow: Adding a Credential\nCheck login: identity_whoami (brief) or identity_status (full). If not logged in, use identity_login first (user opens auth URL).\nAdd credential: identity_fetch with provider. For OAuth2-user, tell user to open authUrl; success message sent when done.\nBind for tools (optional): identity_set_binding so the credential is injected as an env var when tools run.\nWorkflow: Checking Risk Before Running\nDiagnose: identity_risk_check with command or toolName+params. Returns risk level and reason.\nList patterns: identity_list_risk_patterns to see what triggers high-risk approval.\nConfiguration\n\nPlugin config lives under plugins.entries.agent-identity.config:\n\nidentity: Identity API (endpoint, credentials, workloadPoolName, workloadName, roleTrn). When roleTrn is set (AssumeRole), workload name is omitted; backend uses roleName. When workload not found (404), plugin auto-creates via CreateWorkloadIdentity then retries.\nuserpool: OIDC (discoveryUrl, clientId, callbackUrl, or userPoolName+clientName)\nauthz: Optional AuthZ (toolCheck, skillReadCheck, requireRiskApproval, enableLlmRiskCheck, llmRiskCheck, namespaceName, lowRiskBypass). When enableLlmRiskCheck is true, rules returning \"medium\" are re-evaluated via LLM; the risk reason is shown in approval prompts and block messages.\nNotes\nRequires the agent-identity plugin to be enabled.\n/identity and tools require session context (channel + sender); use from an active chat.\nidentity_risk_check and identity_list_risk_patterns do not require login."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/loveyana/volcengine-agent-identity",
    "publisherUrl": "https://clawhub.ai/loveyana/volcengine-agent-identity",
    "owner": "loveyana",
    "version": "0.2.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/volcengine-agent-identity",
    "downloadUrl": "https://openagent3.xyz/downloads/volcengine-agent-identity",
    "agentUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent",
    "manifestUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/volcengine-agent-identity/agent.md"
  }
}