Summary
hey reply <topic-id> does not actually reply within the original thread. Instead, it sends a new message where:
- The recipient list is taken from the original message's
To/CC/BCC headers (i.e., the original addressees, which includes the current user) — so a reply to an incoming message gets sent back to oneself.
- No subject is set.
- The reply does not land in the original thread on the recipient side; a new thread is created.
Steps to reproduce
- Receive a message in HEY from someone, e.g.,
[alice@example.com](mailto:alice@example.com) → [me@hey.com](mailto:me@hey.com).
- Run
hey reply <topic-id> -m "Test reply".
- A new thread appears in your own Imbox, addressed
From: [me@hey.com](mailto:me@hey.com) / To: [me@hey.com](mailto:me@hey.com), with no subject. The original sender never receives anything.
Expected behavior
A reply should:
- Be sent to the original sender (and ideally to all other thread participants minus self — classic reply-all semantics).
- Carry the original subject (or
Re: <subject>).
- Appear as a new entry inside the existing thread for all participants.
Actual behavior
The reply is delivered as a new thread, addressed to self, with no subject.
Root cause
In internal/cmd/reply.go:
topicResp, err := sdk.GetHTML(ctx, fmt.Sprintf("/topics/%d", threadID))
addressed := htmlutil.ParseTopicAddressed(string([topicResp.Data](http://topicresp.data/)))
...
sdk.Entries().CreateReply(ctx, latestEntryID, message, [addressed.To](http://addressed.to/), [addressed.CC](http://addressed.cc/), addressed.BCC)
The recipients handed to CreateReply come from the topic page's existing To/CC/BCC fields. For an incoming message those are the original addressees (including the current user) — not the parties a reply should actually go to. The original sender (From / Reply-To) is never extracted, and no subject is passed.
In contrast, internal/cmd/compose.go with --thread-id calls sdk.Messages().CreateTopicMessage(ctx, topicID, message) — that appends the message to the existing topic and inherits subject and thread membership implicitly, which looks like the correct API for a "reply in thread" use case.
Environment
hey version 22aeea7 (current main)
- Linux, Go binary
Summary
hey reply <topic-id>does not actually reply within the original thread. Instead, it sends a new message where:To/CC/BCCheaders (i.e., the original addressees, which includes the current user) — so a reply to an incoming message gets sent back to oneself.Steps to reproduce
[alice@example.com](mailto:alice@example.com)→[me@hey.com](mailto:me@hey.com).hey reply <topic-id> -m "Test reply".From: [me@hey.com](mailto:me@hey.com) / To: [me@hey.com](mailto:me@hey.com), with no subject. The original sender never receives anything.Expected behavior
A reply should:
Re: <subject>).Actual behavior
The reply is delivered as a new thread, addressed to self, with no subject.
Root cause
In
internal/cmd/reply.go:The recipients handed to
CreateReplycome from the topic page's existingTo/CC/BCCfields. For an incoming message those are the original addressees (including the current user) — not the parties a reply should actually go to. The original sender (From/Reply-To) is never extracted, and no subject is passed.In contrast,
internal/cmd/compose.gowith--thread-idcallssdk.Messages().CreateTopicMessage(ctx, topicID, message)— that appends the message to the existing topic and inherits subject and thread membership implicitly, which looks like the correct API for a "reply in thread" use case.Environment
hey version 22aeea7(currentmain)