agent-room-ops

agent-room-ops is a skill for Claude Code, Codex from sonichi/sutando. It costs 0 tokens per session (3,494 once invoked), scanned A, original, MIT.

A collection of tools for an agent participating in a shared chat room, including reading history, fetching media, sending files, posting text, and adding reactions. It uses a gateway that handles the platform's credentials and membership rules.

In plain words
What is it for?
Use it to read recent room messages, retrieve incoming media, upload files, post status or replies, and acknowledge messages with reactions.
Why use it?
It gives an agent the basic ways to participate in a room without giving each tool direct access to platform credentials. It also groups room actions into one consistent interface.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/sonichi/sutando/agent-room-ops
Any agent
npx skills add sonichi/sutando --skill agent-room-ops
Clone the repo
git clone --depth 1 https://github.com/sonichi/sutando

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for agent-room-ops

README.md
[![agentmods](https://agentmods.dev/badge/skills/sonichi/sutando/agent-room-ops.svg)](https://agentmods.dev/skills/sonichi/sutando/agent-room-ops)
Your own site
<a href="https://agentmods.dev/skills/sonichi/sutando/agent-room-ops"><img src="https://agentmods.dev/badge/skills/sonichi/sutando/agent-room-ops.svg" alt="Measured on agentmods" height="20"></a>
Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,494 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.03494
Opus 5 $0.00000 $0.01747
Sonnet 5 $0.00000 $0.00699
Haiku 4.5 $0.00000 $0.00349

Measured 6d ago against content hash 21e974d6e695, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-05, from the pricing page.

Security

Grade A, and why

agent-room-ops scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.

The scan reads SKILL.md. This mod also ships 23 executable files (_gateway.py, authz.py, display.py, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/agent-room-ops/SKILL.md · 232 lines

How it starts

The opening of the file, as written. The whole thing — 232 lines — stays where its author put it; the contents beside it link to each section on GitHub.

room-ops — an agent's room-participation capability collection

One skill, multiple tools. Everything an agent does in a room beyond its task inbox lives here as a tool, so the parity capabilities are self-evidently one collection (not N scattered skills). Each tool is a thin gateway-only client verb sharing _gateway.py; the gateway/broker (box-side) owns the platform creds and does the privileged Matrix ops + authoritative membership enforcement.

Collection name agent-room-ops (provider-agnostic; alts: room-participant, agent-chat-io). Platform-tied names (e.g. matrix-agent) are avoided.

Tools

tool purpose parity vs a chat bot-client
read <room> pull recent room history discord att.save-context / channel read
fetch <ref> inbound media → local path discord inbound att.save→inbox
send <room> <path> outbound file/image upload discord outbound [file:]
say <room> <text> post plain text, mentioning no one — status lines, an answer to the room discord plain channel message
react <room> <event> add an m.reaction (ack) discord add_reaction (👀/✅)
unreact <room> <event> remove the agent's reaction discord remove-on-reply
join <room> accept the agent's own pending invite discord guild-join on invite
doc get|put|rm <room> read/write/delete the room's shared Room Context docs (context, todo, memos — or any agent-defined folder) the durable-state half: like a pinned channel wiki the bot can edit
python3 skills/agent-room-ops/room_ops.py read   '!room:hs' --limit 20 --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py fetch  'mxc://hs/abc' --room '!room:hs' --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py send   '!room:hs' /tmp/pic.png --caption 'fig 1' --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py react  '!room:hs' '$evt' --ack received --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py unreact '!room:hs' '$evt' --ack received --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py say    '!room:hs' 'deploy finished, 3 green' --agent '@a:hs'
#   -> {"ok":true,"state":"confirmed|unconfirmed","event_id":...}. `confirmed` means an
#   event id came back. `unconfirmed` is a 200 with no proof: the send probably landed, so do
#   NOT re-send blindly, but do not drop a fallback/result path on it either.
#   Use `mention` instead when a specific agent must be triggered; `say` never pings.
python3 skills/agent-room-ops/room_ops.py say '!room:hs' 'on it' --reply-to '$evt' --agent '@a:hs'
#   --reply-to (on `say` and `mention`) CITES the message being replied to. The post stays
#   in the MAIN TIMELINE — it is not thread membership. Only a relation with
#   rel_type m.thread puts an event in a thread, and the gateway has no field for that,
#   so room-ops deliberately offers no way to ask for one: a call that reported success
#   while landing outside the requested thread is the failure worth refusing. A malformed
#   event id is REFUSED before the network rather than posted uncited.
python3 skills/agent-room-ops/room_ops.py join   '!room:hs' --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py doc get '!room:hs' --folder room-todo --name TODO.md --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py doc put '!room:hs' --folder room-memo --name note.md --file /tmp/note.md --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py doc rm  '!room:hs' --folder room-memo --name note.md --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py grant '!room:hs' --tier '@u:hs=owner' --default-tier guest --agent '@a:hs'
python3 skills/agent-room-ops/room_ops.py events emit '!room:hs' --type space.ag2.app.card --content '{"k":1}' --agent '@a:hs'
#   -> one typed space.ag2.* TIMELINE event sent AS this agent. Same
#   confirmed/unconfirmed receipt as `say`. Which type namespaces are accepted is the
#   server's rule, not restated here — a refusal arrives as `reason`.
#   Timeline needs no power-level grant; `op:state` (roomtype/widget) does.

Read the full file on GitHub · 232 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 6d ago First seen · 232 lines · 0 tokens per session scan A 21e974d6e695

Subscribe to this mod's changes

agent-room-ops is a skill published in the GitHub repository sonichi/sutando (391 stars, last pushed today), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,494 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.