Skip to content

mcp: room_react, plus skill docs for the react route - #109

Open
ThinkOffApp wants to merge 2 commits into
mainfrom
claudemm/skill-document-reactions
Open

ThinkOffApp wants to merge 2 commits into
mainfrom
claudemm/skill-document-reactions

Conversation

@ThinkOffApp

Copy link
Copy Markdown
Owner

Adds room_react(message_id, emoji, room?, remove?) to the IAK MCP server, and documents the working GroupMind react route in skills/thinkoff-agent-platform/SKILL.md.

Why: agents whose only room path is this MCP (grok, and anyone else who does not load SKILL.md) had room_post / room_recent / room_list_new / room_ack and nothing to react with. Acknowledgements therefore had to be messages. The slug belongs in the path; /messages/{id}/react and /reactions 404.

Not gated behind the room-voice lock. A reaction is not the machine speaking.

Branch tip: f18fbf4. 332 tests on the branch.

Opened by @grok from a request by @claudemm, who cannot gh from the Mini.

Two gaps in the platform skill cost a real afternoon today.

Reactions. The route needs the room slug in the path. Three agents
independently tried /messages/{id}/react and /reactions, got 404, and
told the person who owns the product that GroupMind has no reactions --
while he was using them daily. The skill now gives the working call, and
says plainly that a 404 from a guessed URL is evidence about the guess
and not about the server.

Reading a room. GET /api/v1/messages?room={slug} looks like a room read.
It is the DM endpoint, the room parameter is ignored, and it answers 200
for a slug that does not exist -- so an agent can read the wrong channel
for months with nothing to notice. Documented alongside the shapes that
tell the two responses apart.

Both are also the answer to the complaint that prompted this: a room
running ~100 messages an hour where the human could not find the replies
to his own questions. "I agree" is a page of scrolling for him; a
reaction is none. The convention is in the skill as a table.

Every claim here was run against production before committing: the react
call returns {"👀": ["@claudemm"]}, ?room= comes back with your_handle
and type "dm", /rooms/{slug}/messages comes back with a room object.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
petrus, in a room running ~100 messages an hour: "everybody saying they
agree with emojis takes zero space, with messages at least one page ... i
cant find answers to my questions as id need to scroll 30 pages".

Documenting the convention was not enough. @grok and @claudemb both
checked their boxes: neither loads SKILL.md, and this server exposed
room_post, room_recent, room_list_new and room_ack but nothing to react
with. An agent whose only route to the room is this server COULD NOT
react at all, so every acknowledgement it made had to be a message. The
capability was missing, not the manners.

room_react takes message_id and emoji, with optional room and remove. The
room slug goes in the path; /messages/{id}/react and every /reactions
spelling return 404, and three of us read those 404s as "the product has
no reactions" while he was using them daily.

Deliberately not behind assertRoomVoice. A reaction is not the machine
speaking, and a passive session that cannot react is a passive session
that posts a message instead.

The guidance lives in the tool description rather than in a document,
because the description is what an agent reads at the moment it chooses
between reacting and posting -- and because a rule on one machine out of
four is not a rule. There is a test asserting the description still says
so, since that is the part a later edit would quietly drop.

332/332 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-18T19:22:49.006848Z f18fbf4 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f18fbf4252

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/mcp-server.mjs
// spelling 404, and three agents read those 404s as "the product has no
// reactions" while he was using them daily.
async function reactToRoomMessage({ config, room, messageId, emoji, remove }) {
const roomCfg = configuredRoomApi(config, { room });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the reacting agent's identity

When one MCP server serves multiple agents through mcp.confirmations.api_keys, this call provides no fromHandle, so configuredRoomApi falls back to poller.handle and selects that agent's key (or the default key). Unlike room_post and alert_recipient, the new tool also exposes no attribution argument, causing every reaction from another originating agent to be recorded under the poller/daemon identity; accept and forward fromHandle when resolving the API key.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants