Use Evoui Browser as the default entry point for common, self-terminating web tasks that need a real browser through agent-browser, including navigation, page reading, clicks, forms, login flows, screenshots, web testing, and browser automation. Managed tasks record evidence from the first run for possible reuse. Also use it when the user explicitly asks to execute a complete agent-browser command unchanged. Unless the user requests such an exact command, do not use it for semantic operations that already have a dedicated connector or API, tasks that only require the host's existing Browser or Chrome state, desktop applications, or work that only needs an API or local files. Route interactive or long-running agent-browser invocations through Transparent.
npx skills add https://github.com/Salmonbird/evoui-browser --skill evoui-browser
The host Agent owns the business objective, page interpretation, and next action. Evoui records
Managed calls, gates Replay of verified mechanical steps, and conservatively publishes reusable
knowledge from finished Runs. Use the agent-browser documentation only as internal operating
references; it does not trigger this Skill on its own.
In this contract, stock means upstream agent-browser commands, arguments, and results such as
open, snapshot -i, and click @e3. Evoui passes stock calls through without changing their
semantics.
Use exactly one execution path:
Managed → Domain Knowledge → Browser Session → Observe/Decide/Act/Verify → Finish → Evolution Decision → Terminal Cleanup → Report
Transparent → Stock Result → Report
EVOUI="/absolute/path/to/this-skill/scripts/evoui.py"
EVOUI_ROOT="${EVOUI_HOME:-$HOME/.evoui}"
EVOUI_PROFILE="default" # Replace only when the user specifies a Profile
EVOUI_SESSION="evoui-${EVOUI_PROFILE}" # Replace only when the user specifies a Session
Leave EVOUI_DEBUG_PLAN_TRACE unset in normal mode. When the user explicitly asks to debug
Evoui, choose and export one non-empty trace path for the entire Managed Run. Every Plan call and
the terminal cleanup must inherit the same environment; never enable, disable, or change the path
mid-Run.
Managed argv, stdin, and JSON results are written to local evidence. Evoui is not a redaction,
credential-protection, or privacy-isolation boundary.
optionally attach Replay as needed. Use Transparent for interactive REPL, MCP/stdio, long-running
streams and other calls that do not terminate on their own, or a complete stock command that the
user explicitly asks to execute unchanged. A browser objective that requires the Agent to design
the browser actions remains Managed. Keep the same path for the entire task; mixing unrecorded
Transparent calls into a Managed task leaves Evolution with incomplete evidence.
screenshots, and video—or acting on that output, read the
browser trust boundaries in full.
Browser Runtime, and Evoui Plan in
full, then continue to section 2. Before starting a Run, a control-plane stock read such as
session list may run without creating one; it does not change the execution path.
directly without loading the day-to-day operating contracts. If the user provides a browser
objective and the Agent must design stock calls, use Managed instead. When the stock result needs
interpretation, read the stock agent-browser operating contract
in full before executing:
python3 "$EVOUI" <stock argv>
The wrapper preserves argv, stdin/stdout/stderr, TTY behavior, signals, and exit code exactly.
Transparent creates no Run or knowledge and has no Finish, Evolution, or terminal cleanup. After
the stock call exits, report its result and stop this workflow. Only the environment-recovery
branch described in item 6 may make limited retry attempts, and it must keep the same execution
path.
for interpretation of its corresponding Transparent result. Executing a complete stock argv
unchanged does not by itself load a reference merely because the argv contains one of its flags
or subcommands:
for network/HAR, accessibility, React, Web Vitals, or device-emulation work, read the
complete command reference.
refs, read the snapshot and ref reference.
authentication, read authentication options.
read Session capabilities.
profiling.
proxy support.
video recording.
WebGPU support.
doctor on the normal path. ReadBrowser Environment Recovery only after a
missing command, browser_unavailable, a daemon or Chrome startup failure, or an incompatibility
between the actual CLI and an already loaded reference. Recover within the current execution path.
Derive the lowercase hostname from the target URL, then use
Knowledge Discovery to inspect the domain manifest. Only when it
finds a usable SiteMap or a Procedure candidate relevant to the task, read
Knowledge Consumption and the selected exact revision. Treat
SiteMap entries only as navigation guidance and Procedures only as candidate mechanical actions;
fresh page state always wins. Missing or unusable knowledge disables Replay, while the task continues
normally with stock calls.
default and omit --profilewhen creating a Run. Otherwise, use the specified logical name. When the user does not specify a
Session, use the Profile's stable default Session, evoui-<profile>. Validate an explicitly
requested Session or namespace with the Evoui Plan safe-name rules before using it.
exists, reuse it across Runs and perform a fresh read; otherwise, start it once. Leave every other
Session untouched. Keep one Profile and binding throughout a normal Run.
same environment:
AGENT_BROWSER_HEADED=1 python3 "$EVOUI" --evoui plan ...
When the user explicitly requests headless mode, choose the Session and mode under Browser Runtime
instead.
open <target URL> and obtain afresh URL, title, and interactive snapshot. For a reused Session, first inspect its tabs and fresh
page state. Only when no usable task page exists, perform the same stock-only open in the selected
primary tab, following the Browser Runtime recipe.
it in the same visible window. Then perform a fresh read with the same Run, Session, and Profile.
Continue to business actions only after page evidence confirms the correct tab and the required
authentication state.
Treat each relevant SiteMap entry as a route hypothesis that still requires page validation.
choosing stock or Replay, the inputs, the effect/confirmation boundary, and the expected success
signal. Task understanding, page comparison, or business judgment already completed by the Agent
may produce a Procedure input. The Procedure consumes those decided inputs for a mechanical
continuation; it does not choose the business object or next action again.
the future, prefer interacting with semantic controls that preserve the chain from call input to
page target/action to a positive terminal state. Call inputs may come from the task, a repeatable
derivation, a site option, or the Agent's current judgment. Site options and Agent judgments remain
eligible even when they do not appear literally in the original task, but parameterize them rather
than freezing the current literal. Treat a shortcut that compresses option semantics into an
opaque URL or script as Procedure material only when evidence proves a stable mapping from inputs
to arguments, or when future consumers inherently call the same fixed entry point.
Set observe_after explicitly under the Evoui Plan. Use call:null for an ordinary action. When
the action may become part of a future Procedure or its learning value must be explicitly excluded,
first read Learning Annotation, then set call.
Decide; process success is not business success. A behavior considered for learning must also
preserve evidence of a recognizable entry point, the actual action, and a positive terminal state.
Otherwise, select no_write after Finish.
When the expected success signal is missing, treat the outcome as unknown and stop redispatching
the same action. First perform a fresh read on the exact binding and Session. Use the tab list, URL,
title, and page features to confirm the active page identity. If it does not match, switch to the
target tab and obtain a fresh snapshot; if it matches, still relocate the semantic control from a
fresh snapshot. Only after page evidence proves that the action did not take effect and repeating
it is safe, return to Decide and dispatch it once more. For submissions, creations, sends,
purchases, deletions, or toggles that may already have mutated state, check the result first. Only
after page identity and target freshness are confirmed and the action still fails, diagnose
visibility, disabled state, overlays, or iframes. Do not use coordinates, scripts, or private page
interfaces to recover page context that has not yet been confirmed.
After the page changes, Observe again. When a Plan returns a code that requires confirmation, a fresh
read, a new decision, or a stop, follow the Evoui Plan branch. End each loop turn with page evidence
that proves the target state or with an explicit handoff or stop outcome.
For success/partial_success, obtain fresh page evidence that proves the final business result before
Finish. For failed, preserve a durable receipt or a clear blocking reason. For cancelled, preserve
the user's cancellation reason. Final page evidence is not required for the latter two statuses.
Handle the exact Session under Browser Runtime, then submit a separate Finish Plan. A failed or
cancelled Run must include the reason in note. Preserve the selected Session and window by default;
close the exact Session only when the user explicitly asks. On trace_persistence_failed, follow the
Evoui Plan recovery path and do not Finish the Run. Preserve that Run ID until its one terminal cleanup
attempt and trace disposition have been recorded, then replace $RUN_ID. Repeat the same sequence if a
replacement Run also encounters trace_persistence_failed; do not build a persistent Run registry.
End this stage with either a finished Run or an explicit record that a persistence failure prevented
Finish.
After Finish, always make one Evolution decision; executing Evolution remains optional. Honor an
explicit request for or refusal of Evolution. Otherwise, choose none, Procedure, SiteMap, or both
based on the future consumer, the expected reduction in exploration, judgment, or step-by-step
operations, and the evidence quality of the current Run. One high-value item is enough to enter its
lane. Choose none whenever the available knowledge cannot change future execution, regardless of
quantity. Use no_write only after entering the Procedure lane and finding that a specific Unit is
not worth publishing.
Transcript and UnitSelection. Stop the Procedure lane when units=[].
contains page evidence for the same hostname.
Evolution Candidate and prepare one candidate.
Procedure Decision, then returns one or more
capability decisions from within its own evidence windows and explains every unused eligible
action. Only when a decision is create/update, read
Procedure Schema and return a complete proposal for it.
stay within its windows, every eligible action was reviewed, and no relevant failure was hidden,
then aggregates all capabilities.
create/update, read Procedure Schema. Evidence and actions may be reused,but eliminate semantically duplicate knowledge and write conflicts before validating the final
candidate.
procedure-units.json has returned a valid result and theglobal reconciliation is complete. If any Unit is missing, stop the Procedure lane and do not
publish the completed subset. Edit the SiteMap under SiteMap Evolution, then commit the candidate
under the Evolution Candidate Commit contract.
Report that knowledge was updated only after Commit succeeds. Otherwise, record none, no_write, or
the failure reason. End this stage with every selected lane committed, explicitly abandoned, or at a
reportable failure.
For the current Run, wait until every selected lane has been committed, explicitly
abandoned, or reached a final failure, and until any unknown Candidate Commit receipt has been checked
under the recovery contract or recovery has explicitly stopped. Then run the single terminal
management command:
python3 "$EVOUI" --evoui complete-evolution \
--root "$EVOUI_ROOT" --run "$RUN_ID"
{"trace":"deleted"} means the Run JSON, raw artifacts, Evolution workspace, andRun JSON staging files were deleted. Knowledge, the Browser Profile, and two empty lock anchors
remain.
EVOUI_DEBUG_PLAN_TRACE used by every Plan in this Run.{"trace":"retained"} means the diagnostic trace remains.
persistence_failed, do not roll back the business or knowledge result. The final report muststate that trace may remain. Do not use rm to bypass lock and no-follow boundaries. On
invalid_request or run_unavailable, do not claim that cleanup succeeded.
trace_persistence_failed prevents Finish, attempt this command once after recovery for that Runhas explicitly stopped and before replacing $RUN_ID. Record deleted, retained, or may remain,
then continue recovery with the replacement Run even if cleanup failed. Do not run it while any later
step still needs to read that Run or candidate, and do not retry it during final cleanup.
Transparent creates no Run and never invokes this command.
For Transparent, report only the stock result. For Managed, report after terminal cleanup and include
the business result, final Run status, whether Replay actually ran according to its receipt, whether
knowledge changed, the trace disposition of the final Run and every replaced Run, the Profile and
Session identifiers, and whether the Session is still running. Do not let the final $RUN_ID hide an
earlier may remain. A default Session that remains running does not indicate an uncleared error.
Take salmonbird/evoui-browser from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.