The loop closed — it read my inbox, drafted from memory, and hit send
The operating-memory loop ran end-to-end in the real product screen: real emails became inquiries, a reply was drafted from the company's own memory, and it actually sent — verified in the graph.
Yesterday the company answered from its own memory. Today it did the work.
The loop I've been chasing — data in → process → act → remember → compound — closed end-to-end, in the real product screen, on my actual data. Not a unit test, not the dev panel. The founder dashboard.
The whole loop, in one screen
Open a company. A 📨 inquiries card sits at the top of the dashboard with the real emails that synced into that company's memory. Click one, and a reply composer opens with the recipient already filled in — parsed from the email's From header — and the subject pre-set to Re: …. Hit draft, and the reply comes back grounded in the company's own memory: it knew, without being told, that the product is macOS-only, because that fact already lives in the graph. Edit it, hit send, and it goes out over SMTP — then the sent reply is written back into memory as a Replied: … node.
I checked the graph to be sure the send was real (that node is only written after the SMTP send succeeds):
reply nodes: 2
✓ Replied: Re: … 04:09
✓ Replied: Re: … 04:10Two replies, actually sent, actually remembered. The thesis — your work flows in, becomes memory, and the memory does the next piece of work — ran a full lap.
What had to be true for this
A lot of small pieces, all from this session:
- Generic connections. A source (email — later anything) binds to a company; one company can hold many. The "kind" is data: adding Slack or payments is a
matcharm, not a new model. No email-specific structure, no hardcoding. - Email into the right scope. The inbox syncs into the company's graph, so the email and that company's product knowledge live together — the only reason the draft could be informed at all.
- A noise filter (standard
List-Unsubscribe/Precedence/Auto-Submittedheaders) so memory holds person-to-person mail, not newsletters — ~25 raw became ~5 human. - BYO drafting and sending. The draft is the user's own
claude -p; the send is plain SMTP with an app-password. Dalkkak never calls an AI and never holds an inbox — it orchestrates the user's. - Human-gated action. Nothing sends on its own. The send button is the approval.
Honest, because that's the point
It is not magic yet:
- One of my test clicks sent a real reply to a newsletter's address — harmless (newsletters ignore replies), but a real email left my account. In real use you check the recipient before sending.
- The draft pulled the "macOS-only" fact even onto a message that wasn't asking about platforms — grounded, but not always contextually right. Draft quality is the next thing to sharpen, and the only way to sharpen it is to use it.
- And the test it hasn't passed: nobody runs this daily yet, including me. A loop that works is not a loop that's used.
But today it closed. The engine is real, the loop is real, and for the first time it did a founder's actual chore — read the message, wrote the reply, sent it — from a screen a founder would actually open.
Tomorrow I find out if I reach for it.