Release v1.4.0
Highlights
Your own Gmail and Google Drive, from the terminal. co gmail and co gdrive join co outlook with the same shape — numbered listings, read 3 opens row 3, tables that turn into full-ID text when you pipe them.
The reason they work at all is a fix underneath: ConnectOnion was loading either your project .env or ~/.co/keys.env, never both. Any project with its own .env made every credential that lives only in the global file invisible — which is why co auth google kept asking you to re-authorize. It was never the token; it was never being read.
What's Changed
✨ Features
co gmail— inbox, read, reply, send, sent, search with full Gmail query syntax. TheGmailtool gainslist_inbox()/list_search()returning dicts (#254)co gdriveand theGDrivetool — list, search, download, upload, trash. Google Docs/Sheets/Slides are exported on download (md/csv/pdf) rather than failing (#255)co outlook contact— add, list, and search Outlook contacts (#243)co skills link— publishes ConnectOnion's bundled skills into~/.claude/skillsand~/.codex/skills. Replaces a bash script that only did Claude and never shipped in the wheel (#259)- New
co-mail-and-driveskill teaching agents the three mail/file commands (#259)
🐛 Bug Fixes
- Both env files now load.
connectonion/__init__.pyloaded the project.envor the globalkeys.env, never both, so OAuth tokens were invisible from any project with its own.env(#252) - Gmail refreshes its token every session, like Outlook. It previously refreshed only when
GOOGLE_TOKEN_EXPIRES_ATsaid so — and did nothing at all when that variable was absent, which the backend allows (#253) - Rotated OAuth tokens persist to every file that is read back, including a project
.envthat would otherwise shadow the fresh copy. Microsoft single-uses its refresh token, so losing the rotation killed the connection (#206) co outlook contact listemits real tabs when piped. Rich expands\tinto spaces, so the documented tab-separated output could not be read bycut -f(#256)- Gemini 3.6 Flash reached everywhere it should have.
co ai,co browser, the--modelflag default, the subagent loader fallback, and eleven other sites were still on 2.5 or 3.5 (#263, #264)
🔒 Security
- CLI tracebacks no longer print local variables. Typer defaults to
show_locals=True, so a routine "session expired" crash renderedOPENONION_API_KEYand your refresh token into the terminal — and into scrollback, CI logs, and any error output pasted into a chat or issue (#258)
📚 Documentation
- New
docs/cli/gmail.md,docs/cli/gdrive.md,docs/useful_tools/gdrive.md, and pages on docs.connectonion.com - Repaired every broken internal link in
docs/— 54 of 335 were dead, and those docs ship inside everyco createproject
Installation
pip install --upgrade connectonionBackend requirement
co gdrive and co outlook contact need OAuth scopes added in oo-api (openonion/oo-api#31, #32), already deployed. Existing users must re-run co auth google and co auth microsoft — a token refresh cannot widen scopes.
Breaking Changes
None.
Full Changelog: v1.3.0...v1.4.0