Experiment ·
An agent draws a house.
Drawing a house sounds simple. A browser agent has to identify tools and colours, bound regions and check each step against the image. This experiment with WerkWorker and Werk1112 ended after about 62 minutes with a small landscape in jsPaint.
The task
A house, a meadow, a sky.
The original prompt asks for a house with brown fill, blue windows and a red roof, plus a meadow, sky, clouds and sun. The agent received no reference image. The screenshots below were captured during and after the run.
Original prompt from the completed run · English
Open https://jspaint.app and draw a simple house in a colorful landscape:
- A house with a black rectangular outline, filled brown with blue windows and a fully filled red triangular roof.
- A fully filled green meadow beneath the house.
- A fully filled blue sky.
- White clouds and a fully filled yellow sun.
Work alone and exclusively through the browser interface. Keep planning and progress updates brief.
Select the appropriate tool and color for each step. Draw the house rectangle by dragging between opposite corners. Draw the roof with the pencil tool in one continuous, closed triangular drag path, then use the fill tool to fill it red.
Draw the sky and meadow first, then add the house, clouds, and sun. Ensure that the filled regions have no unintended gaps or color spills.
Use the screenshots returned by actions to check your work. Request additional observations only when needed. Correct visible mistakes and inspect the finished picture.
Leave the browser open and briefly report the result.
Browser settings
/effort high
/browser limits 0 0 600
/browser perception auto
/browser onWorker configuration · new session
{
"version": 1,
"model": "qwen3.8-27b-ud-q4_k_xl",
"profile": "coding-basic",
"context_tokens": 32768,
"output_tokens": 4096,
"reasoning_tier": "high",
"delegation_level": "off"
}Werk1112 server command
WERK_LLAMA_ARGS='' werk serve \
--backend cuda \
--host 127.0.0.1 --port 11434 \
--model qwen3.8-27b-ud-q4_k_xl \
--preload qwen3.8-27b-ud-q4_k_xl \
--parallel 1 --ctx-size 32768 \
--gpu-layers 999 --kv-offload true \
--flash-attn true --kv-cache-type q8-0 \
--batch-size 1024 --ubatch-size 256 \
--threads 24 --threads-batch 24
About the experiment
The setup.
- Agent
- WerkWorker v0.2.0 · coding-basic · no subagents
- Inference
- Werk1112 · llama.cpp · CUDA · 1 slot
- Model identifier
- qwen3.8-27b-ud-q4_k_xl
- Budget
- 32,768 context · 4,096 output including 2,048 reasoning tokens
- Output
- Drawing in jsPaint · original screenshots
The drawing was made with jsPaint’s drawing tools. The screenshot preserves the final state and its interface; it is not an illustration generated afterwards.
Technical documentation
64 model requests to a drawing.
The saved session provides workflow, tool outcomes and token totals. Six original screenshots document progress and completion. Werk top adds snapshots of local inference.
- Total run time
- 62 min 1 s
- From start to completion, including waits
- Model requests
- 64
- 64 agent steps · no subagents
- Tool calls
- 63
- Including 54 browser.action calls
- Context budget
- 32,768
- High reasoning · 2,048 tokens within the output budget
Setup and workflow
A task without a reference image
The English prompt describes the landscape, drawing order and roof gesture. The model receives browser observations. The session starts without a user-supplied image attachment.
Local inference with more reasoning budget
Qwen runs through Werk1112, llama.cpp and CUDA with one inference slot. Both agent and server use 32,768 context tokens. Of the 4,096 reserved output tokens, 2,048 are assigned to High reasoning; they are part of the output allowance, not an extra budget.
Shapes, boundaries and fills
A dragged horizon line separates sky and meadow before filling. The house body uses the rectangle tool. The roof path returns to its starting point and is then filled red. Ellipses are used for the sun and clouds.
Inspection and completion
The agent uses action screenshots and two additional observations. It also makes three read-only JavaScript pixel queries, two of which succeed. After the final image it updates the task plan and reports completion.
Timing and status
- Start · Europe/Berlin
- 13:40:40
- Completion · Europe/Berlin
- 14:42:41
- Approval wait time
- 62.679 s
- Time to first tool
- 18.027 s
- High-level plan steps
- 5
- Status
- completed
Duration comes from total_ms. It is separate from server uptime and the later screenshots. The run used continuous mode.
Tokens and context
- Input tokens · total
- 1,409,331
- Output tokens · total
- 63,397
- Reserved output including reasoning
- 4,096
- Last context estimate
- 21,325
- Messages omitted in last context
- 120
Token totals add reported usage across requests; repeated context is counted repeatedly. Output includes reasoning, text and tool calls. 120 omitted messages does not mean 120 compaction passes.
Tools and errors
- task.plan
- 3
- browser.open
- 1
- browser.action
- 54
- browser.observe
- 2
- browser.evaluate
- 3
- Succeeded / validation error / failed
- 57 / 5 / 1
- Model attempts with errors
- 0
Five invalid browser targets were rejected before execution. One pixel query failed. A successful tool call alone does not establish that every part of the drawing is correct.
Memory and inference · Werk top
- GPU memory · used / capacity
- 21.5 / 24.0 GiB
- GPU pressure
- HARD
- Worker RSS
- 10.9 GiB
- Host memory including cache
- 62.0 / 98.3 GiB
- Backend context · used / capacity
- 21,026 / 32,768
- Decode · last 16 visible requests
- 32.3–33.9 tok/s
Snapshot at 14:46:51 Europe/Berlin, after completion. Memory figures are not peaks. The decode range covers the 16 visible requests, not a whole-run average. The monitor shows 01:13:58 of server uptime.
Server and browser
- Backend
- llama.cpp · CUDA
- Inference slots
- 1
- KV cache / Flash attention
- q8-0 / on
- Batch / µBatch
- 1024 / 256
- Threads / batch threads
- 24 / 24
- Browser perception
- auto
- Browser actions · used / budget
- 55 / 600
Launch settings come from the supplied serve command. Browser lifetime and idle limits are 0, with an action budget of 600. The separate repetition guard remains active. Browser actions and total tool calls are different counters.
Outcome and methodological limits
The original images show a brown house with one blue window and a red triangular roof, green meadow, blue sky, sun and two clouds. The tool log preserves the closed pencil path used for the roof. The user confirms that the experiment worked.
The completed status records the agent finishing. The strict browser-UI-only instruction was not fully respected: three browser.evaluate calls attempted to read canvas pixels. These scripts did not draw, but they were additional JavaScript inspections. Two queries succeeded and one failed.
The prompt asks for windows in the plural; one window is visible. The horizon line remains visible inside the house. There is no independent automated verification of every image criterion and no controlled comparison between reasoning tiers.
The last 16 visible requests
Transcribed from the final Werk top screenshot. This is a subset, not a complete trace. Prompt, cache and output are tokens; time and decode values are as displayed.
| Request | Prompt | Cache | Output | Time (s) | Decode (tok/s) | Status |
|---|---|---|---|---|---|---|
| #64 | 20,753 | 0 | 274 | 31.37 | 33.5 | done |
| #63 | 24,891 | 14,179 | 726 | 38.24 | 32.3 | tool_calls |
| #62 | 21,029 | 5,018 | 269 | 28.11 | 33.5 | tool_calls |
| #61 | 24,609 | 13,925 | 1,155 | 49.73 | 33.5 | tool_calls |
| #60 | 20,722 | 5,018 | 1,304 | 56.08 | 32.5 | tool_calls |
| #59 | 25,232 | 14,814 | 1,380 | 56.39 | 32.4 | tool_calls |
| #58 | 21,483 | 5,018 | 853 | 44.28 | 32.9 | tool_calls |
| #57 | 25,211 | 13,905 | 2,192 | 82.53 | 32.5 | tool_calls |
| #56 | 20,710 | 5,018 | 1,504 | 63.05 | 33.2 | tool_calls |
| #55 | 24,829 | 14,384 | 269 | 22.06 | 33.1 | tool_calls |
| #54 | 21,424 | 5,018 | 371 | 29.25 | 33.0 | tool_calls |
| #53 | 25,281 | 14,406 | 326 | 25.12 | 33.5 | tool_calls |
| #52 | 21,455 | 5,018 | 2,194 | 85.45 | 33.9 | tool_calls |
| #51 | 25,077 | 14,201 | 472 | 28.73 | 32.8 | tool_calls |
| #50 | 21,069 | 5,018 | 2,287 | 87.18 | 33.7 | tool_calls |
| #49 | 24,534 | 13,880 | 1,339 | 56.05 | 32.7 | tool_calls |
From progress to the result

Sky and meadow
5.11.2026 · 13:53:09 · Europe/Berlin
Open original screenshot
WerkWorker while drawing
5.11.2026 · 13:53:15 · Europe/Berlin
Open original screenshot
Inference during the run
5.11.2026 · 13:53:20 · Europe/Berlin
Open original screenshot
Completed agent run
5.11.2026 · 14:46:46 · Europe/Berlin
Open original screenshot
Werk top after completion
5.11.2026 · 14:46:51 · Europe/Berlin
Open original screenshot
The finished drawing
5.11.2026 · 14:46:58 · Europe/Berlin
Open original screenshotThe unchanged result image
PNG · 1335 × 996 pixels · 195,975 bytes. The published image is byte-identical to the supplied screenshot.
SHA-256 04e749ed9684d383f815e24f8b1c5425ee509ad0791eccb8f112427c9825a2a7
Download measurements as JSONIncludes the original prompt, selected session metrics, configuration, transcribed monitor values and image checksums. No full conversation history. A documented individual experiment, not a benchmark.
From colour selection to bounded regions
Earlier attempts with 16K context got stuck in loops that included repeated colour selection. In the documented run with 32K and High reasoning, the agent first drew a horizon line and filled the sky and meadow separately. It then used the rectangle tool and brown fill, drew a closed red roof with the pencil, and added the window, sun and clouds.
An outcome, not an isolated model comparison
The run shows that this combination could carry the task through to a visible result. Context capacity and reasoning changed together; worker fixes had also been applied, and the prompt gained brown house fill and blue windows. This does not isolate how much improvement came from reasoning.
What remains visible in the original
The image contains the requested motifs but only one blue window. A horizontal line runs through the brown house. This report preserves those details and the departure from the UI-only instruction: the agent also used JavaScript pixel queries for inspection. The screenshots have not been retouched.
View the original.
Open the result image at full resolution. The exact prompt and browser, worker and server settings are included above for your own experiment. A new session picks up project settings; this individual run does not guarantee an identical result.

