Show HN: Gml – A Gmail CLI designed for agents A new open-source command-line tool called Gml gives coding agents and shell workflows direct access to Gmail without a daemon, browser automation, or an SDK integration. Created by developer LongyiJdos, Gml returns compact text by default and structured JSON when needed, supporting search, read, send, reply, forward, draft, label, archive, star, spam, and trash operations with safe automation features like dry-run and explicit limits. Gmail, shaped for agents. gml gives coding agents and shell workflows direct access to Gmail without a daemon, browser automation, or an SDK integration. It returns compact, command-specific text by default and structured JSON when exact fields matter. Agent-first output. Stable table headers, bounded message bodies, useful summaries, and machine-readable errors. One CLI for the full workflow. Search, read, download, send, reply, forward, draft, label, archive, star, spam, and trash. Safe automation. Query-based writes require an explicit limit or --all and support --dry-run before anything changes. Local OAuth. Credentials stay on the machine, refresh automatically, and are never sent through an intermediary service. Gmail-native. Queries use Gmail search syntax, and request exposes the underlying Gmail API when a dedicated command is not enough. gml requires Node.js https://nodejs.org/ 22.12 or later. npm install --global @longyijdos/gmail gml --version Create a Google OAuth Desktop app client, download its JSON file, then log in with read-only access: gml auth login \ --client-secret-file ~/Downloads/client secret ....json \ --scope readonly Find the messages that matter and read only the one you select: gml messages list \ --q 'is:unread newer than:7d' \ --max-results 20 \ --summary gml read MESSAGE ID Use JSON when another tool needs stable field access: gml messages list --q 'from:alerts@example.com' --max-results 10 --json Need to organize or send mail? Reauthorize with --scope modify , then preview query-based changes before applying them: gml archive \ --query 'older than:30d label:newsletters' \ --max-results 100 \ --dry-run Successful results go to stdout. Errors go to stderr with a nonzero exit code. Gmail commands support --json ; help and authentication stay readable text. Large message bodies are truncated by default, list enrichment uses bounded concurrency, and retryable API failures are identified explicitly. gml help send gml auth status gml profile gml threads 'is:inbox newer than:7d' --max-results 10 --summary gml send --to user@example.com --subject 'Status' --body-file report.txt | Guide | Use it for | |---|---| | gml and creating Google OAuth client credentials Agent skill /longyijdos/gmail/blob/main/SKILL.md gml safely from an agent