Contributing
Outpost is open source under the Elastic License 2.0. We welcome contributions of all kinds: bug fixes, new features, documentation improvements, and more.
Development Setup
Follow the Quick Start guide to get your local development environment running. Make sure all tests pass before making changes:
pnpm test
pnpm lint
pnpm typecheck
Code Style
- TypeScript throughout — no plain JavaScript
- 4-space indentation for all source files
- Prettier for formatting (
pnpm formatbefore committing) - ESLint for linting (
pnpm lint) - Plain English commit messages — no conventional commit prefixes
Branch and PR Workflow
- Fork the repository and clone your fork
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes with clear, descriptive commits
- Ensure tests pass:
pnpm test && pnpm lint && pnpm typecheck - Push to your fork and open a Pull Request against
main
Commit messages: Write plain English commit messages that describe what changed and why. Example: "Add SLA breach notifications to Discord bot" rather than "feat: add sla notifications".
Project Structure
outpost/
├── apps/
│ ├── web/ # Next.js web dashboard
│ ├── discord-bot/ # Discord bot (@discord.js)
│ ├── slack-bot/ # Slack bot (@slack/bolt)
│ ├── teams-bot/ # Teams bot (Bot Framework SDK)
│ ├── github-app/ # GitHub App webhook receiver
│ └── docs/ # Documentation site (this site)
├── packages/
│ ├── ai/ # AI pipeline (Pathfinder + Claude)
│ ├── db/ # Prisma schema and client
│ ├── queue/ # Postgres-backed job queue
│ └── shared/ # Shared types and utilities
├── templates/ # Markdown email templates (invite, SLA breach, etc.)
├── docker-compose.yml # Local PostgreSQL + Pathfinder
└── turbo.json # Turborepo config
Running Tests
Tests are run per-package via Turborepo:
# Run all tests
pnpm test
# Run tests for a specific package
pnpm test --filter=@copilotkit/outpost
# Run tests in watch mode
pnpm test --filter=@copilotkit/outpost-web -- --watch
Database Changes
If your change requires a database schema modification:
- Edit the Prisma schema in
packages/db/prisma/schema.prisma - Run
pnpm db:generateto regenerate the client - Run
pnpm db:pushto apply to your local database - Include the schema changes in your PR
Adding an Integration
To add a new integration (e.g., Zendesk, Intercom):
- Create a new app in
apps/following the existing bot/app patterns - Add the app to
pnpm-workspace.yaml - Implement the ticket creation interface from
packages/shared - Add configuration documentation
- Add tests for the integration
License
Outpost is licensed under the Elastic License 2.0 (ELv2). By contributing, you agree that your contributions will be licensed under the same license.