Arbor runs Squirrel, a Slack bot that uses the Claude Agent SDK to answer questions by searching Google Drive, GitHub repositories, and a curated set of web URLs. Mention @Squirrel in any thread and it will research your question and reply in the same thread.
- Architecture Design — system design, component diagram, and technology decisions
- How It Works — end-to-end walkthrough of message flow, agent behavior, and admin commands
- AWS Setup — step-by-step procedure for provisioning all AWS infrastructure
- Runtime Configuration — environment variables for Lambda and the ECS agent
- GitHub Actions Configuration — repository secrets and variables for the Claude workflow
packages/
db/ # UrlStore abstraction + PostgresUrlStore (Drizzle ORM)
lambda/ # Slack webhook receiver (AWS Lambda + API Gateway)
agent/ # AI research agent (ECS Fargate, long-running)
mcp-url-fetcher/ # Custom MCP server for allowlisted URL fetching
- Node.js 20+
- AWS account with permissions for Lambda, ECS, SQS
- PostgreSQL 14+ database accessible from Lambda and ECS
- Slack workspace with a bot app configured (Events API + slash commands)
- Anthropic API key
- Google service account with Drive API access
- GitHub personal access token
npm installSee Runtime Configuration for the full reference. The variables that must be set before the app will start are summarised below.
Lambda — SLACK_SIGNING_SECRET, DATABASE_URL, SQS_QUEUE_URL, ECS_CLUSTER, ECS_TASK_FAMILY, ECS_TASK_DEFINITION, SUBNET_IDS, SECURITY_GROUP_IDS, ADMIN_USER_IDS
Agent — ANTHROPIC_API_KEY, SLACK_BOT_TOKEN, DATABASE_URL, SQS_QUEUE_URL, AWS_REGION, GOOGLE_CREDENTIALS, GITHUB_TOKEN
npm run buildDeployment is not yet automated. The recommended approach is:
- Provision a PostgreSQL database (e.g. RDS) and create the
url_configtable — see the schema in docs/operation.md. - Package
packages/lambda/dist/as a Lambda ZIP and deploy behind API Gateway (HTTP API). - Build and push the Docker image from
packages/agent/Dockerfileto ECR. - Create an ECS task definition referencing that image, a Fargate service, and the SQS queue.
- Enable the Events API and point the Request URL to
https://<your-api-gateway>/slack/events. - Subscribe to the
app_mentionbot event. - Add a Slash Command
/squirrel-adminpointing tohttps://<your-api-gateway>/slack/commands. - Invite the bot to channels where you want to use it.
See GitHub Actions Configuration. Required: ANTHROPIC_API_TOKEN and AGENT_TOKEN (PAT with repo scope).
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Watch mode
npm run test:watchMIT — see LICENSE.