apps/cli/SKILL.md
# Folo CLI Skill ## Trigger Conditions Use this skill when a user asks to: - Manage RSS subscriptions - Browse timeline entries - Read entry details or readability content - Mark entries as read/unread - Search feeds/lists or trending sources - Import/export OPML - Check unread counts ## Preconditions 1. Node.js and npm are installed so the CLI can be executed with `npx`. 2. Authentication is configured: - `npx --yes folocli@latest login` (recommended, opens browser and auto-logins) -
npx skillsauth add rssnext/folo apps/cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when a user asks to:
npx.npx --yes folocli@latest login (recommended, opens browser and auto-logins)npx --yes folocli@latest login --token <session-token>FOLO_TOKEN=<token>npx --yes folocli@latest ... for all agent runs.npm install -g folocli.folocli@latest is the update strategy.folo binary, it is acceptable, but npx --yes folocli@latest remains the recommended default in docs and automation.Default output is JSON with a stable envelope:
{
"ok": true,
"data": {},
"error": null
}
Errors return:
{
"ok": false,
"data": null,
"error": {
"code": "UNAUTHORIZED",
"message": "Token is invalid or expired."
}
}
You can switch output mode:
--format json (default)--format table--format plainnpx --yes folocli@latest timeline --limit 10npx --yes folocli@latest entry get <entryId>npx --yes folocli@latest entry read <entryId>npx --yes folocli@latest search discover <keyword>npx --yes folocli@latest subscription add --feed <url>npx --yes folocli@latest subscription add --list <listId>npx --yes folocli@latest subscription listnpx --yes folocli@latest unread countnpx --yes folocli@latest unread listnpx --yes folocli@latest timeline --unread-only --limit 20npx --yes folocli@latest entry mark-read <entryId>npx --yes folocli@latest entry mark-all-read --view articlesnpx --yes folocli@latest collection add <entryId>npx --yes folocli@latest collection remove <entryId>npx --yes folocli@latest collection list --limit 20npx --yes folocli@latest opml export --output backup.opmlnpx --yes folocli@latest opml import feeds.opmlnpx --yes folocli@latest timeline returns:
entriesnextCursorhasNextLoop until hasNext is false:
npx --yes folocli@latest timeline --limit 20nextCursornpx --yes folocli@latest timeline --limit 20 --cursor <nextCursor>npx --yes folocli@latest login [--timeout <seconds>] [--token <token>]
npx --yes folocli@latest logout
npx --yes folocli@latest whoami
npx --yes folocli@latest auth login [--timeout <seconds>] [--token <token>]
npx --yes folocli@latest auth logout
npx --yes folocli@latest auth whoami
npx --yes folocli@latest timeline [--view <type>] [--limit <n>] [--unread-only] [--cursor <datetime>]
npx --yes folocli@latest timeline --feed <feedId> [--limit <n>] [--cursor <datetime>]
npx --yes folocli@latest timeline --list <listId> [--limit <n>] [--cursor <datetime>]
npx --yes folocli@latest timeline --category <name> [--view <type>] [--limit <n>]
npx --yes folocli@latest subscription list [--view <type>] [--category <name>]
npx --yes folocli@latest subscription add --feed <url> [--category <name>] [--view <type>] [--private]
npx --yes folocli@latest subscription add --list <listId> [--category <name>] [--view <type>]
npx --yes folocli@latest subscription remove <id> [--target feed|list|url]
npx --yes folocli@latest subscription update <id> [--target feed|list] [--category <name>] [--title <title>] [--view <type>] [--private|--public]
npx --yes folocli@latest entry get <entryId>
npx --yes folocli@latest entry read <entryId>
npx --yes folocli@latest entry mark-read <entryId>
npx --yes folocli@latest entry mark-unread <entryId>
npx --yes folocli@latest entry mark-all-read [--feed <feedId>] [--list <listId>] [--view <type>]
npx --yes folocli@latest feed get <feedId|feedUrl>
npx --yes folocli@latest feed refresh <feedId>
npx --yes folocli@latest feed analytics <feedId>
npx --yes folocli@latest list ls
npx --yes folocli@latest list get <listId>
npx --yes folocli@latest list create --title <title> [--description <desc>] [--view <type>] [--fee <n>]
npx --yes folocli@latest list update <listId> [--title <title>] [--description <desc>] [--view <type>] [--fee <n>]
npx --yes folocli@latest list delete <listId>
npx --yes folocli@latest list add-feed <listId> --feed <feedId>
npx --yes folocli@latest list remove-feed <listId> --feed <feedId>
npx --yes folocli@latest search discover <keyword> [--type feeds|lists]
npx --yes folocli@latest search rsshub <keyword> [--lang <lang>]
npx --yes folocli@latest search trending [--range 1d|3d|7d|30d] [--view <type>] [--limit <n>] [--language eng|cmn] [--category <keyword>]
npx --yes folocli@latest collection list [--limit <n>] [--cursor <datetime>]
npx --yes folocli@latest collection add <entryId> [--view <type>]
npx --yes folocli@latest collection remove <entryId>
npx --yes folocli@latest opml export [--output <file>]
npx --yes folocli@latest opml import <file> [--items <url1,url2,...>]
npx --yes folocli@latest unread count
npx --yes folocli@latest unread list [--view <type>]
UNAUTHORIZED
npx --yes folocli@latest loginnpx --yes folocli@latest login --token <token>FOLO_TOKENHTTP_4xx / HTTP_5xx
--verbose for request details--api-url if using non-default endpointINVALID_ARGUMENT
npx --yes folocli@latest <command> --help to inspect accepted optionsdevelopment
Perform a regular desktop release from the dev branch. Gather changes since the last desktop tag, update the changelog, choose the desktop release mode in release-plan.json, bump the version, and prepare the release PR.
development
Update all dependencies across frontend and backend projects. Reads changelogs for breaking changes, checks affected code, runs tests, and provides a summary. Use when updating npm dependencies across the monorepo.
development
Self-test a mobile feature change or bug fix after implementation in `apps/mobile`. Use this whenever the user asks to verify a mobile change, run simulator acceptance, smoke-test a mobile PR, or provide screenshot proof for a mobile fix. This skill decides between prod vs local API mode, starts the local follow-server when needed, builds a release app, uses Maestro only to bootstrap registration for non-auth work, then switches to screenshot-driven visual validation and returns screenshot evidence.
development
Use when preparing a mobile release from the dev branch and deciding whether changes should ship through the app stores or through the OTA pipeline before creating the release PR to mobile-main.