agentleFS
matthewdonsemail-labmatthewdonsemail-lab/log/.claude/skills/log-discord-server-reply/SKILL.md

log-discord-server-reply

Skill63 starsChanged yesterdayMITView on GitHub

Replying in a Discord server channel. A log play (docs/useCases/discord/serverReply.md): Answer someone in a channel of a Discord server: a mention of the account, a reply to its message, or a question in a channel the owner is part of, like \"pennyserver #general\". A server channel is not a group chat. It is a room inside someone else's server, with members who never joined a conversation with the owner, an owner and its own rules, so it is read, answered and sent differently from a DM or a group DM. DMs and group DMs are [channelReply](channelReply.md).

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    When the owner is already there, leave it to the owner: If the owner's own message comes after theirs, the owner is answering: send nothing …

    line 54
  2. Very specific:

    The owner's own words: When the owner says what to tell them, the answer is the owner's words.

    line 57

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Replying in a Discord server channel

This is the log play discord/serverReply. Before anything else, call the log MCP tool getGuide({ useCase: "discord/serverReply" }): it returns this page and makes it the session's play, so every log tool's answer says which step you are on and a send with no play loaded is refused (rules 157, 158). Then follow the steps in order.

Draft every message from that person's own thread and matt's real replies (voice with no text, search), never from memory, and never send two that read alike (sameAsSent).

Answer someone in a channel of a Discord server: a mention of the account, a reply to its message, or a question in a channel the owner is part of, like "pennyserver #general". A server channel is not a group chat. It is a room inside someone else's server, with members who never joined a conversation with the owner, an owner and its own rules, so it is read, answered and sent differently from a DM or a group DM. DMs and group DMs are channelReply.

How the owner asks for it: "reply to <someone> in <server>", "answer him in the general", "message the guy in <server> #<channel> who mentioned me", "reply in the <server> server", "find what <someone> said in <server> and answer it"

Run it from a fresh context

Say: "go on docs/useCases/discord/serverReply.md for <server> #<channel>". The agent reads this page and runs the steps.

A server channel, a group DM and a DM

Server channelGroup DMDM
What it isA channel inside a server: a room with an owner, mods, rules and members who aren't in a conversation with the ownerA private chat of a few people the owner is in, with no server and no owner but its membersThe owner and one person
How it is named"<server> #<channel>", like "pennyserver #general"its name, or the members' names when it has nonethe person
In discordChatskind: "channel", with server and serverIdkind: "group"kind: "dm"
What the watcher keepsonly mentions of the account and replies to it; the rest of the channel is never storedevery messageevery message
Where a read comes fromalways from Discord, never log.db, since log.db holds only those mentions and replieslog.db when the account is caught up and the chat backfilledthe same as a group DM
search findsonly the mentions and replies the watcher kept, and what an earlier read storedthe whole conversationthe whole conversation
A send while the account is behindrefused with accountBehind until the account catches upthat one chat is caught up, then it sendsthe same as a group DM
Who the answer is forone person in a room everyone reads: tag themeveryone in the groupthe person
The pagethis onechannelReplychannelReply

The steps

#StepToolDone when
1Find the server's channel by its namediscordChannels { account, server: "<server>" }the channel by its name and kind; for a forum, the post from discordPosts, named "<server> #<forum> > <post title>"
2Claim the channel, so no other session answers itinboxClaim { platform: "discord", account, chat: "<channel id>", event: "<event id from the hook>" }this session holds the channel
3Read the channel or post from Discord, far enough back to have what they said, what it answers and anything the owner already said after itdiscordRead { account, channel: "<server> #<channel>", limit: 50 }their message with its fromId, the messages before it, and none from the owner after it
4Write the answer to that one person, from what they asked and what the owner said to tell them, in the owner's words and length, then gate itvoice { to: "<who>", context: "<what they said and what came before>", text: "<draft>" }PASS, or the owner's own words given for this message
5Send it to the channel by its name, tagging the person with <@their fromId>discordSendLive { account, channel: "<server> #<channel>", text: "<@fromId> <draft>", approvedBy: "<owner>", confirmLive: true }Discord answers sent with the message id

What to know

  • It is someone else's room. The server has an owner and rules. Answer what was asked and stay in the channel's topic. A pitch or a sales line in someone's server is not a reply: a server owner once asked the owner not to use their Discord for selling services.
  • Tag the one person. Everyone in the channel reads every message, so the answer starts with <@their fromId> (from the read in step 3), the way the owner tags people there ("have you ever made generative ui before <@their fromId>"). The AI artifact check passes a mention. Never talk to the whole room as if it were a DM.
  • The read is always live. log.db keeps only the mentions and replies from a server channel, so discordRead reads the channel from Discord every time and says so. Up to 1000 messages, 100 a page. A 429 stops the read and pauses the account (rule 94).
  • Finding an old conversation in a server. Log's own search doesn't hold a server's history, only the mentions and replies the watcher kept. Use discordSearch on the server: serverSearch. Reading a channel back to look for something is the slow way: one piece of advice took a 400-message read of "pennyserver #general" on 12 Nov 2026.
  • When the owner is already there, leave it to the owner. If the owner's own message comes after theirs, the owner is answering: send nothing and release the claim with inboxRelease { platform: "discord", account, chat: "<channel id>" }. A send releases the claim by itself.
  • A send waits for the account. A send to a server channel needs the account caught up; while it is behind, Discord isn't contacted and the answer is accountBehind. Wait for the catch-up, never go around it (rules 94, 105).
  • The voice gate can't find a server channel by name. Gate with to and context only, never with.
  • The owner's own words. When the owner says what to tell them, the answer is the owner's words. When the gate still refuses them, overGate on discordSendLive sends that exact message; the AI artifact check still runs (rule 137).
  • One message per line. A draft on several lines goes out one message per line, and in a busy channel other people's messages can land between them. Keep a server answer to one or two lines (rule 90).
  • X links embed as fixupx. Share an X post on Discord as https://fixupx.com/<user>/status/<id>, never x.com: Discord only embeds the post and its video from fixupx. discordSendLive turns any x.com or twitter.com post link into fixupx.com itself (the owner, 2026-11-13).
  • Name the channel, never its id. The chat-names hook refuses an id: "<server> #<channel>", or "<server> #<forum> > <post title>" for a forum post (rule 154).
  • Forums and threads. A forum holds posts, each its own conversation: answer inside the post, never in the forum. What each part of a server is: the discordServers skill in the discord guide; going through a forum for posts to answer: forumPosts.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.