docs/7-DEVELOPMENT/decisions/ADR-002-external-libraries.md
Open Notebook's value is the knowledge layer: organizing, understanding and generating from research content. But delivering it requires two areas of heavy, ever-changing integration code: AI provider APIs (17 providers across LLM/embedding/TTS/STT) and content extraction (50+ file types, URLs, video/audio platforms). Building that in-repo would bloat the codebase and pull maintenance attention away from the product core.
If a capability is about platform/media support and will require heavy integration coding, it doesn't belong in this repository. It lives in a focused external library, keeping this project centered on the knowledge layer — and keeping those parts replaceable by other frameworks if we ever decide to swap them.
Applied today:
AIFactory interface. Application code selects models via the Model registry and provision_langchain_model(), never by instantiating provider clients directly.extract_content().SupportedProvider locations — see open_notebook/AGENTS.md).upstream + library labels (esperanto, content-core, podcast-creator).