In this article, we review mom (Master Of Mischief). You will learn:
What is mom?
Features
What is mom?
A Slack bot powered by an LLM that can execute bash commands, read/write files, and interact with your development environment. Mom is self-managing. She installs her own tools, programs CLI tools (aka “skills”) she can use to help with your workflows and tasks, configures credentials, and maintains her workspace autonomously.
Features
Minimal by Design: Turn mom into whatever you need. She builds her own tools without pre-built assumptions
Self-Managing: Installs tools (apk, npm, etc.), writes scripts, configures credentials. Zero setup from you
Slack Integration: Responds to @mentions in channels and DMs
Full Bash Access: Execute any command, read/write files, automate workflows
Docker Sandbox: Isolate mom in a container (recommended for all use)
Persistent Workspace: All conversation history, files, and tools stored in one directory you control
Working Memory & Custom Tools: Mom remembers context across sessions and creates workflow-specific CLI tools (aka “skills”) for your tasks
Thread-Based Details: Clean main messages with verbose tool details in threads
Check out the slack app setup.
I also looked into its source code and found this below function that has core features:
function createSlackContext(event: SlackEvent, slack: SlackBot, state: ChannelState, isEvent?: boolean) {
message: {
text: event.text,
rawText: event.text,
user: event.user,
userName: user?.userName,
channel: event.channel,
ts: event.ts,
attachments: (event.attachments || []).map((a) => ({ local: a.local })),
},
channelName: slack.getChannel(event.channel)?.name,
store: state.store,
channels: slack.getAllChannels().map((c) => ({ id: c.id, name: c.name })),
users: slack.getAllUsers().map((u) => ({ id: u.id, userName: u.userName, displayName: u.displayName })),
respond: async (text: string, shouldLog = true) => {
...
},
replaceMessage: async (text: string) => {
...
},
respondInThread: async (text: string) => {
...
},
setTyping: async (isTyping: boolean) => {
...
},
uploadFile: async (filePath: string, title?: string) => {
await slack.uploadFile(event.channel, filePath, title);
},
setWorking: async (working: boolean) => {
...
},
deleteMessage: async () => {
...
},
}
This is in packages/mom/src/main.ts.
About me:
Hey, my name is Ramu Narasinga. Email: ramu.narasinga@gmail.com
Tired of AI slop?
I spent 3+ years studying OSS codebases and wrote 350+ articles on what makes them production-grade. I built an open source tool that reviews your PR against your existing codebase patterns.
Your codebase. Your patterns. Enforced.

Top comments (0)