agentleFS
rkhozinovrkhozinov/claude-skills/skills/matter-cli/SKILL.md

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.

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
  1. Very specific:

    If command -v matter is empty, add its dir to PATH: export PATH="$HOME/.matter/bin:$PATH".

    line 11
  2. Very specific:

    Rate limits: read 120/min, write 30/min, save 10/min.

    line 15
  3. Very specific:

    Default is JSON — pipe to jq (matter items list --status queue | jq '.results[].title').

    line 91
  4. Very specific:

    Run matter docs for the complete, always-current CLI + API reference (field schemas, every flag).

    line 95

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

TaskCommand
Browse reading list (queue)matter items list --status queue --order library_position
Check inbox feedmatter items list --status inbox --order inbox_position
Finished / archivedmatter items list --status archive
Read article body (for summarizing)matter items get <id> --include markdown
Search by topicmatter search "climate policy" --type items
Save a URL to read latermatter items save --url <URL>
List highlights on an itemmatter annotations list --item <id> --all
Tag an itemmatter tags add --item <id> --name research
List all tagsmatter tags list
Account infomatter account --plain
Full API referencematter docs
Interactive UImatter 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 }.

FlagPurpose
--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
--favoriteOnly 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> / --allPagination

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

MistakeFix
matter: command not foundNot on PATH: export PATH="$HOME/.matter/bin:$PATH"
Treating queue as the inboxqueue = reading list; inbox = the unsorted feed. Different statuses.
--order updated for user-facing listsThat's sync order (any modification bumps it). Use library_position (queue/archive) or inbox_position (inbox).
items get <id> returns no article textBody is opt-in: add --include markdown.
Parsing .items[]List envelope key is results, not items.
Firing --all reflexivelyCosts read-rate budget on big libraries; page with --limit unless the user wants the whole set.
getting a just-saved id immediatelySave is async: the id 404s until processing finishes. Poll items list by url instead of re-getting.
Running delete without confirmingAll delete subcommands are permanent. Confirm intent; a readonly: true in ~/.config/matter/config.json hard-blocks writes.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.