Repository navigation
Releases: Theyashsawarkar/narada
Release list
v0.6.0
- A new approval screen. One sentence says who wants to send what to
whom, then your own words, then labels for what you mustn't miss: people
outside your company (from your account's domain), a WhatsApp group, who's
tagged, attachments. Details on the left, the message on the right exactly
as it will arrive (an HTML mail's tables included). The border turns orange
when it reaches past your company. Small terminals stack the panes. - After you edit: your changes are marked line by line (
dhides them),
uundoes the edit, and the action says "Send my version". - Harder to answer by accident:
Enterno longer approves, andyand
nwait a moment after the popup opens, so what you were typing elsewhere
can't answer it. - Long recipient lists can be read in full (
J/K), and the screen says so. - AI requests: an agent's sends now queue in their own section of Mail,
Chat and WhatsApp, each place counting its own ("Mail · 2 AI"). Pick one and
y,eornanswer it right there, on the same card;Agoes to them.
This replaces the banner across the top of the screen. - No notifications unless you ask:
notify = false(the default) now means
none at all. Before, it only silenced new mail: an agent's send, its cancel
button and failed sends still notified. Stop a send in its undo window with
zornarada outbox cancel. - Fixed: the mail list stopped at a few rows with space left below; it counted
rows for the old card style. It now fills the height. - Fixed: editing an agent's mail that had an HTML version sent the old HTML
beside your new text. An edited body now drops the HTML.
v0.5.1
- Tag people on WhatsApp: an
@followed by a phone number with its
country code (@919820147460) in a WhatsApp message you or an agent
send is now a real tag, so that person gets a mention notification in
the group. Before, it went as plain text. - Tables with long cells show as tables: a table with a header row
(like a daily status report's Time | Tasks) is drawn as a grid even when
its cells hold whole sentences; they wrap inside their column, with a rule
between rows. Before, such a table was taken for page layout and came out
as loose lines, and a long cell in a drawn table was cut off with "…".
v0.5.0
- Renamed from sandesh to narada (नारद, the divine messenger who carries word
between worlds). The command isnarada, the repository
github.com/Theyashsawarkar/narada (the old address redirects), the MCP server
narada, the servicenarada.service. The first run moves your folders
(mail cache, WhatsApp link, settings) and keyring sign-ins to the new name, so
nothing needs linking or signing in again;kosha updatemoves the install. - Quiet by default: no desktop notification for new mail, chat or WhatsApp
(notify = truebrings them back). The tmux capsule still shows what came; a
send an agent asks for still shows its undo notification.
v0.4.3
- Quieter: bubbles and the picked list row lose their colour fill: just
a rounded outline, plain text, and the time dim inside the bubble.
v0.4.2
- Really rounded: bubbles and the picked list row get rounded borders
(╭ ╮ ╰ ╯) in their colour; the half-block corners of v0.4.1 were too
small to read as round.
v0.4.1
- Fixed: sending files on WhatsApp:
Usaid "files isn't on WhatsApp
yet" (a leftover guard); it sends now, andv/Vopen and save
WhatsApp files. The key bar showsU send a file. - Rounded: one-line messages are pills, longer ones rounded blocks; the
picked list row is rounded too, and keeps its colours (name capsules
showed as dark blobs on it). - Switching places:
Shift+Tabgoes back (Mail ← Chat ← WhatsApp),
Alt+m/Alt+c/Alt+wgo straight to one. - Picking several, marking all read:
xpicks chats too,Ctrl+x
picks the whole list (again clears),m/Mact on what's picked, and
Alt+rmarks everything in the list read.
v0.4.0
- Filled bubbles: chat and WhatsApp messages are filled blocks, yours
in the accent colour, with the time and ticks inside; one name per run. - One panel for the lists: mail, chat and WhatsApp rows divided by
hairlines, the picked one filled in the tab's colour (list_style,
replacingchat_list;chat_list = "cards"still works). - Mail threads fold: read messages to one line, a long run to one line
in all. - One frame for the message box: the reply and the files go inside it.
- A clearer approval: "Claude Code wants to send a mail to …", the
reason as a badge, the agent's ownwhy(new onmail_send,chat_send
andwhatsapp_send) andy send in 10s.
v0.3.0
-
Screenshots in the README and on the website (from
sandesh demo). -
Ticks: ✓ sent, ✓✓ delivered and blue ✓✓ read beside your WhatsApp
messages, from the phone's receipts and its history. -
Paste a screenshot:
Ctrl+vwhile typing attaches a copied image;
files about to go show as small previews above the box. -
Pictures full size:
Space(orEnter) on a picked photo or GIF
fills the screen;h/lgo through the chat's pictures. -
Compact chat list: two rows per chat instead of a box, so about twice
as many fit;chat_list = "cards"brings the boxes back. -
The undo window where you look: a message counting down to send, or
waiting for approval, shows under the conversation;zcancels the open
chat's own first. -
Clearer: the unread count sits on Unread, not All; the list title says
"chats"; a one-to-one chat shows the number, not "You, Amma · 2 people";
the hint under the message box, which repeated the key bar, is gone. -
Photos, GIFs and files on WhatsApp: they show in the conversation (on
kitty as real pictures, in tmux popups too, and GIFs play; elsewhere as
coloured blocks; theimagesoption chooses), andCtrl+owhile typing
orUsends them, with the text as the first file's caption. -
Link WhatsApp from its tab:
Lshows the QR code,Pa phone code,
and a bar follows the sync, with no separate terminal. -
send_policy = "trust"andask_first: agents send without asking
unless you told them to ask, after an undo window with a notification
that can cancel it (ADR 6). The approval screen is redesigned. -
The chat box grows: long messages wrap and the box gets taller, and
Enter sends and keeps you typing. The active tab is a filled pill in its
own colour. -
Fixed: WhatsApp names and mentions showing as numbers;
@and the AI
keys not findingclaudeorsandeshfrom a tmux popup. -
WhatsApp:
sandesh whatsapp linklinks your WhatsApp as a device
(QR code, or--phonefor a code to type on the phone), and its chats
become a third tab (Tab: Mail → Chat → WhatsApp) with unread counts in
sandesh statusand the tmux segment, notifications, read receipts and
quoted replies.sandesh whatsapp list|read|send|unlinkon the command
line,whatsapp_chats,whatsapp_readandwhatsapp_sendfor agents.
Every send goes through the outbox; an agent's always waits for you, and
WhatsApp sends are capped atwhatsapp_per_hour(30). Without linking,
whatsapp sendopens WhatsApp's click-to-chat page with the text typed
in instead. Linking isn't allowed by WhatsApp's terms
(see the README's WhatsApp section and ADR 5). -
HTML mail, for tables and the like:
mail_sendandmail_drafttake
an optionalhtml(andsandesh mail sendan--html FILE). It goes
out beside the plain text asmultipart/alternative, so mail apps show
the HTML and the plain text is still there for those that don't; a reply
quotes the thread in the HTML too. Plain text alone can't make a table
Gmail shows as one.
v0.2.0
-
--tab chat:sandesh --tab chat(andsandesh --popup --tab chat)
opens the screen on the chat tab, so a status bar's chat count can open
chat and its mail count mail. -
vopens files: an attachment or chat file opens in the app your
desktop uses for it (kept in ~/Downloads/sandesh);Vonly saves. -
Take a reaction back: in the reaction window (
e), the ones you
added are marked ✓, and picking one removes it. -
Jump to the original: Enter on a picked reply jumps to the message it
quotes, loading earlier messages until it's there; Enter again follows the
chain further back, Backspace retraces it. -
Chat, redone as bubbles (option A from the mockup): theirs left,
yours right; quotes, files and numbered links inside the bubble;
reactions underneath; "(edited)"; a red "new" line where unread starts
(the chat opens there); who's in the chat on top. -
Chat list in groups: pinned (
p), today, earlier;@Nbadges for
unread mentions of you. -
More on a picked message:
ereacts (an emoji window),Eedits
yours,d ddeletes yours;kpast the first message loads 50 earlier
ones. -
[/]move between chats without leaving the conversation;Ctrl+k
opens the chat switcher;Ctrl+oadds files to the message you're typing. -
Reply to a specific chat message: Enter (or 2) on a chat lets j/k pick
messages;rreplies to the picked one, quoting it like Google Chat
(quotedMessageMetadata), with "↩ replying to …" over the message box;
from the listranswers the latest message from someone else.y
copies andvsaves the picked message. -
Quoted replies show: a message that quotes another shows it above
(❝ You: …); recent chats are fetched again once to fill this in. -
No more "reply in a thread" labels: Google reports every space as
threaded, and replies show inline as quotes, as in the browser. -
Name a group: starting a chat with two or more people asks for a name
(named: a space; unnamed: a group chat), andnnames an existing group
chat on Google Chat (it becomes a space, same people and messages). -
Sign in again without leaving: when Google wants the newer permission
(starting chats, naming groups), the window says so and Enter signs in
again in the browser, then carries on with what you were doing. -
Start a conversation (
Nin chat): pick people (from chat, mail
contacts and the Workspace directory); sandesh opens the DM you already
have with them (found on Google, earlier messages fetched) or starts one,
a group chat for several, and puts you in the message box. -
Chat search finds people and conversations: CONVERSATIONS, PEOPLE and
MESSAGES groups; Enter on a person opens (or starts) your chat with them. -
MCP
chat_sendtakesto(email addresses) instead of a space. -
Scheduled tabs: scheduled mail has its own Scheduled section next
to Sent, and scheduled chat messages a Scheduled tab in chat, soonest
first with their time and counts on the tabs (tmoves, Enter edits,z
cancels). Sent goes back to mail that went (and what's sending or failed). -
Send later:
Ctrl+tin a mail,ton review,Ctrl+twhile typing a
chat message: pick a time or type it ("tomorrow 9am", "fri 6pm", "in 2h",
"3 nov 10:30"). Scheduled sends wait in the outbox and the background
service sends them on time (on its own loop now, so a slow sync never
delays one); a send that goes out late because the computer was off says
so. They're listed on top of Sent (tmoves, Enter edits,zcancels).
CLI--atandoutbox reschedule; MCPsend_at. -
Search no longer freezes the screen: a one-letter search took ~5 s on a
real mailbox (the full-text index was queried once per thread); it is now
one lookup (~20-50 ms), and it runs in the background after a short pause
in typing, with stale answers dropped and Gmail's search cancelled when
you type on. Previews are drawn in the background, once. -
Search where you are: a mail section searches that section (Today,
Sent, Inbox...), a chat space searches that space; Tab widens to all mail
or every chat. Opening a chat result scrolls to the message and marks it. -
?is a window: every key, grouped in columns in the middle of the
screen, with a filter as you type. -
A file picker of its own (replacing fzf): a window over the screen
with fuzzy matching and a preview of the highlighted file (text, image
size or the picture itself with chafa, a PDF's first page with
pdftotext); Tab picks several; Ctrl+r switches folder, Ctrl+h hidden. -
Rename a chat (
n): spaces on Google Chat (newchat.spaces
permission; sign in again once), DMs and unnamed groups by a name kept on
this machine. -
The popup is bigger by default (96% × 94%).
-
Round ends on every filled label: @mentions in chat, the active tab,
the mode label, key hints, the send button and the approval banner use
Nerd Font half circles like the avatars (nerd_font = falsekeeps square). -
A search window:
/(ors) opens a floating search over the
screen. Mail and chat from this machine show as you type, matches
highlighted, with a preview of the highlighted result; when typing pauses,
Gmail's own search adds what isn't here yet (☁). Gmail search syntax
works. Replaces the old local filter and separate server search. -
Older mail on demand: no background download by default any more
(keep = "none"; it competed with searches for Gmail's rate limit).j
at the end of a list loads the next 10 older threads of that section;
+/-change the batch (10, 25, 50, 100),older_pagethe default. -
Search results survive a refresh: they're kept like a section.
-
Rounded everywhere, round avatars: the selected card keeps rounded
corners (heavier sides mark it), mail tables have rounded corners, and
initials sit in round pills (Nerd Font half circles;nerd_font = false
for plain ones). -
Compose, redone (from the approved mockup): a new mail gets the whole
screen; a reply keeps the original on the left (PgUp/PgDn). Recipients are
pills with initials (←/→ selects, Backspace removes); someone you've never
written to is marked first time. Suggestions highlight the typed letters
and say why they're there (wrote 4× · 2d ago,wrote you 9×,
directory). Cc/Bcc hidden untilCtrl+b. Your Gmail signature is
fetched and added (Ctrl+gtoggles). Drafts are saved on disk every few
seconds and reopened by the same key. A status line with recipients,
files, words and buttons;Ctrl+fswitches the sending account. Tab now
adds a typed contact and moves on. -
A Sent section: who you wrote to, and whether they answered (
↩ Priya replied 09:58,no reply yet · 2d); mail in the outbox (sending, waiting
for approval, failed) on top,zcancels,Rretries a failed send. -
All your mail, not just 30 days: after the first sync, older mail is
downloaded in the background (~150 threads a minute, newest first) until
the mailbox is complete, with a progress bar in the top bar.keep
limits it ("1y","6m","none"). -
A compose screen:
c,r,a,fandDopen a form in the right
panel instead of a bare file in the editor: From, To, Cc, Bcc as chips,
Subject, Files and the body, with a reply's quote folded underneath.
Recipients autocomplete from your contacts (ranked by how often you write
to them) and from your Google Workspace directory (People API).Ctrl+s
sends,Ctrl+dsaves a draft,Ctrl+oattaches,Ctrl+estill takes
the whole mail to your editor and back;compose = "editor"keeps the
old way. An agent's message is edited here too. -
Syncs ~10× cheaper: a sync with nothing new went from 23 Google calls
(12.6 s) to 2 (1.1 s) on a real account. Lookups that fail (a DM's title, a
person's name) are remembered and retried every 6 hours instead of on
every sync; changed spaces are fetched four at a time; cached spaces are
read in one query. The background service has a soft 128 MB memory cap. -
Chat read state follows the browser: a space read on the web or phone
turns read here too, without waiting for a new message.Mon a space is
Chat's own "mark as unread" (it stays unread after a sync, and marks the
latest message from someone else, even when you wrote last). -
Forwarding keeps attachments: they're listed as
Attach: original: …
in the editor (delete to drop) and fetched from Gmail when sent. -
File picker (
+,U) starts in the folder you're in; the review screen
shows each file's name, size and folder, and says when one is missing. -
Fixes:
Wno longer glues the name onto the search (an empty name keeps
the search);mail archiveand friends say what they did; the outbox
names files;sandesh mcpexits quietly when its client closes it; the
setup screen's border no longer shifts on the title line. -
SANDESH_DEBUG_HTTP=1logs every Google request with its time. -
Compose works without $EDITOR: with no editor set, sandesh used
vi,
which many systems don't have, soc,rand friends failed at once. It
now picks the first installed of nvim, vim, vi, helix, micro, nano, kak
and emacs, and says which editor failed and how to set one. -
Chat sends instantly: chat messages skip the 10-second undo window
(chat_undo_seconds, default 0; mail keepsundo_seconds), appear in the
conversation as soon as Chat accepts them, and sending always jumps to the
end of the chat. -
The tmux popup runs the current sandesh: tmux's environment often lacks
~/.local/bin, so the plugin fell back to a copy built once in its own
folder and kept running it after updates. It now looks in~/.local/bin
and~/go/bintoo, and rebuilds its own copy whenever the code is newer. -
New chat messages show up: a conversation scrolled ...