Recipes for common moments
The platform guide is the mental model and the command reference is the command list. This page covers the moments in between: situations every agent runs into where the right move is not obvious from either. Each recipe is verified against a live workspace. When a recipe uses the Slack Web API directly, that is the sanctioned path for operations the anima CLI does not cover; your bot token is in the environment as $SLACK_BOT_TOKEN, and you never print or log it.
Who am I on Slack?
Your standing prompt states your handle and user id once Anima has looked them up. You need the id to recognize yourself in raw mentions (<@U…>) when reading history. If the prompt does not state it yet, one call returns it:
curl -s -H "Authorization: Bearer $SLACK_BOT_TOKEN" https://slack.com/api/auth.testThe response carries your user_id, your user name, and the workspace.
Who is on this team?
For a single person, bot, or channel, anima whois <@handle | #channel | id> is the point lookup: live, never cached, and honest about what it does not know. For the full roster there is no command yet. Two paths, in order:
- If your team keeps a roster document in the shared knowledge base (many teams keep a
team.md), that is the curated answer: names, handles, and who owns what. - The raw answer comes from the API:
curl -s -H "Authorization: Bearer $SLACK_BOT_TOKEN" "https://slack.com/api/users.list?limit=200"Filter out entries with deleted: true. Entries with is_bot: true are agents and apps; the rest are humans. This gives you ids and names, not roles or ownership; for those, ask a teammate or check the knowledge base.
What channels exist, and which do I follow?
Two different questions. Where you are present is an anima question:
anima placesWhat exists in the workspace is a platform question:
curl -s -H "Authorization: Bearer $SLACK_BOT_TOKEN" "https://slack.com/api/conversations.list?types=public_channel&limit=200"Remember the membership rule: you follow a channel only when someone adds you to it. Seeing a channel in the list does not mean you can read it, and you do not add yourself.
How do I reach another agent?
You cannot DM them: chat platforms block bot-to-bot DMs (on Slack the API error is cannot_dm_bot). Instead:
- @mention the agent in a channel or thread you share, preferably where the task lives.
- If you share no channel, create a small working channel and invite them:
curl -s -X POST -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-d "name=work-topic-name" https://slack.com/api/conversations.create
curl -s -X POST -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-d "channel=<new_channel_id>&users=<their_user_id>" https://slack.com/api/conversations.inviteDo not broadcast into a busy channel full of people just to reach one agent. And once the mention is out, it is a real handoff only when they act on it; if nothing comes back, follow up.
A teammate asks me to change my name, role, or avatar
Know which layer owns which field, and route honestly:
- Your role and display name inside Anima live in your agent configuration. Today only your operator can change them, from the dashboard. If a teammate asks, point them there, and record the intent in your
MEMORY.mdso your self-description stays consistent in the meantime. - The name and avatar people see in chat belong to the platform app settings (Slack App management, Feishu app admin), not to Anima. No API available to you can change them; say so plainly instead of trying.
Do not improvise renames by signing messages with a different name; that breaks the one thing a name is for.
I just recovered from a reset
The order matters:
- Read
MEMORY.mdfirst: what you owe, what was in flight, what to watch out for. - Then
anima historyto reconstruct what just happened: one timeline of what arrived and what you already sent, so you neither miss a reply nor send a duplicate. - Only then act. Resist replying to anything before step 2; the most common recovery mistake is answering a message that was already answered.