资讯动态

Grok Custom Hooks 实战指南:在会话关键节点注入脚本与 HTTP 请求

发布时间:2026/9/20 11:51:55 来源:尧图企业网站定制
人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clients【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址https://gitcode.com/gh_mirrors/gr/grok-build点击查看免费下载本篇指南围绕 Grok 的 Hooks 机制展开它允许你在 Grok 会话的关键时刻工具调用前后、会话启停、Agent 通知等自动运行自定义脚本或发送 HTTP 请求从而将自动化、安全防护、审计日志、通知和自有工具链深度集成到编码代理工作流中。读完本文你将掌握 Hook 文件的 JSON 格式、事件与匹配器语义、脚本的 stdin/stdout 契约与退出码约定、环境变量与变量替换规则、信任模型以及如何在 TUI 中管理、调试和分发 Hooks。为什么使用 HooksHooks 是挂在 Grok 会话生命周期上的钩子典型用途包括安全守卫Safety guards在rm -rf /这类危险命令执行前将其拦截。审计日志Audit logging把每一次工具调用或会话记录到文件或外部服务。通知Notifications长任务结束时向 Slack/Discord 发送消息。自动格式化Auto-formatting编辑完成后自动运行cargo fmt或prettier。环境准备Environment setup会话启动时导出密钥或设置变量。自定义工作流Custom workflows在特定事件上触发构建、测试或部署。从实现上看这套机制由仓库中的xai-grok-hookscrate 提供它负责基于文件的发现discovery、命令执行runner与策略执行policy enforcement文档与实现都明确其核心设计取向是fail-open失败放行——Hook 出错不会阻塞正常操作只有显式的deny决策才会拦截工具调用见 lib.rs。快速开始创建 hooks 目录mkdir -p ~/.grok/hooks创建一个简单的 Hook 文件例如~/.grok/hooks/session-start.json{ hooks: { SessionStart: [ { hooks: [ { type: command, command: echo \ Grok session started in $(pwd)\ } ] } ] } }启动或重启一个 Grok 会话该 Hook 会在SessionStart事件时自动运行。验证加载在非 VS Code 家族的终端按CtrlL在 VS Code / Cursor / Windsurf / Zed 上推荐直接运行/hooks打开 Hooks 标签页确认 Hook 已加载。Hook 发现位置与信任模型Hooks 从多个位置被发现所有来源会合并加载作用域路径是否需要信任说明全局~/.grok/hooks/*.json始终信任个人 Hook 的最佳位置全局~/.claude/settings.json始终信任Claude Code 兼容项目project/.grok/hooks/*.json需要信任仓库级自动化项目project/.claude/settings.json需要信任Claude 兼容配置config.toml、managed_config.toml、requirements.toml始终信任随你或组织的配置分发的 Hook插件已安装插件内捆绑的 Hook按插件团队共享 Hook配置文件的 Hook 使用相同的 TOML 形式 schema详见 Hooks 用户指南的配置文件章节。信任一个项目Trusting a project首次打开带 Hook 的项目时需要先信任它项目 Hook 才会运行在此之前会被静默跳过。授予信任的方式是打开 hooks 弹窗非 VS Code 家族按CtrlL或任何终端运行/hooks或运行/hooks-trust与--trust走同一个文件夹信任门禁记录在~/.grok/trusted_folders.toml。这一设计防止不受信任的仓库运行任意代码。在 xai-grok-hooks 的 discovery.rs 中可以看到加载后的 Hook 被组织成HookRegistry——一个按事件类型索引的HashMapHookEventName, VecHookSpec快照全局与项目两个目录分别作为参数传入load_hooks最终按事件合并。SubagentEnd会被折叠为SubagentStop的别名canonical()保证以任一拼写注册的 Hook 都能被正确派发。Hook JSON 格式详解每个.json文件可以定义多个事件、多个匹配组的 Hook{ hooks: { PreToolUse: [ { matcher: Bash, hooks: [ { type: command, command: bin/safety-check.sh, timeout: 10 } ] } ], PostToolUse: [ { hooks: [ { type: command, command: bin/log-activity.sh } ] } ] } }关键字段事件名顶层 keySessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop、Notification、SessionEnd等。未知的事件名会被跳过因此共享的 Claude 或 Cursor 配置文件也能照常加载。matcher可选正则表达式用于筛选触发条件——工具事件匹配工具名其他事件匹配各自的事件值详见 Hooks 用户指南 的 Hooks 章节。留空 匹配所有。typecommand运行脚本或 shell 单行命令或http把事件 POST 到 URL。command可执行文件路径相对于 JSON 文件或内联 shell 命令。timeout杀掉 Hook 前的等待秒数默认 5 秒Stop/SubagentStop门控默认 600 秒。超时的 Hook失败放行fail open。工具名别名Tool name aliasesClaude 风格的工具名如Bash、Edit、Read会自动匹配 Grok 的内部工具名如run_terminal_cmd、search_replace、read_file。这是基于 xai-grok-tools 的名称注册表 实现的别名展开。matcher 的底层语义matcher 的解析逻辑可以在 matcher.rs 中看到它并非一律当正则处理而是分三种模式空模式或*匹配所有事件。简单模式仅由[A-Za-z0-9_]和|组成按精确匹配处理|分隔的每一项逐一展开为名字集合并附加每个名字的 Grok 别名因此Bash同时匹配Bash与run_terminal_command。这种设计刻意避免了对a|b|c做朴素正则锚定导致的只锚定首尾项、悄悄过度匹配的经典 bug。其余情况按非锚定正则处理且会同时测试工具的外部别名例如^Bash$也能命中 Grok 工具run_terminal_command。注意 matcher 中空白是有效字符不做 trim 是一个匹配不到任何东西的正则而不是匹配全部——这一细节避免了一个错误的 deny 门控变成全拒。另外缺失 matcher 或缺失匹配值时采用 fail-open 默认matcher_allows返回 true。从源码结构看matcher 的简单 vs 正则拆分是刻意为之is_simple_form判定 exact_names展开配合claude_names_for/grok_names_for双向别名注册表让从其他 Agent CLI 迁移过来的 matcher 无需修改即可保持原有触发行为。Hook 事件全景事件按三种节奏触发每次会话SessionStart、SessionEnd、每个回合UserPromptSubmit、Stop、StopFailure、回合内每次工具调用PreToolUse、PostToolUse、PostToolUseFailure。完整事件表见 Hooks 用户指南事件触发时机是否阻塞SessionStart会话开始子代理自身的会话不触发否UserPromptSubmit你提交提示词时否PreToolUse工具即将运行时是可以拒绝PostToolUse工具成功完成时否PostToolUseFailure工具失败时否PermissionDenied权限系统拒绝工具调用时否StopAgent 回合正常结束中断会改为触发StopCancelled是可以阻止停止StopFailure回合因 API 错误结束否StopCancelled回合未完成就结束用户中断、权限拒绝、--max-turns上限、无进展退出等否Notification需要用户注意的事件idle_prompt、permission_prompt、task_complete等否SubagentStart子代理启动否SubagentStop子代理回合结束在子代理内触发一次带停止决策控制是可以阻止停止PreCompact/PostCompact会话压缩即将/已经运行否SessionEnd会话结束子会话携带subagentType否其中SubagentEnd被接受为SubagentStop的别名PreToolUse可以拦截工具调用Stop/SubagentStop可以阻止 Agent 结束回合见下文Stop 决策控制其余事件均为被动观察型。Cursor Hook 兼容Grok 接受 Cursor 的 camelCase 事件名因此~/.cursor/hooks.json可以原样加载sessionStart→SessionStart、preToolUse→PreToolUse、beforeShellExecution/beforeMCPExecution/beforeReadFile→PreToolUse、afterShellExecution/afterMCPExecution/afterFileEdit→PostToolUse、beforeSubmitPrompt→UserPromptSubmit等。Cursor 的按操作拆分的 Hook 会映射到通用的PreToolUse/PostToolUse脚本通过 JSON 输入里的工具名配合 matcher 自行过滤。从 event.rs 的源码看事件名解析由一张宏表生成每个事件维护display规范蛇形名、aliases所有可接受的拼写如 PascalCase、snake_case、camelCase 乃至beforeShellExecution这类按操作别名以及(gate, matcher, hub)三个特征。GateKind区分 Observe / Tool / Stop 三种语义MatcherPolicy区分 Ignored如Stop、UserPromptSubmit上的 matcher 会被忽略并告警与 Tested如SessionStart的source、SessionEnd的reason、Notification的notificationType。解析失败会给出清晰的错误提示列出全部可用事件名。编写 Hook 脚本输入stdin 上的 JSON 事件完整事件以 JSON 形式通过stdin发送。以PreToolUse为例{ hookEventName: pre_tool_use, sessionId: abc-123, cwd: /Users/you/project, workspaceRoot: /Users/you/project, toolName: run_terminal_cmd, toolInput: { command: npm test }, timestamp: 2026-04-14T12:00:00Z }所有事件都携带公共字段hookEventName、sessionId、cwd、workspaceRoot、timestamp、permissionMode取值为default、auto、plan或bypassPermissions、promptId所属回合会话级事件无此字段再加上事件特有的字段如上面的toolName。PreToolUse还会附带toolUseId与toolInputTruncated标志。事件信封在 event.rs 中以HookEventEnvelopecamelCase 序列化与HookPayloaduntagged 枚举建模payload 超过 128 KBMAX_PAYLOAD_SIZE时会被截断并标注[truncated]长文本字段按字符边界裁剪并追加… [N chars]标记如lastAssistantMessage上限 32,768 字符。输出阻塞型 Hook 的决策文档对于PreToolUse这类阻塞 Hook向stdout写 JSON放行{decision: allow}拒绝{decision: deny, reason: Unsafe command detected}改写工具输入{hookSpecificOutput: {hookEventName: PreToolUse, updatedInput: {command: npm test}}}updatedInput会在工具运行前替换其输入且必须是一个 JSON 对象非对象会被忽略。改写后的输入会被 plan-mode 门控、权限提示和工具本身共同看到因此一个 Hook 可以做规范化/加固而非仅仅允许或拒绝。多个 Hook 都返回updatedInput时最后一个生效若改写结果不符合工具 schema调用会被拦截并报告为 invalid-input 错误deny决策会丢弃任何updatedInput。从 runner/mod.rs 的实现看输出解析很严谨只有同时携带decision或hookSpecificOutput的 JSON 才被当作门控文档is_gate_document偶然打印的 JSON 日志行不会被误读为 allowdecision出现未知值拼写错误会报错而不是静默放行deny缺少reason时命令行 Hook 会用 stderr 的首行作为兜底原因HTTP Hook 则使用denied by hook name。退出码约定退出码含义0成功 / 放行阻塞型 Hook2显式拒绝PreToolUse或带 stderr 反馈的阻止停止Stop/SubagentStop其他含超时、崩溃、缺少环境变量fail-open失败被记录并显示在 Hook 滚动区但不会阻塞工具调用关键结论要拦截工具调用必须让 Hook 完整运行并在 stdout 返回{decision:deny,reason:...}。另外对PreToolUse而言stdout 中的deny决策会无视退出码被采纳对Stop/SubagentStopstdout 上有效的决策 JSON 优先于退出码只有 stdout 没有可用 JSON 时才以退出码裁决退出码 2 用 stderr 作为反馈阻塞停止。人类可读的诊断信息请写到stderr——它是 Hook 的反馈通道失败时 stderr 首行会出现在滚动区与日志中。Stop 决策控制Stop和SubagentStopHook 在 Agent 即将结束回合时运行可以不让它停与 Claude Code 兼容。向 stdout 写 JSON阻止停止{decision: block, reason: The test suite hasnt been run yet}——reason 会作为用户消息反馈给模型Agent 在同一回合内再跑一轮。非错误反馈{hookSpecificOutput: {hookEventName: Stop, additionalContext: Run the linter before finishing}}——同样让 Agent 继续工作但以 Hook 反馈而非 Hook 错误的形式呈现。强制停止{continue: false, stopReason: Budget exhausted}——结束回合覆盖任何 block。允许停止退出码 0 且无输出或任意非 JSON 输出。退出码2同样会阻止停止此时以stderr作为反馈。每个回合最多8 次连续续跑block 或非错误反馈之后门控被强制覆盖、回合结束。输入中携带stopHookActive本轮是否已因之前的 block 在续跑和lastAssistantMessage本回合 Agent 最终回复的文本Hook 可以据此判断阻止一个永远无法满足的条件还是及时放弃。Stop/SubagentStop默认 600 秒超时与 Claude Code 一致因为门控常常要跑构建或测试套件超时同样 fail-open——Agent 会正常停止。完整可运行的keep-working策略脚本示例见 Hooks 用户指南。需要注意Stop门控只在真实完成的回合运行被中断、被拒绝或触达回合上限的回合会改走StopCancelledAPI 错误则走StopFailure因此在Stop上计数或门控的脚本应当先检查reason end_turn以免把会话结束时的观察型触发算进去。会话结束时还会额外触发一次仅观察的Stopreason为channel_closed或shutdown其决策会被解析但忽略。Stop输入还携带backgroundTasks与sessionCrons帮助 Hook 区分会话确实结束与会话暂停、等待后台任务唤醒。被动 Hook对于SessionStart、PostToolUse这类事件stdout 会被忽略成功退出 0 即可。常用环境变量Grok 会向每个 Hook 进程注入以下变量GROK_HOOK_EVENT—— 事件名如pre_tool_use、session_start、post_tool_useGROK_HOOK_NAME—— 该 Hook 的完整配置名GROK_SESSION_ID—— 当前会话标识GROK_WORKSPACE_ROOT—— 工作区根目录的绝对路径此外兼容层还总是注入CLAUDE_PROJECT_DIR工作区根目录的 Claude Code 兼容别名。由插件提供的 Hook 还会获得GROK_PLUGIN_ROOT—— 插件安装目录的绝对路径GROK_PLUGIN_DATA—— 插件可写数据目录的绝对路径这些 runner/插件注入的变量优先级最高任何试图通过env字段覆盖保留键reserved keys的尝试都会在加载时被剥离并记录告警插件的GROK_PLUGIN_ROOT/GROK_PLUGIN_DATA同样覆盖用户声明的同名值——插件契约不可协商。自定义环境变量env字段每个 handler 可以声明额外的环境变量注入子进程{ type: command, command: bin/check.sh, env: { MY_API_TOKEN: secret-here, LOG_LEVEL: debug } }注意值必须是字符串——JSON 数字和布尔值目前会解析失败需要时请用引号包裹。变量替换command与url字符串在配置加载时支持$VAR和${VAR}替换{ type: command, command: ${HOME}/.config/grok-hooks/check.sh }每个引用的查找顺序该 handler 自身的env映射当前进程环境Grok 自己看到的环境。两处都未定义时引用会原样保留如${UNSET}保持为字面字符串。runner 注入的保留名CLAUDE_PROJECT_DIR、GROK_WORKSPACE_ROOT、GROK_HOOK_EVENT、GROK_HOOK_NAME、GROK_SESSION_ID不会从 Grok 进程环境取值Unix 下由sh -c从子进程环境展开Windows PowerShell 会把$VAR改写为$env:VAR。HTTP 的url在请求时再做一次替换紧接 SSRF 校验之前因此${GROK_PLUGIN_ROOT}/check这类引用能解析到插件真实路径。剩余的未解析命令引用会以 required env var(s) not set 拒绝执行。参数展开修饰符POSIX 形式如${VAR:-default}、${VAR-default}、${VAR:x}、${VAR:?msg}、${VAR:x}、${VAR%pat}、${VAR#pat}、${VAR/pat/repl}、${VAR:N:M}绝不会在加载时展开而是原样留给运行时的sh -c分支处理——这避免了加载期展开器与 POSIX shell 语义尤其是:-的空字符串行为之间的微妙偏差。如果命令包含 shell 元字符空格、管道、、重定向、$等runner 会通过sh -c路由获得完整的 shell 展开语义如果是无元字符的裸路径则直接 spawn——但路径中的$VAR/${VAR}仍在加载时解析因此${HOME}/bin/check.sh这类直接执行的路径无需包一层sh -c。哪些内容不会被展开matcher是正则$是行尾锚点从不做环境变量展开——替换$VAR会悄悄改变正则语义甚至产生非法模式。需要动态 matcher 时请在写文件阶段生成 JSON。timeout是数值无可展开。env映射自身的值——按原样存储并透传给子进程因此BAR: ${HOME}/x注入到子进程环境里就是字面字符串${HOME}/x。从配置到执行的源码链路Hook 的完整生命周期在 xai-grok-hooks crate 中有清晰的模块划分可以作为排查问题时的地图发现discovery.rs从~/.grok/hooks/与project/.grok/hooks/扫描 JSON解析为HookSpec列表并合并进HookRegistryload_hooks返回(registry, errors)加载告警如保留环境变量被剥离、matcher 被忽略会作为错误列表返回。匹配matcher.rs按上文所述简单精确 / 非锚定正则 / 全匹配三态编译 matcher无效正则解析失败时降级为Neverfail-closed宁可不匹配也不扩大为全匹配。执行runner/command.rs与http.rs分别实现子进程与 HTTP 两类 handlerrunner/mod.rs统一解释输出为HookRunnerResultAllow/Deny/Stop/Success/FailedFailed由调用方 fail-open。派发dispatcher.rs按事件特征EventTraits中的 gate/matcher/hub 三元组决定某事件是门控还是观察、matcher 是否生效、是否转发给 hub。从 lib.rs 的快速开始示例 可以看出 crate 的编程接口load_hooks(Some(global), Some(project))加载后用registry.hooks_for(HookEventName::PreToolUse)按事件取 Hook——这也意味着如果你在自己的工具中集成 Grok 的 Hook 系统可以直接复用这套注册表与 runner。在 TUI 中管理 Hooks在非 VS Code 家族终端按CtrlL或任何终端运行/hooks打开 Hooks Plugins 弹窗。在Hooks标签页中l—— 重新加载所有 Hooksa—— 按路径添加自定义 Hook便于测试e—— 启用/禁用r—— 移除Space—— 展开分组来自~/.grok/hooks/的 Hook 显示在Global分组下项目 Hook 显示在Project分组下依此类推。每个 Hook 展示其触发事件、运行的命令或 URL、超时时长与启停状态。提示Hooks 用户指南 记录了更新一版的键位布局r重新加载、x移除所选 Hook按小写y确认、Space启用/禁用、f循环切换状态过滤All / Enabled / Disabled。以你所用版本的?帮助面板为准。用户指南还列出了/hooks-list、/hooks-trust、/hooks-add path、/hooks-remove path、/hooks-untrust等斜杠命令。启用/禁用单条 Hook 立即生效Space无需重启会话r重新加载后会话期间对 Hook 文件所做的修改会被重新读取。Hook 执行结果会以注解annotations形式出现在 TUI 滚动区可以直观看到哪些 Hook 运行了、是允许还是拒绝、输出了什么需启用插件 UI默认开启。HTTP Hooks除了本地脚本还可以调用远端端点{ type: http, url: https://hooks.example.com/grok-event, timeout: 15 }完整的事件信封会以 JSON 形式 POST 到该 URL适用于 webhook、分析或 serverless 函数场景。如前所述url会在请求时SSRF 校验之前再次做变量替换。在配置文件中定义 HooksTOMLHook 也可以直接放在 Grok 配置中让团队随配置分发 Hook 而无需单独维护 JSON 文件。同一个hooks对象可以从三个 TOML 文件读取~/.grok/config.toml用户层、managed_config.toml$GROK_HOME与/etc/grok组织托管层、requirements.toml用户与系统需求层。TOML 结构与 JSON 的 hooks 对象完全一致已有 JSON Hook 可以直接转写[[hooks.PreToolUse]] matcher Bash|Write|Edit hooks [ { type command, command /opt/guard/pretooluse.sh, timeout 10 }, ]每个 matcher 组是一个[[hooks.Event]]条目带可选的matcher和内层hooks数组handler 字段type、command、url、timeout、env与事件名和 JSON 格式完全一致。TOML 还接受嵌套的数组表写法[[hooks.PreToolUse.hooks]]但官方推荐上面的内联表形式避免为每个 handler 重复写头。配置层 Hook 具有三个特性跨层叠加低优先级层只增不减完全相同的定义去重并保留最高权威副本、来源标注/hooks中以managed:、requirements/user:、user:等前缀标记每个 Hook 来自哪一层、不做读时展开字面${VAR}原样到达 runner由 runner 做唯一一次展开与 JSON 文件语义一致。最佳实践保持 Hook 快速——长时间运行的 Hook 会阻塞 UI尽量用后台或异步。用显式deny来拦截——Hook 在任何错误下都是 fail-open超时、崩溃、缺环境变量都不会阻塞工具调用。要强制策略Hook 必须运行到结束并在 stdout 输出{decision:deny,reason:...}在脚本内部自行处理错误确保总能返回明确决策。使用绝对路径或相对 Hook 文件的路径——JSON 旁边的bin/目录放脚本最便于移植。测试优先——用CtrlL非 VS Code 家族//hooks验证加载与匹配再依赖它。项目 Hook 纳入版本控制——提交.grok/hooks/但绝不提交密钥。安全注意事项全局 Hook~/.grok/...以你的用户权限运行——请像对待 shell 脚本一样对待它们。项目 Hook 需要显式信任/hooks-trust或弹窗以防恶意仓库的供应链攻击。信任决策记录在~/.grok/trusted_folders.toml与仓库级 MCP/LSP 服务器共用同一个文件夹信任门禁一次--trust//hooks-trust会同时信任该文件夹的 MCP、LSP 与 Hooks并向子目录级联关闭文件夹信任GROK_FOLDER_TRUST0或[folder_trust] enabled false也会一并解锁项目 Hook。HTTP Hook 会发送会话数据——只使用可信端点。故障排查Hook 没运行→ 非 VS Code 家族按CtrlL或任何终端运行/hooks检查它是否已加载并被 matcher 命中。项目 Hook 被忽略→ 先信任该项目/hooks-trust或用--trust重启。脚本找不到→ 检查路径是否相对于.json文件并确认可执行chmod x。PowerShell 报The argument /.claude/hooks/….ps1 to the -File parameter does not exist→ PowerShell 把$CLAUDE_PROJECT_DIR当成了空值。Grok 会把它改写为$env:CLAUDE_PROJECT_DIR除非设置了GROK_SHELLcmd。看到错误→ 查看 pager 日志通常在 tracing 面板或~/.grok/logs。也可以带RUST_LOGdebug GROK_LOG_FILE/tmp/grok.log grok启动以捕获详细日志。更多示例xai-grok-hooks/examples 目录提供了可直接复制的内置示例安装说明safe-shell.json —— 安全 shell 守卫拒绝rm -rf /、mkfs、dd等破坏性命令。no-recursive-grep.json —— 硬性拦截grep -r/grep -R/rgrepOOM 防护。递归 grep 会把整棵目录树读入内存在大型仓库上可能 OOM 杀掉 Agent 进程系统提示只是建议性的这个 Hook 把它变成确定性的硬拦截。示例还精心避免误报ls -R | grep foo、grep -e -r file、grep -- -r file都会被放行。session-log.json —— 会话审计日志SessionStartSessionEnd。tool-logger.json —— 工具活动日志PreToolUsePostToolUse。stop-verify.json —— 停止门控cargo build通过前不允许 Agent 结束回合Stop事件 300 秒超时超时 fail-open 让 Agent 正常停止。把它们复制到~/.grok/hooks/并定制即可mkdir -p ~/.grok/hooks/bin cp crates/codegen/xai-grok-hooks/examples/hooks/safe-shell.json ~/.grok/hooks/ cp crates/codegen/xai-grok-hooks/examples/hooks/bin/safe-shell-guard.sh ~/.grok/hooks/bin/ chmod x ~/.grok/hooks/bin/safe-shell-guard.sh完整参考关于完整事件列表、matcher 语义、信任模型与更深入的细节含 Claude Code Hook 移植差异清单、StopCancelled/StopFailure的字段说明、忙碌/空闲状态机的五事件注册法请阅读 Hooks 用户指南Hook 系统的 Rust 实现可深入 xai-grok-hooks crate 的 event.rs、matcher.rs、runner/mod.rs 与 discovery.rs 继续探索。赞分享人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clients【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址https://gitcode.com/gh_mirrors/gr/grok-build点击查看免费下载相关推荐Kimi Code CLI Hooks 实战指南在 Agent 生命周期关键节点注入自定义命令Kimi Code CLI Hooks 实战指南在 Agent 生命周期关键节点注入自定义命令 ::: warning Beta 功能 Hooks 系统目前处人工智能AI Agent代码智能体交互助手CLI工具调用Wasp Auth Hooks 实战指南在注册、登录、邮箱验证与 OAuth 的 6 个关键节点注入自定义逻辑Wasp Auth Hooks 实战指南在注册、登录、邮箱验证与 OAuth 的 6 个关键节点注入自定义逻辑 WaspThe batteries inclWeb框架后端前端CLI开发工具axios 请求鉴权实战指南Bearer Token、HTTP Basic、API Key 与 Cookie 会话方案axios 请求鉴权实战指南Bearer Token、HTTP Basic、API Key 与 Cookie 会话方案 绝大多数 API 都需要某种形式的鉴权网络后端前端上一篇C DataFrame 项目推荐下一篇RecyclerView-FastScroll自定义教程打造专属快速滚动体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价