cli
Unified command-line interface for managing links (linkding), feeds (miniflux), and pages (wallabag). Use for authentication, managing links, and managing feeds.
When & Why to Use This Skill
mlwcli is a powerful, unified command-line interface designed to streamline the management of digital content across Miniflux (feeds), Linkding (bookmarks), and Wallabag (read-it-later pages). It centralizes authentication and content curation into a single terminal-based workflow, offering advanced features like JQ-powered data filtering, structured JSON output, and efficient pagination for power users and developers.
Use Cases
- Unified Content Curation: Seamlessly add interesting URLs to Linkding or Wallabag while browsing RSS feed entries from Miniflux without switching applications.
- Automated Information Retrieval: Use JQ expressions to filter and extract specific unread entries or bookmarked links based on custom metadata like tags, domains, or dates.
- Bulk Management and Archiving: Efficiently manage large volumes of saved pages and feeds using CLI-based batch commands for tagging, archiving, and status updates.
- Headless Workflow Integration: Integrate web content management into developer scripts or automated cron jobs to maintain a clean and organized digital knowledge base.
| name | mlwcli |
|---|---|
| description | Unified command-line interface for managing feeds (Miniflux), links (Linkding), and pages (Wallabag). Use for authentication, managing feeds, managing links, and managing pages. |
mlwcli
A unified command-line interface for managing feeds (via Miniflux), links (via Linkding), and pages (via Wallabag).
Instructions
When using this CLI tool, follow these guidelines:
Command Structure
Available commands:
# Authentication (interactive TUI)
mlwcli auth login # Login to linkding, miniflux, or wallabag (interactive)
mlwcli auth logout # Logout from a service (interactive)
# Linkding (Links)
mlwcli link add <url> # Add link
mlwcli link list # List links
# Miniflux (Feeds)
mlwcli feed add <url> # Add feed
mlwcli feed list # List feeds
mlwcli entry list # List feed entries
mlwcli entry save <id> # Save entry to third-party service
# Wallabag (Pages)
mlwcli page add <url> # Add page
mlwcli page list # List pages
Use --help on any command for options.
Critical Guidelines
Authentication is Interactive:
auth loginandauth logoutuse an interactive TUI (no service name argument)- The TUI presents a menu to select the service
- Already signed-in services show a ✓ check mark
- Login prompts for endpoint URL and credentials with validation
- Logout only shows currently signed-in services
Pagination: All
listcommands return{total, items}structure:link list,entry list: Use--limitand--offsetfor pagination (default: limit=10, offset=0)page list: Use--pageand--per-pagefor pagination (default: page=1, per-page=10)feed list: Returns all feeds (no pagination parameters)
Output Filtering:
- Use
--jq=expressionfor inline filtering with jq expressions (automatically enables JSON output) - Use
--json=field1,field2to select specific fields (comma-separated, no spaces) - Without
--jsonor--jq, output is in human-readable table format - All list commands return structured JSON when using these flags
- Use
Search and Filtering:
link list:--search,--limit,--offsetentry list:--search,--status(read/unread/removed, default: unread),--starred,--feed-id,--limit,--offsetpage list:--archive,--starred,--tags,--domain,--page,--per-page
Quote Handling:
- For values with double quotes, wrap in single quotes:
--notes 'Title: "Example"' - Tags are space-separated within a quoted string:
--tags "tag1 tag2"
- For values with double quotes, wrap in single quotes:
Configuration:
- Config is stored at
~/.config/mlwcli/auth.toml - Credentials are saved securely upon successful login
- Config is stored at
Workflow Steps
- Before processing results: Always check if you have all results by comparing
totalvs. returned items count - When paginating: Use appropriate pagination flags for the command type
- For targeted queries: Use
--jqto filter and transform output inline - When adding content: Include relevant metadata (notes, tags) for better organization
Examples
Authentication
Login and logout are fully interactive (no command-line arguments needed):
# Login - interactive TUI will prompt for service selection and credentials
mlwcli auth login
# Logout - interactive TUI will show only signed-in services
mlwcli auth logout
The TUI will:
- Show a menu to select service (Linkding, Miniflux, Wallabag)
- Mark already signed-in services with ✓
- Prompt for endpoint URL and credentials
- Validate input and normalize URLs (remove trailing slashes)
Check total results before processing
Before processing results, verify you have all of them:
mlwcli entry list --status=unread --jq='{total: .total, returned: (.items | length)}'
If total > returned, either increase the limit or paginate with offset:
# Increase limit to get all results
mlwcli entry list --status=unread --limit=100
# Or paginate through results
mlwcli entry list --status=unread --limit=10 --offset=0
mlwcli entry list --status=unread --limit=10 --offset=10
mlwcli entry list --status=unread --limit=10 --offset=20
List unread entries
Get unread entries with feed context:
mlwcli entry list --status=unread --jq='.items[] | { id, url, title, published_at, status, feed_id: .feed.id, feed_title: .feed.title }'
Output fields:
id: Entry ID (use for marking read/starred or saving)url: Original article URLfeed_id,feed_title: Source feed info for grouping/filtering
List entries by feed
First, find the feed ID:
mlwcli feed list --jq='.items[] | { id, title, site_url }'
Then fetch entries from that feed:
mlwcli entry list --feed-id=42 --limit=20 --jq='.items[] | { id, url, title, published_at }'
Find starred/read entries by date
Use changed_at to filter by when entries were starred or marked read:
mlwcli entry list --starred --status=read --limit=100 --json=id,url,title,changed_at,starred | jq '.items[] | select(.changed_at >= "2025-12-26")'
Note: changed_at reflects when the entry was last modified (starred, read status changed), not publication date.
Save an entry to third-party services
First, find the entry you want to save by listing entries:
mlwcli entry list --status=unread --jq='.items[] | { id, url, title }'
Then save it using the entry ID:
mlwcli entry save 42
This saves the entry to Miniflux's third-party integration (e.g., Wallabag, Pocket, etc.), which must be configured in Miniflux settings.
Add a Feed
mlwcli feed add <url>
The URL must point to a valid RSS/Atom feed.
Add a feed to a category
First, find the category ID by listing feeds with category information:
mlwcli feed list --jq='.items[] | { id, title, site_url, category_id: .category.id, category_title: .category.title }'
Then add the feed with the category:
mlwcli feed add <url> --category-id=<category_id>
The --category-id parameter defaults to 1 (All category) if not specified.
Add a link
Basic:
mlwcli link add <url>
With metadata:
mlwcli link add <url> --notes='Title: "Some Title"' --tags="tag1 tag2"
Tags are space-separated within the quoted string.
Add a page
Basic:
mlwcli page add <url>
With metadata:
mlwcli page add <url> --tags="tag1 tag2" --archive
List pages
Get pages with filtering:
mlwcli page list --starred --per-page=20 --jq='.items[] | { id, url, title, domain_name }'
Filter by domain or tags:
mlwcli page list --domain=example.com
mlwcli page list --tags="tech news"
Tags are space-separated within the quoted string.