Skip to content

docs: document the remaining external tools (gh, ffmpeg, yt-dlp, fabric, jq) and add them to Doctor - #1661

Open
elhoim wants to merge 2 commits into
danielmiessler:mainfrom
elhoim:docs/document-remaining-external-tools
Open

docs: document the remaining external tools (gh, ffmpeg, yt-dlp, fabric, jq) and add them to Doctor#1661
elhoim wants to merge 2 commits into
danielmiessler:mainfrom
elhoim:docs/document-remaining-external-tools

Conversation

@elhoim

@elhoim elhoim commented Jul 26, 2026

Copy link
Copy Markdown

Follow-on to #1660, applying the same logic to the rest of the tree.

Method

Rather than grep for tool names, I enumerated what shipped code actually spawns:

  • Bun.spawn/spawnSync/execFile array literals across *.ts
  • command invocations in shipped *.sh
  • every command -v / Bun.which guard — the strongest signal, since a guard means the code already knows the tool may be absent

That guard set came back as: bash bun bunx claude codex fabric gws interceptor jq kitten magick rtk wrangler. Four were documented, bun is in INSTALL.md, and bash/claude are foundational. The rest, plus the unguarded spawns, are what this PR covers.

Load-bearing and undocumented — added to Doctor and the page

Tool Powers Absence today
gh Work System's system of record fails outright
ffmpeg AudioEditor, transcript splitting, Conveyor fails at spawn
yt-dlp Feed YouTube source, Upgrade channel scan step skipped
fabric Fabric skill's pattern library falls back to native prompting
jq shell hooks that parse JSON hook skips silently

gh is the significant one. WorkSweep, CommitmentSweep, CommitmentLog, RetagSweepTypes, the Pulse work module and ReminderRouter all spawn it, none with a fallback — and WorkSystem.md states the GitHub repo is the system of record. So on a host without gh, work capture doesn't degrade, it fails, and nothing said so in advance. On the machine I audited from, gh is genuinely absent.

Narrower ones — short table, no Doctor row

rtk, kitten, cmux, mkcert, gws. Each is tied to one terminal, one platform, or one opt-in workflow, and each skips cleanly when absent — a Doctor row would be a red ❌ on most hosts for something the user never wanted. They're listed so nothing is undocumented, without turning the check into noise.

Deliberately excluded

whisper reads like a dependency — it appears in ExtractTranscript.ts, SplitAndTranscribe.ts and Conveyor/Runner.ts. It is the OpenAI whisper-1 API model, not a local binary (model: "whisper-1" at SplitAndTranscribe.ts:98). That's an API-key concern, not an external tool, so documenting it here would have been wrong.

Verified

  • Doctor.ts runs clean with all 11 capabilities and exits 0, honouring its never-install-fatal contract.
  • On this host it correctly reports gh broken with its fix command, while ffmpeg, yt-dlp, fabric and jq report live — so both branches are exercised by a real run, not just the happy path.
  • Cross-check: every id in Doctor's registry has a corresponding mention in GETTING-STARTED.md — 11/11.

elhoim added 2 commits July 26, 2026 18:02
Follow-on to the ripgrep/ImageMagick pass. Audited every binary shipped
code actually spawns — Bun.spawn/execFile array literals, shell scripts,
and the `command -v`/`Bun.which` guards that mark a tool as optional —
then compared that set against GETTING-STARTED.md and Doctor's registry.

Five were load-bearing and undocumented:

- gh — the Work System keeps its system of record in a private GitHub
  repo. WorkSweep, CommitmentSweep, CommitmentLog, RetagSweepTypes, the
  Pulse work module and ReminderRouter all spawn `gh`, none with a
  fallback, so absence fails work capture outright rather than degrading.
- ffmpeg — AudioEditor, SplitAndTranscribe and Conveyor spawn it directly.
- yt-dlp — the Feed YouTube source and the Upgrade channel scan.
- fabric — the Fabric skill's pattern library and transcript fetch.
- jq — shell hooks that parse JSON, including the rtk rewrite.

All five added to Doctor so they report live/broken with a fix command,
and documented in GETTING-STARTED.md in the existing shape.

Five narrower ones (rtk, kitten, cmux, mkcert, gws) go in a short table
instead: each is tied to one terminal, platform or opt-in workflow and
skips cleanly when absent, so a Doctor row would be noise on most hosts.

Not included: `whisper` reads as a dependency in the source but is the
OpenAI `whisper-1` API model, not a local binary — an API-key concern,
not an external tool.
Installed rtk and ran it against the hook to check the row was accurate.
Three things were worth recording that the placeholder row didn't say:

- The install source, and that a release binary works as well as brew.
- `rtk init -g` installs rtk's own global Claude Code hook, which would
  sit alongside LifeOS's ContextReduction.hook.sh — two rewriters on the
  same command. Anyone following rtk's own README will hit this.
- It keeps a local history.db of proxied commands, and telemetry is
  opt-in but starts as 'never asked'; `rtk telemetry disable` settles it.

Also states the compression rule the hook already enforces — compress what
the model watches, never what it reads — since that is the reason the row
exists at all.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant