Files
cfw-autumn/apps/leaf

Autumn Leaf

Autumn's AI service: the Slack chat bot plus the hosted MCP routes (src/mcp/mcpRouter.ts).

Local Slack testing uses a normal Slack app in a development workspace. Keep the app undistributed while testing.

Slack test app

  1. Start the stable local tunnel for the server. It forwards Slack requests to the chat app in local development:
bun run chat:tunnel
  1. Start Autumn with the same public URL:
NGROK_URL=https://c.autumn.ngrok.app bun d

bun d derives CHAT_URL, SLACK_BOT_URL, and SLACK_REDIRECT_URI from NGROK_URL, so the Slack OAuth redirect becomes https://c.autumn.ngrok.app/slack/oauth/callback. This exact URL must be in the Slack app's OAuth redirect URLs.

The chat SDK stores its own subscriptions, locks, and queues in Postgres. By default it uses the same DATABASE_URL host with the database name changed to chat; set CHAT_STATE_DATABASE_URL to override this. bun dev:services up creates the local chat database. The @chat-adapter/state-pg package creates its state tables automatically on connect, so there is no separate migration command for the chat state database.

  1. Create a Slack app at https://api.slack.com/apps using slack-manifest.example.json.

For production, use slack-manifest.prod.json. It points Slack at https://api.useautumn.com/slack/*, which the API proxies to the chat service.

  1. Copy the Slack app credentials into the local environment:
SLACK_CLIENT_ID=...
SLACK_CLIENT_SECRET=...
SLACK_SIGNING_SECRET=...
  1. In Autumn, open Settings -> Integrations and click Add Slack.

  2. Test in Slack by DMing the app:

list customers

For billing changes, the app should post a preview with Approve and Cancel buttons before calling a write tool.