basecamp / basecamp/hey-cli

No way to choose which of my sender addresses an email is sent from

Open
#353 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
368
Forks
44
Avg merge
15h 15m
Merged PRs (30d)
189

Description

## Summary

My HEY identity has five sender addresses. The web app lets me pick any of them when composing. The CLI gives me no way to choose one, and as far as I can tell it can only ever send from two of the five.

## What the web app does

HEY's compose screen shows all five addresses in a From picker and remembers the one I chose:

```
user.name@hey.com
user@hey.com
me@domain-c.example
office@domain-b.example
office@domain-a.example ← selected
```

Sending posts the chosen sender along with the message:

```
acting_sender_id=3333333&remember_last_sender=true&entry[addressed][directly][]=…&message[subject]=test&…&commit=Send+email
```

## What the CLI offers

There is no equivalent. `hey compose` has no `--from` or `--sender` flag:

```console
$ hey compose --help | grep -i -E 'from|sender'
(no output)
```

The only related selector is `--account`, which lists two accounts, not five addresses:

```console
$ hey account list --json
all All Accounts
100001 user.name@hey.com
100002 user@hey.com
```

Three of my addresses — the ones on custom domains — don't appear anywhere in the CLI, and I can't find any flag or config that reaches them.

## The addresses are visible to the API

`GET /identity.json` returns all five under `identity.senders`, each with an id, an account id and an email address (anonymised below, IDs are shape-accurate):

```
id=1111111 account_id=100001 default=false user.name@hey.com
id=2222222 account_id=100002 default=false user@hey.com
id=3333333 account_id=100002 default=false office@domain-a.example
id=4444444 account_id=100002 default=false office@domain-b.example
id=5555555 account_id=100002 default=false me@domain-c.example
```

So the information the CLI would need is already in a response it fetches — it just isn't surfaced or selectable. Worth noting that none of the five is flagged `default: true`, which may be relevant to how a fallback behaves.

## What I'd expect

- Some way to see the sender addresses available to me, the way `hey account list` shows accounts.
- Some way to choose one when composing, and ideally to persist a default.

## What I haven't verified

I have not sent a message from the CLI to confirm which address it actually uses, so I can't say from observation which of the five it picks or whether it matches the one the web app remembers. The concrete, reproducible part of this report is that **the CLI offers no way to choose**, and that three of my five addresses are not reachable through `--account`.

## Environment

hey - 1.2.1 (release build, go1.26.6)

---

*Analysed with Claude Opus 5. The observed behaviour above comes from a live account; addresses and sender IDs have been anonymised, and the section on what was not verified reflects the limits of that investigation.*

Contributor guide

Open the contributing guide

Research direction

Start by tracing the `hey compose` and `hey account list` entry points, then inspect how the CLI fetches and represents `GET /identity.json`, especially `identity.senders`. Define the command and configuration behavior needed to list available sender addresses, select one while composing, and optionally persist a default; done means custom-domain senders are reachable through the CLI.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.