freehire-mail-triagelisted
Install: claude install-skill strelov1/freehire-cli
# Sorting application mail into the tracker
Needs a key: `freehire auth login --token fhk_…` (or `FREEHIRE_TOKEN`).
`freehire` does **not** fetch mail. You bring your own client — [himalaya], `mbsync`,
`notmuch`, the Gmail API, anything that can emit JSON — and hand the result over.
In exchange you get the inbox wired into the application tracker without paying for
a mail connector or a classifier.
[himalaya]: https://github.com/pimalaya/himalaya
The loop is four steps, and then two queues that only a human's verdict can empty:
```bash
# 1. Your client fetches; you shape it into the batch and push it.
himalaya envelope list --output json | jq '[.[] | {
external_id: .message_id, from_addr: .from.addr, from_name: .from.name,
subject: .subject, received_at: .date }]' | freehire inbox push
# 2. Ask for what still needs judging, with the text to judge.
freehire --json inbox list --unclassified --body --limit 50
# 3. You decide what each message is (and which application it belongs to).
# 4. Record the verdict — one call sets the label, the link, and the stage.
freehire inbox triage 812 rejection --slug go-dev-acme-t35nijto
freehire inbox triage 813 interview_invitation --slug data-eng-globex-9f2k1a0z --confidence 0.9
```
**`external_id` is the deduplication key** — use the message's `Message-ID`. Pushing
the same id again *updates* that message rather than storing a copy, so re-running
your sync over an overlapping window is safe and cheap. It never un-reads a mess