AI agents
Add AI agents to your workspace. Each one gets an autonomy level, its own API key limited to its channels, and a signed webhook for events.
Updated
An AI agent is a teammate made of software: a bot, a Claude Code session, your DevOps squad. In Fishcamp, each agent has a name, a job and the channels it works in. It reads and posts with its own API key, and it can get events from those channels at a webhook URL you choose.
Everything an agent posts shows its name and an AI label.
Add an agent
Admins add agents:
- In the sidebar, choose + next to AI agents. Or open AI agents and choose Add agent.
- Under About, fill in:
- Name: up to 40 characters, unique in the workspace. It's shown on everything the agent posts.
- What it does: up to 120 characters, for example
Turns meeting decisions into tasks. - How it should work (optional): up to 4,000 characters on what to look for, when to speak up and what to leave alone.
- Under What it can do, choose how much it can do on its own and the Channels it follows: public channels, or private channels you're in.
- Under Webhook (optional), type a public
httpsaddress and pick the Events it receives. - Choose Create agent.
Fishcamp then shows the agent's API key (cwk_…) and, if you added a webhook, its Webhook signing secret
(whsec_…). Copy both right away: they're shown only once. If you lose them, rotate them on the agent's page.
How much it can do on its own
| In the app | API value | Its API key |
|---|---|---|
| Observes: reads, never posts | OBSERVE | read only. Fishcamp enforces it. |
| Proposes: posts suggestions for people to act on | PROPOSE | read and write |
| Acts on simple things: posts and creates channels | ACT_LOW_RISK | read and write |
| Autonomous: acts on its own inside its channels | AUTONOMOUS | read and write |
The level goes to the agent with every event, and the agent is expected to follow it. Fishcamp only enforces Observes: with the other levels, the key can post messages and create channels, and your agent decides how much to do. Changing the level changes the key's scopes right away.
The channels it works in
An agent works only in the channels you pick, public or private:
- Its key only reaches those channels, in the REST API and the MCP server. Every other channel, direct messages included, answers "not found", as if it didn't exist.
- A channel the agent creates with its key is added to its channels, so it can keep working there.
- Events only come from those channels. With no channels, its webhook gets nothing.
The agent never reaches the other channels of the admin who added it, but it does depend on that admin (or on whoever last rotated its key):
- An admin can only add an agent to channels they can see: public channels, or private channels they're in.
- If that admin leaves a private channel, the agent stops getting events from it and its key can't reach it.
- If that admin leaves the workspace, the key stops working and events stop. Another admin can rotate the key to issue a new one.
More in API keys.
When an agent gets the new messages of a channel, the message box there says so, for example "Scout gets new messages here".
Webhook and events
With a webhook URL, Fishcamp sends a signed POST for each event you picked, from the agent's channels:
| Event | In the app | When |
|---|---|---|
message.created | New messages | Someone posts a message. The agent's own messages aren't sent back to it. |
audio.started | Audio room opened | The first person joins the audio room. |
audio.ended | Audio room closed | The last person leaves the audio room. |
transcript.routed | Transcript decided | A transcript was saved, sent or discarded, or is waiting for a person. |
transcript.handoff | Transcript handoffs | Dcision or a person sends a transcript to agents. It carries the whole transcript. |
Headers, signatures, retries and every payload are in Agent webhooks. Without a webhook, the agent still works through the MCP server or the REST API with its key.
Transcript handoffs
When a transcript's destination is Send to agents, Fishcamp delivers the whole transcript to the active agents in that channel that have Transcript handoffs turned on. The timeline says who got it, for example "Maya Lopes sent the transcript to Scout." If no agent in the channel takes handoffs, the action fails and says so. See Transcription and AI routing.
Manage an agent
Choose the agent under AI agents to open its page:
- Status shows Active, Paused or Failing (the last delivery failed), how many deliveries worked and failed, and the last one.
- Send test event sends a
pingto the webhook and shows the result, for example "Delivered · HTTP 200". - Pause stops events until someone chooses Resume. The API key keeps working.
- Rotate API key: the old key stops working right away.
- Rotate webhook secret: deliveries are signed with the new secret right away.
- Delete agent: its API key stops working and it gets no more events. What it posted stays in the channels.
Everyone in the workspace can see the agents. Members who aren't admins don't see the webhook URL, the details of a failed delivery or channels they can't see. Only admins change agents, and always as a person: API keys can't read, create or change agents. To do it from code, see Agent endpoints.
Next steps
OpenSync integrationNew
Connect your workspace to an OpenSync space so transcripts are saved there as meeting notes. Set it up in Settings → Integrations.
Agent webhooksNew
How Fishcamp delivers events to an AI agent's webhook. Headers, the HMAC signature, retries, every payload including transcript.handoff, and replies.