Skip to content

Contributing

Gee-Code is open-source and we welcome contributions. This guide covers everything you need to get from zero to a merged pull request.

  • Python 3.10+ — the runtime and all backend code
  • Node.js 18+ — for the MCP server layer and the docs site
  • Git — with a GitHub account
  • A working installation of Gee-Code (see Installation)

Fork the repository on GitHub, then clone your fork:

Terminal window
git clone https://github.com/<your-username>/gee-code.git
cd gee-code
Terminal window
python -m venv .venv
source .venv/bin/activate
Terminal window
pip install -e ".[dev]"

This installs gee-code as an editable package with development dependencies (pytest, ruff, etc.).

Terminal window
# Token counting support
pip install -e ".[tokens]"
# PDF reading support
pip install -e ".[pdf]"
# Everything
pip install -e ".[all]"

If you’re working on browser tools:

Terminal window
gee-code setup browser
Terminal window
gee-code --version
gee-code setup check
gee-code/
├── gee_code/ # Main Python package
│ ├── ai/ # AI provider adapters and model routing
│ ├── agents/ # Agent system, flights, swarms
│ ├── auth/ # Authentication
│ ├── beads/ # Task graph planning and execution
│ ├── chat/ # Chat session management
│ ├── companion/ # Companion server (daemon, tunnel)
│ ├── context/ # Context management and extractors
│ ├── events/ # Event system
│ ├── explore/ # Codebase exploration
│ ├── mcp/ # MCP server implementation
│ ├── memory/ # Persistent memory
│ ├── modes/ # Autonomous modes and daemon
│ ├── permissions/ # Permission system
│ ├── plugins/ # Plugin loading and management
│ ├── rlm/ # RLM sandbox
│ ├── setup/ # Setup and dependency management
│ ├── surfaces/ # UI surfaces (web, terminal)
│ ├── tasks/ # Background task management
│ ├── tools/ # 100+ built-in tools
│ └── ui/ # Terminal UI components
├── web-surface/ # Web UI (Vite + TypeScript)
├── docs-site/ # Documentation (Astro Starlight)
├── tests/ # Test suite
└── scripts/ # Build and release scripts

We use Ruff for linting and formatting.

  • Line length: 100 characters
  • Target version: Python 3.10
  • Lint rules: E, F, I, N, W (with E501 ignored since we handle line length at 100)

Run the linter:

Terminal window
ruff check gee_code/
ruff format --check gee_code/

Auto-fix issues:

Terminal window
ruff check --fix gee_code/
ruff format gee_code/
Terminal window
cd web-surface
npm run lint
npm run build

Write clear, descriptive commit messages. We use a conventional format:

feat(tools): add screenshot tool for DevBrowser
fix(memory): prevent duplicate memory entries
docs(getting-started): update installation steps
chore(deps): bump anthropic to 0.75.0

Prefixes: feat, fix, docs, chore, refactor, test, perf

Scope (optional): the subsystem affected — tools, agents, memory, modes, ai, mcp, beads, companion, docs, web-surface, etc.

Terminal window
# Run the full suite
pytest
# Run all tests including integration
bash tests/run_all_tests.sh
# Run a specific test file
pytest tests/test_rlm_sandbox.py
# Run with verbose output
pytest -v

Tests use pytest with pytest-asyncio for async test support. The test configuration is in pyproject.toml.

Terminal window
git checkout -b feat/your-feature-name

Follow the code standards above. Keep changes focused — one feature or fix per branch.

Run the relevant tests before submitting. If you’re adding a new feature, add tests for it.

Push your branch and open a PR against main. Include:

  • A clear description of what changed and why
  • Screenshots or terminal output if the change is visual or behavioral
  • Any relevant issue numbers
  • Documentation improvements — typos, clarifications, missing examples
  • Tool descriptions — better help text for existing tools
  • Bug reports — detailed reproduction steps help enormously
  • New tools — add capabilities to gee_code/tools/
  • Provider adapters — support for additional AI models in gee_code/ai/
  • Skills — reusable skill packages (see Creating Skills)
  • Plugins — bundled extensions (see Building Plugins)

For anything beyond a small fix, open an issue or discussion first. This saves time — we can confirm the change is wanted and point you toward the right approach before you write code.

The docs site lives in docs-site/ and uses Astro Starlight.

Terminal window
cd docs-site
npm install
npm run dev

The site will be available at http://localhost:4321.

Terminal window
cd docs-site
npm run build

This catches broken links, missing frontmatter, and other issues. Always build before submitting doc changes.

  • Use the existing page structure as a guide — frontmatter with title and description, then content
  • Keep language direct and concrete
  • Include code examples where they help
  • Link to related pages using absolute paths (e.g., /getting-started/installation/)

Releases are managed by the core team using the scripts in scripts/:

Terminal window
# Build a release package
./scripts/build-release.sh
# Create a release (dry-run first)
./scripts/release.sh --dry-run --minor

Contributors don’t need to worry about versioning — we handle that during the merge.