My best ideas show up at random moments, and leave just as fast. So I’m building a bot that remembers them for me, and tells me what they say about me.
I like to think. Interesting thoughts come to me while I listen to a podcast, read a book, scroll social media, watch other people, or at some random moment. I enjoy those moments. I imagine what could come out of a thought if I discussed it with someone, or built it and published it.
But most of the time, the spark only lasts that moment. No plan, no next step. And then I forget it. It happens to me a lot, hehe.
Why build it myself
I’ve been spending my evenings exploring AI tools, mostly for learning. I already built an MCP server that handles a lot of my study context. I’ll write about that one in another post.
Then I wondered: what if I built a whole AI system, not just an MCP server? I’d learn the AI engineering workflow end to end: how to use an LLM inside an app, how to evaluate it, how to monitor it. I was also excited to build with AI agents. So far I love Matt Pocock’s skills and Samuel Berthe’s Go skills. Maybe I’ll share what I learned from them later too.
So I had two goals. A tool I actually use every day, and an AI engineering portfolio project that shows the things above with real data.
What Cermin is
I needed something to build, and it’s nicer to solve a problem I already have. AHA! My forgotten thoughts.
Writing them down doesn’t fully fix it. I already note some in a notebook or in WhatsApp. But the notes pile up unorganised, and to find any pattern I’d have to reread and sort all of them by hand.
So I want a system that captures a thought, classifies it, gives me insights, and can answer my questions about everything I’ve written. That’s Cermin. It’s Indonesian for mirror, and bercermin means to reflect on yourself.
Here’s how it works. I send a thought to a Telegram bot. The bot saves it first, then an LLM classifies it, and the bot replies with the result within a few seconds. Over time the collection grows. My hope is that it shows me, without manual effort: what my thoughts look like, what keeps coming back, which ones are business ideas, and what kind of person I am.
Here are three made-up thoughts on my dev bot, in English, Bahasa Indonesia and both mixed, the way I actually write:

Some topics are narrower than I’d like. That’s a problem for a later post.
By November I want it to tell me things like “you have 14 business ideas and 0 plans to start one”, or “you’ve asked yourself why you procrastinate 5 times since October”. Or even connect the dots for me: “three weeks ago you asked why cafés near the office are full at 3pm, and today’s thought might be the answer”. It can’t do any of that yet. That’s what the rest of this series is about.
Where it stands today
The code is open source (AGPL-3.0), and you can follow the progress in the repo.
Today, on my dev bot, Cermin captures and classifies the thoughts I send. It isn’t deployed yet. The reply comes in about 3 to 6 seconds, within an 8-second budget, and I estimate it will cost about $6 a month against a $10 cap. Later it will also have an MCP server, so I can ask about my thoughts from an AI agent like Claude.
A few decisions so far:
Telegram, not WhatsApp. WhatsApp was my first choice because I use it every day. But since 15 January 2026, Meta bans general-purpose AI assistants on the WhatsApp Business Platform, and a bot there needs a second phone number. Telegram is free and easy to set up. The cost: until the bot goes live, I capture thoughts in WhatsApp’s “Message yourself” chat and will import them later. As long as I can open it quickly on my phone, any messaging app is fine.
Two values, not one. My thoughts are business ideas, questions, coding, lifestyle, philosophy. My first idea was one list of categories like that. But that list mixes two things: the shape of a thought and its subject. “A question about coding” is both a question and about coding, so one list can’t hold it. So each thought gets a kind (idea, question, observation, reflection or plan) and 1 to 3 topics (like coding, business or health).
Claude for now, a benchmark later. Classification runs on Claude Sonnet with low effort. Later I’ll compare other models on accuracy and cost. I’d also like to include Jev in the comparison, once I’ve checked its data policy.
What’s next
More on the technical side soon. Next week I’ll share the design decisions that are hard to undo. After that: how I evaluate the classifier, how thoughts get connected to each other, and which model to use. Then, once there’s enough data, what my thoughts actually say about me.
A mirror only shows us what we put in front of it. So I'll keep sending it my thoughts, and see what looks back. Follow along here, or watch the repo:
Arkoes07
/
cermin
A personal AI mirror for your thoughts: capture on Telegram, classify with an LLM, query from any AI agent over MCP.
Cermin
Cermin (Indonesian for "mirror") turns the Thoughts I send to a Telegram bot into a Corpus that mirrors how I think. It classifies each Thought, resurfaces related past ones, points out Loops, and builds a Portrait of my thinking.
Status: week 1 of 4 (12–18 Oct). Product docs and technical design are done; capture and classification run locally. Next: deploy to Fly.io (#3) so they go live in Telegram.
- Product: docs/product/PRD.md
- Vocabulary: CONTEXT.md
- Design: docs/design/high-level-design.md
- Decisions: docs/adr/
Run locally
With Go 1.26 and a dev bot (two pollers can't share one bot token):
set -a; . ./.env; set +a # TELEGRAM_BOT_TOKEN, TELEGRAM_OWNER_ID, ANTHROPIC_API_KEY
go run ./cmd/cermin serve # database at data/cermin.db unless CERMIN_DB_PATH is set
Thoughts are classified by claude-sonnet-5-5 unless CERMIN_CLASSIFY_MODEL names another model. go test -tags integration ./internal/claude/ checks the classifier against the real API.
Built for one user, me. Outside pull requests are not…

Top comments (0)