Thank you for your interest in contributing to Autonoma AI! We welcome contributions from the community and are grateful for any help you can provide.
Please read this guide carefully before submitting your contribution.
- Code of Conduct
- Getting Started
- Development Workflow
- Commit Convention
- Pull Requests
- Issues
- Coding Standards
- Project Structure
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to conduct@autonoma.app.
- Node.js >= 24
- pnpm 10.x (run
corepack enableto use the version pinned inpackage.json) - Docker (for PostgreSQL and Redis)
- Fork and clone the repository:
git clone https://github.com/<your-username>/agent.git
cd agent- Install dependencies:
pnpm install- Start infrastructure (PostgreSQL and Redis):
docker compose up -d- Configure environment variables:
cp .env.example .envFill in the required values. See .env.example for the full list grouped by service. At minimum you need DATABASE_URL, REDIS_URL, and BETTER_AUTH_SECRET.
- Set up the database:
pnpm db:generate
pnpm db:migrate- Start the development servers:
pnpm devThis starts the API (port 4000) and UI (port 3000).
- Create a new branch from
main:
git checkout -b feat/my-feature- Make your changes and verify everything works:
pnpm typecheck # Type checking
pnpm lint # Linting
pnpm test # Tests
pnpm build # Full build-
Commit your changes following the commit convention.
-
Push your branch and open a Pull Request.
We use Conventional Commits for all commits and PR titles. This enables automated changelog generation, semantic versioning, and a clean git history.
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
| Type | Description |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation changes only |
style |
Changes that do not affect the meaning of the code (formatting, white-space, etc.) |
refactor |
A code change that neither fixes a bug nor adds a feature |
perf |
A code change that improves performance |
test |
Adding missing tests or correcting existing tests |
build |
Changes that affect the build system or external dependencies |
ci |
Changes to CI configuration files and scripts |
chore |
Other changes that don't modify src or test files |
revert |
Reverts a previous commit |
The scope should be the name of the package or app affected (as perceived by the person reading the changelog):
api,ui,engine-web,engine-mobile,docsai,db,types,engine,blacklight,storage,loggerworkflow,k8s,device-lock,try,analytics
feat(api): add webhook endpoint for GitHub App events
fix(engine-web): resolve timeout on network idle detection
docs: update README with setup instructions
refactor(ai): extract point detection into separate module
test(db): add integration tests for user repository
ci: add type checking step to PR workflow
chore: update dependencies
feat(ui)!: redesign test run dashboard
Append ! after the type/scope to indicate a breaking change, and include a BREAKING CHANGE: footer:
feat(api)!: change authentication flow to OAuth-only
BREAKING CHANGE: Basic auth endpoints have been removed.
All clients must use OAuth2 for authentication.
We actively welcome Pull Requests. Before submitting:
- Bug fixes - Search existing Issues to make sure the bug has been reported. If not, open one first.
- New features - Open a Discussion or Issue first to propose and discuss the feature. Unvetted features may be closed.
- Good first issues - If you're new to the project, look for issues labeled
good first issue.
- Ensure no one else is already working on the same Issue. If an Issue exists, comment that you'd like to work on it.
- Fork the repo, create your branch from
main, and make your changes. - Your PR title must follow the Conventional Commits format. This is enforced by CI.
- Fill in the PR template with:
- A clear summary of what changed and why
- Steps to test your changes
- Screenshots or recordings for UI changes
- Make sure all checks pass before requesting a review:
pnpm typecheck
pnpm lint
pnpm test
pnpm build- A maintainer will review your PR and may request changes.
- Please respond to review feedback promptly.
- Once approved, a maintainer will merge your PR.
- We prefer squash merges to keep the git history clean.
When filing a bug report, include:
- A clear and descriptive title
- Steps to reproduce the issue
- Expected behavior vs actual behavior
- Environment details (OS, Node version, browser if applicable)
- Relevant logs or error messages
- Screenshots or recordings if applicable
Feature requests are welcome. Please provide:
- A clear description of the problem you're trying to solve
- Your proposed solution (if any)
- Any alternatives you've considered
This project enforces strict coding standards. Please review the full conventions in CLAUDE.md, but here are the key points:
- ESM-only - no CommonJS. Every
package.jsonhas"type": "module". - Strictest TypeScript - all strict flags enabled, including
noUncheckedIndexedAccessandexactOptionalPropertyTypes. - No
.jsextensions in imports - use bare specifiers without file extensions.
Use fx from @autonoma/try for all fallible operations:
import { fx } from "@autonoma/try";
const [result, error] = await fx.runAsync(() => fetchData());
if (error != null) return fx.failure(error);
return fx.success(result);- One export per file - a file exports exactly one thing.
- Prefer
undefinedovernull- use optional properties (?) instead of| null. - Always
??instead of||- and!= null/== nullinstead of truthy/falsy checks. - Early returns - reduce nesting with guard clauses.
- Extract complex conditions into named variables.
- No complex destructuring or spread - build objects explicitly.
- Vitest for all tests.
- Prefer integration tests over unit tests.
- Test files go in
test/directories mirroringsrc/.
Before adding a dependency, check pnpm-workspace.yaml for the catalog. If the dependency exists there, use "catalog:" as the version specifier.
apps/
api/ Hono + tRPC API server
ui/ Vite + React 19 SPA
engine-web/ Playwright web test execution
engine-mobile/ Appium mobile test execution
docs/ Documentation site
jobs/ Background jobs
packages/
ai/ AI primitives
db/ Prisma schema + client
types/ Shared Zod schemas and types
engine/ Execution agent core
blacklight/ UI component library
try/ Error handling
storage/ S3 file storage
logger/ Sentry logging
analytics/ PostHog analytics
device-lock/ Redis device locking
k8s/ Kubernetes helpers
workflow/ Argo workflow builders
utils/ Shared utilities
For detailed architecture documentation, see CLAUDE.md and the docs site.
Thank you for contributing!