A Slack bot that:
- Answers engineers' questions about feature specs (sourced from Confluence)
- Runs live brainstorm sessions in Slack threads or Google Meet calls, writing proposals to Confluence in real time
- Go to https://console.anthropic.com
- Create an account and add a payment method
- Go to API Keys → Create Key
- Copy it — this is your
ANTHROPIC_API_KEY
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click Create API token → name it "SpecBot"
- Copy the token — this is your
CONFLUENCE_API_TOKEN - Your
CONFLUENCE_BASE_URLis:https://yourcompany.atlassian.net/wiki - Your
CONFLUENCE_EMAILis the email you log into Atlassian with - Your
CONFLUENCE_SPACE_KEY: Go to your specs space in Confluence → look at the URL, it'll say/spaces/ENGor similar — that's your space key
- Go to https://www.recall.ai and create an account
- From the dashboard, copy your API Key — this is your
RECALL_API_KEY - Note your region (e.g.
us-east-1) — this is yourRECALL_REGION - Your
RECALL_WEBHOOK_URLwill behttps://YOUR_DOMAIN/recall/webhook— you'll fill in the domain after Step 2
Railway gives you a free tier and a public URL without needing to manage servers.
- Go to https://railway.app and sign up (free)
- Click New Project → Deploy from GitHub repo
- Push this code to a GitHub repo first (or use Railway's CLI)
- Once deployed, Railway gives you a URL like
https://specbot-production.up.railway.app - Go to Variables in your Railway project and add all values from
.env.example
💡 Your
PORTvariable is set automatically by Railway — you don't need to add it.
💡 Now that you have your Railway URL, go back and set
RECALL_WEBHOOK_URLtohttps://specbot-production.up.railway.app/recall/webhook
- Go to https://api.slack.com/apps → Create New App → From manifest
- Select your workspace
- Paste the contents of
config/slack_manifest.yaml - Replace
YOUR_DOMAINwith your Railway URL (e.g.https://specbot-production.up.railway.app) - Click Create
- Go to OAuth & Permissions → Install to Workspace
- Copy the Bot User OAuth Token → this is your
SLACK_BOT_TOKEN - Go to Basic Information → App Credentials → copy Signing Secret → this is your
SLACK_SIGNING_SECRET
Add both to Railway Variables.
In any Slack channel where SpecBot is invited:
/specbot What is the authentication flow for the login feature?
Or mention it directly:
@SpecBot What does the spec say about error handling?
In any channel:
/specbot brainstorm
SpecBot will start a thread and create a live Confluence draft. Reply in the thread as if you're talking through the feature. The proposal updates every 60 seconds. When done:
/specbot done
In any channel:
/specbot live https://meet.google.com/abc-defg-hij
SpecBot joins the call via Recall.ai and writes the proposal live as the conversation happens. It finalises automatically when the call ends.
| Scenario | What to do |
|---|---|
| Engineer has a spec question | /specbot [question] in any channel |
| @-mention mid-conversation | @SpecBot [question] in a thread |
| Start a Slack brainstorm | /specbot brainstorm → talk in the thread → done when finished |
| Start a live call brainstorm | /specbot live [meeting URL] before or during the call |
| Force a proposal refresh mid-session | Reply update in the brainstorm thread |
| End a session early | Reply done in the thread or /specbot done |
| Service | Cost |
|---|---|
| Railway | Free tier (500 hours/month) or $5/month Pro |
| Anthropic API | ~$0.01–0.05 per question at this scale |
| Recall.ai | ~$0.15/hour of call time |
| Slack | Free (uses existing workspace) |
| Confluence | Free (uses existing licence) |
Realistic monthly cost for a team of <10: under £15.
Bot doesn't respond to /specbot
- Check Railway logs for errors
- Verify
SLACK_BOT_TOKENandSLACK_SIGNING_SECRETare set correctly
"I couldn't find any relevant specs"
- Check
CONFLUENCE_SPACE_KEYmatches your actual space - Make sure the Confluence API token has read access to that space
Proposal not publishing to Confluence
- Check
CONFLUENCE_BASE_URLends with/wiki(not just the domain) - Verify the API token has page creation permissions
SpecBot doesn't join the call
- Verify
RECALL_API_KEYandRECALL_REGIONare set correctly - Make sure
RECALL_WEBHOOK_URLpoints to your live Railway URL (not localhost)
Railway deployment failing
- Check the build logs
- Make sure all required environment variables are set