CLI
Drive Feedpik from a terminal, a cron job, or an agent that can run commands. Every command prints the same JSON envelope, so a script can read the result without parsing prose. If your agent speaks MCP instead, use the MCP server — same account, same key.
Sign in
No install step and no key to paste — the CLI asks, and you approve in a browser:
npx feedpik@latest login Ask your human to open: https://feedpik.com/cli-auth and enter code: KRND-8F2Q Requesting: feeds:read, profile:read, memory:read, recommendations:read, audit:read Waiting for approval…
The browser does not have to be on the machine running the CLI, which is what makes this work on a headless box. The key lands in ~/.feedpik/config.json and is shared with the MCP server.
Read access is the default. Ask for more only when you need it — the approval screen spells out every permission before you grant it:
npx feedpik@latest login --scopes recommendations:read,recommendations:write
feedpik logout forgets the key on this machine; revoke the key itself under Algorithm & Agents → Agents & Access. In CI, set FEEDPIK_API_TOKEN instead — it wins over the stored key.
Commands
A persona is a complete reading space — its own sources, preferences, history, and ranking. Every command below acts on the active one.
loginGet a key — you approve it in a browserlogoutForget the key stored on this machinewhoamiCurrent token, its scopes, and account status
candidates [--limit n]Ranked candidates with the reason each was surfacedfeedback <articleId> <action>read | saved | liked | skipped | negative_feedback
policy getThe active ranking policy and its version historypolicy set --file <config.json>Save a modified config as a new versionpolicy versionsList versions (id, name, current)policy rollback <versionId>Restore a previous version, as a new version
persona listYour personas — the active one is flaggedpersona use <personaId>Switch the active persona (the whole space)persona new <name>Create a persona
feeds listSubscriptions of the active personafeeds add <url>Subscribe, optionally with --title and --folderfeeds remove <feedId>Unsubscribe from the active persona onlydiscover [query]Search the catalog or browse with --categorypacks list / packs install <id>Curated source bundlespersonas browse / personas get <id>Community personas — installed as a NEW personaopml import <file> / opml exportMove your subscriptions in and out
Output contract
Stable across every command, so an agent can branch on it:
{ "ok": true, "data": { }, "error": null }
{ "ok": false, "data": null, "error": { "code": "UNAUTHORIZED", "message": "…" } }Exit code 0 on success, 1 on error. skill and opml export print raw content instead. Progress messages go to stderr, so stdout stays parseable.
Policy changes always land as a new version with an audit trail — nothing is silently overwritten, and everything is one policy rollback away.