Sign inSign up

taojdcn/duotail-waterwheel

By taojdcn

Updated 3 days ago

Duotail Waterwheel front end AI test agent. Home page: https://waterwheel.duotail.com/

Image
Developer tools
0

4.6K

taojdcn/duotail-waterwheel repository overview

Duotail Waterwheel Docker Image


Overview

Duotail Waterwheel Docker Image contains a harnessed AI agent capable of complicated frontend web testing.

For how to config and use this image, please see documents at https://waterwheel.duotail.com/

The script to create this docker image can be found at https://github.com/taodong/duotail-greenhouse/tree/main/waterwheel


Environment Variables

MCP Variables
VariableDescriptionDefault
ENABLE_PLAYWRIGHT_MCPEnable Playwright MCPtrue
FIREWALL_DEBUGEnable firewall debug logsfalse
ENABLE_EMAIL_MCPEnable Email MCPtrue
MAIL_HOSTThe SMTP host to send email tolocalhost
MAIL_PORTThe SMTP port to send email to25
MAILHOG_URLThe Mailhog URL to check received emailshttp://localhost:8025
EMAIL_PERM_FILEThe email permission file/agent/instructions/email-permissions.yaml

ENABLE_PLAYWRIGHT_MCP should always be true for the agent to work properly.

We recommend to keep ENABLE_EMAIL_MCP=true to restrict the agent's ability in email sending. Please update Tools section in /agent/config/system.prompt.md if turn off the email mcp.

Agent Variables
ParameterDescriptionDefault
AI_PROVIDERAI provider name: anthropic, openai, gemini or deepseekanthropic
AI_MODELAI model name
AI_API_KEYAI API key
AI_MAX_TOKENSMax tokens for a single response8192
AI_TEMPERATURETemperature (0.0 for strict QA/Logic, 0.7 for creative)0.0
GLOBAL_CONTEXTPath to a JSON file of global variables/URLs injected into the system prompt/agent/instructions/global_context.json
EXTRA_INSTRUCTIONPath to a Markdown file whose content is appended to the system prompt; ignored if the file does not exist/agent/instructions/extra-instructions.md
SKILLS_DIRDirectory of user <skill-name>/SKILL.md skill folders (same layout as Anthropic's Agent Skills); the model loads a skill's full instructions on demand via the load_skill tool. Ignored if the directory does not exist or is empty. Point it at a different folder to swap skills without editing task files./agent/skills
PRESET_CONTEXTPath to a JSON file of preset context values seeded into the context store before any task runs; ignored if the file does not exist/agent/instructions/preset-context.json
TEST_RUN_TIMEOUTMaximum total duration (in seconds) for the entire test run before it is stopped with status timeout7200 (2 hours)
STEP_TIMEOUT_SECMaximum duration (in seconds) the agent may idle without receiving an LLM response per step before the task is marked failed120 (2 minutes)
MAX_SNAPSHOTS_HISTORYMaximum number of recent browser_snapshot tool results to keep in LLM message history; negative values are treated as 2; 0 blocks direct browser_snapshot calls at runtime (use take_verification_snapshot instead)2
CONTEXT_COMPRESSIONEnables message compression flow (planning + history compaction after complete_verification); evaluates to true only when set to true (case-insensitive)false
COMPRESSION_DEBUGEmits one compression debug log right before the next LLM call after a compression; evaluates to true only when set to true (case-insensitive)false
COMPRESSION_DEBUG_INCLUDE_REQUESTWhen COMPRESSION_DEBUG=true, logs the compressed messages (summary and continue prompt) instead of the compact summary modefalse
COMPRESSION_THRESHOLD_MINInitial input token threshold for compression eligibility; non-positive values fall back to 12500. Requires CONTEXT_COMPRESSION=true.12500
COMPRESSION_THRESHOLD_LEAPStep size for advancing the compression threshold after each compression; non-positive values fall back to 5000. Requires CONTEXT_COMPRESSION=true.5000
LARGE_CONTENT_THRESHOLDUTF-8 byte threshold for large content guards in API logging and snapshot retention; non-positive values fall back to 1000010000
RATE_LIMIT_RETRYMaximum number of allowed rate-limit retries per task; negative values allow unlimited retries1
MAX_ITERATIONSMaximum number of LLM call iterations per task before the loop is forcibly stopped300
ENABLE_API_LOGGINGEnables LLM API request/response logging to /agent/outputs/api-log.json; evaluates to true only when set to true (case-insensitive)false
MAXIMUM_RESTRICTED_TOOL_USAGEMaximum number of cumulative calls to restricted tools (see restricted-tools below) allowed between verified progress checkpoints (a successful complete_verification or update_context_map). When the count exceeds this limit the task fails immediately. 0 or negative values disable the guard. The counter resets to 0 at the start of each task.3
Static Agent Configuration

The following parameters are defined in config/agent-config.json and cannot be overridden via environment variables. Editing the file takes effect without a code change.

KeyDescriptionTypeDefault
restricted-toolsList of tool names whose calls increment the restricted tool usage counter (see MAXIMUM_RESTRICTED_TOOL_USAGE above).string[]["browser_run_code_unsafe"]
id-enforced-toolsMap of tool name to the list of input field names whose values must be normalized before dispatch. When a field value contains =, only the substring after the last = is kept (e.g. aria-ref=e42e42). Fields with no = are passed through unchanged. Applies to MCP tool calls only; an empty object disables normalization.Record<string, string[]>{"browser_click":["target"],"browser_fill_form":["ref"]}

Preinstalled MCP

Playwright MCP

Playwright MCP server provides browser automation capabilites.

Duotail Email Test MCP

A simple MCP server sends test emails through Spring boot mail and receives emails through a given Mailhog url. There is no active configuratoin check for this MCP. Test task fail only when the agent tries email operations while the MCP isn't properly configured.

Tag summary

Content type

Image

Digest

sha256:4f0f9e93a

Size

1.5 GB

Last updated

3 days ago

docker pull taojdcn/duotail-waterwheel:latest-mac