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.

Access
  • loginGet a key — you approve it in a browser
  • logoutForget the key stored on this machine
  • whoamiCurrent token, its scopes, and account status
Reading
  • candidates [--limit n]Ranked candidates with the reason each was surfaced
  • feedback <articleId> <action>read | saved | liked | skipped | negative_feedback
Ranking
  • policy getThe active ranking policy and its version history
  • policy set --file <config.json>Save a modified config as a new version
  • policy versionsList versions (id, name, current)
  • policy rollback <versionId>Restore a previous version, as a new version
Personas
  • persona listYour personas — the active one is flagged
  • persona use <personaId>Switch the active persona (the whole space)
  • persona new <name>Create a persona
Sources
  • feeds listSubscriptions of the active persona
  • feeds add <url>Subscribe, optionally with --title and --folder
  • feeds remove <feedId>Unsubscribe from the active persona only
  • discover [query]Search the catalog or browse with --category
  • packs list / packs install <id>Curated source bundles
  • personas browse / personas get <id>Community personas — installed as a NEW persona
  • opml 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.