Build1 distinct publisher3 min readUpdated
An operator mapped every cron-style job on his Mac after noticing a metrics pipeline had been dead for two days. The count was never the problem. The missing inventory was.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A developer writing on dev.to published an inventory of the 26 `com.shun.*.plist` launchd jobs running on his Mac, along with the script that generates it [1][9]. The reason to care is not the number: it is that launchd silently restarts processes when they die, and multiple plists dump errors into the same `~/.claude/logs/` directory, so failures scroll away instead of paging anyone [3][4].
That combination produces the failure mode he describes: detection by coincidence. Sometimes two days pass before he notices "the Metrics numbers haven't updated" [5]. Two days on a job that fires twice daily is four scheduled runs that either did not happen or happened wrong before anyone looked [3].
The naming problem is visible in the post itself. Four jobs are named by hand: `vault-ingest` at 4:55, a daily brief at 7:30, `github-scout` on a schedule, and `env-map` firing at 4:50 and 8:10 [2]. He then writes that this is "already close to ten" [c2a], which leaves 22 of the 26 jobs unnamed in the write-up [1]. That slippage is the argument for the tool better than any of the prose.
The distinction he draws is worth stealing: a work log records what you did yesterday, while an environment map is a snapshot of what is running, what exists, and what is dead right now [6]. His map reports 47 plugins, 358 agents, 112 auto-skills, 11 projects of which two do not exist on disk, and `lead-finder` sitting on 75 uncommitted changes [7]. Two of eleven project paths resolving to "not found" is exactly the class of rot that never throws an error.
The engineering choices are more instructive than the dashboard. `env-map.sh` runs `set -uo pipefail` rather than `set -e`, on the stated grounds that individual collection failures should degrade to `?` and the map should still be generated [10]. The MCP count is initialised to `?`, then attempted under `timeout 12` before counting `Connected` lines [11]. Output goes to a temp file and is moved into place, so a partial run cannot leave a half-written page [12]. The plist runs with `LowPriorityIO=true` and `Nice=10` [13]. That is a script written by someone who has already been burned by a 4:50am job hanging on a flaky network call.
The change log is accidental and the best part: the vault was already under git, `environment-map.md` is overwritten daily, and `vault-ingest` commits it, so yesterday's clean repo showing 75 uncommitted changes today appears as a diff [8]. Note the ordering, though: `env-map` fires at 4:50 and the committer at 4:55, a five-minute window [2].
Which sets up the obvious gap. Nothing in the described setup watches `env-map` itself, and because the file is overwritten atomically, a failed run leaves yesterday's page intact [12][8]. An empty git diff then means either "nothing changed" or "the mapper is dead," and those are not the same. The post's headline also promises a dead PATH and a four-minute freeze among five pitfalls [14]; the mechanism behind those is not in the portion of the text I can verify, so treat the PATH lesson as unread. The revenue arc in the opening paragraph is single-sourced and unverifiable, and irrelevant to whether the jobs run [15].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
After listing those jobs the post says "That's already close to ten."
Sometimes it takes two days before the author notices that the Metrics numbers have not updated; detection lags because there is no map.
The map reports 47 plugins, 358 agents and 112 auto-skills in the Claude environment, 11 projects of which two do not exist on disk ("not found"), and lead-finder with 75 uncommitted changes.
The Obsidian vault is already under git, environment-map.md is overwritten daily, and vault-ingest git-commits the vault every morning, so a change such as lead-finder going from clean to 75 uncommitted changes shows up in the git diff.
Named jobs include vault-ingest firing at 4:55 each morning, a daily brief at 7:30, github-scout on a schedule, and env-map firing twice, at 4:50 and 8:10.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Code-level detail, single self-reported source
The technical core is unusually well specified for a personal blog post: verbatim shell flags, the MCP_OK block with its 12-second timeout, the plist PATH and nvm fallback, the mv-based atomic write, plist priority keys and the output path, plus a candid note that the live MCP field rendered as "?". But every claim comes from one first-person dev.to post with no independent verification, no log excerpts or map output a reader could inspect, 22 of 26 jobs unnamed, the headline's 4-minute freeze unexplained, and the revenue figures undocumented.
One personal machine, no external users
Adoption is a single practitioner's own workstation: 26 launchd jobs and one env-map job running twice daily, writing into that person's Obsidian vault. No other users, teams, downloads, repository, package, or third-party deployment is reported, and the script is shown only as excerpts rather than published as a project others could install.
Headline and revenue framing outrun the body
The engineering middle of the post is proportionate to its evidence, but the packaging is not. The title sells five launchd pitfalls headlined by a 4-minute freeze that the text never describes, the piece opens with an undocumented ¥1.2M/month revenue trajectory used as credibility framing, and a four-job list is called "already close to ten" in an article whose thesis is that missing inventory, not count, is the problem. The delivered fix is also narrower than the framing implies: a human-read daily snapshot with git diff history, not detection of dead jobs.
Self-promotional framing on a developer platform
The author has a visible incentive to present the setup as a proven earner: the post opens by tying an autonomous Claude Code environment to ¥1.2M/month in revenue, and the headline is a listicle with a number and a dramatic hook typical of engagement-seeking developer-platform publishing. That said, the technical body is specific, includes an admission that the MCP check failed on the day of writing, and promotes no vendor, paid product or affiliate offering that the supplied text discloses.
Plausible and specific, but uncorroborated
Confidence is moderate-low. The mechanics are internally coherent, consistent with how launchd, bash and git actually behave, and detailed enough to be reproduced, which makes the technical claims credible on their face. But the cluster rests on one self-reported publisher with no independent verification, the quantitative environment figures are unverifiable script output, adoption is a single machine, and the headline and revenue claims are demonstrably unsupported by the text they accompany.
build
Exit 0 is not a health check: three weeks of macOS backups that copied nothing1 distinct publisher
build
41 queued tasks, zero ready to dispatch: the agent bottleneck was judgment1 distinct publisher
build
Your reviewing model is reading the diff when it should be reading the session1 distinct publisher
build
launchd Tells You Nothing When a Job Dies, So Your Revenue Reports It Instead1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 19, 2026