Thanks for helping improve Omnara. Bug reports, documentation fixes, feature ideas, and code contributions are welcome.
Follow the README self-host steps for local setup. Report vulnerabilities through SECURITY.md, not a public issue.
- Open an issue before starting a substantial change so we can agree on the direction.
- Keep each pull request focused on one problem.
- Use a conventional title accepted by
the PR title configuration, such as
fix: handle expired sessionsorfeat(api): add agent filtering. - Run the relevant checks described in Development.
Source development requires the Go version declared in go.mod,
Node.js 24 or newer with Corepack, ripgrep (rg on PATH), and Docker with
Compose.
make run-worker builds the sandbox launcher. File search and scripted
edits require a Linux worker; see the
worker prerequisites.
Run the fast repository gate:
make verifyTo include React Doctor against the current branch changes, run
make web-check-all.
Run database-backed integration tests:
make test-integrationRun deterministic service end-to-end tests:
make test-service-e2eProvider-backed live tests are available through the make test-live-* targets
and require the corresponding credentials. CI runs them on every push to main;
to run them on a pull request, ask a maintainer to add the live-tests label.
Pull requests from forks do not receive the provider credentials.
We welcome sandbox providers, model providers, and integrations with services such as Slack, Discord, or GitHub.
- Model providers. Omnara already works with any model behind an OpenAI Responses, OpenAI Chat Completions, or Anthropic Messages compatible endpoint; users set the base URL, endpoint path, and authentication (see Model providers). Code changes are only needed for an API format or preset that does not fit.
- Integrations. Your service can connect through the public API as a custom integration, with nothing to merge here.
- Not sure it fits? Open an issue to ask first, or go straight to a pull request.
- Follow the structure of existing integrations of the same kind, such as
internal/machinepool/providers/<name>/for sandbox providers orinternal/integration/<name>/for integrations. Sandbox providers include aTest<Name>ProviderLiveSmoketest inmake test-live-sandbox-providers. - Enable "Allow edits by maintainers".
- Share test credentials or a test account with the maintainers privately, never in the pull request, so live tests can run.
Maintainers handle the last mile. We either comment that the pull request is not close to what we can merge, or finish it ourselves on your branch: tests, docs pages, and fixes. Maintainers decide whether to merge. When we do, you remain the commit author, and maintainers who contributed are added as co-authors. After merging, we maintain the integration, list it in the docs and the README, and announce it in the changelog.
Publish an Omnara setup page in your own docs or guides, linking to the matching Omnara docs page, and keep it current.
We keep integrations working as long as the service is available and we can test it. If an integration stops working, test access runs out, or the setup page on your side moves or comes down, we will reach out before changing anything, and we announce any deprecation in the changelog.
Do not edit generated files by hand. After changing the OpenAPI contract, run:
make openapi-generate
make docs-openapi
make web-generateAfter changing SQL queries, run:
make sqlc-generateCommit the resulting generated changes with the source change.
By submitting a contribution, you agree that it may be distributed under the Apache License 2.0.
