@weavetab/skills 2.5.0 → 2.5.1
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.
- package/README.md +108 -108
- package/ROUTER.md +43 -43
- package/bin/cli.js +232 -232
- package/browser/dom-strategy.md +121 -119
- package/browser/form-automation.md +84 -87
- package/browser/interaction-pipeline.md +242 -216
- package/browser/tab-and-window.md +136 -136
- package/desktop/desktop-targeting.md +85 -85
- package/desktop/electron-discovery.md +115 -115
- package/developer/github-forensics.md +89 -74
- package/dist/bundled/weavetab-all.md +1885 -1709
- package/dist/bundled/weavetab-browser.md +526 -501
- package/dist/bundled/weavetab-desktop.md +176 -176
- package/dist/bundled/weavetab-developer.md +84 -67
- package/dist/bundled/weavetab-documents.md +184 -142
- package/dist/bundled/weavetab-memory.md +259 -233
- package/dist/bundled/weavetab-network-and-perf.md +250 -223
- package/dist/bundled/weavetab-plugins.md +88 -83
- package/dist/bundled/weavetab-resilience.md +244 -216
- package/dist/bundled/weavetab-security.md +93 -87
- package/dist/granular/browser_dom-strategy.md +121 -119
- package/dist/granular/browser_form-automation.md +84 -87
- package/dist/granular/browser_interaction-pipeline.md +242 -216
- package/dist/granular/browser_tab-and-window.md +136 -136
- package/dist/granular/desktop_desktop-targeting.md +85 -85
- package/dist/granular/desktop_electron-discovery.md +115 -115
- package/dist/granular/developer_github-forensics.md +89 -74
- package/dist/granular/documents_canvas-and-visual-capture.md +117 -103
- package/dist/granular/documents_office-document-ingestion.md +91 -63
- package/dist/granular/memory_selector-memory-system.md +127 -127
- package/dist/granular/memory_session-trail.md +111 -95
- package/dist/granular/memory_site-learning.md +62 -53
- package/dist/granular/network-and-perf_device-and-environment.md +100 -87
- package/dist/granular/network-and-perf_network-intercept-and-mock.md +97 -84
- package/dist/granular/network-and-perf_performance-and-vitals.md +86 -84
- package/dist/granular/plugins_hooks-and-overrides.md +40 -35
- package/dist/granular/plugins_plugin-runtime.md +63 -63
- package/dist/granular/resilience_loop-breaker.md +72 -67
- package/dist/granular/resilience_session-time-travel.md +146 -131
- package/dist/granular/resilience_stale-ref-recovery.md +61 -53
- package/dist/granular/security_rbac-and-policies.md +50 -47
- package/dist/granular/security_secret-containment-protocol.md +62 -59
- package/documents/canvas-and-visual-capture.md +117 -103
- package/documents/office-document-ingestion.md +91 -63
- package/evals/evaluator.js +146 -146
- package/evals/scenarios.json +239 -239
- package/memory/selector-memory-system.md +127 -127
- package/memory/session-trail.md +111 -95
- package/memory/site-learning.md +61 -52
- package/network-and-perf/device-and-environment.md +100 -87
- package/network-and-perf/network-intercept-and-mock.md +97 -84
- package/network-and-perf/performance-and-vitals.md +86 -84
- package/package.json +74 -73
- package/plugins/hooks-and-overrides.md +40 -35
- package/plugins/plugin-runtime.md +63 -63
- package/resilience/loop-breaker.md +72 -67
- package/resilience/session-time-travel.md +146 -131
- package/resilience/stale-ref-recovery.md +61 -53
- package/security/rbac-and-policies.md +50 -47
- package/security/secret-containment-protocol.md +62 -59
- package/skills.json +425 -426
- package/src/api.js +239 -239
|
@@ -1,131 +1,146 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: session-time-travel
|
|
3
|
-
domain: resilience
|
|
4
|
-
triggers:
|
|
5
|
-
- "time travel"
|
|
6
|
-
- "browser checkpoint"
|
|
7
|
-
- "rollback session"
|
|
8
|
-
- "save state"
|
|
9
|
-
- "restore cookies"
|
|
10
|
-
tools:
|
|
11
|
-
- "browser_checkpoint"
|
|
12
|
-
- "browser_cookies"
|
|
13
|
-
- "browser_storage"
|
|
14
|
-
weavetab: ">=2.5.0"
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# Session Time-Travel & Instant State Rollback
|
|
18
|
-
|
|
19
|
-
In complex multi-step workflows (e.g. checkout funnels, multi-page configuration wizards, onboarding questionnaires), an error at Step 7 traditionally forces an agent to reload the root URL, re-authenticate, and waste 10+ turns repeating steps.
|
|
20
|
-
|
|
21
|
-
`browser_checkpoint` enables instantaneous time-travel by snapshotting and restoring complete browser session state.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 1. What a Checkpoint Captures
|
|
26
|
-
|
|
27
|
-
A single named checkpoint atomically preserves:
|
|
28
|
-
- **Cookies**: Full domain cookies including `HttpOnly`, `Secure`, and `SameSite` flags.
|
|
29
|
-
- **Web Storage**: Entire `localStorage` and `sessionStorage` key-value maps.
|
|
30
|
-
- **Navigation State**: Exact page URL, scroll positions (`x`, `y`), and page title.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 2. Checkpoint Operations
|
|
35
|
-
|
|
36
|
-
### A. Saving a Checkpoint (`save`)
|
|
37
|
-
Create a checkpoint right before undertaking risky, branching, or destructive actions:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"action": "save",
|
|
42
|
-
"name": "pre_checkout_authenticated"
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### B. Restoring a Checkpoint (`restore`)
|
|
47
|
-
If a downstream step errors out, times out, or hits an invalid state, roll back immediately:
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"action": "restore",
|
|
52
|
-
"name": "pre_checkout_authenticated"
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
*Latency: ~15ms*. The page navigates back to the checkpoint URL with cookies and storage atomically injected.
|
|
56
|
-
|
|
57
|
-
### C. Listing Checkpoints (`list`)
|
|
58
|
-
Inspect all active checkpoints for the current page target:
|
|
59
|
-
|
|
60
|
-
```json
|
|
61
|
-
{
|
|
62
|
-
"action": "list"
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### D. Cleaning Up (`delete`)
|
|
67
|
-
Free memory once a workflow has concluded:
|
|
68
|
-
|
|
69
|
-
```json
|
|
70
|
-
{
|
|
71
|
-
"action": "delete",
|
|
72
|
-
"name": "pre_checkout_authenticated"
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## 3. High-Leverage Agent Pattern
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
1. Authenticate to Target Portal
|
|
82
|
-
2. browser_checkpoint({ action: "save", name: "auth_ready" })
|
|
83
|
-
3. Attempt automated action sequence (e.g. form filling or testing)
|
|
84
|
-
4. IF error occurs:
|
|
85
|
-
browser_checkpoint({ action: "restore", name: "auth_ready" })
|
|
86
|
-
-> Agent is immediately back at authenticated state without re-login!
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## 4. Fine-Grained Cookie Management (`browser_cookies`)
|
|
92
|
-
|
|
93
|
-
Inspect, set, or delete individual browser session cookies without restoring an entire checkpoint:
|
|
94
|
-
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"action": "get",
|
|
98
|
-
"
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Or inject an authentication cookie:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
"
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
1
|
+
---
|
|
2
|
+
id: session-time-travel
|
|
3
|
+
domain: resilience
|
|
4
|
+
triggers:
|
|
5
|
+
- "time travel"
|
|
6
|
+
- "browser checkpoint"
|
|
7
|
+
- "rollback session"
|
|
8
|
+
- "save state"
|
|
9
|
+
- "restore cookies"
|
|
10
|
+
tools:
|
|
11
|
+
- "browser_checkpoint"
|
|
12
|
+
- "browser_cookies"
|
|
13
|
+
- "browser_storage"
|
|
14
|
+
weavetab: ">=2.5.0"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Session Time-Travel & Instant State Rollback
|
|
18
|
+
|
|
19
|
+
In complex multi-step workflows (e.g. checkout funnels, multi-page configuration wizards, onboarding questionnaires), an error at Step 7 traditionally forces an agent to reload the root URL, re-authenticate, and waste 10+ turns repeating steps.
|
|
20
|
+
|
|
21
|
+
`browser_checkpoint` enables instantaneous time-travel by snapshotting and restoring complete browser session state.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. What a Checkpoint Captures
|
|
26
|
+
|
|
27
|
+
A single named checkpoint atomically preserves:
|
|
28
|
+
- **Cookies**: Full domain cookies including `HttpOnly`, `Secure`, and `SameSite` flags.
|
|
29
|
+
- **Web Storage**: Entire `localStorage` and `sessionStorage` key-value maps.
|
|
30
|
+
- **Navigation State**: Exact page URL, scroll positions (`x`, `y`), and page title.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. Checkpoint Operations
|
|
35
|
+
|
|
36
|
+
### A. Saving a Checkpoint (`save`)
|
|
37
|
+
Create a checkpoint right before undertaking risky, branching, or destructive actions:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"action": "save",
|
|
42
|
+
"name": "pre_checkout_authenticated"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### B. Restoring a Checkpoint (`restore`)
|
|
47
|
+
If a downstream step errors out, times out, or hits an invalid state, roll back immediately:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"action": "restore",
|
|
52
|
+
"name": "pre_checkout_authenticated"
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
*Latency: ~15ms*. The page navigates back to the checkpoint URL with cookies and storage atomically injected.
|
|
56
|
+
|
|
57
|
+
### C. Listing Checkpoints (`list`)
|
|
58
|
+
Inspect all active checkpoints for the current page target:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"action": "list"
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### D. Cleaning Up (`delete`)
|
|
67
|
+
Free memory once a workflow has concluded:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"action": "delete",
|
|
72
|
+
"name": "pre_checkout_authenticated"
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 3. High-Leverage Agent Pattern
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
1. Authenticate to Target Portal
|
|
82
|
+
2. browser_checkpoint({ action: "save", name: "auth_ready" })
|
|
83
|
+
3. Attempt automated action sequence (e.g. form filling or testing)
|
|
84
|
+
4. IF error occurs:
|
|
85
|
+
browser_checkpoint({ action: "restore", name: "auth_ready" })
|
|
86
|
+
-> Agent is immediately back at authenticated state without re-login!
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 4. Fine-Grained Cookie Management (`browser_cookies`)
|
|
92
|
+
|
|
93
|
+
Inspect, set, or delete individual browser session cookies without restoring an entire checkpoint:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"action": "get",
|
|
98
|
+
"url": "https://example.com"
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Or inject an authentication cookie (one cookie per call):
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"action": "set",
|
|
107
|
+
"name": "session_token",
|
|
108
|
+
"value": "xyz123",
|
|
109
|
+
"domain": "example.com",
|
|
110
|
+
"path": "/",
|
|
111
|
+
"httpOnly": true,
|
|
112
|
+
"secure": true,
|
|
113
|
+
"sameSite": "Lax"
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Delete a cookie by name (and optionally domain/path):
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"action": "delete",
|
|
122
|
+
"name": "session_token",
|
|
123
|
+
"domain": "example.com"
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Accepted fields: `name`, `value`, `domain`, `path`, `expires` (Unix seconds), `httpOnly`, `secure`, `sameSite` (`Strict`/`Lax`/`None`), and `url` (for `get`).
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 5. Web Storage Inspection & Injection (`browser_storage`)
|
|
132
|
+
|
|
133
|
+
Query or clear `localStorage` and `sessionStorage` keys. Choose the store with `scope`:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"scope": "local",
|
|
138
|
+
"action": "get",
|
|
139
|
+
"key": "authToken"
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- **`scope`**: `"local"` or `"session"`.
|
|
144
|
+
- **`action`**: `get`, `set`, `remove`, `list` (all keys + values), or `clear` (the whole scope).
|
|
145
|
+
- **`key`** is required for `get`, `set`, and `remove`; **`value`** is required for `set`.
|
|
146
|
+
|
|
@@ -1,53 +1,61 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: stale-ref-recovery
|
|
3
|
-
domain: resilience
|
|
4
|
-
triggers:
|
|
5
|
-
- "stale element reference"
|
|
6
|
-
- "detached from dom"
|
|
7
|
-
- "spa re-render"
|
|
8
|
-
- "react hydration"
|
|
9
|
-
- "element not found"
|
|
10
|
-
tools:
|
|
11
|
-
- "browser_find"
|
|
12
|
-
- "browser_map"
|
|
13
|
-
- "browser_click"
|
|
14
|
-
weavetab: ">=2.5.0"
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# Stale Ref Recovery & SPA Hydration Resilience
|
|
18
|
-
|
|
19
|
-
In modern Single Page Applications (built with React, Next.js, Vue, Nuxt, Svelte), DOM nodes are frequently destroyed and recreated during client-side hydration or reactive state updates. This
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 1. The
|
|
24
|
-
|
|
25
|
-
When a tool receives a
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
[Action on w:14
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
[
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
[
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
[
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
1
|
+
---
|
|
2
|
+
id: stale-ref-recovery
|
|
3
|
+
domain: resilience
|
|
4
|
+
triggers:
|
|
5
|
+
- "stale element reference"
|
|
6
|
+
- "detached from dom"
|
|
7
|
+
- "spa re-render"
|
|
8
|
+
- "react hydration"
|
|
9
|
+
- "element not found"
|
|
10
|
+
tools:
|
|
11
|
+
- "browser_find"
|
|
12
|
+
- "browser_map"
|
|
13
|
+
- "browser_click"
|
|
14
|
+
weavetab: ">=2.5.0"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Stale Ref Recovery & SPA Hydration Resilience
|
|
18
|
+
|
|
19
|
+
In modern Single Page Applications (built with React, Next.js, Vue, Nuxt, Svelte), DOM nodes are frequently destroyed and recreated during client-side hydration or reactive state updates. This can invalidate a volatile `w:NN` handle between reads and actions.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. The Multi-Tier Auto-Recovery Heuristic
|
|
24
|
+
|
|
25
|
+
When a tool receives a detached or invalidated `ref`, Weavetab attempts to re-resolve it instead of failing immediately. The recovery runs a sub-5ms heuristic over these strategies (in order) and re-stamps `data-wt-id="NN"` onto the live node:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
[Action on w:14 fails / handle detached]
|
|
29
|
+
│
|
|
30
|
+
▼
|
|
31
|
+
[1. Connected node + fingerprint check]
|
|
32
|
+
│ (if not found)
|
|
33
|
+
▼
|
|
34
|
+
[2. Stored CSS selector] (data-testid, id, class)
|
|
35
|
+
│ (if not found)
|
|
36
|
+
▼
|
|
37
|
+
[3. Exact label / aria-label match]
|
|
38
|
+
│ (if not found)
|
|
39
|
+
▼
|
|
40
|
+
[4. Placeholder / name attribute match]
|
|
41
|
+
│ (if not found)
|
|
42
|
+
▼
|
|
43
|
+
[5. Fuzzy substring match] (when label length >= 3)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The successful strategy is reported back to the agent (`stored_selector`, `exact_label`, `placeholder_or_name`, `fuzzy_label`). If every strategy misses, the tool returns a hard failure.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. Agent Reactive Behavior
|
|
51
|
+
|
|
52
|
+
If an action fails because all recovery strategies were exhausted, the tool returns one of:
|
|
53
|
+
|
|
54
|
+
- `error_code: "ELEMENT_NOT_FOUND"` — the ref was in the cached map but no longer exists in the DOM.
|
|
55
|
+
- `error_code: "FINGERPRINT_MISMATCH"` — an element exists but its tag/role fingerprint no longer matches; the DOM was likely rebuilt.
|
|
56
|
+
|
|
57
|
+
Either way:
|
|
58
|
+
|
|
59
|
+
1. **Do NOT Repeat the Identical Call**: retrying the exact same stale `ref` (`w:14`) will fail again.
|
|
60
|
+
2. **Execute a Fast Targeted Lookup**: run `browser_find` with the text of the button or input, or refresh handles with `browser_map`.
|
|
61
|
+
3. **Execute the Action on the New Handle**: use the updated ref returned by `browser_find`/`browser_map`.
|
|
@@ -1,47 +1,50 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: rbac-and-policies
|
|
3
|
-
domain: security
|
|
4
|
-
triggers:
|
|
5
|
-
- "rbac"
|
|
6
|
-
- "security policy"
|
|
7
|
-
- "role boundaries"
|
|
8
|
-
- "viewer agent"
|
|
9
|
-
- "permission denied"
|
|
10
|
-
tools:
|
|
11
|
-
- "browser_inspect"
|
|
12
|
-
- "browser_scrape"
|
|
13
|
-
- "browser_map"
|
|
14
|
-
weavetab: ">=2.5.0"
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# Role-Based Access Control (RBAC) & Agent Guardrails
|
|
18
|
-
|
|
19
|
-
Weavetab allows developers to run untrusted or lower-privilege subagents within strict security boundaries to prevent accidental destructive operations or data leaks.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
---
|
|
2
|
+
id: rbac-and-policies
|
|
3
|
+
domain: security
|
|
4
|
+
triggers:
|
|
5
|
+
- "rbac"
|
|
6
|
+
- "security policy"
|
|
7
|
+
- "role boundaries"
|
|
8
|
+
- "viewer agent"
|
|
9
|
+
- "permission denied"
|
|
10
|
+
tools:
|
|
11
|
+
- "browser_inspect"
|
|
12
|
+
- "browser_scrape"
|
|
13
|
+
- "browser_map"
|
|
14
|
+
weavetab: ">=2.5.0"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Role-Based Access Control (RBAC) & Agent Guardrails
|
|
18
|
+
|
|
19
|
+
Weavetab allows developers to run untrusted or lower-privilege subagents within strict security boundaries to prevent accidental destructive operations or data leaks.
|
|
20
|
+
|
|
21
|
+
Roles are configured per agent (in `config.json`). The server checks the role **before** launching a browser or resolving the target.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. The 5 Security Roles
|
|
26
|
+
|
|
27
|
+
| Role | Tool Access | Intended Use |
|
|
28
|
+
| :--- | :--- | :--- |
|
|
29
|
+
| `admin` | Full access (`*`). | Primary operator / lead agent. |
|
|
30
|
+
| `operator` | Full access (`*`). | Standard automation agent. |
|
|
31
|
+
| `automation` | Every tool except `browser_thoughts` — automation agents must be non-interactive. | Background cron / worker. |
|
|
32
|
+
| `viewer` | Read-only set only: `browser_map`, `browser_find`, `browser_scrape`, `browser_console`, `browser_eval`, `browser_inspect`, `browser_extract_design`, `browser_snapshot`, `browser_screenshot`, `browser_pdf`, `browser_cookies`, `browser_tabs`, `browser_wait`, `browser_pattern_learn`. | Research subagents / scrapers. |
|
|
33
|
+
| `system` | `browser_thoughts`, `browser_detect`, `browser_performance`, `browser_checkpoint`, `browser_pattern_learn`. | Internal/system operations. |
|
|
34
|
+
|
|
35
|
+
Any other role value is treated as fully allowed.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 2. Handling Permission Denials
|
|
40
|
+
|
|
41
|
+
There is no JSON `error_code` for RBAC. A denied call fails with `isError: true` and a plain-text message prefixed with `[!]`:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
[!] Role 'viewer' does not have permission to use 'browser_click'. Viewer role only permits read-only tools (map/find/scrape/console/eval/inspect/snapshot/pdf/cookies).
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Protocol:
|
|
48
|
+
1. Do not retry the denied tool — the role will not change mid-session.
|
|
49
|
+
2. Delegate the interactive action to the parent agent or a higher-privilege operator.
|
|
50
|
+
3. Limit your output to findings gathered via read-only tools (`browser_scrape`, `browser_map`, `browser_inspect`).
|
|
@@ -1,59 +1,62 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: secret-containment-protocol
|
|
3
|
-
domain: security
|
|
4
|
-
triggers:
|
|
5
|
-
- "enter password"
|
|
6
|
-
- "input credentials"
|
|
7
|
-
- "api key entry"
|
|
8
|
-
- "sensitive token"
|
|
9
|
-
- "secret containment"
|
|
10
|
-
tools:
|
|
11
|
-
- "browser_type_secret"
|
|
12
|
-
weavetab: ">=2.5.0"
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Secret Containment Protocol & Zero-Bleed Execution
|
|
16
|
-
|
|
17
|
-
AI agent transcripts, LLM providers, and tool logs represent massive attack surfaces for credential leaks. Weavetab enforces a hardware-grade **Zero-Bleed Security Guarantee** for sensitive inputs.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 1. Entering Credentials with `browser_type_secret`
|
|
22
|
-
|
|
23
|
-
Whenever an agent inputs passwords, two-factor backup codes, credit card numbers, or proprietary API keys, you MUST use `browser_type_secret
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
>
|
|
57
|
-
>
|
|
58
|
-
>
|
|
59
|
-
>
|
|
1
|
+
---
|
|
2
|
+
id: secret-containment-protocol
|
|
3
|
+
domain: security
|
|
4
|
+
triggers:
|
|
5
|
+
- "enter password"
|
|
6
|
+
- "input credentials"
|
|
7
|
+
- "api key entry"
|
|
8
|
+
- "sensitive token"
|
|
9
|
+
- "secret containment"
|
|
10
|
+
tools:
|
|
11
|
+
- "browser_type_secret"
|
|
12
|
+
weavetab: ">=2.5.0"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Secret Containment Protocol & Zero-Bleed Execution
|
|
16
|
+
|
|
17
|
+
AI agent transcripts, LLM providers, and tool logs represent massive attack surfaces for credential leaks. Weavetab enforces a hardware-grade **Zero-Bleed Security Guarantee** for sensitive inputs.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Entering Credentials with `browser_type_secret`
|
|
22
|
+
|
|
23
|
+
Whenever an agent inputs passwords, two-factor backup codes, credit card numbers, or proprietary API keys, you MUST use `browser_type_secret`.
|
|
24
|
+
|
|
25
|
+
`browser_type_secret` never accepts a plaintext secret. It reads the value from an **environment variable** on the host running the MCP server, so the secret never reaches the agent transcript. Set the variable first (e.g. `export PORTAL_PASSWORD="…"`), then reference it by key:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"ref": "w:12",
|
|
30
|
+
"envKey": "PORTAL_PASSWORD"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Accepted targeting parameters: `id` (alias `ref`) or `target` (CSS selector). `envKey` is **required**.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 2. The Zero-Bleed Guarantee Architecture
|
|
39
|
+
|
|
40
|
+
When `browser_type_secret` is invoked:
|
|
41
|
+
1. **CDP Interception**: The secret is typed via masked CDP synthetic key events.
|
|
42
|
+
2. **HUD Redaction**: The browser Heads-Up Display (HUD) and visual overlay strictly renders bullets (`••••••••`).
|
|
43
|
+
3. **Log Sanitization**: Console logs, MCP server logs, and JSON return values strip the secret string and return:
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"success": true,
|
|
47
|
+
"message": "Secret typed successfully into ref 'w:12' (length: 26). Value redacted."
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
4. **No Re-Emission**: Never print or echo raw credentials into subsequent model thoughts or conversation messages.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 3. Strict Operating Prohibition
|
|
55
|
+
|
|
56
|
+
> [!CAUTION]
|
|
57
|
+
> Under NO circumstances should an agent pass passwords or credentials to:
|
|
58
|
+
> - `browser_type`
|
|
59
|
+
> - `browser_fill`
|
|
60
|
+
> - `browser_eval`
|
|
61
|
+
>
|
|
62
|
+
> Doing so causes plaintext secrets to enter unmasked transcripts and tool logs.
|