用途:通过 icp identity link web 让终端会话(含 Claude Code 等 AI 智能体)以用户在指定应用中的专属 principal 身份调用 canister,与用户在该应用网页端登录时的 principal 一致,用 --app <domain> 指定应用。用户仍在自己浏览器中用 passkey 交互认证,智能体只持有有时限的委托,用户 II 身份私钥从不暴露。
前提:需安装 icp CLI(https://cli.internetcomputer.org);用户须有 Internet Identity(id.ai)并亲自在场完成浏览器登录;首次使用需在 II 设置中为该身份开启 CLI 访问开关;智能体与用户浏览器须在同一台机器上,委托通过 localhost 回调传递,不支持远程/无头环境(容器、CI、Web 会话)。
主要用法:先 icp identity list 选一个未占用的新名称(每次会话新建,格式如 <agent>-<app>-<YYYYMMDD-HHMM>,不覆盖或复用已有身份),再后台运行连接流程,需先管道输入一个真实换行以应答 Press Enter to log in 提示(printf '\n' | icp identity link web "$NAME" --app <APP_DOMAIN>),不要用 /dev/null。之后读取输出,若打印登录 URL 则转交用户自行打开;等待用户确认登录完成(首次可能需开启 CLI 访问,需从头重启)。可用公开 whoami canister 验证:icp canister call --identity "$NAME" --network ic ivcos-eqaaa-aaaab-qablq-cai whoami '()',返回 principal 应与应用显示一致。所有 icp 命令须显式传 --identity <NAME>,不要依赖默认身份。委托由身份提供方设定有效期,CLI 无缩短参数;过期时用 icp identity reauth <NAME> 重新登录。非交互式调用须显式传参(零参方法传空元组 ()),否则会因交互提示被自动取消。
限制与安全:委托在有效期内拥有该应用 principal 的全部权限,且不限定具体 canister,应视为该应用的全权凭证;除 whoami 验证外,每次改变状态的调用前都应向用户确认。不得导出、打印或记录密钥材料;会话密钥按服务与身份名共享于整个 OS 用户,不要并发同名链接。完成后不要擅自删除身份,先询问用户,确认后用 icp identity delete <NAME> 删除。资料未提供具体版本兼容细节、其他应用域名的适用性及委托具体时长。