Back to the lab

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.

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 on
Worker 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
jsPaint showing a brown house with one blue window, a red triangular roof, green meadow, blue sky, yellow sun and two white clouds
Original screenshot from 5 November 2026 · 14:46:58 · Europe/Berlin

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.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

The last 16 visible requests
RequestPromptCacheOutputTime (s)Decode (tok/s)Status
#6420,753027431.3733.5done
#6324,89114,17972638.2432.3tool_calls
#6221,0295,01826928.1133.5tool_calls
#6124,60913,9251,15549.7333.5tool_calls
#6020,7225,0181,30456.0832.5tool_calls
#5925,23214,8141,38056.3932.4tool_calls
#5821,4835,01885344.2832.9tool_calls
#5725,21113,9052,19282.5332.5tool_calls
#5620,7105,0181,50463.0533.2tool_calls
#5524,82914,38426922.0633.1tool_calls
#5421,4245,01837129.2533.0tool_calls
#5325,28114,40632625.1233.5tool_calls
#5221,4555,0182,19485.4533.9tool_calls
#5125,07714,20147228.7332.8tool_calls
#5021,0695,0182,28787.1833.7tool_calls
#4924,53413,8801,33956.0532.7tool_calls

From progress to the result

Sky and meadow

Sky and meadow

5.11.2026 · 13:53:09 · Europe/Berlin

Open original screenshot
WerkWorker while drawing

WerkWorker while drawing

5.11.2026 · 13:53:15 · Europe/Berlin

Open original screenshot
Inference during the run

Inference during the run

5.11.2026 · 13:53:20 · Europe/Berlin

Open original screenshot
Completed agent run

Completed agent run

5.11.2026 · 14:46:46 · Europe/Berlin

Open original screenshot
Werk top after completion

Werk top after completion

5.11.2026 · 14:46:51 · Europe/Berlin

Open original screenshot
The finished drawing

The finished drawing

5.11.2026 · 14:46:58 · Europe/Berlin

Open original screenshot

The 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 JSON

Includes 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.