diff --git a/docs/cli/plugins.md b/docs/cli/plugins.md index dae0f169f608..9b79f47b4877 100644 --- a/docs/cli/plugins.md +++ b/docs/cli/plugins.md @@ -401,6 +401,7 @@ For runtime hook debugging: - `openclaw plugins inspect --runtime --json` shows registered hooks and diagnostics from a module-loaded inspection pass. Runtime inspection never installs dependencies; use `openclaw doctor --fix` to clean legacy dependency state or recover missing downloadable plugins that are referenced by config. - `openclaw gateway status --deep --require-rpc` confirms the reachable Gateway URL/profile, service/process hints, config path, and RPC health. +- If a hook-only plugin is absent from runtime inspection, confirm its [hook startup intent](/tools/plugin#plugin-hooks): either manifest `activation.onCapabilities: ["hook"]` with explicit plugin enablement, or a startup-signaling `plugins.entries..hooks` policy such as `allowConversationAccess: true`. Global disable, deny, and restrictive allowlists still win. - Non-bundled conversation hooks (`before_model_resolve`, `agent_turn_prepare`, `before_prompt_build`, `before_agent_reply`, `llm_input`, `llm_output`, `before_agent_run`, `before_agent_finalize`, `agent_end`) require `plugins.entries..hooks.allowConversationAccess=true`. ### Plugin index diff --git a/docs/tools/plugin.md b/docs/tools/plugin.md index 97807a67db54..d0e5da1c219d 100644 --- a/docs/tools/plugin.md +++ b/docs/tools/plugin.md @@ -258,6 +258,19 @@ Plugin-managed internal hooks show up in `openclaw hooks list` with `plugin:`. You cannot enable or disable them through `openclaw hooks`; enable or disable the plugin instead. +Hook registration also depends on Gateway startup selection. For a hook-only +plugin, declare `activation.onCapabilities: ["hook"]` in +`openclaw.plugin.json`, then enable the plugin and include it in +`plugins.allow` when that allowlist is configured. The manifest hint does not +bypass global disable, deny, or per-plugin enablement policy. + +An explicit hook policy is also startup intent. For example, +`plugins.entries..hooks.allowConversationAccess: true` both authorizes +non-bundled conversation hooks and selects that configured plugin for Gateway +startup; normal plugin policy still applies. After changing manifest or hook +policy, restart the Gateway and verify the registration with +`openclaw plugins inspect --runtime --json`. + ## Verify the active Gateway `openclaw plugins list` and plain `openclaw plugins inspect` read cold config,