Recording
SkillWeb & browsingRecord a Firefox performance profile with the firefox-devtools MCP. Use when diagnosing slowness in Firefox: startup, page load, an interaction, a browser feature, a benchmark, a reduced test case, to obtain profiles - then analyze with profile-analysis.
Use Recording in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Recording and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Recording skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by mozilla/enterprise-firefox in .agents/skills/profile-capture/SKILL.md and read by ahel’s review.
Use the firefox-devtools MCP:
profiler_start(preset="firefox-platform")
... reproduce ...
profiler_stop() -> path of the saved profile
- Page load:
navigate_page(wait: "complete").set_network_cache("bypass")for a cold load,"default"for a warm one. - An interaction:
take_snapshot, thenclick_by_uid,press_key,fill_by_uid. When the interaction is short, repeat it so there is enough to sample.evaluate_scriptcan run the action in a loop from inside the page. - Browser UI:
evaluate_privileged_scriptwith a context id fromlist_privileged_contexts. This needs system access:restart_firefox(env=["MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1"]).
profiler_is_active tells whether a recording is already running.
profiler_stop(discard=true) throws a botched one away.
Presets are the keys of presets in
devtools/shared/performance-new/prefs-presets.sys.mjs. firefox-platform is
the default. Do not use web-developer for gecko investigation as it has no
native stacks. For a feature or thread no preset covers, pass entries,
interval, features, and threads explicitly instead of a preset. The two
cannot be combined.
Keep the recording short. Start the profiler after setup, stop it as soon as the action is done.
Startup
profiler_start is too late for startup:
restart_firefox(env=["MOZ_PROFILER_STARTUP=1"])
profiler_stop()
profiler_stop saves the profile the startup profiler has been recording. The
other MOZ_PROFILER_STARTUP_* variables go in env too; the binary lists them
with MOZ_PROFILER_HELP=1. env replaces what the previous restart_firefox
set, so repeat MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 and any other variable still
needed.
Analysis
Invoke profiler-analysis with the profile path and say it is unsymbolicated,
so it loads with --with-samply. Don't read the profile JSON yourself.
Which Firefox build
By default, the MCP uses objdir build; get_firefox_info shows which binary is running.
To profile a different Firefox, pass firefoxPath to restart_firefox.
Don't profile debug builds for performance analysis
A debug or non-optimized build (--enable-debug or --disable-optimize in the
mozconfig) produces profiles that do not reflect what users run. Say so before
recording.
Profiles from debug builds can still be useful for debugging, but any performance
numbers from them can be discarded.
Signals
- GitHub stars
- 22
- Forks
- 45
- Last commit
- Oct 2026
ahel recommends instead
Advanced
- Item type
- skill
- Key
profile-capture-mozilla- Source
- github.com/mozilla/enterprise-firefox
github.com/mozilla/enterprise-firefox
More in Web & browsing
Skill · browser-use
More in Web & browsingwebapp-testing
Skill · anthropics
More in Web & browsingplaywright-cli
Skill · microsoft
More in Web & browsingbenchmark
Skill · affaan-m
More in Web & browsingopen-source
Skill · browser-use
More in Web & browsingimpeccable
Skill · pbakaus
More in Web & browsing