trib is tribb from the command line. It speaks to the same account, the same feeds, and the same triage vocabulary as the web app and the MCP server — save, dismiss, downrank, unsave, unread — so an action you take in the terminal shows up everywhere else. It is built for agents first: every command takes --json, output is tab-separated and pipeable by default, and exit codes are semantic.
Install
The CLI is not published to npm. It ships with the tribb repo, in the cli/ package, and you run it from source. It has zero runtime dependencies — a single Node script — and requires Node 24+.
Clone the repo and put trib on your PATH:
git clone https://github.com/vigneshrajsb/tribb.git
cd tribb/cli
npm link # or: npm install -g .
trib help
Prefer not to touch your global PATH? Run the entry point directly — no install step, no npm install:
node tribb/cli/bin/trib.mjs help
Auth
Every command except help and auth login needs an API token.
- Sign in at tribb.app/settings and find the CLI & MCP tokens panel.
- Click + mint a token. The token (prefixed
trib_) is shown once — copy it right then. - Hand it to the CLI one of two ways:
export TRIBB_TOKEN=trib_xxxxxxxx # env var, nothing written to disk
# — or —
trib auth login trib_xxxxxxxx # saved to ~/.config/tribb/config.json (mode 0600)
TRIBB_TOKEN wins if both are set. Confirm you are wired up with trib auth status. The same token authenticates the MCP server.
By default the CLI talks to https://tribb.app. Point it elsewhere (a preview deploy, local dev) with TRIBB_API:
TRIBB_API=http://localhost:3000 trib feeds
Commands
The grammar is gh-style: trib <noun> <verb>. Add --json to any command for machine-readable output.
Feeds
| Command | Does |
|---|---|
trib feeds |
List your subscriptions — feedId, kind, title, url. |
trib subscribe <url> |
Subscribe to a source. Pass any site URL; feed discovery runs server-side. |
trib subscribe https://danluu.com
trib feeds --json
Items & triage
| Command | Does |
|---|---|
trib items [--unread] [--saved] [--feed <id>] [--limit N] |
List items, newest first. |
trib read <item-id> |
Print one article — full extracted text if available. |
trib save <item-id> |
Keep it for later. |
trib dismiss <item-id> |
Mark it handled and clear it. |
trib downrank <item-id> |
See less like this source. |
trib unsave <item-id> |
Undo a save. |
trib unread <item-id> |
Mark it unread again. |
trib items --unread --limit 20
trib read abc123 --json
trib save abc123
Every triage action is logged and trains the account's ranking. When an item is low-value but not unwanted, prefer downrank over dismiss.
Digest
| Command | Does |
|---|---|
trib digest [--since <hours>] |
One AI catch-up pass over unread items, on your own key. |
--since takes a number of hours (not 24h). Prints Markdown; add --json for the structured result. Requires a BYOK AI key set in Settings — without one the command exits with an error (code 1) telling you to add a key.
trib digest --since 24
Feedback
| Command | Does |
|---|---|
trib feedback list [--status s] [--type t] [--mine] [--limit N] |
List feedback/issues. Operators see all; others see their own. |
trib feedback new "<text>" [--type bug|idea|praise|other] |
File feedback or an issue. |
trib feedback set <id> --status <status> [--note "…"] |
Update status (operator). |
trib feedback new "search is slow on big feeds" --type bug
trib feedback list --status new --json
Operator & escape hatch
| Command | Does |
|---|---|
trib admin stats |
Global product analytics. Owner only. |
trib api <path> |
Raw authenticated GET against the v1 API. |
trib api /api/v1/feeds
For agents
--jsonon everything. Structured output forjq; the plain form is tab-separated columns.- Semantic exit codes:
0ok ·1error ·2no results ·4auth failure. Branch on these in scripts. - Overnight triage:
trib items --unread --json | jq -r '.[].id', thentrib dismiss <id>per item. - Summarize, don't read the backlog: call
trib digestfor one model pass over unread rather than reading every item.
Same account, same verbs, no rate limit on agent tokens. If you would rather call tools than a shell, the MCP server exposes the same operations over Bearer auth.