OWL from the command line — for people and for AI agents
Everything OWL can do in the browser is scriptable: a single-file Python CLI with the full zero-knowledge crypto, a browser-approved sign-in flow that never exposes your password to the terminal, an MCP connector for AI assistants, and a scoped OAuth 2.0 API for integrations.
python3 owl.pyz help all, and sign in with python3 owl.pyz connect login — no password ever touches the terminal.1. Download the CLI
The owl CLI is a single file with no dependencies beyond Python 3.7+ — no pip installs, no config, and any Python works: the stock macOS /usr/bin/python3, distro Pythons, python.org and Homebrew builds, and whatever py launches on Windows. (An older interpreter prints exactly what to install instead of a traceback.) Crypto is pure stdlib, with an optional OpenSSL fast path that is byte-verified against the reference implementation before it is ever used. The CLI is byte-interoperable with the desktop and web clients: files it uploads, links it shares, and messages it sends use the same end-to-end encryption.
curl -fsSLO https://ndevr.org/cli/owl.pyz
python3 owl.pyz help all # Windows: py owl.pyz help allhelp all prints the complete command reference, generated from the live command tree, so it is never stale. The major groups: resource (files, folders, sharing, chat), pass (password vault), product (downloads), calendar, group, ai, and connect (scoped sign-in, below).
2. Sign in without typing a password
owl connect login uses the OAuth 2.0 device flow (RFC 8628). The terminal shows a short code and a link; you approve it in a browser where you're already signed in. The terminal — and any AI agent driving it — never sees your password.
python3 owl.pyz connect login
To approve this sign-in, open:
https://ndevr.org/activate?user_code=XXXX-XXXX
and confirm the code: XXXX-XXXXAfter approval the CLI holds a scoped access token (files:read, files:write) and can list, download, and upload your files with owl connect ls | pull | push. The session expires on its own within 8 hours (or after 30 idle minutes); owl connect logout ends it immediately.
For the full client experience with local zero-knowledge crypto (chat, the password vault, sharing), sign in with python3 owl.pyz login instead — it asks for your password locally, derives keys in-process, and the password never leaves your machine.
3. Connect an AI assistant over MCP
OWL ships a remote MCP (Model Context Protocol) endpoint at https://ndevr.org/api/owl/mcp — add it to Claude, ChatGPT, or any MCP-capable host as a remote connector. A browser GET of that URL returns 404 by design; the endpoint speaks JSON-RPC over POST.
- Editable-link bootstrap — with no credential at all, the connector exposes
open_owl_link: paste a complete editable OWL share URL as the tool'sowl_linkargument and the AI can inspect and (after your confirmation) edit that document. Treat the URL as the secret it is. - Scoped tokens — sign in with the CLI and mint a revocable token for one resource:
owl ai token mint. Add it as the connector's Bearer credential.owl ai token list | revokemanage them.
4. Integrate over the OAuth 2.0 API
Third-party apps use OWL Connect: an OAuth 2.0 authorization server with consented, scoped, server-side-decrypt access — metadata at /.well-known/oauth-authorization-server.
| Endpoint | Purpose |
|---|---|
POST /api/connect/device/code | Start a device-flow authorization (public clients) |
GET /owl/connect-authorize | Redirect-based consent page (authorization code + PKCE) |
POST /api/connect/token | Exchange a code — or poll a device code — for an access token |
GET /api/connect/resources | List resources visible to the token (files:read) |
GET /api/connect/resource/{id} | Download one resource, decrypted (files:read) |
POST /api/connect/resource | Upload a new file (files:write) |
POST /api/connect/revoke | End the session now |
Client registrations are issued by NDEVR — contact us to register a redirect URI and scopes for your app. Most other /api/owl/* endpoints require an OWL session plus client-side key derivation; use the CLI for those rather than raw HTTP.
5. Clone the source repositories
NDEVR's source repos (including NDEVR_Source) are self-hosted right here, served as bare git over SSH:
git clone git@ndevr.org:NDEVR_Source.gitThere is no anonymous or HTTP clone: access requires an SSH public key registered with NDEVR plus a per-repo role. Roles and reviews are managed with the CLI (owl repo list | info | roles | grant, owl repo review-*), and code, history, and diffs are browsable signed-in at /owl/repos. Agents: if you're working on a machine that already has access, ~/.ssh/config typically carries a git@ndevr.org or ndevr-git host entry — check it before concluding you can't clone.
6. Scripting and automation notes
--jsonon most read commands emits machine-readable output; errors go to stderr and the exit code is 1 (usage errors: 2).- Text arguments accept
@fileand-(stdin) — use them for multiline content instead of shell escaping. - Non-interactive full sign-in reads
$NDEVR_OWL_PASSWORD; prompts fail fast when stdin is not a TTY, so scripts never hang. - Self-hosted OWL servers work with
--server https://your-host/; the device flow prints your host's own/activatelink, andNDEVR_OWL_CONNECT_CLIENToverrides the OAuth client id.