@f4bioo/berry-shield 2026.3.3-2 → 2026.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,7 @@ This guide defines two installation tracks and when each one should be used.
14
14
 
15
15
  ## Prerequisites
16
16
 
17
- - Node.js 20 or newer.
17
+ - Node.js 22.16.0 or newer.
18
18
  - OpenClaw runtime available in environment.
19
19
  - Git available in environment.
20
20
 
@@ -34,6 +34,16 @@ Practical rule:
34
34
  For official OpenClaw plugin installation behavior, see:
35
35
  - https://docs.openclaw.ai/tools/plugin
36
36
 
37
+ ## Host hook note
38
+
39
+ OpenClaw host behavior can influence prompt-level guidance hooks used by Berry Shield.
40
+
41
+ Operational note:
42
+ - if the host explicitly disables plugin prompt-injection style prepend behavior for hooks, `Berry.Root` and Vine reminder guidance from `before_agent_start` can be partially degraded.
43
+
44
+ See more:
45
+ - [Technical limitations and host behavior](../../../README.md#-technical-limitations--sdk-diary)
46
+
37
47
 
38
48
  ### Quick navigation
39
49
 
@@ -98,6 +98,8 @@ Root is useful for:
98
98
  ## Limits and caveats
99
99
 
100
100
  - Root is instruction-level control, not hard execution enforcement.
101
+ - If the host disables prompt-injection style prepend behavior for plugin hooks, Root guidance can be partially degraded because `before_agent_start` context may no longer be injected.
102
+ - This is a host/runtime constraint, not a full Berry Shield plugin failure.
101
103
  - If runtime context identity is missing, global safety fallback can increase policy verbosity.
102
104
  - Excessive full injections increase token cost.
103
105
  - Too little reinjection can reduce model adherence in long sessions.
@@ -24,6 +24,7 @@ The tool evaluates operation intent (exec, read, write) against destructive-comm
24
24
  - sensitive file access in read/write requests
25
25
  - Emits structured audit events in both audit and enforce paths.
26
26
  - Returns allow/deny response payloads to the agent.
27
+ - Returns the standard `CONFIRM_REQUIRED` challenge when Vine risk is active, even if host/runtime identity is degraded.
27
28
  - Triggers adaptive escalation signaling on enforce denies.
28
29
 
29
30
  ## What Stem does not do
@@ -40,10 +41,11 @@ flowchart TD
40
41
  A[Agent requests gate check] --> B[Berry.Stem]
41
42
  B --> C{Input valid?}
42
43
  C -->|No| E[Reject request]
43
- C -->|Yes| D{Risk match?}
44
+ C -->|Yes| D{Policy or Vine risk?}
44
45
  D -->|No| ALLOW[Return ALLOWED]
45
- D -->|Yes + audit| WB[Emit would_block event]
46
- D -->|Yes + enforce| DENY[Return DENIED + blocked event]
46
+ D -->|Yes + audit| WB[Emit would_block or would_confirm_required]
47
+ D -->|Yes + confirm| CONFIRM[Return CONFIRM_REQUIRED]
48
+ D -->|Yes + deny| DENY[Return DENIED + blocked event]
47
49
  WB --> ALLOW
48
50
  DENY --> ESC[Adaptive escalation signal]
49
51
  ```
@@ -13,6 +13,18 @@ Berry.Vine is the **external-content trust guard layer**.
13
13
 
14
14
  It reduces prompt-injection risk by treating external content as untrusted by default and enforcing trust-aware checks before sensitive operations.
15
15
 
16
+ ## Philosophy
17
+
18
+ Vine is designed to act as a **pause layer**, not as a hard isolation barrier.
19
+
20
+ Its job is to slow down risky external-content-driven flows long enough to require visible human intent before the agent continues with a sensitive action.
21
+
22
+ Operationally, this means:
23
+ - prefer an explicit confirmation pause over a silent allow when external risk is active;
24
+ - avoid turning degraded binding or imperfect session identity into a hard product lockout by default;
25
+ - use confirmation as the pragmatic fallback when the host/runtime context is incomplete but the channel can still support a human pause;
26
+ - keep the focus on interrupting unsafe momentum, not on pretending Vine is a complete antivirus-style boundary.
27
+
16
28
  ## What Vine does
17
29
 
18
30
  - Tracks external-risk signals per session.
@@ -29,6 +41,32 @@ It reduces prompt-injection risk by treating external content as untrusted by de
29
41
  - It does not rely on semantic AI classification.
30
42
  - It does not auto-remediate without explicit operator action.
31
43
 
44
+ ## Confirmation strategies
45
+
46
+ Vine supports two confirmation strategies for sensitive actions under active external risk:
47
+
48
+ - `one_to_one` (`1:1`): one human confirmation code is consumed by one sensitive action.
49
+ - `one_to_many` (`1:N`): one human confirmation code can unlock multiple sensitive actions within a short bounded window.
50
+
51
+ Operational default:
52
+ - `one_to_many` is the default strategy.
53
+
54
+ Important fields:
55
+ - code TTL: how long a challenge code remains valid.
56
+ - confirmation window: how long the `1:N` execution window stays open after approval.
57
+ - max actions per window: how many sensitive actions the `1:N` approval can unlock inside that window.
58
+ - max attempts: how many invalid confirmation attempts are tolerated before the challenge is exhausted.
59
+
60
+ High-level confirmation flow:
61
+ - Berry detects active external-risk state.
62
+ - A sensitive action is evaluated through `berry_check` or `before_tool_call`.
63
+ - Vine emits a confirmation challenge when human intent must be made explicit.
64
+ - Human approval unlocks the real action according to the configured strategy.
65
+
66
+ Degraded path:
67
+ - if native binding or session identity is degraded, Berry still uses the normal `CONFIRM_REQUIRED` code-based challenge instead of silently allowing the action;
68
+ - degraded identity may reduce correlation precision, but it does not change the public confirmation protocol.
69
+
32
70
  ## Runtime flow
33
71
 
34
72
  ```mermaid
@@ -61,6 +99,7 @@ Key operational rule:
61
99
  ### Enforce
62
100
  - Sensitive actions under active external risk can be blocked.
63
101
  - In strict profile, unknown-origin sensitive attempts can also block.
102
+ - When native confirmation binding is degraded, Berry still uses the same explicit code-based confirmation flow instead of silently allowing the action.
64
103
 
65
104
  ### Audit
66
105
  - No hard block.
@@ -129,6 +168,7 @@ Important scope:
129
168
  ## Limits and caveats
130
169
 
131
170
  - Hook timing and availability still depend on host runtime behavior.
171
+ - If the host disables prompt-injection style context prepend for plugin hooks, Vine reminder text from `before_agent_start` can be neutralized even though risk tracking and action guarding still exist.
132
172
  - Unknown-origin classification can create false positives if over-tuned.
133
173
  - Risk decay should not depend only on elapsed time.
134
174
 
@@ -76,14 +76,23 @@ openclaw bshield rules list
76
76
  Expected: CLI shows baseline and custom IDs, including `[ENABLED]` and `[DISABLED]` status.
77
77
 
78
78
  ### 6) Disable one baseline rule
79
- Use this to disable one baseline rule by stable ID.
79
+ Use this to disable baseline rules by stable ID. This applies to both internal `berry:` patterns and `gitleaks:` community rules.
80
+
81
+ Example (Berry Shield):
82
+ ```bash
83
+ openclaw bshield rules disable baseline berry:secret:openai-key
84
+ ```
85
+
86
+ Example (Gitleaks Community):
80
87
  ```bash
81
- openclaw bshield rules disable baseline secret:openai-key
88
+ openclaw bshield rules disable baseline gitleaks:secret:aws-access-token
82
89
  ```
83
90
  Expected: CLI marks the target baseline rule as disabled.
84
91
 
85
92
  ### 7) Disable one custom rule
86
93
  Use this to keep a custom rule stored but inactive.
94
+
95
+ Example (User custom):
87
96
  ```bash
88
97
  openclaw bshield rules disable custom secret:my-token-rule
89
98
  ```
@@ -96,6 +105,13 @@ openclaw bshield vine set mode strict
96
105
  ```
97
106
  Expected: CLI confirms strict Vine mode for external-content guard behavior.
98
107
 
108
+ ### 9) Inspect or change Vine confirmation strategy
109
+ Use this when you need to verify or switch between `1:1` and `1:N` confirmation behavior.
110
+ ```bash
111
+ openclaw bshield vine confirmation
112
+ ```
113
+ Expected: CLI opens the interactive selector for Vine confirmation strategy.
114
+
99
115
  ## Documentation structure
100
116
 
101
117
  Each command page follows the same structure:
@@ -97,7 +97,7 @@ If cancel is selected, the wizard exits without persisting data.
97
97
  ### Step 2: Preset or custom pattern
98
98
  After choosing type, the wizard offers:
99
99
  - custom pattern
100
- - built-in presets for the selected type
100
+ - baseline presets for the selected type
101
101
  - cancel
102
102
 
103
103
  If a preset is selected, name/pattern/placeholder values are prefilled from that preset.
@@ -40,6 +40,8 @@ Positional arguments:
40
40
 
41
41
  ### Remove an existing custom rule
42
42
  Use this when the exact custom rule id is known.
43
+
44
+ Example (User custom):
43
45
  ```bash
44
46
  openclaw bshield rules remove custom secret:MyToken
45
47
  ```
@@ -47,6 +49,8 @@ Result: CLI confirms custom rule removal.
47
49
 
48
50
  ### Remove a custom file rule
49
51
  Use this when a file-pattern custom rule must be removed.
52
+
53
+ Example (User custom):
50
54
  ```bash
51
55
  openclaw bshield rules remove custom file:team-key
52
56
  ```
@@ -61,8 +65,15 @@ Result: Removed custom rule no longer appears in custom entries.
61
65
 
62
66
  ### Disable a baseline rule (separate command)
63
67
  Use this when the target is a baseline ID.
68
+
69
+ Example (Berry Shield):
70
+ ```bash
71
+ openclaw bshield rules disable baseline berry:secret:openai-key
72
+ ```
73
+
74
+ Example (Gitleaks Community):
64
75
  ```bash
65
- openclaw bshield rules disable baseline secret:openai-key
76
+ openclaw bshield rules disable baseline gitleaks:secret:aws-access-token
66
77
  ```
67
78
  Result: Baseline rule is marked disabled in rules inventory.
68
79
 
@@ -70,13 +81,24 @@ Result: Baseline rule is marked disabled in rules inventory.
70
81
 
71
82
  ### Wrong target
72
83
  Use this to validate explicit target semantics.
84
+
85
+ Example (Berry Shield):
73
86
  ```bash
74
- openclaw bshield rules remove baseline secret:openai-key
87
+ # openclaw bshield rules remove baseline <id>
88
+ openclaw bshield rules remove baseline berry:secret:openai-key
89
+ ```
90
+
91
+ Example (Gitleaks Community):
92
+ ```bash
93
+ # openclaw bshield rules remove baseline <id>
94
+ openclaw bshield rules remove baseline gitleaks:secret:aws-access-key
75
95
  ```
76
96
  Expected: CLI returns usage error because remove supports only custom target.
77
97
 
78
98
  ### Rule not found
79
99
  Use this to verify missing-rule behavior.
100
+
101
+ Example (User custom):
80
102
  ```bash
81
103
  openclaw bshield rules remove custom secret:UnknownRule
82
104
  ```
@@ -46,30 +46,54 @@ openclaw bshield rules remove custom <id>
46
46
  Expected: Removes one custom rule by typed id (`secret:<name> | file:<name> | command:<name>`).
47
47
 
48
48
  ### Disable one baseline rule
49
- Use this to disable a single baseline rule when you need a controlled exception.
49
+ Use this to disable baseline rules by stable ID. This applies to both internal `berry:` patterns and `gitleaks:` community rules.
50
+
51
+ Example (Berry Shield):
52
+ ```bash
53
+ # openclaw bshield rules disable baseline <id>
54
+ openclaw bshield rules disable baseline berry:secret:openai-key
55
+ ```
56
+
57
+ Example (Gitleaks Community):
50
58
  ```bash
51
- openclaw bshield rules disable baseline <id>
59
+ # openclaw bshield rules disable baseline <id>
60
+ openclaw bshield rules disable baseline gitleaks:secret:aws-access-token
52
61
  ```
53
62
  Expected: Marks one baseline rule as disabled.
54
63
 
55
64
  ### Disable one custom rule
56
65
  Use this to disable one custom rule without deleting it.
66
+
67
+ Example (User custom):
57
68
  ```bash
58
- openclaw bshield rules disable custom <id>
69
+ # openclaw bshield rules disable custom <id>
70
+ openclaw bshield rules disable custom secret:my-token-rule
59
71
  ```
60
72
  Expected: Marks one custom rule as disabled and keeps it in inventory.
61
73
 
62
74
  ### Enable one baseline rule
63
- Use this to re-enable a previously disabled baseline rule by ID.
75
+ Use this to re-enable baseline rules by stable ID. This applies to both internal `berry:` patterns and `gitleaks:` community rules.
76
+
77
+ Example (Berry Shield):
78
+ ```bash
79
+ # openclaw bshield rules enable baseline <id>
80
+ openclaw bshield rules enable baseline berry:secret:openai-key
81
+ ```
82
+
83
+ Example (Gitleaks Community):
64
84
  ```bash
65
- openclaw bshield rules enable baseline <id>
85
+ # openclaw bshield rules enable baseline <id>
86
+ openclaw bshield rules enable baseline gitleaks:secret:aws-access-token
66
87
  ```
67
88
  Expected: Marks one baseline rule as enabled.
68
89
 
69
90
  ### Enable one custom rule
70
91
  Use this to re-enable one custom rule by ID.
92
+
93
+ Example (User custom):
71
94
  ```bash
72
- openclaw bshield rules enable custom <id>
95
+ # openclaw bshield rules enable custom <id>
96
+ openclaw bshield rules enable custom secret:my-token-rule
73
97
  ```
74
98
  Expected: Marks one custom rule as enabled.
75
99
 
@@ -128,21 +152,36 @@ Expected: Applies enable to full rule scope (`baseline + custom`).
128
152
 
129
153
  ### Wrong target for remove
130
154
  Use this check to validate that remove only accepts the custom target.
155
+
156
+ Example (Berry Shield):
157
+ ```bash
158
+ # openclaw bshield rules remove baseline <id>
159
+ openclaw bshield rules remove baseline berry:secret:openai-key
160
+ ```
161
+
162
+ Example (Gitleaks Community):
131
163
  ```bash
132
- openclaw bshield rules remove baseline secret:openai-key
164
+ # openclaw bshield rules remove baseline <id>
165
+ openclaw bshield rules remove baseline gitleaks:secret:aws-access-token
133
166
  ```
134
167
  Expected: Usage failure (remove supports only custom target).
135
168
 
136
169
  ### Unknown baseline ID
137
170
  Use this check to validate error handling when an ID does not exist in baseline catalog.
171
+
172
+ Example (Berry Shield):
138
173
  ```bash
139
- openclaw bshield rules disable baseline secret:does-not-exist
174
+ # openclaw bshield rules disable baseline <id>
175
+ openclaw bshield rules disable baseline berry:secret:does-not-exist
140
176
  ```
141
177
  Expected: Operation failure (`Unknown baseline rule id`).
142
178
 
143
179
  ### Unknown custom ID
144
180
  Use this check to validate error handling when a custom rule is not found.
181
+
182
+ Example (User custom):
145
183
  ```bash
184
+ # openclaw bshield rules disable custom <id>
146
185
  openclaw bshield rules disable custom secret:does-not-exist
147
186
  ```
148
187
  Expected: Operation failure (`Unknown custom rule id`).
@@ -16,6 +16,7 @@ Show the effective Berry Shield runtime state resolved from OpenClaw plugin conf
16
16
  - Prints current plugin state (`Status`, `Mode`, and rule counters).
17
17
  - Prints policy state (`Profile`, adaptive values, and global escalation toggle).
18
18
  - Prints Vine state (`Mode`, thresholds, retention, and allowlist size).
19
+ - Prints Vine confirmation state (`Confirmation Strategy`, active strategy marker, TTL, attempts, and window values).
19
20
  - Prints each security layer status as `ACTIVE` or `OFF`.
20
21
 
21
22
  ## When to use
@@ -63,6 +64,17 @@ Result expected:
63
64
  - Thresholds and retention values match expected operational tuning.
64
65
  - `Allowlist` shows the number of exempt tools.
65
66
 
67
+ ### Vine Confirmation section
68
+ Command for this check: `openclaw bshield status`.
69
+ Result expected:
70
+ - `Confirmation Strategy` shows the configured runtime contract (`1:1` or `1:N`).
71
+ - `1:1` and `1:N` show which strategy is currently `ACTIVE`.
72
+ - `Code TTL (sec)` shows how long the challenge code remains valid.
73
+ - `Max Attempts` shows how many invalid confirmation tries are tolerated.
74
+ - `Window (sec)` and `Max Actions/Window` matter primarily for `1:N`.
75
+ - `Window (sec)` is the active multi-action approval window after a successful confirmation.
76
+ - `Max Actions/Window` is the maximum number of sensitive actions that one `1:N` approval can unlock inside that window.
77
+
66
78
  ### Security layers section
67
79
  Command for this check: `openclaw bshield status`.
68
80
  Result expected:
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  summary: "CLI reference for `openclaw bshield test` (test one input against active match patterns)"
3
3
  read_when:
4
- - You need to verify if a string matches built-in or custom patterns
4
+ - You need to verify if a string matches baseline or custom patterns
5
5
  - You are validating custom regex behavior before production use
6
6
  title: "test"
7
7
  ---
8
8
 
9
9
  # `openclaw bshield test`
10
10
 
11
- Test one input string against active built-in and custom match patterns.
11
+ Test one input string against active baseline and custom match patterns.
12
12
 
13
13
  ## What it does
14
- - Loads built-in secret/PII patterns and custom secret rules.
14
+ - Loads baseline secret/PII patterns and custom secret rules.
15
15
  - Evaluates the provided input against active patterns.
16
16
  - Prints either no-match output or match details with rule source and redaction placeholder.
17
17
 
@@ -45,7 +45,7 @@ Expected: CLI reports no matches or prints one or more matching rule entries.
45
45
 
46
46
  ## Options
47
47
  Positional argument:
48
- - `<input>`: string to test against active built-in and custom patterns.
48
+ - `<input>`: string to test against active baseline and custom patterns.
49
49
 
50
50
  ## Examples
51
51
 
@@ -78,9 +78,24 @@ openclaw bshield test "SMOKE_WEB_CMD"
78
78
  Expected: `No matches found` because this command does not evaluate custom command/file rules.
79
79
 
80
80
  ### Typed ID input is not a payload value
81
- Use this when input is a rule ID format.
81
+ Use this when input is a rule ID format to confirm it is not used as a test literal.
82
+
83
+ Example (Berry Shield):
84
+ ```bash
85
+ # openclaw bshield test "<input>"
86
+ openclaw bshield test "berry:command:smoke-web-cmd"
87
+ ```
88
+
89
+ Example (Gitleaks Community):
90
+ ```bash
91
+ # openclaw bshield test "<input>"
92
+ openclaw bshield test "gitleaks:secret:aws-access-token"
93
+ ```
94
+
95
+ Example (User custom):
82
96
  ```bash
83
- openclaw bshield test "command:smoke-web-cmd"
97
+ # openclaw bshield test "<input>"
98
+ openclaw bshield test "secret:my-token"
84
99
  ```
85
100
  Expected: no matches and guidance that typed IDs are rule identifiers, not payload values for this command.
86
101
 
@@ -16,6 +16,7 @@ Manage Berry.Vine configuration and tool allowlist from CLI.
16
16
  - Writes deterministic Vine paths (set).
17
17
  - Adds one tool to Vine allowlist (allow).
18
18
  - Removes one tool from Vine allowlist (deny).
19
+ - Opens the interactive confirmation-strategy selector (confirmation).
19
20
 
20
21
  ## When to use
21
22
  - Before smoke tests that need strict/balanced Vine behavior.
@@ -80,6 +81,21 @@ Supported `set` paths:
80
81
  - `thresholds.forcedGuardTurns` (integer `>= 1`)
81
82
  - `retention.maxEntries` (integer `>= 1`)
82
83
  - `retention.ttlSeconds` (integer `>= 1`)
84
+ - `confirmation.strategy` (`one_to_one | one_to_many`)
85
+ - `confirmation.codeTtlSeconds` (integer `>= 1`)
86
+ - `confirmation.maxAttempts` (integer `>= 1`)
87
+ - `confirmation.windowSeconds` (integer `>= 1`)
88
+ - `confirmation.maxActionsPerWindow` (integer `>= 1`)
89
+
90
+ Confirmation strategy meanings:
91
+ - `one_to_one` (`1:1`): one code unlocks one sensitive action.
92
+ - `one_to_many` (`1:N`): one code can unlock multiple sensitive actions inside the active confirmation window.
93
+
94
+ Default:
95
+ - `one_to_many` is the default confirmation strategy.
96
+
97
+ Operational note:
98
+ - if host/runtime binding is degraded, Vine still uses the same visible code-based confirmation flow without changing the configured confirmation strategy itself.
83
99
 
84
100
  ## Tuning guide
85
101
 
@@ -139,6 +155,20 @@ openclaw bshield vine set thresholds.forcedGuardTurns 2
139
155
  ```
140
156
  Result: CLI confirms forced guard turns updated.
141
157
 
158
+ ### Switch confirmation strategy to one-to-one
159
+ Use this when every sensitive action must consume its own confirmation.
160
+ ```bash
161
+ openclaw bshield vine set confirmation.strategy one_to_one
162
+ ```
163
+ Result: CLI confirms `confirmation.strategy = one_to_one`.
164
+
165
+ ### Open interactive confirmation strategy selector
166
+ Use this when you prefer the TTY selector with `1:1` and `1:N` labels.
167
+ ```bash
168
+ openclaw bshield vine confirmation
169
+ ```
170
+ Result: CLI opens the interactive selector and updates strategy after confirmation.
171
+
142
172
  ### Allowlist one tool
143
173
  Use this when one trusted tool should not trigger Vine escalation.
144
174
  ```bash
@@ -180,6 +210,13 @@ openclaw bshield vine set thresholds.forcedGuardTurns zero
180
210
  ```
181
211
  Expected: CLI fails with integer validation message.
182
212
 
213
+ ### Invalid confirmation strategy value
214
+ Use this check when a direct confirmation strategy write uses an unsupported value.
215
+ ```bash
216
+ openclaw bshield vine set confirmation.strategy invalid
217
+ ```
218
+ Expected: CLI fails and prints the allowed confirmation strategies.
219
+
183
220
  ## Related commands
184
221
  - [index](README.md)
185
222
  - [status](status.md)
@@ -16,6 +16,7 @@ Use these pages when you want guided execution rather than command reference.
16
16
 
17
17
  - [secure session](secure-session.md): end-to-end first session with verification checkpoints
18
18
  - [choose your profile](choose-profile.md): decide strict/balanced/minimal with practical checks
19
+ - [choose your Vine confirmation strategy](choose-vine-confirmation.md): decide when to use `1:1` or `1:N`
19
20
  - [tune policy](tune-policy.md): configure adaptive and retention values safely
20
21
  - [build custom rules](build-custom-rules.md): add, test, list, and remove organization-specific rules
21
22
  - [audit-to-enforce rollout](audit-to-enforce-rollout.md): move from observation to active mitigation
@@ -0,0 +1,94 @@
1
+ ---
2
+ summary: "Choose the right Vine confirmation strategy for external-risk workflows"
3
+ read_when:
4
+ - You are deciding between one-to-one and one-to-many confirmation
5
+ - You want a practical Vine baseline before smoke tests or rollout
6
+ - You need to verify confirmation behavior from CLI and status output
7
+ title: "Choose Your Vine Confirmation Strategy"
8
+ ---
9
+
10
+ # `Choose Your Vine Confirmation Strategy`
11
+
12
+ This tutorial helps you choose and validate the Vine confirmation strategy without editing low-level config files.
13
+ Use it when you need a predictable human pause after external-content risk becomes active.
14
+
15
+ ## Prerequisites
16
+
17
+ - Berry Shield installed and enabled
18
+ - Access to run `openclaw bshield` commands
19
+ - Vine layer enabled in the active runtime
20
+
21
+ ## Step 1: Inspect current confirmation state
22
+
23
+ Use this command to inspect the active Vine confirmation strategy before changing anything.
24
+ ```bash
25
+ openclaw bshield status
26
+ ```
27
+ Expected:
28
+ - `Vine Confirmation` section is visible
29
+ - `Confirmation Strategy` is shown as `ONE_TO_ONE` or `ONE_TO_MANY`
30
+
31
+ ## Step 2: Start with the default strategy
32
+
33
+ Use this command when you want the recommended general-purpose confirmation baseline.
34
+ ```bash
35
+ openclaw bshield vine set confirmation.strategy one_to_many
36
+ ```
37
+ Expected:
38
+ - CLI confirms `confirmation.strategy = one_to_many`
39
+
40
+ ## Step 3: Verify the runtime state
41
+
42
+ Use this command to confirm the strategy is visible in status output.
43
+ ```bash
44
+ openclaw bshield status
45
+ ```
46
+ Expected:
47
+ - `Confirmation Strategy` is `ONE_TO_MANY`
48
+ - `ONE_TO_MANY` is marked `ACTIVE`
49
+
50
+ ## Step 4: Try the interactive selector
51
+
52
+ Use this command when you want the TTY selector with `1:1` and `1:N` labels.
53
+ ```bash
54
+ openclaw bshield vine confirmation
55
+ ```
56
+ Expected:
57
+ - CLI opens the confirmation strategy selector
58
+
59
+ ## Step 5: Switch to one-to-one when every action must pause
60
+
61
+ Use this command when each sensitive action should require its own human confirmation.
62
+ ```bash
63
+ openclaw bshield vine set confirmation.strategy one_to_one
64
+ ```
65
+ Expected:
66
+ - CLI confirms `confirmation.strategy = one_to_one`
67
+
68
+ ## Step 6: Return to one-to-many for smoother operator flow
69
+
70
+ Use this command when you want one confirmation to unlock a short bounded sequence of sensitive actions.
71
+ ```bash
72
+ openclaw bshield vine set confirmation.strategy one_to_many
73
+ ```
74
+ Expected:
75
+ - CLI confirms `confirmation.strategy = one_to_many`
76
+
77
+ ## Decision guide
78
+
79
+ - Choose `one_to_one` (`1:1`) when every sensitive action should stop and wait for a new human confirmation.
80
+ - Choose `one_to_many` (`1:N`) when the goal is to insert one visible human pause and then allow a short bounded sequence of related sensitive actions.
81
+ - Keep `one_to_many` as the default when operator experience matters and the bounded window is acceptable.
82
+ - Use `one_to_one` for higher-friction validation sessions or when you want the clearest action-by-action audit trail.
83
+
84
+ ## Related pages
85
+ - [tutorial index](README.md)
86
+ - [Vine layer reference](../layers/vine.md)
87
+ - [vine command reference](../operation/cli/vine.md)
88
+ - [status command reference](../operation/cli/status.md)
89
+
90
+ ---
91
+
92
+ ## Navigation
93
+ - [Back to Tutorials Index](README.md)
94
+ - [Back to Wiki Index](../README.md)
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  summary: "Use report output for incident triage and policy follow-up"
3
3
  read_when:
4
4
  - You need to investigate suspicious activity patterns
@@ -2,7 +2,7 @@
2
2
  "id": "berry-shield",
3
3
  "name": "Berry Shield",
4
4
  "description": "Security plugin that helps to block destructive commands, redact secrets and PII",
5
- "version": "2026.3.3-2",
5
+ "version": "2026.3.20",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
@@ -173,6 +173,46 @@
173
173
  },
174
174
  "default": [],
175
175
  "description": "Tool names exempt from Vine escalation"
176
+ },
177
+ "confirmation": {
178
+ "type": "object",
179
+ "additionalProperties": false,
180
+ "description": "Confirmation flow tuning for sensitive actions under Vine risk",
181
+ "properties": {
182
+ "strategy": {
183
+ "type": "string",
184
+ "enum": [
185
+ "one_to_one",
186
+ "one_to_many"
187
+ ],
188
+ "default": "one_to_many",
189
+ "description": "Confirmation strategy: 1:1 = one code per action, 1:N = one code for multiple actions within a short window"
190
+ },
191
+ "codeTtlSeconds": {
192
+ "type": "integer",
193
+ "minimum": 1,
194
+ "default": 180,
195
+ "description": "Confirmation code time-to-live in seconds"
196
+ },
197
+ "maxAttempts": {
198
+ "type": "integer",
199
+ "minimum": 1,
200
+ "default": 3,
201
+ "description": "Maximum invalid code attempts per challenge"
202
+ },
203
+ "windowSeconds": {
204
+ "type": "integer",
205
+ "minimum": 1,
206
+ "default": 120,
207
+ "description": "Window lifetime in seconds when strategy is 1:N"
208
+ },
209
+ "maxActionsPerWindow": {
210
+ "type": "integer",
211
+ "minimum": 1,
212
+ "default": 3,
213
+ "description": "Maximum sensitive actions allowed during 1:N confirmation window"
214
+ }
215
+ }
176
216
  }
177
217
  }
178
218
  },
@@ -290,4 +330,4 @@
290
330
  "sensitive": false
291
331
  }
292
332
  }
293
- }
333
+ }