Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion api-reference/error-codes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,27 @@ Onboarding a Fleet template (the SKILL.md/TRIGGER.md package behind a Fleet) and

## Integration connect & token mint

Codes here are the externally-observable subset of the server registry; a gap in a numbering sequence is a code that was superseded before release (`UZ-SLK-021` was superseded by the generic `UZ-CONN-002`, so the registry — and this table — skips it).

| Code | HTTP | Title | Common Causes |
|---|---|---|---|
| `UZ-CONN-001` | 503 | Connector not configured | GitHub connect is unavailable on this deployment — the platform App slug or signing secret is unset. An operator must register the GitHub App and populate the admin vault before fleets can connect. |
| `UZ-CONN-001` | 503 | Connector not configured | Connect is unavailable for this provider on this deployment — the platform app credentials (GitHub App slug / Slack app secrets) are unset. An operator must register the provider app and populate the admin vault before workspaces can connect. |
| `UZ-CONN-002` | 400 | Invalid connect state | The connect callback's `state` was missing, forged, expired, or already used. Start the connect again from the dashboard — each attempt issues a fresh single-use state. |
| `UZ-CRED-001` | 404 | Integration not connected | No connected integration matches this id for the fleet's workspace. Connect it first (e.g. GitHub via the dashboard **Connect** flow) before a fleet can mint a token for it. |
| `UZ-GH-001` | 409 | GitHub App reconnect required | The GitHub App installation is gone (uninstalled or revoked), so no token can be minted. Reconnect GitHub from the dashboard — the fleet stays blocked until the App is reinstalled. |
| `UZ-GH-002` | 502 | GitHub token mint failed | GitHub did not return an installation token (upstream 5xx, network, or a malformed exchange response). Transient — retry shortly; if it persists, check GitHub status and the App configuration. |
| `UZ-SLK-022` | 502 | Slack token exchange failed | The Slack OAuth code could not be exchanged for a bot token. Retry the connect flow; if it persists, verify the platform Slack app credentials. |

### Slack event handling

Runtime codes for the channel bot's inbound mentions and outbound answers — distinct from the OAuth connect and token-mint flow above.

| Code | HTTP | Title | Common Causes |
|---|---|---|---|
| `UZ-SLK-010` | 401 | Invalid Slack signature | The Slack request signature on `POST /v1/connectors/slack/events` did not verify. Confirm the platform Slack app's signing secret matches the one vaulted by the operator. |
| `UZ-SLK-011` | 401 | Stale Slack timestamp | The Slack request timestamp is outside the 5-minute drift window — a replay attempt or a skewed clock. |
| `UZ-SLK-020` | 200 | Slack team not installed | The Slack team that sent this event has no connector install; the event is acknowledged (200) and ignored so Slack does not retry. Re-run **Connect Slack** in the dashboard to (re)install. |
| `UZ-SLK-030` | 502 | Slack answer post failed | The channel bot's answer could not be delivered to Slack (missing `chat:write`, a 429, or a Slack outage). Logged and retried with backoff; the run itself never fails. |
Comment thread
greptile-apps[bot] marked this conversation as resolved.
Comment thread
greptile-apps[bot] marked this conversation as resolved.

## Approval gate

Expand Down
20 changes: 20 additions & 0 deletions changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,26 @@ export const STAGE_SELF_MANAGED_M66 = "$0.0001";
agentsfleet is in **stealth-mode testing** and pre-production. APIs and agent behavior may change between releases without long deprecation windows. Email [agentsfleet@agentmail.to](mailto:agentsfleet@agentmail.to) if you want a hand calibrating an agent or to join as a design partner.
</Tip>

<Update label="Jul 02, 2026" tags={["What's new", "API", "UI", "Integrations"]}>
## Slack: mention @agentsfleet in a channel, get an answer in the thread

agentsfleet is now Slack-resident. Connect Slack from the dashboard Integrations page — a browser OAuth round-trip, no token to paste — invite `@agentsfleet` to a channel, and mention it. The first mention materializes a fleet that lives in that channel; it answers in the thread it was mentioned in, and what it learns in one thread it remembers across the channel's other threads. It is reactive and read-only: it speaks only when mentioned, and only in the thread that asked.

## What's new

- **Connect Slack from Integrations.** A Slack row sits next to GitHub: **Connect** redirects to Slack's authorize page and the callback stores the bot token server-side in the workspace vault. The row shows the connected workspace ("Slack connected: {team}") and offers **Reconnect** if the install is revoked.
- **One fleet per channel.** The first `@agentsfleet` mention in a channel creates that channel's resident fleet; later mentions in any thread reuse it. Memory is channel-scoped — tell it a fact in one thread and it recalls it in another.
- **Answers land in-thread.** Replies post to the thread that mentioned the bot — never to the channel top level, never to another channel.
- **Recent thread context.** Each mention re-reads up to 20 recent messages in its thread, so a follow-up mention sees the conversation so far even where the bot wasn't mentioned in between. Best-effort: if Slack throttles the read, the mention still processes without it.

## API reference

- **`POST /v1/workspaces/{workspace_id}/connectors/slack/connect`** (scope `connector:write`) — returns the Slack authorize URL carrying a signed single-use `state`; **`GET /v1/connectors/slack/callback`** finishes the round-trip and vaults the bot token.
- **`GET /v1/workspaces/{workspace_id}/connectors/slack`** (scope `connector:read`) — connector status as `{status, team}`, where `status` is `connected`, `reconnect_required`, or `not_connected`; never a secret.
- **`POST /v1/connectors/slack/events`** — the signed events ingress. Authenticated by Slack's request signature (HMAC over the raw body, 5-minute replay window), not a Bearer token.
- **New error codes:** `UZ-SLK-010` (401, invalid Slack signature), `UZ-SLK-011` (401, stale timestamp), `UZ-SLK-020` (200 — an event from a team with no install is acknowledged and ignored), `UZ-SLK-022` (502, OAuth token exchange failed), `UZ-SLK-030` (502, answer delivery to Slack failed — logged and retried; the run itself never fails). `UZ-CONN-001`/`UZ-CONN-002` now cover the Slack connect flow as well as GitHub.
</Update>

<Update label="Jun 30, 2026" tags={["Breaking", "What's new", "API", "UI", "CLI"]}>
## Bring your own Fleet templates

Expand Down
5 changes: 3 additions & 2 deletions concepts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,10 @@ A trigger lands on the event stream. A run opens. The fleet calls tools allow-li
</Accordion>

<Accordion title="Trigger">
What wakes a fleet. Three sources, all feeding the same reasoning loop:
What wakes a fleet. Four sources, all feeding the same reasoning loop:

- **Webhook** — an external system (GitHub, Slack, your monitoring) POSTs to `https://api.agentsfleet.net/v1/webhooks/{fleet_id}/{source}` (one URL per declared trigger source).
- **Webhook** — an external system (GitHub, your monitoring) POSTs to `https://api.agentsfleet.net/v1/webhooks/{fleet_id}/{source}` (one URL per declared trigger source). A Slack mention does **not** use this path — it has its own trigger below.
- **Slack mention** — with Slack connected, mentioning `@agentsfleet` in a channel wakes that channel's resident fleet, which answers in the thread (see the Jul 02, 2026 changelog entry).
- **Cron** — the fleet schedules its own future runs via the `cron_add` tool.
- **Steer** — a human invokes `agentsfleet steer <fleet_id> "..."` for a manual run.

Expand Down
7 changes: 4 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -214,11 +214,12 @@
]
},
{
"group": "Fleet bundles",
"group": "Fleet templates",
"pages": [
"GET /v1/fleets/bundles",
"POST /v1/workspaces/{workspace_id}/fleets/bundles/snapshots",
"GET /v1/workspaces/{workspace_id}/fleets/bundles/snapshots/{bundle_id}"
"GET /v1/workspaces/{workspace_id}/fleet-templates",
"POST /v1/admin/fleet-templates",
"POST /v1/workspaces/{workspace_id}/fleet-templates"
]
},
{
Expand Down
Loading