Skip to main content
Glama

WebRun Browser Automation

Update workflow

update_workflow
DestructiveIdempotent

Update an existing workflow. Supply workflowId plus only the fields to change: prompt, trigger, schedule, run settings, variables, presentation. Object and array fields are replaced whole; pass null to clear an optional field. Renaming via title keeps the slug stable. The stored schedule stays a saved setting — scheduled agents already deployed from this workflow keep their own timing. promptTemplate follows the same Goal / Ground rules / Stages / Output runbook contract as create_workflow (see that field's description). memoryContract is the exception to whole-replace: supplying its three fields updates them while platform tracking details are preserved.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
flowNoDashboard flow diagram: { trigger: {kind, phrase}, steps: [{ primary: {label, domain}, verb }] }.
modelNoModel profile key. Omit for the account default.
proxyNoProxy for runs. {source:"WebRun", country?} or {source:"custom", type:"http"|"socks", host, port, username?, password?}. Custom passwords are encrypted at rest and never returned.
titleNoWorkflow title (shown on the dashboard).
memoryNoThe agent's private notebook: shown to it at the start of every run, updated automatically after each run. Seed it ONLY with durable facts the next run must already know — the exact description of a target item (e.g. the specific picture to match), user preferences, known starting state — one short line per fact. Do NOT put task steps here (promptTemplate) or tracking rules here (memoryContract). Most workflows need no seed at all: the agent builds its own notebook as it runs.
skillsNoWorkflow-scoped skill entries (dashboard shape).
triggerNoHow the workflow is meant to be invoked (informational — see notes). Defaults to {type:'manual', source:'manual'}.
listTypeNoAdvanced — defaults automatically ('monitor' when memoryContract is supplied); leave unset.
scheduleNoSaved schedule setting. NOTE: record-only — the workflow does NOT run on a timer until deployed as a scheduled agent (dashboard or Telegram bot).
timezoneNoIANA timezone for runs of this workflow (e.g. "America/New_York").
departmentNoFree-text department label (e.g. "inventory").
outputTypeNoOutput contract: 'text' (default), 'structured' (JSON matching outputSchema), 'structured_csv' (rows for the outputSchema column names).
workflowIdYes24-hex id of the workflow to update (from list_workflows or create_workflow). Required — the title property here is the NEW title for renames, never an identifier.
destinationNoResult destination chip: { type, sub, description }. Types seen: 'custom-api', 'slack', 'sheets', 'email', 'messaging', 'telegram', 'crm'.
startingUrlNoPage Chrome opens at the start of each run. Omit to let the prompt decide.
useCaseTagsNoCategorisation tags.
fileDeferredNoDashboard flag: file selection deferred to run time.
outputSchemaNoJSON Schema object (outputType "structured") or array of column-name strings (outputType "structured_csv").
reachOutModeNoProactive-chat policy for runs: 'off', 'guardrail_only', or 'full'. Omit (or pass null) to inherit the account default (MCP-initiated runs treat inherit as 'off').
wizardPresetNoDashboard wizard preset: { technology, useCases[], destination, destinationSub }.
environmentIdNoMove the workflow to a different environment you own.
memoryEnabledNoPersist per-workflow agent memory across runs (default true).
publicDraftIdNoDashboard public-draft correlation id.
requiredFilesNoPer-run file attachments. Each row may name its own environmentId; ownership is enforced per-file at dispatch.
roiHourlyRateNoHourly rate for the ROI card.
triggerPhraseNoNatural-language phrase that invokes this workflow in chat.
memoryContractNoHow this workflow should behave and what it must remember between runs. REQUIRED whenever the task handles each thing once — new messages, forward once, skip anything already done. Write all three fields in plain English, addressed to the agent; the platform wires the tracking itself. Never write any of this into the prompt: the prompt says what to do, this says how to do it consistently. To explicitly disable tracking for a task that looks like it needs it, pass {mode:'none'}.
policyOptedOutNoOpt this workflow out of the environment's default policy.
promptTemplateNoThe task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as "not stated", never estimate; keep a running tally and restate it every turn ("captured C items · written R rows"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). When a stage delivers per-recipient (message/email each customer), state the MATCHING RULE in that stage — the identifier shared by the source record and the destination recipient (e.g. the customer name exactly as written in the source, matched against the contact name) — and the no-match branch: skip it and report it, never deliver to a similarly-named near-match. Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no "check memory", "record in memory", "store in memory" steps): tracking is authored in memoryContract and WebRun applies it to every run automatically.
refineMessagesNoDashboard builder refinement thread rows: [{ role, content }].
variableValuesNoONLY for explicitly dynamic workflows: default values for {{variables}}, keyed by variable name. NOTE: applied only when triggering via MCP trigger_workflow (merged under caller-supplied variables); REST /trigger and bot triggers ignore this field.
compatibleToolsNoSites/tools the workflow uses: [{ name, loginUrl, domain, role }].
conciergeNotifyNoWhere the concierge announces results (e.g. 'Telegram', 'Slack', 'WhatsApp', 'Microsoft Teams', 'concierge').
workListEnabledNoAdvanced — set automatically when memoryContract is supplied; leave unset.
deployedPolicyIdNoPolicy id to run under (must be owned by you).
orchestrateFirstNoDiscovery mode: one run gathers the WHOLE work list up front, later runs claim one item each.
shortDescriptionNoOne-line summary shown in workflow lists.
roiMinutesPerTaskNoMinutes saved per run (dashboard ROI card).
templateVariablesNoONLY for explicitly dynamic workflows (the user asked for a reusable template): metadata for the {{variables}} used in promptTemplate (drives the dashboard fill-in UI). Omit entirely when the prompt carries concrete values.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugNo
notesNoCaveats to relay (record-only schedule, linked scheduled agents, prompt-structure advice)
titleNo
changesYesHuman-readable field: old → new summaries of what was applied (empty when everything supplied matched the current values)
successYes
workflowIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal non-read-only and destructive nature, but the description goes well beyond: it explains whole-replace semantics for objects/arrays, null-to-clear behavior, slug stability on rename, schedule being record-only, and memoryContract being the exception to whole-replace. This adds significant behavior beyond annotations without any contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but packed with essential detail for a 39-parameter tool. It opens with the core usage, then clarifies edge cases. While not short, it avoids redundancy and is well-structured, earning a strong score though not perfect conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 39 parameters, the description is exceptionally complete. It covers update mechanics, special behaviors (schedule, memoryContract), cross-references to create_workflow for promptTemplate contract, and clarifies the output schema is not needed to explain return values. Nothing an agent needs to invoke it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds valuable update semantics not captured in individual parameter descriptions: the overall 'replace whole' rule, null-to-clear guidance, and the memoryContract exception. This supplements the schema meaningfully, raising the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and a specific resource ('an existing workflow'), and the contrast with sibling tools like create_workflow and get_workflow is implicit. It clearly distinguishes itself as a mutation tool for existing workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear guidance on how to use: supply workflowId plus only changed fields, pass null to clear. It also clarifies the schedule behavior (record-only, deployed agents unaffected). However, it does not explicitly state when NOT to use it (e.g., for creation use create_workflow) or mention alternatives like get_workflow for reading. The usage context is strong but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: browser_task vs create_session differentiate one-off vs persistent sessions, trigger_workflow is explicitly separated from generic task execution, and the pause/resume/stop/terminate actions are scoped to either agents or session tasks. There is no overlap where an agent could mis-select between tools.

Naming Consistency4/5

The vast majority follow a consistent verb_noun pattern (create_, list_, get_, pause_, resume_, stop_, terminate_, trigger_, update_, send_). Two tools deviate: browser_task (noun_verb) and guardrail_response (noun), but these are minor and still readable within the overall convention.

Tool Count4/5

21 tools is on the higher end but justified by the domain covering three distinct resource types (sessions, workflows, agents) plus environments and status/guardrail handling. It is slightly heavy but each tool serves a clear purpose without redundancy.

Completeness3/5

Core lifecycle operations are covered for sessions (create, list, terminate, send task, pause/resume/stop task) and workflows (create, get, list, update, trigger). However, there are notable gaps: no delete operations for workflows or agents (only pause/resume for agents, and no delete_workflow), and no dedicated get_agent detail endpoint. These omissions could force agents to work around missing functionality.

Resources