The mf CLI
The plugin’s skills do their work through mf, a short bash script that needs only bash and curl, which every Mac and Linux machine has. It also uses jq; if you don’t have it, mf downloads the official jq build once into ~/.mentorfile/bin and checks it against a pinned SHA-256 before using it. No sudo, no package manager. It runs on macOS and Linux, and on Windows through Git Bash, which Claude Code on Windows already uses; Codex on Windows needs Git for Windows installed. This page lists everything it does. The source is about 170 lines if you’d rather read it.
Everything it keeps lives in ~/.mentorfile, or wherever MENTORFILE_HOME points (the plugin’s tests use that). It talks to https://mentorfile.com unless you set MENTORFILE_URL, and to GitHub when you sign in. Your transcripts are never sent anywhere by it: mining runs through the AI model you already use.
Commands
mf loginSigns you in with GitHub's device flow: copies a one-time code to your clipboard and opens github.com/login/device, where you paste it and click Authorize. Without a clipboard tool or browser it prints the code and URL instead; run it again after approving.
Sends: Asks mentorfile.com for the public GitHub app id, then talks to GitHub only. The token it gets can read your public profile and nothing else. It is saved in ~/.mentorfile/token (readable only by you).
mf extract <dir>Used by /mentorfile:mine. Reads the transcripts it's given and keeps only what you typed, skipping model replies, tool output and injected blocks. One file per transcript. About one in seven sessions goes to a holdout/ folder instead, chosen by a checksum of its path so it's always the same ones: those are never used to build your mentorfile, only to test it.
Sends: Nothing. Local only.
mf previewBuilds the skill from your local persona and installs it as ask-<handle>, so you can try it on yourself before publishing.
Sends: The persona files (not your transcripts or extracts) to mentorfile.com, which returns the built skill and stores nothing.
mf publishUploads ~/.mentorfile/persona as the latest version of your mentorfile, then prints your page, its stats, the suggested price and your dashboard link. Signs you in first if needed.
Sends: mentorfile.json, voice.md, core.md, principles.md and playbooks.md, with your GitHub token so the server can confirm with GitHub that it's you.
mf unpublishTakes your mentorfile off mentorfile.com. Copies people already installed stay on their machines.
Sends: A delete request with your GitHub token.
mf find <what you're working on>Searches published mentorfiles.
Sends: Your search words.
mf get [handle…]Installs mentorfiles as the skill ask-<handle> in every Claude Code config folder (~/.claude*/skills) and in ~/.agents/skills for Codex. With no handle, updates everything you have. Paid ones print a checkout link first.
Sends: The handle, and your GitHub token if you're signed in (paid mentorfiles need to know who bought them).
mf remove <handle…>Uninstalls a mentorfile from your skill folders.
Sends: Nothing. Local only.
Files on your machine
~/.mentorfile/bin/jq- Only if you didn't have jq: the official static build, checksum-verified. Delete it any time.
~/.mentorfile/eval/- Test cases from your held-out sessions and the match score's answers and grades. Real quotes; never uploaded. Only the totals go into mentorfile.json.
~/.mentorfile/holdout.txt- Which sessions are held out for the match score.
~/.mentorfile/token- Your GitHub sign-in token. Delete it, or revoke the app in your GitHub settings, to sign out.
~/.mentorfile/state.json- Which transcript lines have been mined, so the next run only reads new ones.
~/.mentorfile/mining/- Raw extracts with verbatim quotes. Never uploaded.
~/.mentorfile/evidence.md- Which extracts back each principle. Never uploaded.
~/.mentorfile/persona/- The five files mf publish uploads. Edit them freely.
The rest of the plugin
The three skills that call mf (mine, find, get) are plain markdown in the public repo, including the full mining prompts and the leak scan. Something unclear or missing? Open an issue.