matter-cli
Skill0 starsChanged 4 months agoMITView on GitHub
Read and manage the user's Matter reading app (getmatter.com) — reading list, inbox, archive, article text, search, highlights, tags, save URLs. Use for any mention of Matter or a read-later library.
In this repository14 other files it gives its agents.
- atddSkill
- brainstormingSkill
- ghSkill
- grafanaSkill
- issueSkill
- linearSkill
- obsidianSkill
- ponytailSkill
- skill-creatorSkill
- slack-cliSkill
- slack-styleSkill
- systematic-debuggingSkill
- test-driven-developmentSkill
- tuxedoSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 11
If command -v matter is empty, add its dir to PATH: export PATH="$HOME/.matter/bin:$PATH".
- Very specific: line 15
Rate limits: read 120/min, write 30/min, save 10/min.
- Very specific: line 91
Default is JSON — pipe to jq (matter items list --status queue | jq '.results[].title').
- Very specific: line 95
Run matter docs for the complete, always-current CLI + API reference (field schemas, every flag).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Matter CLI (matter)
CLI + TUI for the Matter reading app. JSON-first, built for agents. Invoke as matter (installed at ~/.matter/bin/matter).
If command -v matter is empty, add its dir to PATH: export PATH="$HOME/.matter/bin:$PATH".
Auth: already configured via ~/.config/matter/config.json. Re-auth only if commands 401: matter login <mat_token> (browser copy) or echo "$MATTER_TOKEN" | matter login. Never print or store the token.
Rate limits: read 120/min, write 30/min, save 10/min. --all on a large library can burn the read budget — prefer --limit + cursor unless the user needs everything.
Quick reference
| Task | Command |
| Browse reading list (queue) | matter items list --status queue --order library_position |
| Check inbox feed | matter items list --status inbox --order inbox_position |
| Finished / archived | matter items list --status archive |
| Read article body (for summarizing) | matter items get <id> --include markdown |
| Search by topic | matter search "climate policy" --type items |
| Save a URL to read later | matter items save --url <URL> |
| List highlights on an item | matter annotations list --item <id> --all |
| Tag an item | matter tags add --item <id> --name research |
| List all tags | matter tags list |
| Account info | matter account --plain |
| Full API reference | matter docs |
| Interactive UI | matter tui |
IDs are prefixed: items itm_…, tags tag_…, annotations ann_…. Get them from a list before acting.
items
matter items <list|get|save|update|delete>
list — envelope: { object:"list", results:[…], has_more, next_cursor }.
| Flag | Purpose |
--status <s> | inbox, queue (reading list), archive (finished), all — or comma-combine: queue,archive |
--tag <tag_id> | Filter by tag |
--content-type <t> | article, podcast, video, pdf, tweet, newsletter |
--favorite | Only favorites |
--order <o> | library_position (queue/archive manual order), inbox_position (inbox feed), updated (sync only — see pitfalls) |
--updated-since <iso> | ISO 8601 date filter |
--limit <n> / --cursor <c> / --all | Pagination |
get <id> — --include markdown to fetch the article body (omit for metadata only; body is the expensive field).
save — --url <url> (required), --status queue|archive (default queue). Returns immediately with processing_status:"processing" and title:null; the item fetches asynchronously. The returned id 404s ("The requested resource was not found.") on an immediate get, and the item isn't in list yet. Don't re-get it right away — if you need the settled item (e.g. to tag it), poll items list and match on url until it appears, then use that id. A delete issued while still processing may not stick.
update <id> — --status <s>, --favorite true|false, --progress <0.0-1.0>.
delete <id> — permanent. Confirm intent first.
annotations (highlights)
matter annotations <list|get|update|delete>
- list
--item <id>[--all]— highlights + notes on an item. - get
<id>— single annotation. - update
<id> --note "<text>"— set/replace the note on a highlight. - delete
<id>— permanent. Confirm intent.
tags
matter tags <list|add|remove|rename|delete>
- list — all tags.
- add
--item <id> --name <name>— attaches; creates the tag if the name is new (reuses if it exists). - remove
--item <id> --tag <tag_id>— detach from item. - rename
<tag_id> --name <new>. - delete
<tag_id>— removes the tag everywhere. Confirm intent.
search
matter search "<query>" --type items [--status queue|archive] [--limit n] [--cursor c] [--all]
--type is required (items). Results nest under items: parse .items.results[], not .results[]. Query operators: by:<author>, site:<domain> (e.g. matter search "site:paulgraham.com" --type items).
reading-sessions
matter reading-sessions list — reading history.
Output
Default is JSON — pipe to jq (matter items list --status queue | jq '.results[].title'). Add --plain for human-readable text when showing the user directly. Exit code 0 = success, 1 = error; errors go to stderr. Pagination is cursor-based: loop on has_more + next_cursor, or use --all (mind rate limits).
Full reference
Run matter docs for the complete, always-current CLI + API reference (field schemas, every flag). Prefer it over guessing when you hit an unfamiliar flag — it's ~80 lines and authoritative.
Common pitfalls
| Mistake | Fix |
matter: command not found | Not on PATH: export PATH="$HOME/.matter/bin:$PATH" |
Treating queue as the inbox | queue = reading list; inbox = the unsorted feed. Different statuses. |
--order updated for user-facing lists | That's sync order (any modification bumps it). Use library_position (queue/archive) or inbox_position (inbox). |
items get <id> returns no article text | Body is opt-in: add --include markdown. |
Parsing .items[] | List envelope key is results, not items. |
Firing --all reflexively | Costs read-rate budget on big libraries; page with --limit unless the user wants the whole set. |
getting a just-saved id immediately | Save is async: the id 404s until processing finishes. Poll items list by url instead of re-getting. |
Running delete without confirming | All delete subcommands are permanent. Confirm intent; a readonly: true in ~/.config/matter/config.json hard-blocks writes. |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

