Hey Pepper

Your AI chief of staffDocs

Hey Pepper
Help

Troubleshooting

What to do when something goes wrong with install and keys, Beeper, the Telegram bot, briefs, the dashboard or the phone line. You marks a step only you can do, not an AI helping you. Commands that start with /, like /resume, go to the bot in Telegram; the full list is in Telegram commands.

Doctor is Pepper's health check, and it's the first thing to run. It checks every connection without changing anything in them and spends none of your Anthropic credit. It does open Pepper's database, and it renews a saved sign-in that is close to expiring.

npm run doctor

Every line should say ok, or off for a part you haven't turned on. A FAIL line names the check and the problem. Pepper's log is data/pepper.log, with errors in data/pepper.err.log.

After changing .env, the file that holds Pepper's keys and settings, restart Pepper:

launchctl kickstart -k gui/$(id -u)/com.pepper.agent
SymptomCauseFix
Missing required env var TELEGRAM_BOT_TOKEN (see .env.example), or another nameThat line of .env is empty, or .env is not in the Pepper folderFill it in from Install Pepper, steps 5 to 7
Doctor: anthropic FAILThe API key is wrong, revoked or out of creditYou: check the key at platform.claude.com. A backup key in ANTHROPIC_API_KEY_BACKUP is used when the first runs out
Doctor: files or memory FAIL, readable by othersOther users on the Mac could read Pepper's filesRun chmod 600 on the file the line names, or chmod 700 on the folder
the database is schema v…, this code knows v…A newer copy of Pepper wrote the databaseUpdate the code (git pull, npm install) and restart
Doctor: search FAILThe search index is out of stepnpm run backup, then sqlite3 data/pepper.sqlite "INSERT INTO messages_fts(messages_fts) VALUES('rebuild');" (use your data folder if it isn't data/)
Doctor: speech says off, or voice notes come back Couldn't transcribeLocal speech-to-text is not installedbrew install uv ffmpeg, then uv tool install parakeet-mlx
Doctor: voice FAILPepper's voice is on but not set upbrew install uv ffmpeg, then scripts/setup-tts.sh. Until then the Mac's built-in voice stands in
Doctor: semantic FAILSemantic search is on but not set upbrew install uv, then scripts/setup-embed.sh. Until then search uses keywords
Doctor: ram FAILThe Mac is short of memoryQuit other apps, or turn off voice or semantic search
Doctor: host FAILThe Mac sleeps, or stays off after a power cutYou: see host setup
The one-line install says could not cloneThe repository is private, or the Mac is offlineUnpack the copy you were given and run scripts/bootstrap.sh from inside it
npm run setup says run this in a terminalIt was started from a script or an editor, not TerminalRun npm run setup in Terminal; it reads keys without showing them
Setup stopped partwayOne part failed three timesWhat worked is already in .env. Fix the part it named, then npm run setup <part>
Doctor: node FAILPepper is using an older Node versionnvm install 24 && nvm alias default 24, then open a new Terminal tab
TELEGRAM_API_ROOT is for tests onlyThat line is in .envDelete it
BEEPER_BASE_URL must point at this MacBeeper's address points elsewhereUse http://localhost:23373

Pepper gets the chats you connect through Beeper Desktop, using a read-only token.

SymptomCauseFix
Doctor: sources FAILBEEPER_ACCESS_TOKEN is emptyMake the token (install step 4) and add it to .env
Doctor: beeper FAIL, timed out or refusedBeeper Desktop isn't runningYou: open Beeper Desktop and have it start at login
Doctor: beeper FAIL, reachable, but no accounts connectedNo chat apps added in BeeperYou: add your chat apps in Beeper Desktop
Doctor: beeper FAIL, not connected: whatsapp=…One chat app has signed out or lost its connectionYou: reconnect that app in Beeper Desktop
Doctor: beeper-token FAIL, expires in N days, expired or expired or revokedThe token was set to expire (Beeper's dialog defaults to 30 days), has expired, or was removed in BeeperYou: make a new read-only token with Expires In: Never (install step 4), put it in .env, restart
Doctor: beeper-token FAIL, can send and change chats, or setup rejects a token for thisThe token was made with Allow sensitive actions ONYou: delete it in Beeper and make one with sensitive actions OFF. Pepper doesn't check again while it runs, so use a read-only token from the start
Doctor: beeper-token FAIL, read-only isn't confirmedThis version of Beeper Desktop can't say what the token may do, and the read-only token is what keeps Pepper from sendingUpdate Beeper Desktop, then npm run doctor
/status shows beeper as needs you or broken, or the brief says no successful sync since …Beeper is closed or the token was revokedOpen Beeper, or make a new read-only token, then /sync
A chat never appearsThat app isn't in Beeper, or the chat is ignoredCheck Beeper, then /chats and /normal <chat_id>. /chats lists only the 25 most recently active chats
SymptomCauseFix
The bot never answersWrong TELEGRAM_OWNER_ID, Pepper isn't running, or you wrote in a groupnpm run setup telegram learns your id from your first message (or get it from @userinfobot), then restart. Use the bot's private chat
Setup: Another Pepper is already reading this bot (409), or data/pepper.err.log shows 409: Conflict: terminated by other getUpdates requestAnother Pepper is using the same bot, often the old Mac after a moveYou: stop the other one (Moving to another Mac), then try again
npm run digest -- --send fails, but the token is rightTelegram bots can't start a chatYou: open the bot and send /start
Doctor: telegram FAIL, UnauthorizedThe bot token is wrong or revokedNew token from @BotFather, then restart
Paused (/resume to continue).Pepper is halted/resume
Spend cap reached …The daily or monthly budget is used upWait. Briefs have money set aside and still run
Couldn't transcribe that voice note (…)The reason is in the brackets: speech tools missing, the recording empty or too big, or OpenAI refused itInstall speech-to-text if it's missing (the speech row under Install and keys); otherwise try a shorter recording
No longer pending. after a tapThat button was used or expiredReply to the newest brief in words
A command gets no replyPepper doesn't know itSee Telegram commands
Something failed: …A model or network errorTry again. If it repeats, run doctor
SymptomCauseFix
No brief at allPepper isn't runninglaunchctl list | grep com.pepper.agent. If it's missing, run launchd/install.sh
launchd/install.sh: Bootstrap failed: 5: Input/output errorThe old Pepper was still shutting down when the new one was started (fixed in the installer)Run launchd/install.sh again
Doctor: pepper FAIL, HALTED/halt was sent/resume
Briefs arrive at the wrong hourThe timezone is wrongSet PEPPER_TZ (for example Europe/London) and restart
A brief is missing after the Mac was offPepper came back more than 90 minutes after the brief was due/brief for one now. Stop the Mac sleeping: host setup
morning brief failed: …Building or sending the brief failedRead the reason, fix it, then /brief
Doctor: stale spend reservation(s)Pepper stopped mid-callRestart Pepper
Every brief says Nothing is waiting on you.Often normal: nothing in your chats needs a reply from you. Otherwise no messages are coming in, or the chats are muted/status, then /chats

The dashboard is Pepper's set of web pages, which you open over Tailscale, a private network between your own devices.

SymptomCauseFix
Doctor: dashboard says offPEPPER_DASH_USERS is emptyAdd your Tailscale login, then restart
Misdirected (421)PEPPER_DASH_ORIGIN is unset or wrongSet it to the exact https://…ts.net address
Forbidden (403)Your login isn't in PEPPER_DASH_USERS, or you skipped Tailscale ServeAdd the login and open the ts.net address
The page doesn't loadServe isn't running, or the device isn't on your Tailscale networktailscale serve --bg 7777. You: sign the device in to Tailscale
Session requiredPepper restarted, and that ended your sessionReload the page
Buttons say Paused (/resume in Telegram).Pepper is halted/resume

You can talk to Pepper by phone, and the phone guides have troubleshooting tables of their own:

The phone check fails when the phone line is on but your number or passphrase is missing. Set the passphrase with npm run phone -- passphrase.

Run doctor and /status, and read the end of pepper.err.log. Report a security problem privately, by email to hello@heypepper.ai with "security" in the subject.