You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Windows fail-closed note: if ACL verification is unavailable for the command path, resolution fails. For trusted paths only, set `allowInsecurePath: true` on that provider to bypass path security checks.
229
+
- Plugin-managed exec providers can use `pluginIntegration` instead of
230
+
copied `command`/`args`. OpenClaw resolves the current command details
231
+
from the installed plugin manifest during startup/reload. If the plugin is
232
+
disabled, removed, untrusted, or no longer declares the integration,
233
+
active SecretRefs using that provider fail closed.
Copy file name to clipboardExpand all lines: docs/plugins/manifest.md
+67Lines changed: 67 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -169,6 +169,7 @@ or npm install metadata. Those belong in your plugin code and `package.json`.
169
169
|`modelIdNormalization`| No |`object`| Provider-owned model-id alias/prefix cleanup that must run before provider runtime loads. |
170
170
|`providerEndpoints`| No |`object[]`| Manifest-owned endpoint host/baseUrl metadata for provider routes that core must classify before provider runtime loads. |
171
171
|`providerRequest`| No |`object`| Cheap provider-family and request-compatibility metadata used by generic request policy before provider runtime loads. |
172
+
|`secretProviderIntegrations`| No |`Record<string, object>`| Declarative SecretRef exec provider presets that setup or install surfaces can offer without hardcoding provider-specific integrations in core. |
172
173
|`cliBackends`| No |`string[]`| CLI inference backend ids owned by this plugin. Used for startup auto-activation from explicit config refs. |
173
174
|`syntheticAuthRefs`| No |`string[]`| Provider or CLI backend refs whose plugin-owned synthetic auth hook should be probed during cold model discovery before runtime loads. |
174
175
|`nonSecretAuthMarkers`| No |`string[]`| Bundled-plugin-owned placeholder API key values that represent non-secret local, OAuth, or ambient credential state. |
@@ -1080,6 +1081,72 @@ Provider fields:
1080
1081
|`compatibilityFamily`|`"moonshot"`| Optional provider-family compatibility bucket for shared request helpers. |
1081
1082
|`openAICompletions`|`object`| OpenAI-compatible completions request flags, currently `supportsStreamingUsage`. |
1082
1083
1084
+
## secretProviderIntegrations reference
1085
+
1086
+
Use `secretProviderIntegrations` when a plugin can publish a reusable SecretRef
1087
+
exec provider preset. OpenClaw reads this metadata before plugin runtime loads,
1088
+
stores plugin ownership in `secrets.providers.<alias>.pluginIntegration`, and
1089
+
leaves actual secret resolution to the SecretRef runtime.
1090
+
Presets are exposed only for bundled plugins and installed plugins discovered
1091
+
from the managed plugin install roots, such as git and ClawHub installs.
1092
+
1093
+
```json
1094
+
{
1095
+
"secretProviderIntegrations": {
1096
+
"secret-store": {
1097
+
"providerAlias": "team-secrets",
1098
+
"displayName": "Team secrets",
1099
+
"source": "exec",
1100
+
"command": "${node}",
1101
+
"args": ["./bin/resolve-secrets.mjs"]
1102
+
}
1103
+
}
1104
+
}
1105
+
```
1106
+
1107
+
The map key is the integration id. If `providerAlias` is omitted, OpenClaw uses
1108
+
the integration id as the SecretRef provider alias. Provider aliases must match
1109
+
the normal SecretRef provider alias pattern, for example `team-secrets` or
1110
+
`onepassword-work`.
1111
+
1112
+
When an operator selects the preset, OpenClaw writes a provider reference like:
1113
+
1114
+
```json
1115
+
{
1116
+
"secrets": {
1117
+
"providers": {
1118
+
"team-secrets": {
1119
+
"source": "exec",
1120
+
"pluginIntegration": {
1121
+
"pluginId": "acme-secrets",
1122
+
"integrationId": "secret-store"
1123
+
}
1124
+
}
1125
+
}
1126
+
}
1127
+
}
1128
+
```
1129
+
1130
+
At startup/reload, OpenClaw resolves that provider by loading current plugin
1131
+
manifest metadata, checking that the owning plugin is installed and active, and
1132
+
materializing the exec command from the manifest. Disabling or removing the
1133
+
plugin revokes the provider for active SecretRefs. Operators who want standalone
1134
+
exec configuration can still write manual `command`/`args` providers directly.
1135
+
1136
+
Only `source: "exec"` presets are currently supported. `command` must be
1137
+
`${node}`, and `args[0]` must be a `./` plugin-root-relative resolver script.
1138
+
OpenClaw materializes it at startup/reload to the current Node executable and
1139
+
the absolute in-plugin script path. Node options such as `--require`, `--import`,
1140
+
`--loader`, `--env-file`, `--eval`, and `--print` are not part of the manifest
1141
+
preset contract. Operators who need non-Node commands can configure standalone
1142
+
manual exec providers directly.
1143
+
1144
+
OpenClaw derives `trustedDirs` for manifest presets from the plugin root and,
1145
+
for `${node}` presets, the current Node executable directory. Manifest-authored
1146
+
`trustedDirs` are ignored. Other exec provider options such as `timeoutMs`,
1147
+
`maxOutputBytes`, `jsonOnly`, `env`, `passEnv`, and `allowInsecurePath` pass
1148
+
through to the normal SecretRef exec provider config.
1149
+
1083
1150
## modelPricing reference
1084
1151
1085
1152
Use `modelPricing` when a provider needs control-plane pricing behavior before
0 commit comments