mrkeyoor.com_
Fri 02 Oct 14:59 UTC
Self-Hostedevaluationupdated 02 Oct 2026

life-recorder review

Life Recorder continuously records short audio chunks on a development-installed iPhone, sends them to a private Mac receiver, and builds one local Markdown transcript with Whisper. It solves the cloud-dependency problem for personal audio recall, but the trade is a hands-on Apple development setup and responsibility for a very sensitive archive.

Verdict

Our receiver install took 24 seconds and the build passed in 8, but pytest collected 0 tests, so Life Recorder is an inspectable personal project rather than a verified recording appliance. Use it only if private local transcription is worth maintaining an iPhone development build, an awake Mac, and a consent policy. Most people should start with on-demand offline transcription, which captures less sensitive material and asks much less of the operator.

We ran it

Lab card: what happened when we ran life-recorderScreenshot of life-recorder (github.com/browser-use/life-recorder)
Install✓ · 24s35 packages · 37 MB
Build✓ · 8s
Tests✗ · 9s0 passed · 0 failed of 0 (pytest)
Known vulns0(pip-audit)
Repo19 files~1,557 lines of source · 0.1 MB · 0 CI workflows · tests dir

Answers from our run

Does life-recorder build from source?

Dependencies installed in 24 seconds (35 packages), and the build succeeded in 8 seconds. We cloned commit 205617c into a clean Debian container with 3 CPUs and no project-specific setup.

Do life-recorder's tests pass?

Yes: 0 of 0 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does life-recorder have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use life-recorder?

Anyone who cannot obtain informed consent where recording is required: the app can continue capturing with the screen locked and while other apps are open.

What are the alternatives to life-recorder?

Buzz, OpenRecall, ActivityWatch. Our receiver install took 24 seconds and the build passed in 8, but pytest collected 0 tests, so Life Recorder is an inspectable personal project rather than a verified recording appliance.

Setup2/5Receiver builds, but phone signing and local Whisper remain manual
Docs4/5Clear pairing, privacy, restart, and network instructions
Community2/5320 stars, one open PR, and no established issue history
Maturity2/5No release, no CI, and our pytest run collected zero tests

Who it’s for

Apple developers who want a private, inspectable iPhone-to-Mac audio journal.
People prepared to keep a Mac awake and reachable for local Whisper transcription.
Tinkerers comfortable with Xcode signing, iPhone Developer Mode, ffmpeg, whisper.cpp, and private VPN routing.
Codex users who want a guarded setup procedure for a connected personal device.

Who it’s NOT for

Anyone who cannot obtain informed consent where recording is required: the app can continue capturing with the screen locked and while other apps are open.
People expecting an App Store install: the README requires Xcode, an Apple developer account, a connected iPhone, and Developer Mode.
Windows, Linux, or Android households: capture is an iPhone app and the receiver setup assumes macOS launchd and Homebrew paths.
Travelers expecting direct cellular sync: the project ships no public tunnel, and the README requires a private VPN or another reachable HTTPS route.
Teams that require a passing discovered test suite and CI before handling sensitive data: our pytest run collected 0 tests, and the repo has no CI workflow.
Long-term archives without code review: open pull request 1 says the current receiver rewrites the full transcript whenever a chunk completes, so work grows with archive size.

Setup reality

Our receiver run at commit 205617c installed 35 Python packages in 24 seconds and used 37 MB. The build succeeded in 8 seconds. Pytest exited 5 after 9 seconds because it collected 0 tests: 0 passed and 0 failed. Pip-audit reported 0 known vulnerabilities.

The full system also needs macOS, Xcode signing, an Apple developer account, an iPhone in Developer Mode, Python 3.10 or newer, ffmpeg, whisper.cpp's whisper-cli, and a downloaded GGML model. Setup creates a bearer token, self-signed certificate, and private pairing page.

Local LAN use is the default. Cellular uploads need a private VPN or another reachable HTTPS address. The Mac must stay reachable, runtime files need private storage, and the iPhone app must be reopened after a reboot or force-quit before recording can resume.

One switch can create an all-day local transcript

Life Recorder captures roughly one-minute AAC chunks on an iPhone and queues them until a Mac receiver acknowledges durable storage. The Mac converts each chunk with ffmpeg, transcribes it through whisper.cpp, removes some repetitive noise markers, and writes one Markdown document with hourly timestamps. Audio is deleted only after receipt and successful transcription. No hosted speech API or cloud storage is required.

That flow has a clear appeal: your spoken notes stay on devices you control, pending clips survive a lost connection, and the transcript is a normal file rather than a proprietary account export. It is also an always-available microphone. Recording can continue while the screen is locked and other apps are in use, so consent, retention, physical access, and backup policy matter more than the convenience of life.md.

The phone is a development build, not an App Store download

Installation starts in Xcode with an Apple developer account, a connected iPhone, and Developer Mode. The app asks for microphone and local-network permission. A command-line route exists, but it still needs a development team identifier and device ID. After an iPhone reboot or force-quit, iOS requires the user to open Life Recorder once before capture resumes.

The Mac side needs Python 3.10 or newer, ffmpeg, whisper-cli, and a GGML Whisper model. Its setup script creates a 256-bit bearer token, a self-signed certificate, and a pairing page containing the private credential. The token goes into iPhone Keychain and the Mac runtime. The receiver can install itself as a launchd agent and defaults to HTTPS on port 8765.

What happened when we ran it

Our sandbox ran the Python receiver at commit 205617c. Installation succeeded in 24 seconds, adding 35 packages and occupying 37 MB. The build completed in 8 seconds. The checkout was only 19 files, about 1,557 lines of source, and 0.1 MB, so the receiver is small enough for a careful code read. Pip-audit reported 0 known vulnerabilities.

The test step failed with exit code 5 after 9 seconds because pytest found no cases: 0 passed and 0 failed out of 0. The repository has a root tests directory plus iPhone test source, but our harness worked inside receiver/, the detected Python project directory. We cannot turn files outside that run into passing evidence. The result establishes a successful receiver install and build, followed by no collected pytest coverage.

Our scan also found no CI workflow and no Dockerfile. Neither is mandatory for a personal Mac tool, especially one tied to Xcode and launchd. Together with the zero-case pytest result, though, they leave the owner responsible for reproducing the intended checks before trusting changes with hours of private audio.

Certificate pinning keeps the default route private

The receiver exposes an authenticated upload endpoint and health route, not transcript download or general Mac access. It checks a bearer token, pins the self-signed certificate on the phone, validates content length and SHA-256, limits an upload to 32 MB, and refuses a non-loopback listener without a certificate and key. Runtime files use restrictive permissions. These are sensible boundaries for a small home service.

Local security does not make the transcript harmless. Anyone who can read the runtime directory can read its token and text. A pairing page contains enough information to connect the phone, so it belongs in private storage. The README also recommends excluding the runtime from repositories and choosing backups deliberately. Speech recognition can be wrong, and the generated document warns an agent to treat transcripts as source material rather than instructions.

Cellular access is deliberately absent. On the same LAN, a .local hostname can reach the Mac. Away from home, you supply a private VPN address or another HTTPS route. Opening port 8765 to the public internet would create a threat model the project does not claim to handle. The Mac must also be awake when uploads arrive, although the phone retains pending clips when it cannot connect.

The current transcript rewrite grows with the archive

Open pull request 1 identifies a long-running cost in the current receiver: after each successful chunk, it reads completed rows and rewrites daily files plus the full life.md. That work increases as the archive grows. The proposed branch switches normal in-order arrivals to append operations and keeps a full rebuild for recovery and out-of-order cases, but it remained open when checked.

GitHub showed 320 stars and 40 forks on October 2, 2026. The repository was created and last pushed on September 11, with the performance pull request opened the next day. There is no tagged release and no closed issue history. Those dates describe a newly shared project, not a maintained product with upgrade or support expectations.

Life Recorder is interesting because it keeps the whole path visible: capture, authenticated transfer, local transcription, deletion, and a plain-text archive. Its privacy claim depends on you operating that path correctly. Our 24-second install and 8-second build lower the barrier to reading the receiver, while the 0 collected tests and unmerged archive fix argue against treating it as background infrastructure you can forget.

Alternatives

ProjectWhat it isPick it when
BuzzA desktop app that transcribes and translates chosen audio files offline with Whisper.pick this instead when you want local transcription without an always-listening iPhone recorder.
OpenRecallA local activity-history tool centered on periodic screen capture and search.pick this instead when visual computer history matters more than ambient speech.
ActivityWatchA cross-platform local time tracker that records app and window activity.pick this instead when you need a lower-risk record of digital activity rather than microphone audio.

What people are saying

  1. [velocity-scout] browser-use/life-recorder

Sources

  1. Life Recorder README
  2. Mac receiver source
  3. Codex setup skill
  4. Open transcript-scaling pull request

More self-hosted reviews

FluxDown · bank-sampah · 3x-ui_runonflux · printfilm · odysseus · Spun · the whole board →