Thank you for your interest in contributing to Locus! Locus is a GitHub-native AI sprint execution CLI that turns GitHub issues into shipped code.
packages/cli: The unified CLI entry point (@locusai/cli)packages/sdk: SDK for building community packages (@locusai/sdk)packages/telegram: Telegram integration package (@locusai/locus-telegram)packages/linear: Linear integration package (@locusai/locus-linear)packages/jira: Jira integration package (@locusai/locus-jira)packages/cron: Cron scheduler package (@locusai/locus-cron)packages/mcp: MCP server management (@locusai/locus-mcp)packages/gateway: Channel-agnostic message gateway (@locusai/locus-gateway)packages/pm2: PM2 process management (@locusai/locus-pm2)packages/shared: Shared types and utilitiesapps/www: The marketing and documentation website
Locus requires Bun for development.
# Install dependencies
bun install- GitHub CLI (
gh): Required for all GitHub operations. Install from cli.github.com - AI Agent CLI: Either Claude Code or OpenAI Codex
- Authenticate with GitHub:
gh auth login
# Run the CLI from source
bun run simulate <command>
# Example: initialize Locus in a test project
bun run simulate init --dir /path/to/test-project# Build all packages (SDK, Telegram, CLI)
bun run build:packages
# Build individual packages
bun run build:sdk
bun run build:telegram
bun run build:clicd apps/www && bun run devWe use Biome for linting and formatting.
# Check for lint errors
bun run lint
# Automatically fix and format
bun run format
# Run type checks
bun run typecheckCommunity packages extend Locus with new integrations (Slack, Jira, Discord, etc.). All packages live inside this monorepo under packages/ and are published to npm through our automated release pipeline.
- Create your package in
packages/<name>/ - Follow the naming convention:
@locusai/locus-<name> - Use the
@locusai/sdkfor config, logging, and CLI invocation - Test locally with
locus pkg <name> - Submit a pull request
See the Package Author Guide for the complete walkthrough, including:
- Package structure and required fields
package.jsontemplate with all required fields- SDK usage (config, invocation, logging)
- Step-by-step instructions for creating a new package
- Pre-submission checklist
The Telegram package (packages/telegram/) is the canonical example. Study it for naming, structure, build scripts, and README format.
- Fork the repository.
- Create a feature branch (
git checkout -b feat/amazing-feature). - Commit your changes (
git commit -m 'feat: add amazing feature'). - Push to the branch (
git push origin feat/amazing-feature). - Open a Pull Request.
We use Changesets for version management.
When you create a PR that should trigger a version bump, run:
bun changesetThis will prompt you to choose which packages to bump (usually @locusai/cli) and the type of change (patch/minor/major). It creates a small file in .changeset/.
We use a GitHub Action that automatically:
- Creates a "Version Packages" PR when changesets are detected on
master. - Publishes to NPM when that "Version Packages" PR is merged back into
master.
To publish manually, you would need NPM_TOKEN and run:
bun run release- GitHub-Native: All state lives in GitHub (issues, milestones, PRs). No external databases or APIs.
- Zero Infrastructure: No servers, no accounts, no cloud dashboard. Everything runs locally via the CLI.
- Agent-Centric: Every feature should be accessible via CLI commands that AI agents can execute.
- Transparent: Use human-readable formats (Markdown/JSON) where possible.