VIEWCRAFT: Evolving What Multimodal Agents See and How They Read It
Organizations: PKU · UW–Madison · CMU · PolyU · CASIA · HKU · MIT-IBM Computing Research Lab
Abstract
Reusable skills improve multimodal agents without updating model weights, but their effectiveness depends on both the evidence presented and the procedure used to read it. We introduce ViewCraft, which jointly evolves an executable evidence interface and its reading procedure. The interface selects, transforms, and organizes observations; the reader interprets the resulting views. Failure traces guide revisions, replay and paired evaluation retain useful changes, and interface projection recovers visual edits from eligible rejected joint proposals. Across eight benchmarks, ViewCraft improves over direct execution by an average of points in task score, with gains on every benchmark. The advantage persists at a matched input-token budget. On all five multi-source tasks, the learned interface uses 8%-15% fewer input tokens than Initial skill. The learned skills also transfer across executors and outperform direct execution in every evaluated transfer, supporting evidence construction and reading as a coupled, reusable skill.
Figures & tables
| Method family | Reusable state | Visual support | Reader–visual co-edit | Executable visual edits | Replay + paired gate | Interface retry |
|---|---|---|---|---|---|---|
| Textual skills | – | – | – | – | – | |
| Grounded multimodal skills | – | – | – | – | ||
| MPO [ 1 ] | – | – | – | |||
| Dynamo [ 2 ] | – | – | ||||
| ViewCraft |
| Method | MMComp | ReasonMap | FunSD | STI-Bench | VideoHolmes | SlideVQA | OpenEQA | MMIU | Mean |
|---|---|---|---|---|---|---|---|---|---|
| Direct | 0.834 | 0.858 | 0.306 | 0.410 | 0.408 | 0.802 | 0.512 | 0.921 | 0.631 |
| Initial skill | 0.786 | 0.841 | 0.288 | 0.385 | 0.381 | 0.812 | 0.478 | 0.908 | 0.610 |
| Text-only | 0.848 | 0.876 | 0.372 | 0.430 | 0.424 | 0.837 | 0.528 | 0.926 | 0.655 |
| Interface-only | 0.779 | 0.856 | 0.341 | 0.466 | 0.452 | 0.834 | 0.545 | 0.935 | 0.651 |
| -only | 0.852 | 0.867 | 0.352 | 0.416 | 0.408 | 0.833 | 0.508 | 0.921 | 0.645 |
| -only | 0.784 | 0.850 | 0.325 | 0.448 | 0.430 | 0.828 | 0.526 | 0.926 | 0.640 |
| Search strategy | MMComp | RMap | FunSD | STI | VHolm | Slide | OEQA | MMIU | Mean |
|---|---|---|---|---|---|---|---|---|---|
| Direct (no search) | 0.834 | 0.858 | 0.306 | 0.410 | 0.408 | 0.802 | 0.512 | 0.921 | 0.631 |
| MPO-adapted (prompt space) | 0.852 | 0.869 | 0.368 | 0.437 | 0.428 | 0.834 | 0.524 | 0.922 | 0.654 |
| Dynamo-style (fixed tools) | 0.841 | 0.865 | 0.380 | 0.440 | 0.426 | 0.840 | 0.534 | 0.925 | 0.656 |
| Independent, then combine | 0.857 | 0.878 | 0.378 | 0.468 | 0.452 | 0.842 | 0.551 | 0.933 | 0.670 |
| Staged (visual, then ) | 0.859 | 0.880 | 0.385 | 0.472 | 0.455 | 0.846 | 0.556 | 0.938 | 0.674 |
| Alternating ( ) | 0.861 | 0.885 | 0.391 | 0.478 | 0.461 | 0.849 | 0.562 | 0.940 | 0.678 |
| MMComp | RMap | FunSD | STI | VHolm | Slide | OEQA | MMIU | Mean | |
|---|---|---|---|---|---|---|---|---|---|
| MPO-adapted (prompt space) | 0.852 | 0.869 | 0.368 | 0.437 | 0.428 | 0.834 | 0.524 | 0.922 | 0.654 |
| Random proposals (same space, gate) | 0.852 | 0.869 | 0.378 | 0.445 | 0.434 | 0.842 | 0.539 | 0.928 | 0.661 |
| Dynamo-gen (tool generation) | 0.857 | 0.876 | 0.381 | 0.459 | 0.444 | 0.835 | 0.545 | 0.903 | 0.662 |
| MPO-fullspace (UCB selection) | 0.861 | 0.878 | 0.385 | 0.463 | 0.450 | 0.838 | 0.549 | 0.907 | 0.666 |
| Gate-only joint | 0.861 | 0.887 | 0.393 | 0.478 | 0.457 | 0.844 | 0.560 | 0.932 | 0.676 |
| ViewCraft | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 | 0.692 |
| Executor | Skill source | MMComp | FunSD | STI-Bench | VideoHolmes |
|---|---|---|---|---|---|
| Direct | 0.834 | 0.306 | 0.410 | 0.408 | |
| gemini-3.8-flash | 0.874 | 0.412 | 0.496 | 0.472 | |
| gpt-5.5 | 0.868 | 0.385 | 0.508 | 0.465 | |
| gemini-3.8-flash | claude-sonnet-4-6 | 0.852 | 0.379 | 0.484 | 0.458 |
| Direct | 0.850 | 0.271 | 0.567 | 0.550 | |
| gemini-3.8-flash | 0.871 | 0.388 | 0.623 | 0.598 |
Appendix figures & tables22 assets
Supplementary material from the paper’s appendix.
Appendix
| Benchmark | Medium | Train | Gate | Test | Metric |
|---|---|---|---|---|---|
| MMComp | image | 48 / 48 | 96 / 96 | 151 / 151 | option-letter accuracy |
| ReasonMap | transit diagram | 24 / 2 | 48 / 2 | 153 / 4 | route accuracy |
| FunSD | form | 64 / 58 | 96 / 72 | 248 / 47 | field-value ANLS |
| STI-Bench | video | 36 / 12 | 72 / 18 | 221 / 36 | option-letter accuracy |
| VideoHolmes | video | 24 / 10 | 72 / 16 | 183 / 28 | option-letter accuracy |
| SlideVQA | slide deck | 40 / 10 | 60 / 14 | 155 / 30 | ANLS |
| Gate scale (items/task) | 8 | 25% | 50% | 100% (default) | 200% |
|---|---|---|---|---|---|
| Mean task score | 0.679 | 0.686 | 0.690 | 0.692 | 0.693 |
| Method | Proposals | Gate evals | Exec. calls | Verif. calls | Optim. calls | Tokens |
|---|---|---|---|---|---|---|
| Shared initialization | 0 | 8 | 0.7k | 0 | 0 | 0.5M |
| Text-only / Interface-only | 250 | 200 | 45.2k | 38.8k | 384 | 42.2M |
| ViewCraft | 250 | 208 | 47.0k | 40.4k | 384 | 43.8M |
| Alternating / Staged / Indep. | 250 | 200 | 45.2k | 38.8k | 384 | 42.2M |
| MPO-adapted / MPO-fullspace | 250 | 200 | 45.2k | 38.8k | 384 | 42.2M |
| Dynamo-style / Dynamo-gen | 250 | 200 | 45.4k | 38.8k | 384 | 42.4M |
| Submitted (incl. 21 projections) | 750 |
| Pre-gate rejects (64 inert / 78 guards) | 142 |
| Paired calls (204 accepts / 404 rejects) | 608 |
| Candidate evaluations | 608 |
| Submitted | Pre-filtered | Evaluated | ||||
|---|---|---|---|---|---|---|
| Ordinary | Projection | Inert | Guards | Ordinary | Projection | |
| Joint | 229 | 21 | 30 | 12 | 187 | 21 |
| Text-only | 250 | 0 | 0 | 50 | 200 | 0 |
| Interface-only | 250 | 0 | 34 | 16 | 200 | 0 |
| Total | 729 | 21 | 64 | 78 | 587 | 21 |
| Benchmark | Gap | 95% CI | Benchmark | Gap | 95% CI | ||
| MMComp | 1.3 | [0.1, 2.6] | 0.06 | VideoHolmes | 1.1 | [0.0, 2.4] | 0.07 |
| ReasonMap | 1.3 | [0.1, 2.6] | 0.19 | SlideVQA | 0.9 | [ 0.2, 2.1] | 0.12 |
| FunSD | 2.1 | [0.8, 3.5] | 0.01 | OpenEQA | 1.2 | [0.2, 2.5] | 0.09 |
| STI-Bench | 1.8 | [0.5, 3.3] | 0.04 | MMIU | 1.1 | [0.0, 2.3] | 0.08 |
| Mean gap: 1.3 points 95% CI: [0.6, 2.1] | |||||||
| Ladder step | Gain | ViewCraft comparison | Margin |
|---|---|---|---|
| Prompt space to random same-space | +0.7 | MPO-fullspace | +2.6 |
| Random to UCB selection | +0.5 | Dynamo-gen | +3.0 |
| UCB to failure-guided joint | +1.0 | Random proposals | +3.1 |
| Gate-only to full retention | +1.6 | Random to failure-guided joint | +1.5 |
| Benchmark | ViewCraft (std) | Gain (pts) | Cluster CI (pts) | vs. Direct |
|---|---|---|---|---|
| MMComp | 0.874 0.007 | 4.0 | [0.3, 7.8] | 0.03 |
| ReasonMap | 0.898 0.008 | 4.0 | [0.2, 7.9] | 0.05 |
| FunSD | 0.412 0.015 | 10.6 | [5.8, 15.2] | 0.001 |
| STI-Bench | 0.496 0.011 | 8.6 | [2.9, 14.2] | 0.006 |
| VideoHolmes | 0.472 0.010 | 6.4 | [1.2, 11.6] | 0.01 |
| SlideVQA | 0.858 0.007 | 5.6 | [0.1, 11.1] | 0.05 |
| Summary | Value | Holm-adjusted comparison | |
|---|---|---|---|
| Mean gain (points) | +6.1 | FunSD | 0.004 |
| Median gain (points) | +5.9 | STI-Bench | 0.042 |
| Relative gain range (%) | 3.3–34.6 | Other tasks | |
| Median relative gain (%) | 9.5 |
| Variant | MM | RMap | FunSD | STI | VH | Slide | OEQA | MMIU | Mean | Gap [CI] | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| No retry (drop on joint rejection) | 0.870 | 0.893 | 0.407 | 0.483 | 0.461 | 0.849 | 0.565 | 0.944 | 0.684 | 0.8 [0.3, 1.3] | 0.004 |
| Plain retry (fresh proposals) | 0.872 | 0.893 | 0.408 | 0.484 | 0.463 | 0.850 | 0.566 | 0.944 | 0.685 | 0.7 [0.2, 1.2] | 0.008 |
| Symmetric projection (keep ) | 0.872 | 0.895 | 0.409 | 0.486 | 0.463 | 0.851 | 0.567 | 0.946 | 0.686 | 0.6 [0.1, 1.1] | 0.020 |
| No trigger (retry all eligible) | 0.872 | 0.895 | 0.408 | 0.487 | 0.464 | 0.852 | 0.568 | 0.947 | 0.687 | 0.5 [0.1, 1.0] | 0.030 |
| Asymmetric projection (ours) | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 | 0.692 | — | — |
| Condition | MMComp | RMap | FunSD | STI | VHolm | Slide | OEQA | MMIU |
|---|---|---|---|---|---|---|---|---|
| ViewCraft | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 |
| format-normalized | 0.876 | 0.900 | 0.421 | 0.498 | 0.474 | 0.861 | 0.581 | 0.953 |
| Evidence-only (contracts frozen) | 0.872 | 0.895 | 0.401 | 0.492 | 0.468 | 0.854 | 0.566 | 0.947 |
| format-normalized | 0.872 | 0.895 | 0.409 | 0.495 | 0.470 | 0.857 | 0.574 | 0.947 |
| Replayed state | MMComp | RMap | FunSD | STI | VHolm | Slide | OEQA | MMIU | Mean |
|---|---|---|---|---|---|---|---|---|---|
| Initial skill | 0.786 | 0.841 | 0.288 | 0.385 | 0.381 | 0.812 | 0.478 | 0.908 | 0.610 |
| Evidence transplant | 0.775 | 0.845 | 0.318 | 0.440 | 0.424 | 0.823 | 0.519 | 0.922 | 0.633 |
| Reading transplant | 0.848 | 0.861 | 0.345 | 0.410 | 0.403 | 0.829 | 0.503 | 0.918 | 0.640 |
| ViewCraft | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 | 0.692 |
| Evidence transplant | +2.3 |
| Reading transplant | +3.0 |
| Joint pairing | +8.2 |
| Joint-minus-transplants contrast | +2.9 |
| Partition | MM | RMap | FunSD | STI | VH | Slide | OEQA | MMIU | Mean |
|---|---|---|---|---|---|---|---|---|---|
| Storage fields | 1.4 | 1.0 | 1.6 | 0.8 | 0.6 | 0.3 | 0.5 | 0.8 | +0.8 |
| Strict (render clauses out of ) | 1.8 | 1.5 | 1.8 | 1.2 | 1.0 | 0.5 | 1.2 | 0.9 | +1.2 |
| Clause-content (used throughout) | 2.4 | 2.2 | 2.3 | 1.7 | 1.5 | 0.9 | 1.8 | 1.2 | +1.8 |
| Strategy | Split A | Split B | Difference (points) |
|---|---|---|---|
| Alternating | 0.678 | 0.674 | 0.4 |
| Gate-only joint | 0.676 | 0.672 | 0.4 |
| ViewCraft | 0.692 | 0.688 | 0.4 |
| Joint Alternating (points) | +1.4 | +1.4 | 0.0 |
| Benchmark | Direct | Initial skill | ViewCraft | VC Direct |
|---|---|---|---|---|
| STI-Bench | 2,380 | 3,210 | 2,730 | +350 |
| VideoHolmes | 2,410 | 3,260 | 2,850 | +440 |
| SlideVQA | 2,240 | 3,020 | 2,660 | +420 |
| OpenEQA | 2,360 | 3,190 | 2,720 | +360 |
| MMIU | 2,010 | 2,710 | 2,480 | +470 |
| MMComp | 1,620 | 2,291 | 3,375 | +1,755 |
| Input tok/item | Output tok/item | Calls/item | Latency (s/item) | |
|---|---|---|---|---|
| Direct | 2.08k | 38 | 1.0 | 4.2 |
| Initial skill | 2.84k | 61 | 2.6 | 9.4 |
| ViewCraft | 2.86k | 69 | 3.4 | 11.8 |
| MMComp | RMap | FunSD | STI | VHolm | Slide | OEQA | MMIU | Mean | Tok/item | |
|---|---|---|---|---|---|---|---|---|---|---|
| Direct | 0.834 | 0.858 | 0.306 | 0.410 | 0.408 | 0.802 | 0.512 | 0.921 | 0.631 | 2.08k |
| Direct (token-matched) | 0.841 | 0.863 | 0.318 | 0.421 | 0.417 | 0.809 | 0.521 | 0.926 | 0.640 | 2.86k |
| Direct 3 (self-consistency) | 0.848 | 0.867 | 0.311 | 0.418 | 0.413 | 0.808 | 0.519 | 0.929 | 0.639 | 6.24k |
| Initial skill | 0.786 | 0.841 | 0.288 | 0.385 | 0.381 | 0.812 | 0.478 | 0.908 | 0.610 | 2.84k |
| ViewCraft | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 | 0.692 | 2.86k |
| Variant | MM | RMap | FunSD | STI | VH | Slide | OEQA | MMIU | Mean | Gap [CI] | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| w/o replay filter | 0.870 | 0.891 | 0.404 | 0.487 | 0.463 | 0.848 | 0.562 | 0.942 | 0.683 | 0.9 [0.4, 1.5] | 0.002 |
| w/o interface projection | 0.870 | 0.893 | 0.407 | 0.483 | 0.461 | 0.849 | 0.565 | 0.944 | 0.684 | 0.8 [0.3, 1.3] | 0.004 |
| w/o evidence tiebreak | 0.870 | 0.891 | 0.403 | 0.489 | 0.464 | 0.852 | 0.566 | 0.947 | 0.685 | 0.7 [0.2, 1.2] | 0.008 |
| Gate-only joint (all three off) | 0.861 | 0.887 | 0.393 | 0.478 | 0.457 | 0.844 | 0.560 | 0.932 | 0.676 | 1.6 [0.8, 2.4] | 0.001 |
| ViewCraft (full) | 0.874 | 0.898 | 0.412 | 0.496 | 0.472 | 0.858 | 0.574 | 0.951 | 0.692 | — | — |