Skip to content

Releases: Theyashsawarkar/narada

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 18:36
  • 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 (d hides them),
    u undoes the edit, and the action says "Send my version".
  • Harder to answer by accident: Enter no longer approves, and y and
    n wait 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, e or n answer it right there, on the same card; A goes 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
    z or narada 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 17:44
  • 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 15:57
  • Renamed from sandesh to narada (नारद, the divine messenger who carries word
    between worlds). The command is narada, the repository
    github.com/Theyashsawarkar/narada (the old address redirects), the MCP server
    narada, the service narada.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 update moves the install.
  • Quiet by default: no desktop notification for new mail, chat or WhatsApp
    (notify = true brings them back). The tmux capsule still shows what came; a
    send an agent asks for still shows its undo notification.

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:37
  • 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:21
  • 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:16
  • Fixed: sending files on WhatsApp: U said "files isn't on WhatsApp
    yet" (a leftover guard); it sends now, and v / V open and save
    WhatsApp files. The key bar shows U 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+Tab goes back (Mail ← Chat ← WhatsApp),
    Alt+m / Alt+c / Alt+w go straight to one.
  • Picking several, marking all read: x picks chats too, Ctrl+x
    picks the whole list (again clears), m / M act on what's picked, and
    Alt+r marks everything in the list read.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 11:00
  • 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,
    replacing chat_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 own why (new on mail_send, chat_send
    and whatsapp_send) and y send in 10s.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 08:09
  • 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+v while typing attaches a copied image;
    files about to go show as small previews above the box.

  • Pictures full size: Space (or Enter) on a picked photo or GIF
    fills the screen; h/l go 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; z cancels 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; the images option chooses), and Ctrl+o while typing
    or U sends them, with the text as the first file's caption.

  • Link WhatsApp from its tab: L shows the QR code, P a phone code,
    and a bar follows the sync, with no separate terminal.

  • send_policy = "trust" and ask_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 finding claude or sandesh from a tmux popup.

  • WhatsApp: sandesh whatsapp link links your WhatsApp as a device
    (QR code, or --phone for a code to type on the phone), and its chats
    become a third tab (Tab: Mail → Chat → WhatsApp) with unread counts in
    sandesh status and the tmux segment, notifications, read receipts and
    quoted replies. sandesh whatsapp list|read|send|unlink on the command
    line, whatsapp_chats, whatsapp_read and whatsapp_send for agents.
    Every send goes through the outbox; an agent's always waits for you, and
    WhatsApp sends are capped at whatsapp_per_hour (30). Without linking,
    whatsapp send opens 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_send and mail_draft take
    an optional html (and sandesh mail send an --html FILE). It goes
    out beside the plain text as multipart/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

Choose a tag to compare

@github-actions github-actions released this 28 Oct 06:38
  • --tab chat: sandesh --tab chat (and sandesh --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.

  • v opens files: an attachment or chat file opens in the app your
    desktop uses for it (kept in ~/Downloads/sandesh); V only 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; @N badges for
    unread mentions of you.

  • More on a picked message: e reacts (an emoji window), E edits
    yours, d d deletes yours; k past the first message loads 50 earlier
    ones.

  • [ / ] move between chats without leaving the conversation; Ctrl+k
    opens the chat switcher; Ctrl+o adds files to the message you're typing.

  • Reply to a specific chat message: Enter (or 2) on a chat lets j/k pick
    messages; r replies to the picked one, quoting it like Google Chat
    (quotedMessageMetadata), with "↩ replying to …" over the message box;
    from the list r answers the latest message from someone else. y
    copies and v saves 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), and n names 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 (N in 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_send takes to (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 (t moves, Enter edits, z
    cancels). Sent goes back to mail that went (and what's sending or failed).

  • Send later: Ctrl+t in a mail, t on review, Ctrl+t while 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 (t moves, Enter edits, z cancels).
    CLI --at and outbox reschedule; MCP send_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 (new chat.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 = false keeps square).

  • A search window: / (or s) 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_page the 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 until Ctrl+b. Your Gmail signature is
    fetched and added (Ctrl+g toggles). Drafts are saved on disk every few
    seconds and reopened by the same key. A status line with recipients,
    files, words and buttons; Ctrl+f switches 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, z cancels, R retries 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, f and D open 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+d saves a draft, Ctrl+o attaches, Ctrl+e still 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. M on 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: W no longer glues the name onto the search (an empty name keeps
    the search); mail archive and friends say what they did; the outbox
    names files; sandesh mcp exits quietly when its client closes it; the
    setup screen's border no longer shifts on the title line.

  • SANDESH_DEBUG_HTTP=1 logs every Google request with its time.

  • Compose works without $EDITOR: with no editor set, sandesh used vi,
    which many systems don't have, so c, r and 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 keeps undo_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/bin too, and rebuilds its own copy whenever the code is newer.

  • New chat messages show up: a conversation scrolled ...

Read more