outlook-cli
Microsoft Outlook from your terminal—for humans and agents.
outlook-cli is an early Rust CLI for Outlook mail and calendars through the
supported Microsoft Graph API. It aims to provide calm terminal workflows for
people and a deterministic, introspectable command contract for automation.
Current milestone
- Work/school and personal Microsoft accounts through delegated OAuth
- Tokens protected by the operating system credential store
- Inbox listing, message reading, sending, replying, and moving
- Calendar agenda and event creation
- Text output on a terminal and JSON when piped
- Read-only profiles, bounded collections, stable errors, and CLI Spec v0.3
Build
cargo build
cargo test
Install
cargo install outlook-cli --locked
# or, without a Rust toolchain
uv tool install outlook-cli-rs
Both packages install the outlook executable.
Configure
outlook-cli includes a maintained multitenant Microsoft Entra public-client
registration, so the normal setup is simply:
outlook init
The registration requests delegated Microsoft Graph permissions only:
User.Read, Mail.ReadWrite, Mail.Send, and Calendars.ReadWrite. A
read-only profile requests Mail.Read and Calendars.Read instead.
For a staged or headless setup:
outlook init --no-login
outlook auth login
Read-only profiles also block remote writes locally:
outlook init --read-only
Organizations with restrictive consent policies can use their own public-client registration. Enable public client flows and supply its Application (client) ID:
outlook init --client-id YOUR_APPLICATION_ID
The same override is available through OUTLOOK_CLIENT_ID. Tenant policy can
still require administrator approval, and the maintained registration is not
yet publisher verified while the project is in its early development phase.
For short-lived automation, OUTLOOK_ACCESS_TOKEN overrides stored
credentials.
Commands
outlook inbox --limit 20
outlook mail read MESSAGE_ID
printf 'All set.' | outlook mail reply MESSAGE_ID --body -
outlook mail send --to person@example.com --subject 'Hello' --body 'Hi'
outlook mail move MESSAGE_ID --destination archive
outlook calendar agenda --start 2026-09-03T00:00:00Z --end 2026-09-10T00:00:00Z
outlook calendar create --subject 'Project sync' \
--start 2026-09-04T09:00:00 --end 2026-09-04T09:30:00 \
--timezone Europe/Amsterdam --attendee person@example.com
outlook doctor --offline
outlook schema --command 'mail send'
Message and event requests opt into Graph's immutable Outlook IDs. Remote writes are blocked when the active profile is read-only. Stdout contains data; diagnostics and sign-in instructions go to stderr.
Status
The command surface is under active development. A keyboard-first TUI, drafts, attachments, search, meeting responses, contacts, and delta synchronization are planned after the core Graph and authentication contracts settle.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file outlook_cli_rs-0.1.0.tar.gz.
File metadata
- Download URL: outlook_cli_rs-0.1.0.tar.gz
- Upload date:
- Size: 49.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe212755d681b8e206e16cb33ac2477ce4ed9177cd0386890d63b014c5a31833
|
|
| MD5 |
6f39f00275cb8c4846d04c0a121cf548
|
|
| BLAKE2b-256 |
904e10371528c6f24fbf14e9a4fb4c6d9661dd0a22aa74038c2a0c82395355e4
|
File details
Details for the file outlook_cli_rs-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: outlook_cli_rs-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f51e572fb55941e893fb8d512e465ae568aa2058dcda34400bfbe046171bc0d
|
|
| MD5 |
1273e8224ac0e71ea9d839715cd4545e
|
|
| BLAKE2b-256 |
2d553752b86055751783bede147e624fd4e91f80bcab80166483dd5cc7dec98e
|