Thanks for your interest in making Forge better! Forge aims to be a production-grade, enterprise-trustworthy multi-agent platform, so we hold the core to a high bar: typed, tested, and secure by default. This guide gets you productive fast.
Not sure where to start? These areas are well-suited for first-time contributors:
- New provider — add Ollama, Bedrock, or Vertex by implementing one method (
ModelProvider.complete()). Seeforge/models/providers/anthropic.pyas the reference. - New built-in tool — add a useful
@toolfunction underforge/tools/builtin/. Seeforge/tools/builtin/calculator.pyas the reference. - Durable memory backend — implement
MemoryABC for SQLite-VSS, pgvector, or Redis. Seeforge/memory/base.pyfor the interface. - New routing strategy — add a strategy to
forge/models/router.py. The interface is small and well-typed. - Example workflow — add a runnable script under
examples/showing Forge solving a real business problem.
All contributions must pass pytest -q, mypy forge, and ruff check . before merging.
- Keep it typed. The core passes
mypy --strict. New code should too. - Keep it tested. Add tests for new behavior; the suite runs offline (no API key, no network) and must stay that way for unit tests.
- Secure by default. New tools that touch the network, filesystem, or other
side effects must be marked
dangerous=Trueso the sandbox gates them. - No secrets, ever. Don't log API keys or PII; route sensitive values through the redactor.
- Pass code review. Every change is reviewed against the Code Review checklist before it merges — run it on your own diff first.
git clone https://github.com/sekacorn/AgentForge.git
cd AgentForge
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[all,dev]"pytest # fast, hermetic, offline
ruff check . # lint
ruff format . # format
mypy forge # strict typesPlease make sure all four are green before opening a PR.
Great first contributions, roughly in order of impact:
| Area | What it looks like |
|---|---|
| New providers | Implement ModelProvider.complete (see forge/models/providers/). OpenAI, Bedrock, Vertex, Ollama all welcome. |
| New tools | A @tool-decorated function in forge/tools/builtin/. Mark side-effecting ones dangerous=True. |
| Memory backends | Implement Memory (add/search/clear) over pgvector, Redis, etc. |
| Routing strategies | Extend ModelRouter with new selection logic. |
| Docs & examples | Runnable scripts in examples/, or clarity fixes in the README. |
Orchestratoris the entry point; it owns shared services and applies access control, sanitization, and accounting around every run.- Agents (
Agent,Supervisor) implement behavior on top ofBaseAgent, which centralizes model invocation, routing, metering, and budget checks. - Cross-cutting concerns — the event bus, usage tracker, audit log, and redactor — observe the run without the agents needing to know about them.
A new feature usually means: add/extend a component, register it, write a test
that exercises it via the Orchestrator (offline), and document it.
- Write clear, imperative commit messages describing the change and the why.
- Keep PRs focused; smaller is easier to review and ship.
- Link any related issue and describe how you tested.
Be kind, be constructive, assume good faith. We want Forge to be a welcoming project for contributors of every background and experience level.
By contributing, you agree that your contributions are licensed under the project's Apache License 2.0.
Releases are published to PyPI automatically by GitHub Actions using a PyPI Trusted Publisher (OIDC) — no API tokens are stored anywhere. To cut a release:
- Bump the version (updates
pyproject.tomlandforge/_version.py):python scripts/bump_version.py X.Y.Z
- Commit the bump:
git commit -m "chore: bump version to X.Y.Z" - Tag the release:
git tag vX.Y.Z
- Push the commit and the tag:
git push && git push --tags - The
Releaseworkflow builds the package and publishes it to PyPI automatically via Trusted Publisher.