Skip to content

BillLucky/echolog

Repository files navigation

echolog

Your days, echoed back.

Talk to a bot in Feishu or Telegram — text, photos, voice, video. It archives everything locally as Markdown, then writes you an honest, evidence-based diary. 100% local-first; bring your own LLM.

English | 简体中文

CI License: Apache-2.0 Node Platforms PRs welcome


What is echolog?

echolog turns the messages you already send yourself into a structured personal journal. You DM a private bot throughout the day; echolog files each message — with media — under the day it was sent, then on /diary it reads the whole day back and synthesizes a structured, evidence-driven diary: facts first, no empty adjectives, action items as real checkboxes.

It's local-first: your raw logs, images, voice, and generated diaries live in a plain Daily_Vault/YYYY-MM-DD/ folder on your machine (Obsidian-friendly). The only thing that ever leaves your machine is the text you send to whichever LLM you configure — and you can keep even that local with Ollama.

you ─DM─▶  Feishu / Telegram bot  ──▶  Daily_Vault/2026-06-09/
  text / photo / voice / video         ├── 01_raw_logs.md        (every message, timestamped)
                                        ├── assets/…              (your media)
                         /diary  ──────▶├── 02_diary_v1.md        (LLM-synthesized diary)
                                        └── 00_image_cache.json   (vision descriptions, cached)

✨ Features

💬 Chat to capture DM via Feishu (recommended — no proxy, images/video/voice) or Telegram. Everything archived to a local Markdown vault.
🗓️ Archived by send-time Messages file under the day they were sent, not received — write offline, sync later, it still lands on the right day.
📓 Evidence-driven diaries /diary reads the day's logs + vision-described images and writes a structured diary. Hard rules ban fluff; every claim needs a log to back it.
🖼️ Vision Images are described by a vision model and cached by filename — never re-analyzed.
🎙️ Voice → text Voice notes transcribed locally via whisper.cpp and folded into the day's log (searchable, feeds the diary).
🔎 Search & recall /find full-text grep across days; /recall semantic search over a local embedding index.
🧠 Bring your own LLM Local Ollama, any OpenAI-compatible endpoint (DeepSeek / Moonshot / OpenAI / MiniMax / OpenRouter / vLLM), or Anthropic Claude natively.
✍️ Draft pipeline /draft turns a captured idea into a Twitter thread / long-form post / short-video script, pulling cross-day material from the recall index.
📅 Weekly reports /week rolls the past 7 days into a weekly review.
🖥️ Desktop GUI Optional Electron app to browse the vault, search, edit prompts, and control the bot — no terminal needed.
🪟 Cross-platform Runs on macOS, Linux, and Windows. The CLI is a zero-dependency Node script; binaries (ffmpeg/whisper/ollama) are auto-detected on PATH. CI runs the full suite on all three OSes.
🔒 Local-first & private Vault, .env, and state files are all gitignored. Run fully offline with Ollama, or send only diary text to a cloud LLM you choose.

🚀 Quickstart

1. Prerequisites

Need Why Install
Node.js ≥ 22 runtime (undici 8 requires Node 22) https://nodejs.org
An LLM writes the diaries local Ollama, or a cloud API key (see step 3)
A Feishu app the chat channel https://open.feishu.cn (or a Telegram bot token)
(optional) whisper-cpp + ffmpeg voice transcription macOS: brew install whisper-cpp ffmpeg; Windows: 暂不支持语音转录

2. Install

git clone https://github.com/BillLucky/echolog.git
cd echolog
bash scripts/setup.sh      # one command: checks Node, npm install, installs the `echolog` CLI, prepares .env, runs a doctor check

Windows users: the bash setup script won't run natively. Do the manual steps below instead. npm link requires an admin terminal on Windows. Or skip it entirely and use node bin/echolog <command>.

…or do it manually (also: Windows)
npm install
npm link            # installs the `echolog` CLI (macOS/Linux: no sudo needed with a user node prefix; Windows: admin terminal)
cp .env.example .env

3. Pick your LLM (edit .env)

Local & private (Ollama):

LLM_PROVIDER=ollama
OLLAMA_TEXT_MODEL=qwen3.5:9b
OLLAMA_VISION_MODEL=openbmb/minicpm-o2.6:latest

OpenAI-compatible cloud (DeepSeek / Moonshot / OpenAI / MiniMax / OpenRouter / vLLM):

LLM_PROVIDER=openai
LLM_API_BASE=https://api.deepseek.com/v1
LLM_API_KEY=sk-xxxx
LLM_TEXT_MODEL=deepseek-chat

Anthropic Claude (native — text + vision in one model):

LLM_PROVIDER=anthropic
LLM_API_KEY=sk-ant-xxxx
LLM_TEXT_MODEL=claude-sonnet-4-6
LLM_VISION_MODEL=claude-sonnet-4-6

4. Connect a channel & run

Create a self-built Feishu app and fill FEISHU_APP_ID / FEISHU_APP_SECRET in .env. docs/FEISHU_SETUP.md is paste-ready — copy the permission list, event subscriptions, and the bot-menu event_key table straight into the console. Then:

echolog start        # run the Feishu channel in the background
echolog logs -f      # follow logs
echolog tg start     # (optional) Telegram channel

Windows: if you skipped npm link, use node bin/echolog start (and likewise for stop, restart, status, logs). See docs/FEISHU_SETUP.md section 6.

DM your bot a few messages, then send /diary. The first p2p message pairs the bot to you; everyone else is silently ignored.

Full setup, the Telegram path, and every .env option are in docs/ and .env.example.

🧰 Commands

Sent to the bot in chat:

Command What it does
/today · /yesterday · /show YYYY-MM-DD echo back that day's raw log
/list [N] list the last N days (size / assets / diary versions)
/find <kw> full-text search across all days
/recall <topic> semantic search over the embedding index
/diary [YYYY-MM-DD] generate the structured, evidence-driven diary
/draft <id> [--long|--video|--all] turn a captured idea into publishable drafts
/week weekly report over the past 7 days
/rate <1-5> rate the latest diary (feeds prompt self-review)
/help command help

🖥️ Desktop GUI (optional)

desktop/ is an Electron + React app to browse the vault, search, edit/version prompts, and start/stop the bot — for people who'd rather not live in a terminal.

cd desktop && npm install && npm run dev    # develop
npm run package                              # build a macOS app

🔒 Privacy

  • Your vault (Daily_Vault*/), .env, and channel state files are gitignored and never leave your machine.
  • Run fully offline with Ollama, or configure a cloud LLM — in which case only the diary/weekly text is sent to the provider you chose, under their terms (see NOTICE).
  • The Telegram channel hard-allowlists your own user id; the Feishu channel locks to the first person who DMs it.

📚 More

🙌 Contributors

echolog is built in the open. Thanks to everyone who makes it better:

  • @BillLucky — creator & maintainer
  • @ShengVP — Windows cross-platform support: zero-dependency Node CLI, cross-platform binary detection, de-hardcoded paths (#3)

New contributors are genuinely welcome — start with CONTRIBUTING.md and the good first issues. Your first PR can land in this list. 🚀

License

Apache-2.0 © echolog contributors. See NOTICE for third-party components.

About

Local-first daily journaling bot — chat in Feishu/Telegram, archive as Markdown, synthesize evidence-driven diaries via local Ollama or cloud LLM (OpenAI-compatible / Anthropic). Obsidian-friendly.

Resources

License

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors