A focus companion for freebuff.com only. Flip focus on before a deep
work block and it quiets ad requests plus the slots that appear mid-build and never fire
a separate request. Flip it off when you are done, and everything returns, so free
models stay free.
When to use it: flip focus on when ads break your concentration
during real work, a deadline, or a screenshare. Flip it off for everyday browsing
and casual exploring.
The respect behind it: we respect Freebuff's decision to fund free
models with ads, and this tool keeps that deal intact. It gives you a little leverage
only for moments of utmost focus, never as a default.
How it works
Three quiet layers, only while you focus
Nothing changes until you flip focus on. Outside focus, the page is untouched.
01
Pause the noise
A declarativeNetRequest ruleset pauses known ad and tracker hosts before
the request leaves the tab, while focus is on. Every rule is scoped to requests
initiated by freebuff.com, so it never follows you to other sites. Focus off,
requests resume.
02
Clear mid build slots
Slots rendered client-side never make a separate ad request, so a request list cannot
see them. While focus is on, a content script watches the DOM and quiets the ones
inserted while the platform is thinking, then collapses the empty space they leave
behind.
The same layer covers freebuff.com's own in-product promo cards, the ones with a
literal AD chip. Those are first-party, so only
reading the page can quiet them. They are matched on the badge text and never on
page text alone, and nothing holding a link-free paragraph, a code block or an editor
is ever touched.
03
Focus, then restore
The toolbar popup flips focus for the whole site in one click and shows what was
quieted on the current tab. Choose a timed session (15m, 25m, 45m) or focus until toggled off — browser alarms automatically restore ads when your focus time is up. The setting syncs through
chrome.storage with no account and no external server.
It also carries the escape hatch: Hide an element in focus. Click
it, click anything nothing recognised, and the rule applies in future focus sessions.
That is the part no heuristic can replace. Quiet rules only run while focus is on.
The part that matters
It cannot break your build
Your build and thinking progress arrives over XHR and WebSocket from freebuff.com
itself. A single broad rule could cut that off, so the ruleset carries a
priority-100 allow rule for freebuff.com's own traffic that every session
rule, all priority 1, has to lose against. Path-based rules are slash-anchored so
/load and /headers can never match, and the content script
refuses to quiet any element that still holds real content. Outside focus, no rule
runs at all.
id 1priority 100allowfreebuff.com
id 10priority 1pausedoubleclick.net
id 12priority 1pauseadnxs.com
Install
Load it unpacked, about a minute
Neither Chromium nor Firefox installs an unsigned extension from a link, so the manual
path loads the extracted folder as a developer
extension. It behaves exactly like an installed one. In Chromium it persists, in
Firefox a temporary add-on lasts until the browser restarts. Focus stays off after
install until your first session.
1
Download and extract
Grab the zip and unpack it somewhere permanent. If you move the folder later,
Chrome will report the extension as unloaded and you will need to point it at the
new path again.
Visit chrome://extensions, or edge://extensions /
brave://extensions, and switch on Developer mode in
the top right corner.
3
Choose Load unpacked
Press Load unpacked and select the extracted
freebuff-focus folder, the one containing
manifest.json. The toolbar icon appears and you are done.
4
Reload your open freebuff.com tabs
Content scripts only attach to pages loaded after the extension is enabled. Reload
any tab that was already open, open the popup, and flip focus on. Flip it off when
the block ends to bring everything back.
What a listing changes
A store listing removes every step above: one click, and the store handles updates.
It is also the only route that survives a restart without reloading anything by hand.
Either way, focus stays off until you flip it on.
Two packages are built for submission, both with manifest.json at the
archive root, which is what the stores require: one for the Chrome Web Store and
Edge Add-ons, and one for addons.mozilla.org.
Safari is the exception. It needs a separate build wrapped in a native app and a paid
Apple developer account, so browsers that detect as Safari get no button at all.
Better a missing button than one that leads nowhere.
Auto-updates
What the update feed does, and does not, do
Unpacked extensions do not auto-update
This is the honest part. Chrome only checks an update.xml feed for
extensions that were installed from that feed. A folder you loaded unpacked
is treated as local source: Chrome will never poll for a newer version of it, and
none of the files on this site can change that.
To update, download the new zip, extract it, and hit the refresh button on the
extension card in chrome://extensions.
The feed is built and ready
The build regenerates update.xml alongside
every package, with the matching version and codebase URL. Wire it up when you want
automatic updates, by either route:
Managed policy, set ExtensionInstallForcelist on
your own machine, pointing at the feed. Chrome then installs, updates and
reloads it for you.
Chrome Web Store, publish it and the store handles distribution
and rollouts entirely.
Both require the placeholder app ID in update.xml to be replaced with
the packed extension's real ID, and a signed CRX rather than a zip.
Desktop app
The desktop app, with focus sessions
Freebuff Desktop is a separate app that renders its ads from a runtime inside its own
bundle, so no browser extension can ever reach it. This
is the other half: a small local tool for focus blocks. Run install before deep work to
quiet the ad runtime in place, run revert after to bring it back. It runs
entirely on your machine, needs no account, and sends nothing anywhere.
All three have a tool. Pick your platform, the switch opens on the one you are reading
this on, and each tab's download is that platform's build.
Run it
One line, and nothing to install first. macOS already ships the sh and
perl it uses. The tool writes a copy of the original file before it
touches anything, and revert puts it back. Install for the work block,
revert to support free access.
curl -fsSL https://freebuff-focusmode.vercel.app/downloads/freebuff-focus-desktop.sh | sh
That one line does three things: it puts the tool in
~/.local/share/freebuff-focus, writes a
freebuff-focusmode command into ~/.local/bin, and
patches Freebuff. curl is not needed again. From then on:
freebuff-focusmode status reports what is applied and changes
nothing, freebuff-focusmode focus keeps the ads off until you
end it, freebuff-focusmode focus 25m keeps them off until the
deadline and then restores the file itself,
freebuff-focusmode focus session keeps them off until Freebuff
quits, freebuff-focusmode unfocus ends any of them and brings
the ads back,
freebuff-focusmode verify waits for the relaunch and then says
what the app you have open actually loaded,
freebuff-focusmode revert puts the untouched original back, and
freebuff-focusmode update fetches a newer tool, replaces this
copy and patches again.
If ~/.local/bin is not on your PATH, the installer
prints the one line that adds it. Run
curl -fsSL …/downloads/freebuff-focus-desktop.sh | sh -s --add-path
and it edits your shell rc for you. Piping always needs
sh -s <command>: | sh status asks
sh for a file called status.
Prefer a file? Download
the tool, a zip with a double-clickable launcher and a short read-me, then run
sh freebuff-focus.sh install, or
sh freebuff-focus.sh setup if you want the command as well.
Tool v1.8.3, matched to Freebuff Desktop
0.0.164: while applied, it quiets the ad auction and pauses the ad
client API path, and it undoes its own write if the result does not check
out. If a Freebuff release moves code it cannot recognise, it refuses and
prints the counts it saw instead of guessing, and
freebuff-focusmode scan prints what the installed build actually
contains, changing nothing. An older Freebuff with a different arrangement is
refused, not half-patched.
After you run it
It restarts Freebuff for you. The orchestrator is read once at
launch, so bringing the window forward is not enough - the tool quits the app,
starts it again, and then reports what it finds: whether the running process
started after the patch was written, and whether the ad code it targets is still in
the build. Ctrl-C stops the wait, and --no-restart leaves the quitting
to you.
If macOS says “Operation not permitted”, it is App Management
holding the write back. Open System Settings → Privacy & Security → App
Management, switch on Terminal (or whichever app you ran it from), quit and
reopen that app, and run it again. The tool never asks for a password and never
uses sudo.
After a Freebuff update, run it again. An update replaces the
app's Resources folder, so the quiet state goes with it. The backup is kept for each
version, so reverting an older one still works. When the block ends, revert and
relaunch to bring ads back.
Run it
One line in PowerShell, and nothing to install first, Windows ships PowerShell,
irm and iex with the OS. Piping straight into
iex is also the easier way in: no file is written to disk, so Windows
never tags it as a download, and the execution policy, which governs
.ps1files, never comes into it. The tool writes a copy of the
original file before it touches anything, and revert puts it back.
Prefer a file? Download
the tool, a zip with a double-clickable launcher and a short read-me. A saved
file carries the mark-of-the-web, so either unblock it first with
Unblock-File .\freebuff-focus-desktop.ps1, or run it the way the
launcher does:
powershell -ExecutionPolicy Bypass -File .\freebuff-focus-desktop.ps1 install.
That one line does three things: it puts the tool in
%LOCALAPPDATA%\FreebuffFocus, writes a
freebuff-focusmode.cmd launcher into that folder's
bin, and patches Freebuff.
Windows is not needed again. From then on:
freebuff-focusmode status reports what is applied and changes
nothing, freebuff-focusmode focus keeps the ads off until you
end it, freebuff-focusmode focus 25m keeps them off until the
deadline and then restores the file itself,
freebuff-focusmode focus session keeps them off until Freebuff
quits, freebuff-focusmode unfocus ends any of them and brings
the ads back,
freebuff-focusmode verify waits for the relaunch and then says
what the app you have open actually loaded,
freebuff-focusmode revert puts the untouched original back, and
freebuff-focusmode update fetches a newer tool, replaces this copy
and patches again.
The launcher folder is added to your user PATH only when you ask:
run the one-liner again through
$s = irm …/downloads/freebuff-focus-desktop.ps1; & ([scriptblock]::Create($s)) setup -AddPath
and it does. Without that, the installer prints the exact command that does it.
Tool v1.8.3, anchored against Freebuff Desktop
0.0.164, the same two anchors as the macOS tool: it forces the ad
auction to return nothing and cuts the ad client off from its API, and it undoes its
own write if the result does not check out. It finds the install itself (the per-user
folder under %LOCALAPPDATA%\Programs, Program Files, Squirrel's
app-<version> folders, and the uninstall registry entries), and
-App points it somewhere else if your copy lives off the beaten path. If
a Freebuff release moves something it cannot recognise, it refuses and prints the
counts it saw instead of guessing, and
freebuff-focusmode scan prints what the installed build actually
contains, changing nothing.
After you run it
It restarts Freebuff for you. The orchestrator is read once at
launch, so bringing the window forward is not enough - the tool closes the app,
starts it again, and then reports what it finds: whether the running process
started after the patch was written, and whether the ad code it targets is still in
the build. Ctrl-C stops the wait; an interrupted wait prints no verdict, and
-NoRestart leaves the closing and reopening to you.
If it says Freebuff has the file open, that is Windows refusing to
replace a file another process is holding, quit Freebuff properly (closing the
window is not always quitting) and run it again. The tool will not force the write.
If the write is refused on a machine-wide install (under
C:\Program Files), open PowerShell with Run as administrator
and run the same command. A per-user install under
%LOCALAPPDATA%\Programs never needs that, and the tool never asks for
a password or elevates by itself.
After a Freebuff update, run it again. An update replaces the
app's resources folder, so the patch goes with it. The backup is kept per version,
so reverting an older one still works.
Run it
One line, and nothing to install first, it is a shell script using the
perl and pgrep your distribution already has. Freebuff for
Linux ships as an AppImage: one executable holding a read-only
filesystem, so there is no file inside it to patch. The tool never writes to your
download. It extracts the image with the runtime the image itself carries, no FUSE,
no squashfs-tools, no root, patches that copy, and tells you to start
it instead.
curl -fsSL https://freebuff-focusmode.vercel.app/downloads/freebuff-focus-desktop-linux.sh | sh
That one line does three things: it puts the tool in
~/.local/share/freebuff-focus, writes a
freebuff-focusmode command into ~/.local/bin, and
patches the copy it extracts. curl is not needed again. From then on:
freebuff-focusmode status reports what is applied and changes
nothing, freebuff-focusmode focus keeps the ads off until you
end it, freebuff-focusmode focus 25m keeps them off until the
deadline and then restores the file itself,
freebuff-focusmode focus session keeps them off until Freebuff
quits, freebuff-focusmode unfocus ends any of them and brings
the ads back,
freebuff-focusmode verify waits for the relaunch and then says
what the copy you started actually loaded,
freebuff-focusmode revert puts the pristine copy back, and
freebuff-focusmode update fetches a newer tool, replaces this copy
and patches again.
If ~/.local/bin is not on your PATH, the installer
prints the one line that adds it; run
curl -fsSL …/downloads/freebuff-focus-desktop-linux.sh | sh -s --add-path
and it edits your shell rc for you. Pointed at a directory instead, an
AppDir you extracted yourself, it patches in place, exactly like the macOS
tool.
Prefer a file? Download
the tool, a zip with the script and a short read-me, then run
sh freebuff-focus-linux.sh.
Tool v1.8.3, anchored against Freebuff Desktop
0.0.164, the same two anchors, verified against the real Linux
build: it forces the ad auction to return nothing and cuts the ad client off from its
API, and it undoes its own write if the result does not check out. It looks for
*Freebuff*.AppImage in ~/Applications,
~/Downloads, ~/.local/bin, /opt and elsewhere,
and --app points it at the image or directory you mean. If a Freebuff
release moves something it cannot recognise, it refuses and prints the counts it saw
instead of guessing, and scan prints what that build actually
contains, changing nothing.
After you run it
The image is replaced by the patched copy. If Freebuff is running
from the image, the tool stops it and starts the extracted, patched copy instead;
if nothing was running, it prints that AppRun path for you, under
~/.local/share/freebuff-focus. The orchestrator is read once at launch,
so the patch only takes effect on the next start. Your original
.AppImage is untouched, keep it as the unpatched fallback, because
running it still shows ads.
Then check what it loaded:sh freebuff-focus-linux.sh verify. It waits for something to be
running the patched file, then compares when the patch was written against when
that process started. Ctrl-C stops the wait; an interrupted wait prints no verdict.
If the directory is not writable, you are pointing at a
system-wide install under /opt or /usr, which belongs to
root. Use the AppImage path instead, that never needs it, or re-run the same
command with sudo if you really mean to patch the system copy. The
tool never escalates by itself and never asks for a password.
After a Freebuff update, run it again. An update is a new
AppImage, so the patched copy is left behind by it. Each version is extracted into
its own directory, so nothing is overwritten and the backup is kept per version.
Why it is safe to run
It refuses to guess
The tool matches the exact ad code it expects to find, and only the ad code: the one
gate the ad auction consults, and the one request helper every ad API call goes
through. It counts every anchor before it writes, and on a mismatch from a
new Freebuff version or a hand edited file, it
stops and changes nothing, rather than half-patching a 9 MB file. Every run
prints what it found first, so status tells you exactly what is applied
on your machine. Revert restores the original.
render1 anchoroffthe auction gate
request1 anchoroffad request helper
Scope
Two apps, one idea, one focus flip each, because neither can reach the other. The
web version is covered by the extension above, which a browser can
only reach because Chromium renders the page. The desktop app is a
separate bundle with no extension surface, so it is covered by the local tool in
For Desktop instead: one build per platform, macOS, Windows and
Linux. Neither has a server, an account or a telemetry endpoint, and neither touches
anything outside freebuff.com and your own machine. Sessions are local, manual, and
reversible.