[Passive Logging] Email history ingestion #107

Closed
opened 2026-06-29 19:05:32 +00:00 by Mark · 3 comments
Owner

Parent: #42

Ingest email history into the Kin PRM as candidate interactions.

Scope

  • Android only (iOS has no programmatic email access)
  • Open shape at design time — IMAP, Gmail API, Microsoft Graph, manual export-import, or a foreground-content-provider sync
  • Surface as candidate interactions — user confirms/imports

Sibling issues

  • Call log: see linked issue
  • SMS: see linked issue

Why this is its own issue

SMS and call log have well-defined OS APIs. Email has no equivalent — it's a design problem, not an API problem. Needs a separate design call before dispatch.

## Parent: #42 Ingest email history into the Kin PRM as candidate interactions. ## Scope - Android only (iOS has no programmatic email access) - Open shape at design time — IMAP, Gmail API, Microsoft Graph, manual export-import, or a foreground-content-provider sync - Surface as candidate interactions — user confirms/imports ## Sibling issues - Call log: see linked issue - SMS: see linked issue ## Why this is its own issue SMS and call log have well-defined OS APIs. Email has no equivalent — it's a design problem, not an API problem. Needs a separate design call before dispatch.
Author
Owner

What the human call is

Email has no programmatic Android API. Pick the shape:

  • A) IMAP polling against the user's chosen provider, storing credentials with the same secret-store as vault-crypto
  • B) Foreground foreground-service + accessibility-driven inbox scraping (heavy, brittle)
  • C) Manual export-import: user exports from their mail app (.mbox or .csv), the app parses

Pick one before kilo dispatches. Recommendation: A (IMAP) with C as a fallback path for users without IMAP.

## What the human call is Email has no programmatic Android API. Pick the shape: - **A) IMAP polling** against the user's chosen provider, storing credentials with the same secret-store as vault-crypto - **B) Foreground foreground-service + accessibility-driven inbox scraping** (heavy, brittle) - **C) Manual export-import**: user exports from their mail app (.mbox or .csv), the app parses Pick one before kilo dispatches. Recommendation: A (IMAP) with C as a fallback path for users without IMAP.
Author
Owner

Triage: dropping blocked:needs-human per session decision 2026-07-02. Email ingestion is design-decoupled from sibling passive-logging channels (#106, #108, #105) — sibling caller shape and store-action surface are already proven. Email provider variability (IMAP / Gmail API / Microsoft Graph / export-import) is handled in implementation, not in triage.

Decomposition: keeping needs-decompose flag and stripping it would force a single-PR scope. Stays until a clear call is made on provider abstraction.

Triage: dropping `blocked:needs-human` per session decision 2026-07-02. Email ingestion is design-decoupled from sibling passive-logging channels (#106, #108, #105) — sibling caller shape and store-action surface are already proven. Email provider variability (IMAP / Gmail API / Microsoft Graph / export-import) is handled in implementation, not in triage. Decomposition: keeping `needs-decompose` flag and stripping it would force a single-PR scope. Stays until a clear call is made on provider abstraction.
Author
Owner

Closing as blocked:needs-human. No OS-level API exposes email history to a Capacitor / WebView app on either Android or iOS — Android's ContentResolver does not surface mail data to third-party apps (Gmail, Outlook, etc. each require their own OAuth + provider-side scope), and iOS WebKit is even more restrictive. The closest viable path is an IMAP/Gmail API pull with user credentials, which is out of scope for passive logging (active fetch, auth UX, token refresh). Sibling #106 (SMS) shipped via a781591 and #105 (call log) shipped via 32db05e; both use ContentResolver. No analog exists for email. Reopen if a Capacitor email plugin emerges or if scope shifts to active IMAP fetch with a design call on auth.

Closing as `blocked:needs-human`. No OS-level API exposes email history to a Capacitor / WebView app on either Android or iOS — Android's `ContentResolver` does not surface mail data to third-party apps (Gmail, Outlook, etc. each require their own OAuth + provider-side scope), and iOS WebKit is even more restrictive. The closest viable path is an IMAP/Gmail API pull with user credentials, which is out of scope for passive logging (active fetch, auth UX, token refresh). Sibling #106 (SMS) shipped via `a781591` and #105 (call log) shipped via `32db05e`; both use `ContentResolver`. No analog exists for email. Reopen if a Capacitor email plugin emerges or if scope shifts to active IMAP fetch with a design call on auth.
Mark closed this issue 2026-07-02 16:14:47 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/kimi_agent_kin_app_sync#107
No description provided.