Thank you for your interest in contributing. xFire is an adversarial multi-agent security review tool — contributions that improve accuracy, reduce false positives, or extend pipeline coverage are especially welcome.
git clone https://github.com/Har1sh-k/xfire
cd xfire
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"Verify your setup:
make test # all 383+ unit tests should pass
make lint # ruff + mypyCheck open issues for ideas. Good first contributions:
- New skills (pre-compute context signals for agents)
- Additional test fixtures in
tests/fixtures/prs/ - Output format improvements (SARIF, markdown)
- Documentation improvements
- Fork the repo and create a branch from
main - Make your changes
- Add or update tests — all new code should have unit tests
- Run
make testandmake lint— both must pass - Open a pull request against
main
make test # all tests
make test-unit # unit tests only (fast, no network)Tests in tests/unit/ must not make real network or LLM calls. Use fixtures in tests/fixtures/ and mock adapters.
make lint # ruff + mypy (strict)
make format # auto-fix formatting with ruffSkills live in xfire/skills/. Each skill:
- Inherits from
BaseSkill(xfire/skills/base.py) - Implements
execute(repo_dir, changed_files) -> SkillResult - Returns a
SkillResultwith a markdowncontentstring injected into agent prompts - Is registered in
xfire/core/orchestrator.py:_run_skills() - Has a toggle in
xfire/config/defaults.pyunderagents.skills
Agent adapters live in xfire/agents/. Each adapter:
- Inherits from
BaseAgent(xfire/agents/base.py) - Implements
_call_cli()and_call_api()(or just one if the other isn't applicable) - Is registered in
xfire/agents/review_engine.pyandxfire/agents/debate_engine.py - Has a config section in
xfire/config/defaults.py
- Tests pass (
make test) - Lint passes (
make lint) - New functionality has unit tests
- Changes to prompts include evaluation against test fixtures
- PR description explains the change and its motivation
- Python 3.11+
- Line length: 120 (ruff)
- Type annotations on all public functions
structlogfor logging — neverprint()- Pydantic v2 for all data models
Open a GitHub Discussion or file an issue.