Monorepo workspace for owa-piggy consumer CLIs
Project description
owa-tools
Pipe-friendly CLI suite for Outlook and Microsoft 365. Calendar, mail, Graph, OneDrive, scheduling, people lookup, health checks - all from your terminal, all returning JSON by default.
No Azure AD app registration. No third-party runtime dependencies. Auth piggybacks
on the OWA browser session via owa-piggy
- separate package, separate token store, never imported.
Suite
owa-tools is the M365 read/write surface in the
mnem memory suite, alongside
YAAMS (Tier 1 raw), cognitive-ledger (Tier 2 curated), and owa-piggy
(auth broker). The suite gives you one install (brew install damsleth/tap/mnem), one verb surface (mnem mail ..., mnem calendar ...), and one CLI contract (output classes, exit codes,
JSON envelopes - see
mnem/CONVENTIONS.md).
The eight owa-* binaries continue to work standalone.
Install
Homebrew (recommended):
brew install damsleth/tap/owa-piggy damsleth/tap/owa-tools
PyPI:
pipx install owa-piggy && pipx install owa-tools
Either path lands eight binaries on your PATH (owa, owa-cal, owa-mail,
owa-graph, owa-doctor, owa-people, owa-sched, owa-drive) plus the
owa-piggy auth broker.
Quickstart
# 1. One-time auth setup (opens Edge, signs you in, captures a refresh token)
owa-piggy setup --profile work --email you@yourcompany.com
# 2. Verify everything's healthy
owa doctor
# 3. Try it
owa-cal events --pretty # today's calendar
owa-mail folders # mail folders
owa-graph me whoami # who am I
owa-drive ls # OneDrive root
owa-people search "ola nordmann" # directory lookup
owa-sched availability --who you@example.com --date today
Every binary supports --help and <binary> help for the full command surface.
JSON on stdout, logs on stderr, --pretty when you want a human-readable table.
What's in the box
| CLI | What it does |
|---|---|
owa-cal |
Calendar CRUD over Outlook REST. Events, categories, recurrence. |
owa-mail |
Mail CRUD: messages, send, reply, forward, folders. |
owa-graph |
Microsoft Graph CLI: verb-first plus 14 resource shortcut groups. |
owa-people |
People, directory, and contacts via Graph. |
owa-sched |
Free/busy and slot finding for one or many attendees. |
owa-drive |
OneDrive CRUD plus binary up/download. |
owa-doctor |
Health check across the suite, all profiles, all audiences. |
owa |
Umbrella discovery binary: owa list, owa schema, owa doctor, owa version. |
Multi-account / profiles
Each tool delegates auth to owa-piggy and inherits its profile model. Pin a
profile for a tool, switch per call, or set it via env:
owa-cal --profile crayon events --pretty # one call
OWA_PROFILE=crayon owa-cal events --pretty # one shell session
owa-cal config --profile crayon # persistent for owa-cal
See docs/profile-model.md for the full precedence
rules.
For agents and automation
- JSON on stdout by default.
--prettyis the human opt-in. --agentwraps output for automation tooling;--err-jsonemits structured stderr.owa schemaaggregates per-tool schemas for discovery.- Exit code taxonomy is shared across the suite (
docs/agent-integration.md).
Docs
docs/security.md- token, redaction, and live-test boundariesdocs/agent-integration.md- schema discovery,--agent,--err-jsondocs/profile-model.md- profiles and audiences- Per-tool:
cal|mail|graph|doctor|people|sched|drive
Releases
- PyPI: https://pypi.org/project/owa-tools/
- GitHub Releases: https://github.com/damsleth/owa-tools/releases
- Homebrew tap: https://github.com/damsleth/homebrew-tap
- Changelog:
CHANGELOG.md
Contributing
See CONTRIBUTING.md for setup, tests, coverage gates,
commit conventions, and code style. The release flow lives in
RELEASING.md, and architecture/agent guidance lives in
AGENTS.md.
License
MIT.
Project details
Release history Release notifications | RSS feed
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 owa_tools-0.1.2.tar.gz.
File metadata
- Download URL: owa_tools-0.1.2.tar.gz
- Upload date:
- Size: 153.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc761fae60319998d44ad08062777bfcdea5ef2e90142b631ceb160621e8791c
|
|
| MD5 |
06e0f2336f7bad6e1986adbfb59618e4
|
|
| BLAKE2b-256 |
4827ad3a8bd6d2b8b82c0454f5c69103fcf5bbf6fdba97165259a615ca1c6ba5
|
File details
Details for the file owa_tools-0.1.2-py3-none-any.whl.
File metadata
- Download URL: owa_tools-0.1.2-py3-none-any.whl
- Upload date:
- Size: 178.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf28218ac7116aa48fba64ebc7dc63b9dca5f8c495b7cf1dc2b0a33d72de36c7
|
|
| MD5 |
88d5fdf0428cdb8ca2e190d3c6e318d3
|
|
| BLAKE2b-256 |
49b8976654de02ef53ea924dc52482411286df7ddfe5763e8fb2851f052d80be
|