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
{{ message }}
Repository navigation
Commit d9a529d
Browse filesBrowse the repository at this point in the historyBrowse files
## Summary
`fill` writes field values into a browser page and never submits the
form or consumes the vault item, but the CLI's help text, error
messages, and README told agents never to retry it. Agents following
that guidance stall after a transient failure instead of re-running the
fill.
- `vaults_fill.go`: uncertain-outcome and pre-write rejection messages
now say fill is safe to retry (alias fallback is still ruled out)
- `vaults --help` and `vaults credentials --help`: fill is safe to
retry; drop the "never automatically retry" line for fill and WebMCP
invocations
- README: matching wording in the credential and fill-outcome sections
- `vaults items webmcp invoke`: drop the "do not retry" instructions
from outcome/error messages and help; README WebMCP sections match
The CLI still sends fill with `WithMaxRetries(0)`, so behavior is
unchanged; only the guidance changes. No-retry guidance for `1pw_fill`
(which submits the form) and payments is unchanged.
## Testing
- `go test ./...`
---------
Co-authored-by: rgarcia <72655+rgarcia@users.noreply.github.com>
Copy file name to clipboardExpand all lines: README.md
+12-12Lines changed: 12 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -347,11 +347,11 @@ Present the returned collection URL to the user before waiting for `ready`. It i
347
347
bearer credential: share it only with that user. Readiness means required values are
348
348
populated, not that login succeeded. `fill` requires an already-open page and never
349
349
navigates or submits it. Optional `page_url` selects the exact page; cards require it.
350
-
Do not automatically retry failed/unknown fills or fall back to aliases.
350
+
Fill is safe to retry after a failed/unknown outcome; do not fall back to aliases.
351
351
Once ready, use `fill` for ordinary web forms. When the item advertises `webmcp_invoke`, use
352
352
`items webmcp invoke` instead to bind credential fields to existing `null` inputs of a live
353
-
WebMCP tool; the tool may submit or have other side effects, so never retry an uncertain
354
-
outcome (see [Invoke WebMCP tools with vault fields](#invoke-webmcp-tools-with-vault-fields)).
353
+
WebMCP tool; the tool may submit or have other side effects (see
354
+
[Invoke WebMCP tools with vault fields](#invoke-webmcp-tools-with-vault-fields)).
355
355
1Password credentials use their own advertised `1pw_*` operations instead.
356
356
357
357
Create specs list `fields` as an ordered array. Each entry carries a stable `name`
@@ -701,14 +701,14 @@ without appended error text. API/transport errors exit nonzero with a sanitized
701
701
stderr, not a fabricated execution result. No values, selectors, DOM content, or raw browser
702
702
errors are printed in fill results. Pre-write API rejections (400/403/404/409) retain
703
703
HTTP status, recognized error codes, and corrective guidance, and confirm that the
704
-
request wrote no fields. Inspect and correct the cause before deciding on a new fill.
705
-
Transport loss and other uncertain failures retain the no-retry warning.
704
+
request wrote no fields. Correct the cause and retry. Transport loss and other uncertain
705
+
failures note that fields may have been written and that fill is safe to retry.
706
706
707
707
Fill is non-atomic: execution stops at the first failed/unknown field and earlier writes are
708
708
not rolled back. `filled` does not mean the site retained or accepted the value; `completed`
709
-
does not mean logged in or paid. Transport errors do not prove no writes occurred. Inspect the browser
710
-
before deciding what to do next. The CLI never retries, explicitly submits website forms, or falls
711
-
back to aliases. Link cards do not expose `state.aliases` or support egress substitution.
709
+
does not mean logged in or paid. Transport errors do not prove no writes occurred. Fill never
710
+
submits, so it is safe to run again. The CLI does not retry automatically, explicitly submit website
711
+
forms, or fall back to aliases. Link cards do not expose `state.aliases` or support egress substitution.
712
712
AgentCard-only checkout aliases are a separate integration, not a recovery path after a failed
713
713
or indeterminate fill.
714
714
@@ -748,9 +748,9 @@ are untrusted page-provided data and may contain the supplied vault values:
748
748
`completed` and `awaiting_submission` exit 0; neither confirms the website accepted the action.
749
749
After `awaiting_submission`, submit the populated form through Playwright or computer interaction
750
750
instead of invoking the tool again. `canceled`, `error`, and `unknown` exit nonzero with the result
751
-
still on stdout in `-o json`. `unknown` means the tool may have run. Requests are never retried:
752
-
API rejections (400/403/404/409) mean the tool was not invoked by that request; other failures
753
-
and transport loss are uncertain, so inspect the browser instead of re-invoking.
751
+
still on stdout in `-o json`. `unknown` means the tool may have run. API rejections
752
+
(400/403/404/409) mean the tool was not invoked by that request; other failures and transport
753
+
loss are uncertain, so inspect the browser to see whether the tool ran.
754
754
755
755
#### Expansions, updates, and lifecycle
756
756
@@ -1037,7 +1037,7 @@ Destinations are the OTLP/HTTP endpoints sessions export to. They belong to the
1037
1037
-`--timeout-sec <seconds>` - Maximum execution time, 1-120 seconds (defaults server-side)
1038
1038
- Prints the tool's `output` as pretty JSON on completion; tool errors and cancellations exit non-zero
1039
1039
-`awaiting_submission` is successful but warns that a non-autosubmit declarative form was filled, not submitted. Inspect the form, obtain any required confirmation, then submit through Playwright or computer interaction instead of invoking the tool again
1040
-
- Invocations are never retried automatically. A 504 `outcome_unknown` error prints the code, invocation ID, and message and exits non-zero. The tool may already have had side effects; verify the outcome before invoking it again
1040
+
- Invocations are never retried automatically. A 504 `outcome_unknown` error prints the code, invocation ID, and message and exits non-zero. The tool may already have had side effects; check the page to see whether it ran
1041
1041
-`kernel browsers webmcp custom-tools list <id-or-name>` - List registered custom tools with their generated ID, namespace, kind, URL patterns, and metadata
1042
1042
-`-o json` - Output the raw response
1043
1043
-`kernel browsers webmcp custom-tools add <id-or-name> --namespace <ns> --source '<js>'` - Atomically add a namespaced batch of page-backed or CDP-backed custom tools
constvaultFillNotWritten="no fields were written by this request; inspect and correct the cause before deciding on a new fill; do not automatically retry"
95
+
constvaultFillNotWritten="no fields were written by this request; correct the cause and retry"
Copy file name to clipboardExpand all lines: cmd/vaults_webmcp.go
+6-7Lines changed: 6 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,7 @@ import (
18
18
19
19
constmaxVaultWebMCPInputBytes=64*1024
20
20
21
-
constvaultWebMCPUncertain="the tool may have run and submitted or changed site state; inspect the browser and do not retry automatically"
21
+
constvaultWebMCPUncertain="the tool may have run and submitted or changed site state; inspect the browser"
22
22
23
23
varvaultWebMCPErrorMessages=map[string]string{
24
24
"invalid_request": "check bindings, null input slots, field names, formats, timeout_sec, and that input matches the tool's inputSchema",
@@ -46,12 +46,12 @@ var vaultWebMCPStatuses = map[string]struct {
46
46
}{
47
47
"completed": {true, "The tool reported completion; this does not confirm the website accepted the action. Inspect the page."},
48
48
"awaiting_submission": {true, "The tool populated a form with the supplied values without submitting it. "+webMCPAwaitingSubmissionHint},
49
-
"canceled": {false, "The tool reported cancellation and may have had side effects. Inspect the page before deciding on a new invocation; do not retry automatically."},
50
-
"error": {false, "The tool reported an error and may have had side effects. Inspect the page before deciding on a new invocation; do not retry automatically."},
49
+
"canceled": {false, "The tool reported cancellation and may have had side effects. Inspect the page."},
50
+
"error": {false, "The tool reported an error and may have had side effects. Inspect the page."},
51
51
"unknown": {false, vaultWebMCPUncertain},
52
52
}
53
53
54
-
constvaultWebMCPNotInvoked="the tool was not invoked by this request; inspect and correct the cause before deciding on a new invocation; do not automatically retry"
54
+
constvaultWebMCPNotInvoked="the tool was not invoked by this request; correct the cause and retry"
{"error", `{"type":"webmcp_invoke","status":"error","invocation_id":"invoke-3","error_text":"Invalid password for credential-sentinel\u001b[31m"}`, "may have had side effects", false},
186
-
{"canceled", `{"type":"webmcp_invoke","status":"canceled","invocation_id":"invoke-4"}`, "do not retry automatically", false},
186
+
{"canceled", `{"type":"webmcp_invoke","status":"canceled","invocation_id":"invoke-4"}`, "may have had side effects", false},
187
187
{"unknown", `{"type":"webmcp_invoke","status":"unknown"}`, "the tool may have run", false},
0 commit comments