[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94773":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":14,"starSnapshotCount":14,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},94773,"knowledge-inbox","lyc403223157-source\u002Fknowledge-inbox","lyc403223157-source","Local-first knowledge ingestion for AI agents and Obsidian",null,"Python",75,1,4,0,40.9,"Apache License 2.0",false,"main",[20,21,22,23,24,25,26,27],"fastapi","hermes-agent","knowledge-management","local-first","mcp","obsidian","python","wechat","2026-08-24 04:01:22","# Knowledge Inbox\n\n**English** | [简体中文](README.zh-CN.md)\n\nHarness-neutral, local-first knowledge ingestion for Obsidian and other local retrieval\ntools. It turns links, text, videos, screenshots, PDFs, and local files into structured\nMarkdown knowledge cards. Hermes, Codex, OpenClaw, and other MCP clients share the same\nadapters and processing service.\n\n> Current release: `0.3.0`. Web and file ingestion run cross-platform. WeChat Channels\n> downloading is an optional, experimental macOS integration that requires the desktop\n> WeChat client and a local TLS proxy.\n\n## How it works\n\n```text\nHermes \u002F Codex \u002F OpenClaw \u002F CLI \u002F Web \u002F Telegram\n                  |\n              MCP \u002F FastAPI\n                  |\n             Source Adapter\n                  |\n             ContentItem\n                  |\n       Cleaner \u002F OCR \u002F Whisper \u002F AI\n                  |\n      Classifier \u002F Tags \u002F Knowledge Linker\n                  |\n          Obsidian Markdown + SQLite\n```\n\nEvery source is normalized into a `ContentItem`. To add a platform, implement\n`SourceAdapter.detect()` and `SourceAdapter.fetch()`, then register the adapter in\n`backend\u002Fadapters\u002Fregistry.py`.\n\n## Supported sources\n\n| Source | Input | Capabilities |\n| --- | --- | --- |\n| Web pages, blogs, and news | URL | Readability extraction, Markdown conversion, and image download |\n| WeChat Official Accounts | URL | Article body, author, and images; can also be synced by another tool |\n| X \u002F Twitter | Post URL | Current post, visible parent context, quoted content, and media when available |\n| YouTube | URL | Captions first; Whisper fallback when captions are unavailable |\n| Podcast RSS and Apple Podcasts | Feed or episode URL | Episode metadata, Podcasting 2.0 transcript, audio download, and Whisper fallback |\n| Vimeo | URL | oEmbed metadata, captions when available, and Whisper fallback |\n| Direct audio, video, and HLS | Media URL | Streaming download for common media files; yt-dlp resolution for `.m3u8` |\n| PDF | File | Text extraction; OCR for scanned pages with the media extra |\n| Images | File | OCR plus visual and chart descriptions when a vision model is configured |\n| Audio and video | File | Whisper transcription or vision-model understanding |\n| WeChat Channels | Share URL | Experimental macOS integration, or upload the original video directly |\n| Telegram | Webhook | Text, captions, or the first URL found in a message |\n\n## Quick start\n\nPython 3.11 or newer is required. Media processing requires `ffmpeg`; OCR requires\nTesseract.\n\n```bash\npython3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npip install -e \".[media,browser,mcp,dev]\"\nplaywright install chromium\ncp config.example.yaml config.yaml\nuvicorn backend.main:app --host 127.0.0.1 --port 8787\n```\n\nOpen \u003Chttp:\u002F\u002F127.0.0.1:8787> for the universal inbox: paste a link or text, or\ndrop a video, screenshot, PDF, or local file into the same input area. Source detection,\nAI processing, classification, tags, linking, and Obsidian output are automatic.\nUse the **EN \u002F 中** button to switch the web interface. Completed entries under\n**Recently generated** can be clicked to open their knowledge-card folder in the system\nfile manager.\n\nOn first launch on macOS, choose an existing Obsidian Vault or Markdown folder with the\nnative folder picker, then choose the card subfolder. The service verifies write access and stores only these two\nvalues in the ignored local file `data\u002Fstorage.yaml`. Use **Settings** later to change them.\nWhen `OBSIDIAN_VAULT_DIR` is set by Docker or an administrator, the web setting is read-only.\nOther host platforms can use the absolute-path fallback in the same dialog.\n\nOn mobile, the primary workflow is Telegram, Discord, or another IM connected to an Agent\nHarness. Forward a standalone link or file and the Harness calls `knowledge_ingest`; no web\nform or extra “save this” message is required. Links included as context for ordinary questions\nare not archived automatically. A browser extension for one-click desktop capture is a natural\nnext client, but is not included yet.\n\nYou can also use the CLI:\n\n```bash\n.venv\u002Fbin\u002Fpython scripts\u002Fingest.py 'https:\u002F\u002Fexample.com\u002Farticle'\n.venv\u002Fbin\u002Fpython scripts\u002Fingest.py 'https:\u002F\u002Ffeeds.example.com\u002Fshow.rss'\n.venv\u002Fbin\u002Fpython scripts\u002Fingest.py 'https:\u002F\u002Fvimeo.com\u002F123456'\n.venv\u002Fbin\u002Fpython scripts\u002Fingest.py '\u002Fabsolute\u002Fpath\u002Ffile.pdf'\n.venv\u002Fbin\u002Fpython scripts\u002Fingest.py 'A note to keep' --title 'Quick note'\n```\n\nThe same pipeline is available through the API:\n\n```bash\ncurl -X POST http:\u002F\u002F127.0.0.1:8787\u002Fapi\u002Fingest \\\n  -H 'content-type: application\u002Fjson' \\\n  -d '{\"url\":\"https:\u002F\u002Fexample.com\u002Farticle\"}'\n```\n\n## Configure AI and Obsidian\n\nThe AI layer uses an OpenAI-compatible Chat Completions endpoint. AI is disabled by\ndefault; without a model the system still creates a local fallback summary. Enable AI\nfor classification, visual understanding, and richer tags:\n\n```bash\nexport OBSIDIAN_VAULT_DIR=\u002Fabsolute\u002Fpath\u002Fto\u002FObsidianVault\nexport AI_ENABLED=true\nexport OPENAI_BASE_URL=http:\u002F\u002F127.0.0.1:11434\u002Fv1\nexport OPENAI_API_KEY=''\nexport OPENAI_MODEL=qwen2.5:7b\nexport OPENAI_VISION_MODEL=your-vision-model\n```\n\nYou can set the same values in `config.yaml`. The config file, `.env`, database,\nbrowser login state, and downloaded media are ignored by Git.\n\nKnowledge linking uses `qmd` when available. If `qmd` is not installed, it falls back\nto lexical matching over the latest 1,000 Markdown notes in the Vault. Cards are written\nto a temporary file and atomically replaced so an indexer never sees a partial note.\n\n## MCP tools and Harness clients\n\n`scripts\u002Fknowledge_mcp.py` is a harness-neutral stdio MCP server. It exposes:\n\n- `knowledge_ingest`: ingest a URL, local file, or text and wait for the knowledge card\n  to finish.\n- `knowledge_get_job`: inspect the current state of a known ingestion job.\n- `knowledge_list_capabilities`: list supported sources and input types.\n- `knowledge_wechat_prepare`: refresh the local WeChat Channels window only when the\n  client connection needs recovery.\n\nEach Harness launches the same server with a Python environment that includes the `hermes`\nextra and the absolute path to `scripts\u002Fknowledge_mcp.py`. Client-specific Skills are in\n`clients\u002Fhermes`, `clients\u002Fcodex`, and `clients\u002Fopenclaw`; they contain routing guidance,\nnot duplicate adapters. See `clients\u002FREADME.md` for installation commands.\n\n## Docker\n\n```bash\ncp .env.example .env\ndocker compose up --build\n```\n\nDocker is suitable for web pages, files, OCR, transcription, and the AI pipeline. When\nthe workflow needs the macOS WeChat client, system proxy, or a GUI browser login, run the\nbackend directly on the host. Compose binds the service to `127.0.0.1:8787`.\n\n## WeChat Channels security boundary\n\nThe Channels integration uses the separately maintained\n[`ltaoo\u002Fwx_channels_download`](https:\u002F\u002Fgithub.com\u002Fltaoo\u002Fwx_channels_download) project.\nIts license and security boundary are separate from this repository. This project does\nnot distribute its binary, root certificate, cookies, or WeChat login data. See\n`integrations\u002Fwechat-channels\u002FREADME.md` for installation, licensing, proxy, and macOS\npermission details.\n\nThe downloader creates a local TLS proxy. Use only a trusted, checksum-verified build and\nnever expose the downloader or this service to a LAN. The MCP tool temporarily switches\nthe HTTP\u002FHTTPS proxy for the task and restores the previous settings afterward. The\noriginal video is deleted only after both the Obsidian note and SQLite record have been\nwritten successfully.\n\n## Verification\n\n```bash\npytest -q\nruff check backend scripts tests\n```\n\nThe test suite covers Markdown formatting, task recovery, text end-to-end ingestion, X\ncontext, the WeChat Channels adapter, video transcoding, post-write cleanup, and input\nclassification. Real platform pages and login sessions change over time, so production\ndeployments should still perform a separate end-to-end check for each platform they use.\n\n## Contributing and license\n\nRead `CONTRIBUTING.md` and `SECURITY.md` before submitting a change. Original project code\nis licensed under Apache-2.0. Optional third-party components remain under their own\nlicenses; see `THIRD_PARTY_NOTICES.md`.\n","Knowledge Inbox 是一个本地优先的知识采集工具，专为 AI 代理与 Obsidian 等本地知识库设计。它支持从网页、微信公众号、YouTube、播客、PDF、截图、音视频等十余种来源自动提取内容，经标准化（ContentItem）、AI 处理（OCR\u002FWhisper\u002F视觉理解）、分类打标与知识链接后，生成结构化 Markdown 卡片并同步至 Obsidian 或 SQLite。基于 FastAPI 与 MCP 协议，具备可扩展的适配器架构，所有处理默认在本地完成，无需上传原始数据。适用于个人知识管理（PKM）、AI 代理的数据预处理、研究资料自动化归档等注重隐私与离线能力的场景。",2,"2026-08-15 02:30:13","CREATED_QUERY"]