How a thought app that "answers back" works under the hood: semantic memory, local-first inference, and the order of operations as product design.
Most notes apps are write-only graveyards: capture is easy, resurfacing never happens. Unforget's bet is that a thought's value is what it connects to. So the signature moment runs the product backward: when you save a thought, the app answers with the prior thoughts it connects to, each with a short AI-written line explaining why. Saving feels like the app thinking with you rather than filing for you.
Unforget is the consumer surface of the CogmemAi memory engine: the same retrieval stack that posts benchmark results serves "3 of your thoughts connect" to someone typing on a phone.
The connection search runs against the user's memory corpus BEFORE the new thought is written. Store first and the top match for every save would be the thought itself. The ordering is one line of sequencing that is really product design: it guarantees every answer is about your past, not your present.
From the production save path, including the latency honesty:
/* The connection search is the slow part of a save (embeddings plus two
vector queries, several seconds). A client that asks for async_conn gets
the thought written and the id back straight away, then fetches the
connections through ?a=conns while the "Saved" state is already on
screen. Older cached clients still get them inline: recalled BEFORE the
store so the new thought can never match itself. */
$async_conn = !empty($b['async_conn']);
$connections = array();
if (!$async_conn) {
$connections = unf_connections($uid, $text, 0, 3);
}
$stored = store_memory($uid, array(
'content' => $text,
'memory_type' => 'thought',
...
));
The API is a single front-door endpoint that calls the memory engine's classes directly in-process: no internal HTTP, no API keys in transit, one fewer failure surface. The front-door pattern itself is a real-world constraint made useful: the site's firewall blocks the public REST API, so the app's API lives at its own hardened entry point with method checks, input caps, and per-action auth.
Any thought can become a task: task state is a thin metadata overlay on the memory, not a second data model. The payoff shows up in connections, in the words of the production comment: whether a connection is itself a task, and whether that task is still open, is the difference between "here is a related thought" and "you already wrote this down and have not done it."
A single-file installable PWA: inline CSS and JS, a service worker that caches the shell and never caches the API, voice capture, and offline-tolerant startup. One file is a constraint that keeps the whole surface reviewable at a sitting.
Unforget is live: five thoughts a day free, no install required, installable if you want it on your home screen. It is part of the HiFriendbot product family, built on the same engine as CogmemAi.
More engineering notes: HiHiredBot Sniper.