No. 10 Friday 23 October Game dev, software and AI

Proofs, fences and a review queue

Claude wrote machine-checked proofs that 123 open-source libraries cannot crash. Agents are also getting fenced in by sandboxes and per-user logins, while the code they write piles up in review.

The short version

  • Software and AI Anthropic and Theorem had Claude prove that 123 open-source libraries never crash on any input under 64 MB, and released the proofs and the skill they used.
  • Software and AI Agents are getting fences: a Supabase template that runs every agent tool call as the signed-in user, NVIDIA's OpenShell, microVMs for evals, and sandbox fixes in Claude Code 2.1.309.
  • Software and AI A study of 718 firms finds coding agents add 30% more lines of code but only 12% more finished issues, and pull request reviews take 49% longer.
  • Games and software About 98% of Unity CLI runs now come from agents. Epic's AI MegaJam lets you set up your agents and MCP servers before November 12.
  • Game dev earstrip triangulates map polygons faster than earcut and takes the same arguments. Today's Try this races the two on your own shapes.
Software and AI Lesson

Claude proved 123 libraries cannot crash

Anthropic and Theorem had Claude write mathematical proofs that 123 widely used open-source libraries can never crash on any input up to 64 MB. A separate program checked every proof, and the attempt turned up hundreds of real bugs.

ContextFormal verification means proving, not testing, that code behaves as specified. It was so expensive that it was kept for a few critical systems.

The pipeline Anthropic and Theorem describe. The agent can be wrong; the checker cannot be talked round.

Each project already had a fuzz test: a small program that feeds the library random inputs and watches for crashes. Theorem turns that test into a precise claim about the compiled program, a RISC-V binary: no memory errors and no failed assertions for any input under 64 MB. Claude then writes a proof in Rocq, and the Rocq checker accepts or rejects it.

When a proof would not close because the code really could crash, Claude patched the code and proved the new version. That is how the work found hundreds of bugs. The team penalised and audited patches, because an agent could also make a proof pass by rewriting the code to do nothing.

Across 239 entry points in 123 libraries the proofs add up to about 180 million lines, roughly 600,000 for a typical one, and some took hundreds of millions of tokens. Every number here comes from the authors. The proofs, the machine model and the Claude skill used to add projects are public.

123libraries proved crash-free (authors' figure)

Technical details

The guarantee holds for a single-threaded static binary with a fixed memory budget, linked against musl libc, on RISC-V under modelled Linux. Most users run x86 or ARM with glibc, so the proof does not transfer one to one. The authors also note that the crash detector (ASan-class errors) misses some memory bugs, that not every entry point was verified, and that callers can still misuse a library.

On 36 small proof tasks with a 5M token budget per agent, Opus 5.5 finished half of them with about 40% fewer tokens than Opus 5. Letting agents copy each other's proofs in a shared workspace cut tokens by 17%, and solo runs cost more in 30 of 34 completed proofs.

A second case: Claude wrote a Python interpreter in Rust and proved it against a published model of CPython's semantics with Verus. On 1.7 million random programs it matched CPython 99.95% of the time; the authors call the rest known corner cases. Proofs that would reveal unpatched bugs are withheld.

Why it mattersAgents now write more code than people can review, and this is the strongest sign yet that machines can check what machines write. A fuzz test you already have is the starting point, so the cost of entry is lower than it sounds.

For youYour C++ plugin code will not get a RISC-V proof soon, but the habit transfers today: treat each fuzz or property test as a spec and ask Claude to state it precisely. The shared proof workspace result (17% fewer tokens) is a pattern worth copying in your subagent teams.

Formal verification
Proving with mathematical logic that a program meets a precise description, for every possible input.
fuzz test
A test that throws large amounts of random input at code to find crashes.
RISC-V
An open processor instruction set; here, the machine the compiled libraries were proved against.
Rocq
A proof assistant (formerly called Coq) whose small checker verifies every step of a proof.
entry points
The functions a fuzz test calls into; each one got its own proof.

Sources Anthropic research postReleased proofsRISC-V and Linux semanticsClaude skill for adding projects

More like this Less like this

Fences for agents

Per-user logins, hidden keys, sealed test boxes and a sandbox patch.

Software and AI Release

Supabase gives your app its own MCP server, with your users' permissions

A new Supabase template adds a server that AI assistants can connect to. Each user signs in and approves the assistant, and every request runs with that user's own permissions, so it can only see that user's data.

One command adds an Edge Function at supabase/functions/mcp. The agent never holds a master key: Supabase Auth issues it a token for one person, and the database's own row rules decide what it can read.

No service role key anywhere: the example tool, list_open_tasks, returns only the signed-in user's unfinished tasks.
Technical details

Install: npx shadcn@latest add https://supabase.com/library/r/mcp.json. Then enable asymmetric signing keys, the OAuth 2.1 server and dynamic client registration, set the Auth Site URL to where your consent page lives, add the OAuth Consent block, and set [functions.mcp] verify_jwt = false in config.toml so discovery requests reach the function; the middleware checks tokens instead.

The handler chains withOAuthProtectedResource() (discovery and the OAuth challenge) and withSupabase({ auth: 'user' }) (token check and a user-scoped client). Each tool lives in its own file and is registered in tools/index.ts; the sample is marked readOnlyHint: true.

Why it mattersLetting an agent into a product used to mean a powerful key and hope. This keeps the security model you already wrote: the agent sees exactly what the person who approved it can see.

For youThis is a near drop-in agent API for your Supabase SaaS apps, and it reuses the RLS policies you already maintain. Try it on the least sensitive table first and check that a second test user's rows never appear.

MCP
Model Context Protocol: a standard way for AI assistants to discover and call tools.
OAuth 2.1
The standard flow where a user approves an app to act for them without sharing their password.
RLS
Row level security: database rules that decide which rows each user may read or change.
Edge Function
Supabase's small serverless functions that run close to users.

Sources Supabase blog

More like this Less like this

Software and AI News

Agent Skills move to a neutral foundation

Anthropic gave the Agent Skills format to the Agentic AI Foundation, the Linux Foundation group that already looks after MCP, so no single company owns it.

70+platforms support skills

280Minstalls, nearly (Anthropic's figure)

Maintainers from several AI companies now steer it. The roadmap adds versioned releases, a proposal process and security guidance for writing and installing skills.

Why it mattersA skill you write once should keep working across tools, and the security guidance will matter as more people install other people's skills.

For youYour skill library is now on a vendor-neutral format. Watch the security guidance when it lands and check your hooks against it.

Agent Skills
Folders of instructions and scripts an AI agent loads when a task needs them.

Sources Anthropic announcementSimon Willison

More like this Less like this

Software and AI Trend

Two new boxes for agents: one keeps the keys, one keeps evals fair

NVIDIA's OpenShell lets agents use credentials without ever seeing them, and the Harbor eval framework now runs each test task in its own tiny virtual machine. Both move safety out of the prompt.

Both are open source and arrived this week. They solve different problems: OpenShell is for agents doing real work, Harbor with Docker Sandboxes is for scoring agents on a benchmark.

NVIDIA OpenShell Harbor + Docker Sandboxes
What it is A runtime that runs each agent in a sandbox under a written policy An agent evaluation framework that now runs each task in a microVM
Isolation Kernel limits on which files and system calls each agent may use Its own kernel per task; nothing reaches the host or other tasks
Network Every outbound connection is checked against the policy In the cloud: open for setup, then restricted while the agent works
Credentials Added only to requests to approved endpoints; the agent never sees them Not its focus
Changing the rules Formal checks flag risky new access for a person to approve Fine-grained network policy only in Docker's cloud; local runs are public or no network
Status 0.1.x, Apache 2.0 Nightly now, stable release planned for October 23

Neither claims to stop an agent from gaming its own task, such as editing a test it can write to. They limit what a mistake or an injected instruction can reach.

Technical details

OpenShell install: curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh, then openshell sandbox create --name demo. Runs on Linux, Apple Silicon macOS or WSL 2 (experimental) and needs Docker, Podman or host virtualization. The default sandbox is a minimal Ubuntu image with no agent installed.

Harbor: install with the sbx extra and run harbor run -t hello-world/hello-world -a oracle -e sbx; cloud runs need SBX_DOCKER_USERNAME and SBX_DOCKER_PAT, local runs use sbx login and --ek target=local. Docker reports testing 64 concurrent tasks on Cloud Sandboxes and gives no figures for start-up overhead or cost.

Why it mattersTelling an agent to be careful does not work against prompt injection. Putting the secret outside its reach does, and so does giving every eval run identical conditions.

For youOpenShell's credential injection is the missing piece for routines that need API keys: the agent can call your services without the key appearing in its context. Worth a trial on one unattended job.

microVM
A very small virtual machine that starts fast and gives each task its own operating system kernel.
kernel
The core of an operating system, which controls access to files, memory and the network.
evaluation framework
Software that runs an AI agent on a set of tasks and scores the results the same way every time.

Sources NVIDIA OpenShellInfoQ on Harbor and Docker Sandboxes

More like this Less like this

Software and AI Do this For practitioners

Claude Code 2.1.309 closes sandbox gaps you probably did not know about

The latest Claude Code update fixes several ways commands could slip past its sandbox, and changes one command that scripts call, so unattended setups should update and check.

Show the details

Released October 22. The fixes matter most if you run Claude Code unattended or rely on the sandbox to protect files.

  • Shell startup files ran outside the sandbox

    On macOS and Linux, sandboxed Bash ran your shell's startup files unsandboxed before each command. Fixed.

  • The MCP config could be rewritten

    Sandboxed commands and auto-accepted edits could modify the file passed with --mcp-config, and a later prompt could reconnect a disabled MCP server. Both fixed.

  • Symlinks dodged write rules

    macOS denyWrite globs now apply at a path's real location when it is reached through a symlink; Edit(path) deny rules now also block Bash redirects to that path.

  • ultrareview now needs trust

    claude ultrareview asks for workspace trust and refuses without a terminal. Scripts pass --trust-workspace or set CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1.

  • sed -i is a normal Bash command

    It now gets the standard Bash prompt and is no longer undone by /rewind, like other edits made through the shell.

  • Windows hooks fail closed

    PowerShell hooks now block on exit code 2, and PreToolUse hooks no longer fail open without Git for Windows.

Technical details

Also in 2.1.309: split-pane teammates inherit the leader's tool deny rules; Linux write denies no longer lift when a background command outlives the session; an oversized nested CLAUDE.md now loads only its start instead of triggering repeated compaction; the /claude-api skill now builds Managed Agents teams on multiagent_20261001 with workflows on. Version 2.1.308 lists only bug fixes.

Why it mattersSandbox escapes are quiet: nothing looks wrong until something outside the fence changes. If any script calls ultrareview, it fails until you add the new flag.

For youUpdate the machines that run your routines, and grep your automation for ultrareview before the next scheduled run.

sandbox
A restricted environment that limits which files and network addresses a command may touch.
symlink
A file that points to another location, so one path can lead somewhere else.

Sources Release notes v2.1.309

More like this Less like this

Where agent work lands

Who drives the tools, and where the extra code piles up.

Games and software Trend

Almost nobody types Unity's command line by hand

Unity says nearly all runs of its new command-line tool come from AI agents and scripts, not people, and Claude Code is the agent that uses it most.

98%of runs from agents and automation

0.2%from a person at a terminal

From July 20 to October 13, over 226,000 users ran more than 200 million commands. The top one, unity command, drives a live editor; Codex is second behind Claude Code. Unity reported these figures.

Why it mattersEngines are being driven by agents through simple text interfaces. A CLI an agent can call is now part of an engine's product, not an extra.

For youThe same shape (an agent calling a CLI that controls a running editor) is what an Unreal tool for your plugin workflow would need. Unity's numbers say it gets used once official agent plugins exist.

command-line tool
A program you control by typing text commands, which agents can also call.

Sources Unity blog

More like this Less like this

Software and AI Lesson

Agents write more code; finished work rises less, and reviews take longer

A study of 718 companies found that teams using coding agents produce much more code, but finish only slightly more tasks, because the extra code has to be reviewed by people.

Change after adopting coding agents, from about 300 million work events at 718 firms (January 2021 to March 2026), as reported by InfoQ.

Chat-style assistants did less: lines of code rose 12% and finished issues did not rise. The share of PRs needing changes doubled, and larger PRs did not explain the extra review.

Why it mattersOutput went up and finished work rose much less, so the bottleneck has moved to review and checking. Speeding up review is now the bigger gain.

For youAs a solo developer you are the whole review queue. The study is a reason to spend agent time on tests, checks and smaller diffs rather than on more code.

pull request
A proposed change to a codebase that others review before it is merged.
PR
Short for pull request.

Sources InfoQ

More like this Less like this

Engines, jams and geometry

A jam with rules for agents, hot reload on device, foliage at scale, faster triangles.

Game dev News

Epic's AI MegaJam: set up your agents early, build in four days

Epic announced a four-day Unreal Engine game jam where teams can use as many AI agents as they like, with $65,000 in prizes and grants of up to $50,000 to keep building.

Solo or teams of up to five, Unreal Engine or UEFN. AI is optional. You may set up tools, agents and MCP servers before the start, but not build the game, and you must declare anything prepared earlier.

  1. Registration opens for the in-person days in San Francisco.

  2. Kickoff livestream and theme reveal, 11 AM PST.

  3. The jam starts at midnight EST.

  4. Deadline 5:59 PM PST: a packaged build under 1 GB on itch.io and a 30 to 60 second video.

  5. Winners announced, at the latest.

Technical details

Prizes: $7,500, $5,000 and $2,500 in each main category (Best Overall UE, Best Overall UEFN, Best Student Project); $5,000 for Best Team; $2,500 modifiers including Solo Driver and Glass Box (needs a dev log). Development Continuation Grants of $50,000, $25,000 and $10,000 for both UE and UEFN entries. Fab assets are allowed if you hold the licence and list them.

Why it mattersIt is a dated, public test of agent-assisted Unreal development, with rules written for it. The backlash on social media shows how divided game developers still are about AI.

For youFab assets are allowed if listed, so a jam entry built on your own plugins doubles as a showcase. Use the window before November 12 to set up an Unreal MCP workflow.

UEFN
Unreal Editor for Fortnite: Epic's tool for making games that run inside Fortnite.
game jam
A contest to make a game from scratch in a short, fixed time.

Sources Rules on itch.ioInsider Gaming

More like this Less like this

Game dev Lesson

The Alters merged thousands of plant instances into one per mesh

The studio behind The Alters explains how three environment artists covered levels in plants for a terraforming expansion in Unreal Engine 5, and the engine change that kept it fast.

A mossy rock outcrop overgrown with roots and pink plants, with a grey human silhouette beside it for scale.
Image: 11 bit studios via 80 Level

11 bit studios built the foliage as solid Nanite geometry with cut-out shapes instead of see-through masked materials, which they say tested faster. Plants were scattered with three in-engine tools: PCG rules, a geometry script that grows moss, and a tool that places meshes by tracing against surfaces.

  • One global instanced mesh component per plant type, even inside packed level actors.
  • Do not pack actors with non-uniform scale if they have collision.
  • Each level exists in a scorched and a terraformed state.
  • A 15-minute tool that saves each artist a few minutes a day was worth building.

Why it mattersMany small prefabs quietly multiply draw work. Merging instances by mesh type is a fix any Unreal project with reusable props can borrow.

For youIf your world tools spawn Blueprint prefabs with their own instanced components, a merge step like this is worth offering as a plugin option.

Nanite
Unreal Engine 5's system for drawing very detailed meshes efficiently.
PCG
Procedural content generation: rules that place content automatically.
instanced mesh
One mesh drawn many times in one batch, which is much cheaper than separate objects.

Sources 80 Level

More like this Less like this

Game dev Release

Unity can now swap a method's code on a running phone build

An experimental Unity feature lets you edit some methods and see the change on a connected test device straight away, without rebuilding or restarting the game.

Tag a public method, start watching in Project Settings, and edits to its body reach connected development players, including IL2CPP builds, over the existing cable. This is the example from Unity's post.

[MethodReload]
public void Update()
{
    transform.Rotate(Vector3.up,
        rotationSpeed * Time.deltaTime);
}

The new body runs through an interpreter for a subset of C#: no async, try and catch, LINQ query syntax, reflection, generics or ref parameters, and only method bodies can change, not fields or types.

Interpreted code runs slower than compiled code, and release builds always run the compiled version. Unity gives no timings.

Technical details

Package com.unity.pipeline@0.7.0-exp.1, Unity 6.0 or later, enabled under Project Settings > Pipeline > Editor > Method Reload Interpreter Watch. Methods must return void or IEnumerator; coroutines pick up new code only when restarted, and [OnMethodReloaded] can restart them. Unity says existing Asset Store hot reload tools are still better for Editor-only iteration.

Why it mattersWaiting for a device build is one of the slowest loops in mobile game work. Even a limited hot reload on the real hardware shortens tuning sessions.

For youNot for your Unreal work directly, but a useful comparison point for Live Coding when you tune mobile builds of your web and phone games.

IL2CPP
Unity's build path that converts C# to C++ for phones and consoles, which usually rules out hot reload.
interpreter
A program that runs code step by step instead of compiling it first.

Sources Unity blog

More like this Less like this

Game dev Release

A faster earcut for filling shapes with triangles

A map company released earstrip, a free library that cuts complex shapes into triangles for drawing faster than the popular earcut library, and gets hard shapes right more often.

Milliseconds to triangulate 3.74 million map polygons on one core, best of 7. The author's benchmark, Apple M4 Pro.

On the hardest polygons, earcut's fill differed from the correct result on about 31% of pixels and earstrip's on about 0.15% (author's figures). ISC licence, the same arguments as earcut.

Why it mattersFilling shapes is everywhere in web graphics: maps, text, vector art, level outlines. A drop-in replacement that is faster and more correct is a cheap win.

For youWorth testing in your three.js games wherever you build geometry from 2D shapes; see today's Try this.

triangulate
Split a shape into triangles, the only thing a graphics card draws.
Wasm
WebAssembly: a compact format that runs compiled code in browsers at near-native speed.

Sources Globus blogearstrip on GitHub

More like this Less like this

Learn one thing

What does it mean to formally verify a program?

It means proving with logic, step by step, that a program meets a precise description for every possible input, not just the inputs you tested. A small, trusted program checks the proof.

Think of it like thisTests are like test-driving a car on a hundred roads. A proof is the engineer's calculation that the brakes hold on any road, checked by an inspector who never takes anyone's word for it.

You write a spec, such as "never crashes on any input under 64 MB". Someone, now often an AI, writes a proof that the code meets it. A proof checker, a small program that is easy to trust, then confirms every step. If one step is wrong, the whole proof is rejected.

The guarantee is only as good as what sits underneath it. The proof assumes a model of the machine and the operating system, and it says nothing about properties the spec left out. That is why the authors of today's lead say verified does not mean bug-free.

Proofs used to cost years of expert work, so they were kept for things like aircraft software and secure kernels. AI writing them, with a checker that cannot be fooled, is what makes larger projects worth trying.

Each layer rests on the ones below. You trust the bottom two; everything above them is checked.
spec
Short for specification: an exact statement of what the program must or must never do.
proof checker
A small program that verifies each step of a proof follows the rules of logic.

Try this today

Game dev 30 minutes For practitioners

Race earstrip against earcut on your own shapes

In half an hour you will know whether a faster, more correct triangulator speeds up your game's shape geometry, measured on your own data.

You needA JavaScript project that already uses earcut, directly or through your own geometry code, and Node.

  1. Install it next to earcut

    Run npm install earstrip. It takes the same arguments as earcut: a flat coordinate array and an array of hole start indices.

  2. Dump real shapes

    Log the coordinate and hole arrays your game passes to earcut during a typical level load, and save them to a JSON file.

  3. Time both

    In a small Node script, run each library over every saved shape several times and keep the best time for each, as the author did.

  4. Compare the output

    For each shape, compare triangle counts and render both results once to spot holes or overlaps.

import earcut from 'earcut';
import earstrip from 'earstrip';

// the README's example: a square with a square hole starting at vertex 4
const coords = [0, 0, 10, 0, 10, 10, 0, 10, 3, 3, 7, 3, 7, 7, 3, 7];
const holes = [4];

console.log(earcut(coords, holes).length / 3, 'triangles (earcut)');
console.log(earstrip(coords, holes).length / 3, 'triangles (earstrip)');

You know it worked whenBoth print the same kind of index list, three indices per triangle. On your saved shapes, earstrip's best time should be lower; if a shape renders differently, check it against the even-odd fill you expect.

For youTry it on the shape-based geometry in your three.js browser games, and on any level outline tools you build for the web.

hole start indices
Positions in the vertex list where each hole's outline begins.

Sparks

What is catching on right now, and the idea worth borrowing from each.

The lab

Research from the front line, in plain words: what it solves, how, and what you could do with it.

Game dev PreprintarXiv preprint

Playable video models look great but mostly ignore what you tell them mid-stream.

StreamEval: Evaluating Interactive Streaming Video Generation ModelsStreamEval Team (no individual authors or institutions listed)

The benchmark's five tasks: avatar dialogue and performance, world generation with timed camera instructions, and real-time video editing of a vase's colour.
Image: StreamEval Team (arXiv)
The problem
Real-time video and world models are judged on looks. Nobody measured whether they keep responding when a player or user gives new instructions while the video plays.
The idea
A benchmark of 300 scripted cases from 15 to 300 seconds long across five tasks: avatar dialogue, avatar performance, world generation, instruction editing and reference editing. It scores 37 models on ten metrics in four dimensions, including how well they follow instructions.
The result
In world generation the best instruction-following score was 25.93 out of 100 (Krea Realtime). HappyOyster had the best visual quality, 58.34, but followed instructions at only 5.56. Matrix-Game 3.5 led on continuity. The best following score in any task was 36.90.
Use it
If you are trying a world model for a game prototype, pick by its following score, not by its demo reel. The public leaderboard lets you check a model before you download it.

For youRead this next to yesterday's Matrix-Game 4.0: an engine that owns the rules sidesteps the following problem these scores expose.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadPaper (arXiv)Leaderboard

Software and AI PaperEMNLP 2026 (Apple Machine Learning Research)

For one-tool requests, search for tools first; for multi-tool jobs, let the model sketch the tools it needs, then search.

Plan or Retrieve First? A Scale Study of Tool Discovery ArchitecturesMingfei Zhang, Amit Surana, Ziauddin Majid et al. (Apple)

The problem
Agents with thousands of tools cannot see them all at once, so something has to pick candidates. It was unclear whether to search on the user's words or let the model plan first.
The idea
Compare retrieve-then-plan (embed the request, fetch similar tools) with plan-then-retrieve (the model writes imagined function signatures, then searches with those) on ToolBench's 46,984 APIs, at registry sizes from 1,000 to 47,000 and with two model families.
The result
Retrieve-then-plan wins on single-tool queries; plan-then-retrieve wins on multi-tool queries, at every retrieval budget and registry size tested, but its extra call roughly doubles inference cost.
Use it
Route by difficulty: if the top search hit scores high, use it; if not, have the model draft the tool signatures it wants and search with those. The score is already in your pipeline, so the routing costs nothing.

For youRelevant to how you organise many MCP servers and skills: a confident first match can skip the planning step.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadApple ML ResearchPreprint (arXiv)

Software and AI PreprintarXiv preprint

Instead of summarising an agent's history, drop old tool outputs straight from the model's memory cache: cheaper and slightly better.

Cache Engineering for AgentsTianyu Fu, Ruoxi Wang, Zihan Min et al. (Tsinghua University)

The problem
Long agent runs fill the context. Summarising old turns rewrites the start of the prompt, which throws away the cached work and forces the model to re-read everything.
The idea
Give the agent two cache operations: drop entries so later steps ignore them, and shift the remaining positions so they stay contiguous. A serving engine called AKV keeps a normal stateless API on top.
The result
Dropping old tool responses on a rolling basis scored 1.7 points higher on average and cost 27.7% less than summarising when a threshold is hit, across four agent benchmarks including SWE-bench Verified. Up to 1.2 times the throughput.
Use it
If you serve open models for agents, try dropping stale tool output rather than summarising. If you use a hosted API, the lesson still holds: clearing old tool results keeps the cache warm where a summary resets it.

For youExplains why compaction in long Claude Code sessions is costly; clearing bulky tool output early is the cheap habit.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadPaper (arXiv)Code

Also moving

This week on Toa Radar

Read the weekly summary: The week agents got fences and rulebooks
Tune mode is on in this browser. Turn it off