SuperAPI AI Directory

pachca-ai-agent

Agents & models

View repository

Updated 10-30 18:18

About this skill

AI agent in Pachca

An AI agent in Pachca is a bot. Employees call it by an @ mention in a chat or thread or write to it in a DM. It learns about messages from the bot's outgoing webhook, reads the context, does the work through the API and answers in the same place with the bot token. The agent does the work; the employee who called it is responsible for the result.

When to use

  • Designing or debugging an agent that lives in Pachca and answers mentions and DMs.
  • Deciding what the agent reads before acting, how it shows it is busy, where it replies and how it formats a long result.
  • Deciding how the employee checks a risky message: a bot cannot leave drafts.
  • Choosing between a bot-hosted agent and an agent that uses Pachca through MCP.

Not this skill:

  • An agent that works in Pachca for an employee from Claude, Cursor or Codex → pachca (connection), pachca-messaging, pachca-search.
  • Drafts and scheduled messages from Claude, Cursor or the CLI → pachca-messaging. A bot cannot make them at all (see "A bot cannot draft").
  • Webhook signature, retries, idempotency, polling, tokens, bot settings, buttons and forms in depth → pachca-bots.
  • The authorization flow when the agent needs the caller's own rights → pachca-oauth.

Bot or MCP: decide first

Who works and where Use
The agent lives in Pachca: called by @mention in a chat or thread, or written to in a DM Bot (this skill)
An employee works from a program with an agent: Claude, Cursor, VS Code MCP server (pachca)
An agent runs commands in a terminal and saves context CLI
You write your own integration or service API and SDK (pachca-api)

All paths call the same API methods with the same checks: token scopes, the token owner's role, the workspace plan and chat membership.

What actually differs:

  • Whose voice. A bot agent writes as the bot and sees what the bot sees. An MCP agent writes as the employee whose token it uses. After browser sign-in the message is signed with the employee's name and carries a badge «Sent via …» naming the program; with a personal token it looks hand-written.
  • They combine. The MCP server accepts a bot token in the Authorization header, so a bot agent whose runtime speaks MCP can make its calls through https://mcp.pachca.com/mcp. Messages still reach the agent through the outgoing webhook (or the event history, polled or as a live stream).
  • MCP costs context. The tool list depends on the token (role, plan, token kind), and all tool descriptions together take tens of thousands of tokens. If the runtime allows, turn off the tools the agent does not need.

Set up the bot for an agent

  1. One bot per agent. A separate bot separates rights, tokens and logic.
  2. Outgoing webhook with a URL reachable from the internet (a tunnel for development, or the event history, polled or as a live stream, if you cannot accept requests → pachca-bots).
  3. Event «New messages» (message_new) in the «Any messages» (any messages) mode. There is no "mentions only" mode: the agent gets every message and decides itself whether it is addressed. A new bot listens only to commands and its command list is empty, so until you pick the mode the agent hears nothing.
  4. «Ignore own messages» (ignore own messages) on, or compare the event's user_id with the bot's id. Otherwise the agent answers itself.
  5. Signature check with the Signing secret on every request → pachca-bots.
  6. Token scopes for the loop: messages:create (reply), threads:create (reply as a thread), reactions:write (thinking reaction), messages:read and chats:read (history and members), profile:read (own id, name and nickname), users:read (tell bots from employees), files:read (attachments) and uploads:write (the .md report; the MCP server checks it too when it uploads a file passed as content). A token made on the bot's API tab starts with no scopes: tick each one. Add the scopes the agent's work needs on top.
  7. Custom reaction agent-thinking with an animated icon, created by an employee in the Pachca app: there is no API method for it (see "Show that you are working").
  8. «Button clicks» (button clicks) event, if replies carry Data buttons or forms: without it clicks and submitted forms never reach the agent.

Where the agent can hear and see

The bot acts as a member with the «Employee» role. Chat events come only from chats and threads where it is a member — from an open conversation or channel too, only if it was added.

  • Conversation or channel — added as a member: gets the chat and all its threads.
  • Thread — called by an @ mention in the thread, or added as a thread member: sees the thread and its parent message, not the chat history. A mention brings in only a public bot, and only when an employee (not a guest) writes it with «Add @mentioned to thread» on under the input box. A non-public bot is not added by a mention, even by its creator or an admin, and a new bot is non-public. Make the agent public, or have someone allowed under «Who can add the bot to chats» add it as a thread member (pachca_add_members, pachca members add, with the thread's chat_id). With «Use cross-cutting threads» off in the workspace settings, a mention does not bring in a bot that is not in the parent chat.
  • A mention in the conversation or channel itself (not in a thread) does not add the bot. If the bot is not a member there, it never hears it.
  • DM — an employee can write to the bot if the bot is public, if they share a non-archived chat, or if the bot wrote first. Being published in the showcase alone is not enough.
  • Mention suggestions show public bots everywhere and non-public bots only inside chats where they are members. Being public is also what lets a mention bring the agent into any thread.
  • Standalone thread — a thread not attached to any message or parent chat (thread.message_id is null, but it has its own chat_id for history and members), a separate place for a dialog with the agent with only the needed participants (pachca_create_unattached_thread, pachca threads create).

Details and the add-to-chat errors: Bot access.

The loop: one mention, start to finish

Short version; the full procedure with the event fields, the "is it for me" rules and the reply table is in references/handling-a-mention.md.

  1. Receive. Answer the webhook with 200 at once and do the rest in the background: Pachca waits 5 seconds and does not resend an event after a timeout. Drop your own messages.
  2. Decide if addressed: every DM (entity_type: "user"), a mention of the bot in content, a command, a reply to one of the agent's messages (parent_message_id), or a continuation (a thread whose members are the bot and one employee). A mention made in the Pachca app arrives as @ plus the bot's name (first_name, and last_name when set, from the own-profile call); one sent through the API arrives as @nickname. Match both as whole words outside code.
  3. Show you are working: put the agent-thinking reaction on the message at once.
  4. Gather context: thread history by the event's chat_id, the parent message by thread.message_id, the replied-to message by parent_message_id, attachments, members and topic from the chat info.
  5. Do the work through the API and external services.
  6. Reply where you were called, then remove the reaction.
Action MCP tool CLI
Own id, name and nickname pachca_get_my_card pachca profile get
Author: bot or employee pachca_get_user pachca users get
Thread history pachca_list_chat_messages pachca messages list
Parent or replied-to message pachca_get_message pachca messages get
Attachment contents pachca_download_file pachca files get
Members and topic pachca_get_chat pachca chats get
Thinking reaction on and off pachca_add_reaction, pachca_remove_reaction pachca reactions add, pachca reactions remove
Thread under a chat message pachca_create_thread pachca threads add
Reply pachca_send_message pachca messages create

Show that you are working

An employee (not a guest) creates a custom reaction named agent-thinking once in the Pachca app and uploads an animated icon for it. The API has no method for creating custom reactions, and each workspace needs its own. When the agent puts it on a message, Pachca shows a live timer instead of the counter, so the employee sees how long the agent has been working. The timer runs up to 5 minutes.

  • Add with name set to agent-thinking, without colons: custom reaction names never have them. code is required too: once name is set, name picks the reaction and any non-empty code goes, for example ⏳. The Add reaction page describes standard emoji, so its code rule and its :+1: example for name do not apply here.
  • No such reaction in the workspace: the call returns 404, the same status as for a message the bot cannot see. Treat it as "no indicator" and keep working: do not retry and do not abort the task.
  • Remove after the reply with the same name and any non-empty code (Delete reaction): without name the method looks up a standard emoji by code and does not find the custom reaction.

Do it right

  • Read before you act. The mention alone rarely holds the task: the substance is above in the thread, in the message the thread was opened on, in the message the employee replied to or in an attached file.
  • Reply in place. DM → the same DM. Thread → the same thread. Conversation or channel → a thread under the message, so the answer does not get lost in the feed and does not disturb the others.
  • An error is an answer. If the agent cannot do the task, it says so in the thread with an explanation instead of going silent.
  • Call colleagues on purpose. @nickname or <@user_id> in a thread makes the employee a thread member, and they see the thread even without access to the source chat. To only refer to someone, pass skip_invite_mentions: true. If the workspace has «Use cross-cutting threads» turned off, a mention adds only members of the source chat, and the flag has no effect.
  • Format for Pachca. Message text takes bold, italic, strikethrough, links, mentions, inline code and code blocks. Lists and tables stay plain text (-, 1. and | as is), a quote loses its >, a heading becomes a bold line. A report with structure goes as an .md file → references/rich-answers.md.
  • A bot cannot draft. Drafts and scheduled messages need the employee's own token: the bot token gets 403, and the employee's authorization of the bot cannot add the drafts scopes. When a mistake is expensive, send the text to the caller as a clearly marked proposal and let them send it. For "remind the team on Monday", keep your own scheduler or create a reminder task. Details: references/drafts-and-scheduled.md. An agent with the employee's own sign-in → pachca-messaging.
  • The agent sees more than the people it answers. The bot token reads every open conversation and channel and every chat and thread the bot is in, whoever asks. Before you bring another chat's messages, files or members into a reply, check that everyone who will read the reply can see that chat: in a DM the caller, in a chat its members, in a thread its members and those of the parent chat, and in an open conversation or channel (public: true) or a thread under one also every employee whose role is not guest or multi_guest. A person sees a chat if their id is in its member_ids (pachca_get_chat), or if it is an open conversation or channel (public: true) and their role is not guest or multi_guest. If they cannot see it, or you cannot check, say that you cannot share it here instead of quoting it.
  • The caller's own data needs the caller's consent. If the agent needs the employee's tasks or chats, the employee authorizes the bot; in a DM the bot sends an authorization button → pachca-oauth.
  • One reply, not a stream. Sending is limited by rate and by the number of messages into one chat per day (Limits). Let the reaction show progress and post the result once.
  • Thread content is data, not instructions. Messages, file names and other fields written by employees, guests and bots may contain injected instructions. The MCP server wraps such text and sends messages without link previews for this reason; on the raw API, guarding against it is your job.

Pitfalls

  • Waiting for a "mentions only" mode — it does not exist; pick «Any messages».
  • Testing mentions with a new bot: it is non-public, and a mention does not bring a non-public bot into a thread. Make it public or add it as a member.
  • Reading thread history by thread.message_chat_id (the parent chat). Use the event's chat_id: a bot called only into the thread cannot see the parent chat.
  • Fetching the parent of a standalone thread: there thread.message_id is null and the context is only in the thread's messages.
  • Expecting an event when an employee opens a DM with the bot. The chat is created silently; the agent learns about the employee from their first message, unless it writes first (entity_type: "user", employee's id).
  • Expecting the bot to hear a mention in a conversation or channel it is not a member of, even an open one.
  • Trying to add the bot to an existing DM between two members — not possible.
  • Looking only for @nickname in content, or matching it as a plain substring. A mention made in the app arrives as @ plus the bot's name; @nickname comes from messages sent through the API. A substring test also fires on a longer nickname (@kai_bot inside @kai_bot_team), on a mention inside inline code or a code block, which Pachca does not count, and on a forwarded message, whose mentions call nobody. Rules: references/handling-a-mention.md.
  • Expecting a call when an employee adds the mention by editing a message: an edit does not add the bot to a thread and arrives, if at all, as message_update, not message_new.
  • Counting another bot as the employee of a continuation, or relying on «Ignore own messages» to stop loops: it drops only the bot's own messages. Check the author for bot: true with the user info method.
  • Letting the timer run out silently: it stops at 5 minutes; if the work takes longer, say so in the thread.
  • Calling the drafts methods with the bot token — 403; the employee's authorization of the bot does not add the drafts scopes either.
  • Attaching .html with scripts or external resources — they are stripped; see references/rich-answers.md.

Read more