AI Daily Memory is an Android and Wear OS project for capturing a day locally and turning it into searchable, evidence-backed memory. The phone records and stores audio; the watch controls the phone and displays acknowledged state.
- Android capture, session controls, encrypted local segments, recovery, and on-phone transcription (free downloadable model, English) are implemented. Summaries are optional and use the person's own API key (ADR-0026).
- Wear OS provides remote controls and reflects phone-confirmed state.
- The backend stores synced notes and serves the web app and REST API: account sign-in, scoped tokens, sync, reports, memory browse and retrieval-based Ask. The operator-configured model path for web Ask is slated for removal under ADR-0028; production must not use it.
- Audio is never uploaded. Server-side transcription and extraction stay disabled, so new uploads are refused. The service is free; dormant billing code must be removed before production (ADR-0028).
- Release readiness still requires physical phone/watch accessibility and endurance testing. This repository is not a production release declaration.
Capture is visible and can be paused or stopped. Audio stays on the phone and is deleted once transcribed. Syncing notes to an account is optional and never includes audio; a person's own transcription key is the one case where audio goes to a provider, directly from the phone. Error monitoring is configured to discard messages, request data, user context, and breadcrumbs before sending exception diagnostics to Sentry. See Privacy and Security.
Requirements: JDK 17, Android SDK 37, Python 3.13, and uv.
./gradlew qualityCheck
./gradlew :apps:android:assembleDebug :apps:wear:assembleDebugBackend tests require a disposable PostgreSQL database. If TEST_DATABASE_URL is unset, the
database tests fail immediately with TEST_DATABASE_URL is not set; database tests need PostgreSQL (they are not skipped). Local recipe with Docker, matching CI (postgres:16):
docker run -d --name aidm-test-pg -e POSTGRES_USER=aidm -e POSTGRES_PASSWORD=aidm-local-only \
-e POSTGRES_DB=aidm_test -p 5432:5432 postgres:16
export TEST_DATABASE_URL=postgresql+psycopg://aidm:aidm-local-only@localhost:5432/aidm_testThen run the checks:
cd backend
uv sync --locked --extra dev
export TEST_DATABASE_URL=postgresql+psycopg://USER:PASSWORD@localhost:5432/aidm_test
uv run pytest
uv run ruff check .
uv run ruff format --check .
uv run mypy app testsFor local API development, configure DATABASE_URL and any object-storage settings from .env.example, then run:
uv run alembic upgrade head
uv run uvicorn app.main:app --reloadapps/android— Android phone appapps/wear— Wear OS controllercore/recording— pure Kotlin recording state machine and policiesbackend— FastAPI service, PostgreSQL models/migrations, and workerwebsite— static product and download pagedocs/adr— architecture decisions
The project follows the phase gates in TODO.md. Do not enable cloud processing or claim all-day capture readiness until its review and measurement gates pass.