유대선
프로젝트로
·업데이트·4

The email wedge, end to end: AI drafts, you approve, it sends, it remembers

Talkak's thesis — AI does the work, you stay in control — finally ran a full loop on a real inbox: synced mail lands in the 팔다 (Sell) area, an AI drafts a reply grounded in company memory, a two-step human approval mints the receipt SMTP requires, the mail actually sends through Gmail, and the sent reply is written back as a memory node. Also: the 7-area 관제소 home, nav consolidation, and 만들다 = the terminal.

For weeks the answer to "what is Talkak, in one screen?" was a shrug. There were a dozen nav buttons, two homes competing to be the home, and a lot of code that looked like a product without ever closing a loop. This is the log of the day a loop closed.

The home became a control room, not a button menu

The renderer now opens on a 관제소 — the service's seven areas (만들다·돌리다·알리다·팔다·벌다·지키다·조종하다) as tiles, each fusing what's here (record count, checklist progress, latest activity) with what needs you (open items, in red). It's the same BusinessMap that existed, grown a "needs-you" line and a one-line blurb per area so you know what's inside before you click.

The nav shrank from ~11 flat buttons to Map + 더보기. The areas aren't buttons anymore — they're the tiles. Clicking 만들다 opens the terminal grid (build = code = the panes you already run Claude/Codex in); 알리다 → Marketing, 팔다 → the new Sell surface; everything else → its area page. Nothing was deleted — Marketing/Customers/작업장 just moved onto the tiles they always were. A persistent global top bar (service switcher · ⌘K · ⌨ shortcuts · 📖 glossary) now rides above every view instead of hiding inside the terminal toolbar.

팔다: the wedge, made real

The old Customer Ops screen was a beautiful 1,287-line shell wired to mina@example.com mock CSV. The new SellArea reads the real sell-cluster graph nodes — the actual synced inbox — and lets you, without leaving Talkak:

  1. Read the item (sender pulled from the message body).
  2. Draft a reply with draft_reply (memory.rs), grounded in company memory via semantic retrieval — so the draft knows context instead of asking for it.
  3. Approve + send with a two-step confirm. send_reply (connector.rs) requires a human-approval receipt id, and that id is minted only on the second, human click — so the AI can never send on its own. The gate is structural, not a checkbox.
  4. Remember: the sent reply is appended to the graph as a change/support node with evidence (source: gmail_smtp, sent_at, approval_receipt_id, the message it answered).

It also drafts in parallel — each item owns its own reply state, so "✍️ 전체 초안 (N)" fires N draft_reply calls at once and the rows light up "쓰는 중 → 준비" independently. Mission Control for an inbox, except the workers are drafts, not coding agents. And the composer shows the real email essentials: 보내는 사람 (the connected Gmail, address only — never the password), 받는 사람, 참조 (CC, newly wired through build_reply_message), 제목.

What "it works" actually means here

We verified the loop end to end on a real account: python probes confirmed SMTP and IMAP auth succeed; the UI showed "📤 …에게 발송 완료 + 기억에 기록"; and reading the graph store on disk showed the node:

title: Replied: Re: Indeed Application: Junior Software
node_type: change · domain: support
evidence: { source: gmail_smtp, sent_at: 2026-06-19T22:41:18Z, approval_receipt_id: human_approval:… }

So "doing the work becomes memory" isn't a slogan today — it's a line in a JSONL file with a provenance receipt.

The honest edges

None of that changes the headline: the smallest complete version of the product — read → draft → approve → send → remember, all inside Talkak, on a real inbox — ran today.