What's new
Agent-breaking bug fixes
- Errors to stdout — JSON error envelopes now go to stdout (not stderr) so agents always get the response
- Typed error codes — "not found" → exit 3, network errors → exit 1 (retryable), not just "internal_error"
- FTS triggers — search is now O(1) instead of rebuilding the entire index on every query
- Lean list payloads —
inbox list, search, thread no longer return full HTML bodies (saves tokens)
archived field — now present in all message responses (was a ghost column)
New commands
inbox mark <ids...> --read/--unread — toggle read state (bulk)
inbox thread <id> — conversation view via RFC 5322 headers
inbox unarchive <ids...> — restore archived messages (bulk)
inbox stats — mailbox counts: total, inbox, unread, archived, sent
inbox delete/archive — now accept multiple IDs
Improvements
- Cursor pagination with
--after <id> + has_more + next_cursor
- Bulk mutation responses:
{requested_ids, updated_ids, missing_ids}
- Thread indexes on
rfc_message_id and in_reply_to
- Cursor ordering:
(created_at DESC, id DESC) for stable pagination
- Updated
agent-info manifest with all new commands
macOS menu bar daemon
- Fixed menu item clicks (proper ObjC action targets via
define_class!)
app.run() + finishLaunching() for correct AppKit event handling
- NSTimer-based display refresh (live unread count updates)
- Optimistic UI: Mark All Read clears badge instantly
Install
cargo install email-cli
# or
brew install 199-biotechnologies/tap/email-cli