daemon: let the conversational agent own @mentions in server channels #59

Open
admin_emi wants to merge 1 commit from feat/agent-owns-mentions into dev
Owner

THERMOGRAPH_DISCORD_BOT_MENTIONS=0 makes the gateway bot silent on guild mentions. Default on, and unset counts as on, so every env file that predates the knob behaves exactly as before.

The reason is a second responder. The operator's desktop now runs a conversational agent that replies as this same bot account (companion PR on discord-voice-bot) and grades through the same API we do — so with both live, a single @Thermograph Phoenix gets answered twice, once as a card and once as a reply. Only one of us can own that surface, and the agent is the one that can also hold a conversation.

Scoped to guild mentions on purpose

  • DMs stay here. The agent polls guild channels only, so staying silent in a DM would just drop the message.
  • /grade is untouched. It's a signed HTTP interaction that never went through this path, so it keeps answering from prod while the desktop running the agent is asleep — which is what stops this from trading an always-on surface for a sometimes-on one.

Verification

go build, go vet and go test ./... all clean. New cases cover silence-on-guild-mention (including the bare-mention help line, which would double up the same way), DMs still grading with the flag off, and unset-means-on across the truthy set.

Sequencing

Don't set this to 0 until the agent is actually running with THERMOGRAPH_BOT_TOKEN provisioned — otherwise guild mentions get no answer at all. Merging is safe at any time; the default is unchanged behaviour.

https://claude.ai/code/session_015Z1ebLbhUxeZ9ozpNrVTCP

`THERMOGRAPH_DISCORD_BOT_MENTIONS=0` makes the gateway bot silent on guild mentions. Default on, and **unset counts as on**, so every env file that predates the knob behaves exactly as before. The reason is a second responder. The operator's desktop now runs a conversational agent that replies as this same bot account (companion PR on `discord-voice-bot`) and grades through the same API we do — so with both live, a single `@Thermograph Phoenix` gets answered twice, once as a card and once as a reply. Only one of us can own that surface, and the agent is the one that can also hold a conversation. ## Scoped to guild mentions on purpose - **DMs stay here.** The agent polls guild channels only, so staying silent in a DM would just drop the message. - **`/grade` is untouched.** It's a signed HTTP interaction that never went through this path, so it keeps answering from prod while the desktop running the agent is asleep — which is what stops this from trading an always-on surface for a sometimes-on one. ## Verification `go build`, `go vet` and `go test ./...` all clean. New cases cover silence-on-guild-mention (including the bare-mention help line, which would double up the same way), DMs still grading with the flag off, and unset-means-on across the truthy set. ## Sequencing Don't set this to 0 until the agent is actually running with `THERMOGRAPH_BOT_TOKEN` provisioned — otherwise guild mentions get no answer at all. Merging is safe at any time; the default is unchanged behaviour. https://claude.ai/code/session_015Z1ebLbhUxeZ9ozpNrVTCP
admin_emi added 1 commit 2026-07-24 20:26:05 +00:00
daemon: let the conversational agent own @mentions in server channels
All checks were successful
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
secrets-guard / encrypted (pull_request) Successful in 6s
PR build (required check) / changes (pull_request) Successful in 9s
shell-lint / shellcheck (pull_request) Successful in 6s
PR build (required check) / build-backend (pull_request) Successful in 1m10s
PR build (required check) / gate (pull_request) Successful in 2s
ce4350c64e
THERMOGRAPH_DISCORD_BOT_MENTIONS=0 makes the gateway bot silent on guild
mentions. Default on, and unset counts as on, so every env file that predates
the knob behaves exactly as before.

The reason is a second responder. The operator's desktop now runs a
conversational agent that replies as this same bot account (discord-voice-bot,
AGENTS.md) and grades through the same API we do, so with both live a single
"@Thermograph Phoenix" gets answered twice — once as a card, once as a reply.
Only one of us can own that surface, and the agent is the one that can also hold
a conversation.

Scoped to guild mentions on purpose. DMs stay here: the agent polls guild
channels only, so staying silent in a DM would just drop the message. And
/grade is a signed HTTP interaction that never touched this path, so it keeps
answering from prod while the desktop is asleep — which is what stops this from
trading an always-on surface for a sometimes-on one.

Claude-Session: https://claude.ai/code/session_015Z1ebLbhUxeZ9ozpNrVTCP
admin_emi changed title from WIP: daemon: let the conversational agent own @mentions in server channels to daemon: let the conversational agent own @mentions in server channels 2026-07-24 21:17:53 +00:00
All checks were successful
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
secrets-guard / encrypted (pull_request) Successful in 6s
PR build (required check) / changes (pull_request) Successful in 9s
shell-lint / shellcheck (pull_request) Successful in 6s
PR build (required check) / build-backend (pull_request) Successful in 1m10s
PR build (required check) / gate (pull_request) Successful in 2s
Required
Details
This pull request is blocked because it's outdated.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/agent-owns-mentions:feat/agent-owns-mentions
git checkout feat/agent-owns-mentions
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Jinemi/thermograph#59
No description provided.