Thanks for helping improve Airo. This guide is written for developers who want a clear path from "I found the repo" to "my PR is reviewable."
- Read the project README.
- Find an issue labeled
good first issueorhelp wanted. - If no issue fits, open one before making a non-trivial change.
- For features, bug fixes, architecture changes, and automation flows, follow
docs/agents/AGENT_POLICY.md.
Tiny typo fixes can go straight to a PR. Anything that changes behavior, architecture, CI, security posture, or user-facing documentation needs an issue.
High-signal beginner contributions usually look like this:
- Reproduce a bug and add exact device/OS/tool versions.
- Convert a vague issue into deterministic use cases and an automation flow.
- Improve setup docs after following them on a clean machine.
- Add a missing failure-path test for existing behavior.
- Fix accessibility labels, overflow, empty states, or copy in a tightly scoped UI.
- Add screenshots or notes to docs when they clarify real workflows.
- Reduce friction in local scripts without changing app behavior.
Avoid large drive-by rewrites. Small, reviewable PRs are much more likely to land.
git clone git@github.com:DevelopersCoffee/airo.git
cd airo
make setupPlatform setup:
make setup-android
make setup-ios
make setup-webUseful local commands:
make help
make format
make analyze
make test
make doctorRun only the checks relevant to your change when a full run is not practical, and document that scope in the PR.
Always start from the latest origin/main:
git fetch origin main
git worktree add -b codex/my-short-task ../airo-my-short-task origin/main
cd ../airo-my-short-taskUse short-lived branches. Keep each PR focused on one logical change.
Before implementation for any feature, bug fix, architecture change, or automation flow, the GitHub issue must include:
- Owning agent and impacted modules.
- Critical Agent gate.
- Cross-agent contract when more than one module or agent boundary is touched.
- Deterministic use cases.
- Automation flow.
- A framework/application/both classification.
- Confirmation that the task branch or worktree is based on latest
origin/main.
The policy lives in docs/agents/AGENT_POLICY.md.
Use it as the source of truth if this guide and the policy ever differ.
Before opening a PR:
- Link the issue.
- Keep the diff scoped.
- Run
make format. - Run
make analyzeand/or package-specific analysis when relevant. - Run
make testor the smallest deterministic test target that covers the change. - Update
docs/wikifor user-visible behavior, install, privacy, model, troubleshooting, file-type, finance, media, route, or platform changes. - Call out skipped checks and why they were skipped.
- Confirm no secrets, keystores, signing files, generated credentials, or personal data are committed.
Android Emulator usage must be explicitly accepted by the issue with
AIRO_ALLOW_ANDROID_EMULATOR=true. Otherwise use host-only checks, a physical
device, or a named simulator/device path.
For docs-only PRs, at minimum:
test -f README.md
test -f CONTRIBUTING.md
test -f CODE_OF_CONDUCT.md
rg "make setup|make analyze|make test|git worktree|pull request" README.md CONTRIBUTING.mdIf you add local links, make sure they point to files that exist.
Do not commit:
- API keys, access tokens, signing certificates, keystores, or passwords.
- Local configuration such as
app/android/key.properties. - Personal user data, private logs, screenshots with sensitive content, or production credentials.
Report vulnerabilities through SECURITY.md instead of opening a
public issue.
Maintainers optimize for changes that are:
- Small enough to review quickly.
- Grounded in an issue and deterministic acceptance criteria.
- Tested at the correct layer.
- Honest about limitations and skipped checks.
- Compatible with the framework/application ownership boundary.
When in doubt, open an issue with the problem and proposed shape before writing a large patch.