- Open
https://<your-worker>.workers.dev/health. It should show"status":"ready","database":trueand"scheduler":"running". - Open the settings page and look at the Sources cards, or ask your agent to check unicorn’s status. Each source shows when it last synced and its last error.
pull: means unicorn could not read the source. ingest: means it read the source but could not store what came back. The part after the colon says why. The sections below cover each one.
The installer stops
Node 22.19+ is required. Your Node.js is older than the minimum. Install Node.js 22.19 or newer and run npm run setup again. The same message also names the version it found.
Cloudflare sign-in does not complete. Run npx wrangler login on its own, finish the browser sign-in, then run npm run setup again.
You ran setup twice and the tokens changed. Each run generates new tokens. Update any client that used the old MCP token. See Deploy.
The scheduler is stopped
/health shows "scheduler":"stopped", and nothing syncs. Open the settings page and click Start scheduler. The first sync runs about five seconds later.
From a terminal:
A source shows pull:unauthorized
The source rejected the credential, with a 401 or 403. The credential may be wrong, expired or revoked.
If you saved a new credential and the error stays, a secret set with
wrangler secret put may be overriding it. See A saved value is ignored.
Click Test connection on the card after you save. It tells you how many items it pulled, or why it failed.
Moodle says the session is invalid
Moodle sessions expire. When yours has, the card shows an error such as one of these:MoodleSession cookie value into Session cookie (advanced) on the Moodle card. See Sources.
If you ran npm run moodle:push once and later pasted a cookie on the card, the pushed one still wins. See A saved value is ignored.
If Moodle shows no items at all, check Base URL on the card. The default that ships with unicorn belongs to one institution and is probably not yours.
pull:network, pull:timeout and pull:http_<status>
A single failure does not lose anything. Items already collected stay, and the next hourly sync tries again.
ingest:<code> errors
unicorn read the source but rejected the items. For a built-in source this is rare and means a change in what the source sends. For a feed you added, the mapping probably points at a field the feed does not have. Ask your agent to check the manifest against a sample of the feed, using the admin connection described in Custom tools.
A saved credential needs re-entry
A card shows this notice:A saved value is ignored
A secret set withwrangler secret put always wins over a value you paste in the settings page. If you set a credential both ways, unicorn uses the secret. To change it, set the secret again:
ED_API_TOKEN, MOODLE_SESSION, MOODLE_BASE_URL, CANVAS_BASE_URL and PLUGIN_SECRET_CANVAS_TOKEN. Or delete the secret and use the settings page:
Gmail
The
oauth_ codes appear on a plain page in your browser after you return from Google, not on the settings page.
If Gmail connects but no mail appears, check the Gmail scope card. unicorn reads only recent mail from your university domains, from listed senders, or that mentions a course code.
A client cannot connect
Nothing shows up in my digest
- The digest is written at or after 07:00 in your timezone, once per day. Check Timezone on the settings page.
- If nothing changed and nothing is due in the next seven days, no digest is written.
- The scheduler has to be running. See above.
I forgot my admin token
There is no way to read it back. Set a new one and keep it in a password manager:The sync broke after an upgrade
You may have deployed without migrating. Runnpm run upgrade again. It applies any migration that is still missing and deploys. See Upgrade.