How to Contribute
This guide covers the development workflow, coding conventions, and pull request process for contributing to Axiom.
For a quick overview of ways to get involved, see the Getting Started > How to Contribute page.
Development Setup
- Fork the repository on GitHub
- Clone your fork:
- Start development mode:
- Open
http://localhost:9191and verify the UI loads
See the Building Axiom guide for prerequisites and build details.
Code Organization
When making changes, use this guide to find the right module:
| Change | Module |
|---|---|
| REST API endpoint | common/api (OpenAPI spec) + app/rest/ (implementation) |
| Domain entity or lifecycle | core/ |
| Manager behavior | manager/ |
| Claude Code agent | agents/claude-code/ |
| OpenCode agent | agents/opencode/ |
| GitHub Copilot CLI agent | agents/copilot/ |
| GitHub polling | events/github/ |
| Jira polling | events/jira/ |
| Event stream routing, workflow, and pipeline orchestration | app/ (EventStreamOrchestrator, TaskExecutionService, WorkflowExecutionService, etc.) |
| UI page or component | ui/src/pages/ or ui/src/components/ |
| API client functions | ui/src/config/api.ts |
| Database migration | app/src/main/resources/db/migration/ |
Coding Conventions
Java (Backend)
- Follow existing Quarkus patterns:
@ApplicationScoped,@Inject,@ConfigProperty,@Scheduled - Use Panache active record for entities (no separate DAO/repository layer)
- Use builders for configuration objects (
AgentRequest.Builder, etc.) - Async work returns
CompletableFuture - Keep transactional boundaries small — one
@Transactionalmethod per database operation
TypeScript (Frontend)
- Use PatternFly components — don't introduce other UI libraries
- API calls go in
ui/src/config/api.ts - Pages go in
ui/src/pages/, reusable components inui/src/components/ - Run
npm run build(tsc -b && vite build) to catch type errors before committing
Commit Message Format
Use conventional commits:
| Prefix | Usage |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
docs: |
Documentation only |
refactor: |
Code restructuring without behavior change |
test: |
Adding or updating tests |
chore: |
Dependencies, tooling, CI |
Examples:
feat: add Jira connection polling
fix: resolve timeout in Claude Code subprocess
docs: add extending-axiom developer guide
Pull Request Workflow
- Create a branch from
main: - Make your changes following the conventions above
- Test locally:
mvn test— run backend unit testscd ui && npm run build— type-check the frontend./dev.sh— verify the change works end-to-end- Commit with a conventional commit message
- Push and open a pull request against
main - Describe what the PR does and why, and reference related issues (e.g. "Fixes #42")
PR Guidelines
- Keep PRs focused on a single feature or fix
- Update documentation if the change affects user-facing behavior
- Ensure CI checks pass
- Be responsive to review feedback
All submissions require code review before merging.
Testing
Unit Tests
Standard Maven tests — run with mvn test from the project root or a specific module
directory.
Integration Tests
Some tests require a running AI agent CLI. These are gated behind an environment variable:
This requires the claude CLI on your PATH and a valid ANTHROPIC_API_KEY.
Documentation
The documentation site uses MkDocs with the Material for MkDocs theme.
Local Preview
This starts a local server at http://localhost:8000 with live reload.
Adding a Page
- Create a Markdown file in the appropriate
docs/subdirectory - Add a nav entry in
mkdocs.yml - Verify the build:
python3 -m mkdocs build --strict