flipper-zero-firmware
Skill4 starsChanged 3 months agoMITView on GitHub
Flash, replace, or reflash Flipper Zero firmware — official release,
- Installs packages
In this repository80 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .cursor/rules/security-agent-skills.mdcCursor rule
- ai-mcp-securitySkill
- modern-attack-surfacesSkill
- offensive-toolkitSkill
- security-and-hardeningSkill
- security-auditSkill
- security-code-reviewSkill
- ctf-jail-escapeSkill
- ctf-kernel-exploitationSkill
- ctf-misc-toolkitSkill
- ctf-orchestratorSkill
- ctf-playbookSkill
- ctf-technique-atlasSkill
- ctf-training-loopSkill
- ctf-web-exploitationSkill
- ctf-writeup-disciplineSkill
- ctf-writeup-screenshotsSkill
- binary-exploitationSkill
- crypto-attack-patternsSkill
- crypto-ctf-attacksSkill
- cryptography-fundamentalsSkill
- crypto-toolkitSkill
- encoding-realignmentSkill
- exploit-developmentSkill
- exploit-poc-builderSkill
- kernel-exploitationSkill
- zero-day-huntingSkill
- bluetooth-jammer-sweepSkill
- esp32-serial-diagSkill
- flipper-zero-backupSkill
- hardware-iot-hackingSkill
- nrf24-bitbang-spiSkill
- rf-jammer-firmware-portSkill
- rf-multi-protocol-jammerSkill
- smart-card-driver-debugSkill
- smart-card-usb-directSkill
- wifi-deauth-jammerSkill
- wifi-dualband-jammerSkill
- advanced-pentestSkill
- network-pentestSkill
- pentest-quick-checklistSkill
- pentest-tool-referenceSkill
- pentest-tool-setupSkill
- pentest-workflowSkill
- advanced-attack-chainsSkill
- autonomous-pentest-scannerSkill
- intranet-pentest-advancedSkill
- pentest-report-generatorSkill
- post-exploitation-opsSkill
- professional-pentest-guideSkill
- chatgpt-web-relaySkill
- darkweb-researchSkill
- email-osint-investigationSkill
- local-network-reconSkill
- network-device-reconSkill
- osint-frameworkSkill
- osint-recon-modelSkill
- parallel-intel-gatheringSkill
- reconnaissance-opsSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 12 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈12
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Before any flash operation, run the flipper-zero-backup skill's full 3-layer backup.
- Very specific: line 59
Look at: origin, hardware_name, firmware_version, firmware_branch.
- Distinctive: line 114
Use this only when:
- Distinctive: line 137
Start Recovery Mode → System Reboot
- Distinctive: line 152
If CLI gives trouble (e.g.
- Distinctive: line 164
If the flash fails partway and the Flipper won't boot normally, recover via DFU:
- Distinctive: line 183
After the device reboots into new firmware:
- Very specific: line 201
Cross-check: If you flashed Momentum and the device still reports firmware_origin_fork: Official, the flash didn't take effect.
- Distinctive: line 260
Default baud 115200 works for read-only CLI queries on stock 1.4.3 (firmware default).
- Distinctive: line 272
All 28 SD card files preserved (subghz, nfc, IR, badusb scripts, u2f, dolphin manifest)
- Distinctive: line 283
BLE / Bluetooth pairing may need re-pair: after flash (3-way forget: phone forgets Flipper, Flipper forgets phone, re-pair)
- Distinctive: line 300
If user complains "大部分都還是英文啊" after flashing: do NOT assume it's the partial-translation reality.
- Distinctive: line 303
Was the device rebooted after DFU flash?: After the updater finishes, the Flipper often ends up back in DFU mode (USB PID 0x5740) until the …
- Distinctive: line 313
Rule of thumb: if the user names *specific screens* that are English (e.g.
- Distinctive: line 322
Wait for completion (~3 minutes)
- Very specific: line 334
BLE pairing often needs re-pairing: after a flash, even when /int/.bt.keys is preserved.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Flipper Zero Firmware Modification
Flash a new firmware onto a Flipper Zero (real / original hardware, not clones/clipper unless specified). Pairs with the flipper-zero-backup skill — always run a full backup first.
⚠️ Pre-flight: Backup is non-negotiable
Before any flash operation, run the flipper-zero-backup skill's full 3-layer backup. The flash process preserves /ext (SD card) but wipes /int (settings, BT pairing, Dolphin level). A backup gives you a one-command restore path if anything goes wrong.
Determine the correct firmware variant
Hardware variants (from device_info output, origin field and hardware_name):
origin field | Variant name to use | GitHub release asset suffix |
Official | real / original | original or real |
Flipper (clone boards) | clone | clone |
| Clipper hardware | clipper | clipper |
Verify before flashing — match what your device reports, NOT what the GitHub release page labels. Real hardware bought from Flipper Devices uses original. Clones sold on AliExpress/Taobao typically report Flipper as origin and need the clone variant.
# Capture device identity before flashing
~/.hermes/hermes-agent/venv/bin/python <<'PY'
import serial, time
ser = serial.Serial('/dev/cu.usbmodemflip_Ur1nicar1', 230400, timeout=2)
time.sleep(0.3)
ser.reset_input_buffer()
ser.write(b'device_info\r\n')
time.sleep(0.5)
print(ser.read(ser.in_waiting).decode('utf-8', errors='replace'))
ser.close()
PYLook at: origin, hardware_name, firmware_version, firmware_branch.
⚠️ Pick the right install mode — DFU flash ≠ full update package install
There are two distinct ways to flash a firmware and they do different things:
| Mode | What gets installed | When to use |
DFU flash (qFlipper-cli firmware <file.dfu>) | Single DFU image burned into internal flash. Does NOT unpack resources.tar.gz / firstboot.bin / external .fap manifests. | Quick fix, reverting, or when you don't need new resources. Also a step in the updater flow below. |
Full update package install (update install /ext/path/update.fuf after staging) | DFU image + all bundled resources + firstboot + app manifests unpacked into /int and /ext/apps/. Required for Chinese-language builds, any fork that ships resources.tar.gz > a few MB, or when you want bundled external apps. | The "real" install. Use this by default. |
Symptom of doing the wrong one: user reports "大部分都還是英文啊" (or any feature relying on bundled resources appears missing). The fix is NOT a font hunt — it's that resources.tar.gz was never deployed. Re-do with the full update flow.
Choose the right file format
| File format | What it contains | Flash via | Gotcha |
.tgz | Full update package: firmware.dfu + radio.bin + updater.bin + splash.bin + resources.tar.gz + update.fuf + (sometimes firstboot.bin) | qFlipper GUI Install from file, OR stage to /ext/update/<name>/ + update install | Use this for the full install mode |
.dfu (extracted from .tgz) | Single DFU image | qFlipper-cli firmware <file.dfu> | DFU-only mode — incomplete for Chinese/resource-heavy builds |
.zip | Same contents as .tgz in zip format | Unzip, treat like .tgz | Same as .tgz |
Install mode A — Full update package (RECOMMENDED, default)
This is the only mode that fully installs Chinese-language Momentum-CN or any fork with bundled resources.
# 1. Download the .tgz
cd ~/Desktop/<some_backup_dir>/momentum_cn
curl -sL "https://github.com/<owner>/<repo>/releases/download/<tag>/<file>.tgz" -o firmware.tgz
# 2. Extract it locally to see the structure
mkdir -p /tmp/fw && tar -xzf firmware.tgz -C /tmp/fw/
ls /tmp/fw/f7-update-*/ # verify all 6-7 files present
# 3. Stage the entire package to /ext/update/<name>/ on the Flipper SD card
# Use serial CLI storage write_chunk for each file (works headless, no qFlipper GUI needed).
# See scripts/stage_update_package.sh for the full implementation.
# This uploads all files (typically 15 MB total) to /ext/update/<name>/.
# 4. From the Flipper serial CLI, run:
# update install /ext/update/<name>/update.fuf
# The Flipper's updater:
# - Verifies SHA of all components
# - Loads updater.bin into RAM and reboots into it
# - RAM updater applies firmware.dfu + radio.bin + resources + firstboot
# - Reboots into new firmware
# The CLI session disconnects during the reboot. Wait 60-90 s, then re-probe.
# 5. Verify — see "Verify after flash" below.Why this is the default: in live testing (2026-06-30), DFU-only flash of Momentum-CN gave a Flipper showing firmware v1.1.4 but most UI in English with only 紅外 Chinese — because resources.tar.gz (which contains all the resource pack + extracted icons) was never deployed. The full update install flow fixed it on the second pass.
Install mode B — DFU flash only (escape hatch)
Use this only when:
- You're restoring the stock firmware and don't need bundled resources
- You're brick-recovering and the Flipper can't boot to CLI
- The user explicitly asks for the fastest flash and accepts partial deployment
# 1. Extract .dfu from the .tgz
mkdir -p /tmp/fw && tar -xzf firmware.tgz -C /tmp/fw/
cp /tmp/fw/f7-update-*/firmware.dfu /tmp/fw/firmware.dfu
# 2. Kill stale qFlipper
pkill -9 -f qFlipper 2>/dev/null
sleep 2
# 3. Flash
qFlipper-cli firmware /tmp/fw/firmware.dfuWhat qFlipper-cli does automatically (verified live):
- Protobuf version negotiation
- Storage info / stat / datetime sync
- Backup /int (it preserves your settings! ⚠️ but you should still have your own backup)
- Start Recovery Mode → System Reboot
- Firmware Download (~3-5 minutes, "Firmware Download @Ur1nicar")
- Exit Recovery Mode
- Restore /int from the auto-backup
- System Reboot
- Done — "All done! Thank you."
Total time: ~5 minutes from start to fully booted new firmware.
⚠️ DO NOT unplug USB or press Flipper buttons during the flash. The auto-backup of /int happens internally — if it fails, you'll lose settings, but your own backup will save you.
⚠️ DO NOT use this mode for resource-heavy forks (Momentum-CN, Unleashed, anything with resources.tar.gz > 1 MB). The DFU image alone does not include the resource pack.
Flash via qFlipper GUI (alternative)
If CLI gives trouble (e.g. persistent "Permission error while locking the device"):
- Open qFlipper app
- Connect to Flipper (auto-detected)
- Click "Install from file" (or "Update" → "Install from file")
- Select the
.tgzfile directly (qFlipper GUI accepts .tgz; only CLI rejects it) - Wait for completion
GUI is slower to start but more tolerant of edge cases.
DFU recovery (the ultimate safety net)
If the flash fails partway and the Flipper won't boot normally, recover via DFU:
To enter DFU mode:
- From CLI:
power reboot2dfu(cleanest path, no screen interaction) - From device: Hold LEFT + BACK for 5 seconds → release BACK, keep holding LEFT until blue LED appears
- From hard brick: Unplug USB, hold OK + BACK for 30 seconds, then plug USB
Once in DFU mode:
# Flash the full DFU image
qFlipper-cli firmware /path/to/full_image.dfu
# Or use qFlipper GUI → Repair (auto-downloads latest official)The DFU bootloader lives in protected ROM — it cannot be overwritten by any firmware flash. Even a complete brick is recoverable via DFU. This is your safety net; always have the official firmware .dfu on disk before starting any custom flash.
Verify after flash
After the device reboots into new firmware:
import serial, time
ser = serial.Serial('/dev/cu.usbmodemflip_Ur1nicar1', 230400, timeout=2)
time.sleep(0.3)
ser.reset_input_buffer()
ser.write(b'device_info\r\n')
time.sleep(0.5)
out = ser.read(ser.in_waiting).decode('utf-8', errors='replace')
# Check these fields:
# firmware_origin_fork (should match what you flashed — "Momentum", "Unleashed", etc.)
# firmware_version (e.g. "v1.1.4" for Momentum, "1.4.3" for official)
# firmware_branch (e.g. "v1.1.4" or "release")
# hardware_name (sanity: should still be your device)
ser.close()Cross-check: If you flashed Momentum and the device still reports firmware_origin_fork: Official, the flash didn't take effect. Don't panic — re-flash or DFU recover.
"Is this Momentum or Official?" — definitive diagnostic
The only reliable fork discriminator in device_info output is firmware_origin_fork:
firmware_origin_fork = "Official" → stock flipperdevices/flipperzero-firmware
firmware_origin_fork = "Momentum" → kalicyh Momentum (or Momentum-CN)
firmware_origin_fork = "Unleashed" → DarkFlippers Unleashed
firmware_origin_fork = "Xtreme" → XtremeCommon false-positive signals to ignore:
- ❌
protobuf version: 0.25— NOT a Momentum marker. Official firmware 1.4.3 also reportsprotobuf version: 0.25(verified live 2026-06-30). Don't conclude "this is Momentum" just because qFlipper RPC reports 0.25. - ❌
firmware_commitnot indirectory.json— the firmware CDN manifest atupdate.flipperzero.one/firmware/directory.jsononly listsversion,timestamp,changelog, andfilesper release. It does not carrycommithashes, so you cannot cross-check a runningfirmware_commitagainst the manifest. Custom forks built on top of Official source can legitimately share commit strings with stock firmware. - ❌
firmware_version: 1.4.3matches release — Momentum is built on top of Official source so itsfirmware_versionfield reads the upstream version it was forked from. A match does NOT prove it's Official.
Sample device_info from a stock Official 1.4.3 Flipper (verified live, 2026-06-30):
firmware_version : 1.4.3
firmware_commit : 8622f1a2
firmware_branch : 1.4.3
firmware_branch_num : 0
firmware_build_date : 05-12-2025
firmware_target : 7
firmware_api_major : 87
firmware_api_minor : 1
firmware_origin_fork : Official
firmware_origin_git : https://github.com/flipperdevices/flipperzero-firmware
hardware_model : Flipper Zero
hardware_uid : DAE9650127E18000
hardware_otp_ver : 2
hardware_ver : 12
hardware_target : 7
hardware_region : 4
hardware_region_provisioned : TW
hardware_name : Ur1nicarOne-liner to dump just the fork discriminator + version via pyserial:
~/.hermes/hermes-agent/venv/bin/python <<'PY'
import serial, time, re
s = serial.Serial('/dev/cu.usbmodemflip_Ur1nicar1', 115200, timeout=3)
s.reset_input_buffer(); s.reset_output_buffer()
time.sleep(0.2)
s.write(b'device_info\r\n'); time.sleep(1)
out = s.read(4000).decode(errors='replace')
for k in ('firmware_version','firmware_commit','firmware_branch','firmware_origin_fork','firmware_origin_git','hardware_region_provisioned','hardware_name'):
m = re.search(rf'^{k}\s*:\s*(.+)$', out, re.MULTILINE)
if m: print(f'{k:30s} = {m.group(1).strip()}')
s.close()
PYDefault baud 115200 works for read-only CLI queries on stock 1.4.3 (firmware default). 230400 is also fine and documented in the backup skill — both work, just use 115200 if you're scripting from a fresh state.
Also verify SD card preservation:
storage list /ext
# Should show same directories (apps, subghz, nfc, badusb, infrared, etc.)
# and same files as before the flashPost-flash: SD card content survives
Confirmed live (2026-06-30, Momentum-CN v1.1.4 flash on Official 1.4.3):
- All 28 SD card files preserved (subghz, nfc, IR, badusb scripts, u2f, dolphin manifest)
/intsettings auto-restored by qFlipper-cli- Bluetooth pairing still in
.bt.keys - Dolphin level preserved
No need to "migrate" BadUSB scripts or other plain-text assets — they survive as-is, since custom forks don't touch /ext content during flash.
Custom firmware fork gotchas
Momentum / Unleashed / Xtreme (general)
- BLE / Bluetooth pairing may need re-pair after flash (3-way forget: phone forgets Flipper, Flipper forgets phone, re-pair)
- Some apps are renamed or restructured — old script paths in favorites may not resolve
- CLI command names differ: Momentum replaces
topwithlog. Runhelpafter flash to discover new commands. - Settings apps differ — don't expect the same UI flow as official firmware
Momentum-CN (Chinese-localized) specific
From the kalicyh/Momentum-Firmware-CN README:
- Chinese strings are compiled into the firmware via
localization/zh_CN/strings.json(not loaded from SD card) - Chinese font
primary_zh.u8fis compiled into the firmware (verified:extern const uint8_t primary_zh[]incanvas.c) - Optional font replacement: download
momentum-fw-cn-v<version>-zh-fonts.zip, rename any.u8ftoprimary_zh.u8f, place in/ext/zh_fonts/(manual override) - All release variants are built with
MOMENTUM_UI_LANG=zh_CN— Chinese UI is always on - Partial translation is normal: core UI (Settings, NFC, Sub-GHz, Infrared, iButton, LF RFID, BadUSB main flow) is fully translated; app-internal text in some third-party .fap apps may still be English. This is a known limitation, not a missing font.
- 245 external .fap apps included, 243 have Chinese menu names; the remaining 2 keep English names
- 3 device variants in releases:
original(real hardware),clone,clipper - Branch name in repo is
CN-Clipper(default), notmain
If user complains "大部分都還是英文啊" after flashing: do NOT assume it's the partial-translation reality. Diagnose in this order:
- Did you use the full
update installworkflow, or just DFU flash? If you ranqFlipper-cli firmware <file.dfu>instead of staging the full .tgz and runningupdate install, thenresources.tar.gzwas never deployed. The Chinese strings compile into the firmware but the resource pack (icons, app manifests, font cache) lives separately. Re-do with the full update flow. - Was the device rebooted after DFU flash? After the updater finishes, the Flipper often ends up back in DFU mode (USB PID 0x5740) until the host re-enumerates. Force a USB reset by unplugging and replugging the Flipper USB cable.
- Is it actually a partial-translation reality? Check core UI first — Settings, NFC menu, Sub-GHz menu, main menu labels. If those are still English, the install is incomplete. If those are Chinese but some third-party .fap screens are English, then yes, it's the partial-translation reality (see below).
Partial-translation reality (after a verified full install):
- ✅ Fully Chinese: Settings, NFC menu, Sub-GHz menu, Infrared menu, iButton menu, LF RFID menu, BadUSB main flow, main menu labels
- ⚠️ May still be English: some third-party .fap apps, Dolphin animation titles, certain error messages
- The 245 bundled external apps: 243 have Chinese menu names (
name_zhin application.fam), 2 don't - The Chinese font is always rendered for non-ASCII characters (so Chinese text displays correctly even in partially-translated apps)
Rule of thumb: if the user names specific screens that are English (e.g. "NFC 選單是中文但 Sub-GHz frequency analyzer 還是英文"), it's the partial-translation reality. If they say "Settings 也是英文" or "整個 UI 還是英文", the install is incomplete — re-do with update install.
Restore path (rolling back)
To go back to a previously-working state:
- Plug in Flipper (powered on, normal mode)
qFlipper-cli firmware ~/Desktop/FlipperBackup/official_firmware/flipper-z-f7-update-1.4.3.tgz— wait, this fails (CLI wants DFU format). Use the .dfu:qFlipper-cli firmware ~/Desktop/FlipperBackup/official_firmware/flipper-z-f7-full-1.4.3.dfu- Wait for completion (~3 minutes)
- Optional:
qFlipper-cli restore ~/Desktop/FlipperBackup/internal/flipper_int_backup.tgzto restore settings - Optional: copy back SD card content from
~/Desktop/FlipperBackup/sd_card/if it was lost
Pitfalls (battle-tested)
qFlipper-cli firmware <file.tgz>fails immediately with "Please provide a firmware file in DFUse format." Must extractfirmware.dfufrom .tgz first. qFlipper GUI accepts .tgz; CLI only accepts .dfu.- DFU-only flash does NOT install the full update package.
qFlipper-cli firmware <file.dfu>(or qFlipper Repair on a stock .dfu) burns only the DFU image. It does NOT unpackresources.tar.gz,firstboot.bin, or external .fap app manifests that ship in the .tgz. Symptom: firmware version reads correctly, BLE/SD works, but UI is missing resources, fonts aren't applied, or bundled external apps aren't installed. For resource-heavy forks (Momentum-CN, anything withresources.tar.gz> 1 MB), use the full update install flow instead: stage the entire extracted .tgz to/ext/update/<name>/, then runupdate install /ext/update/<name>/update.fuf. See "Install mode A" above. - macOS locks the STM32WB55 USB DFU interface via AppleUSBDFU.kext. After the updater reboots the Flipper into DFU, macOS auto-claims the device. dfu-util reports "No DFU capable USB device available" even though
ioregshows PID 0x5740. Workarounds: (1) physically unplug-replug the Flipper USB cable to force re-enumeration; (2) send a null/empty byte to the CDC serial port/dev/cu.usbmodemflip_*— the bootloader re-emits the Flipper CLI banner and the device exits DFU on its own; (3) use qFlipper GUI which has a recovery path that handles the kext claim internally. Don't waste time onbrew install dfu-util+ libusb workarounds — they all hit the same macOS kext claim. - Sending
\x00(or any null byte) to the CDC serial port in DFU mode wakes the bootloader. This was discovered live: afterupdate installtriggered a DFU reboot, the device stopped responding to qFlipper RPC, but writing\x00\x00\x00\x00to/dev/cu.usbmodemflip_*made the bootloader re-emit the full Flipper CLI banner and complete the install. Useful escape hatch when qFlipper is stuck and you don't want to ask the user to physically touch the cable. - Don't confuse the variant suffix — flashing
clipperfirmware on real hardware can brick the device (it's not quite the same bootloader target). Verify viadevice_infofirst. - Serial CLI commands change after flashing custom firmware —
topbecomeslogon Momentum, etc. Don't blindly call familiar commands; checkhelpfirst. - BLE pairing often needs re-pairing after a flash, even when
/int/.bt.keysis preserved. The pairing info is preserved but the actual BLE session is reset. - Stale qFlipper process = serial lock = next flash fails with "Permission error while locking the device". Always
pkill -9 -f qFlipperbetween flash attempts. - Don't disconnect during "Firmware Download" phase — this is when the actual DFU write happens. Interrupting here can brick the device. Recovery: DFU mode.
- Custom firmware SD card structure is the same as official — no need to migrate files. Custom forks share the same
/ext/{subghz,nfc,badusb,infrared,u2f,lfrfid,ibutton,dolphin}layout. - Custom firmware can include extra apps not in official — Momentum/Unleashed ship with .fap apps pre-installed in
/ext/apps/. These appear automatically on first boot. - Momentum's
nfc/subghz/irCLI commands are NOT in the official CLI — they exist as external commands. Ifhelpdoesn't show them, runreload_ext_cmdsor check if the firmware has the relevant .fap installed. storage write_chunkis the headless way to upload binary files to Flipper via serial CLI. Protocol:storage write_chunk <path> <bytes>→ wait forReadyprompt → send raw bytes → wait for>prompt back. No length terminator needed beyond the count. Verified for 15 MB+ uploads of update package contents (firmware.dfu, resources.tar.gz). For paths with spaces, wrap in double quotes:storage write_chunk "/ext/badusb/CAUGHT IN 4K.txt" <bytes>. After upload, verify withstorage stat <path>— the size MUST matchwc -con the local file. MD5 verification viastorage md5 <path>is unreliable because the CLI echoes the command before the hash, so parser noise can confuse the comparison.storage readstrips newlines inconsistently. Files come back with mixed\r\nor just\ndepending on file type. Always normalize to\nafter downloading:sed -i '' 's/\r$//' <file>. NFC files in particular lose theFiletype:header if the parser grabs the wrong slice — verify the first line isFiletype: Flipper NFC device(orFiletype: IR signals filefor .ir).- "Did you actually verify it?" — Wang's hard rule after this session: never report a flash as "verified" without (1) checking
firmware_versionandfirmware_origin_forkviadevice_info, (2) listing/extand/intand confirming expected files, (3) for Chinese builds, opening the Flipper's main menu and confirming at least Settings shows Chinese. The user has corrected this twice. If you can't verify, say so.
Quick Start
# 0. Already done: full backup via flipper-zero-backup skill
# ~/Desktop/FlipperBackup/ should have: internal/, sd_card/, official_firmware/
# 1. Identify device variant
ls /dev/cu.usbmodemflip* 2>/dev/null # capture port
# Read device_info → confirm origin = "Official" → use "original" variant
# 2. Download firmware .tgz
cd ~/Desktop/FlipperBackup/momentum_cn
curl -sL "https://github.com/kalicyh/Momentum-Firmware-CN/releases/download/v1.1.4/momentum-fw-cn-v1.1.4-original.tgz" -o firmware.tgz
# 3. Extract .dfu
tar -xzf firmware.tgz
cp f7-update-*/firmware.dfu ./firmware.dfu
# 4. Kill stale qFlipper
pkill -9 -f qFlipper && sleep 2
# 5. Flash
qFlipper-cli firmware ./firmware.dfu
# Wait ~5 minutes for: auto-backup /int → recovery mode → download → exit recovery → restore /int → reboot
# 6. Verify
# Read device_info, check firmware_origin_fork = "Momentum"
# Check /ext/ for preserved filesSee also
flipper-zero-backupskill — run this BEFORE any firmware modificationreferences/momentum-cn.md— Momentum-CN specific install + Chinese font notesreferences/variant-matching.md— how to identify hardware variant from device_inforeferences/device-info-fields.md— verifieddevice_infooutput + field-by-field meaning + authoritative fork detection rulescripts/verify_firmware.sh— pyserial one-liner to dump fork-discriminating fields (firmware_origin_fork, etc.)
Tools reference
- qFlipper-cli (
~/homebrew/bin/qFlipper-cli) — CLI flash viafirmware <file.dfu>subcommand - qFlipper GUI — accepts .tgz directly; slower startup but more forgiving
- pyserial — direct serial CLI for verification + DFU recovery commands (
power reboot2dfu) - DFU mode — built into ROM, always accessible via screen combo or CLI command
- curl + tar — fetch and extract release artifacts
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

