Contributing to Cocode

August 17, 2026 · View on GitHub

Thanks for taking the time to contribute. This document covers what you need to know before opening an issue or a pull request.

By participating you agree to the Code of Conduct.

Before you start

Security issues do not belong in the public tracker. If you have found a vulnerability, follow SECURITY.md instead.

For anything larger than a bug fix, open an issue first and describe the problem before writing code. Substantial changes to architecture, wire protocols, or the design system should land as an RFC in the relevant component's .dev/rfc/ directory — cocode-gui/.dev/rfc/ or cocode-tui/.dev/rfc/ — and be discussed before implementation. This saves you from building something that conflicts with work already in flight.

Know which component you are changing

The repository holds three independently installed components, and a change usually belongs to exactly one of them.

ComponentOwns
cocode-guiDesktop and web UI, design system, Electron shell
cocode-tuiTerminal UI and its JSON-RPC client
cocode-host-supervisorHost lifecycle, lease protocol, JSON-RPC Host plugin

The agent runtime is not in this repository. @deepseek-ai/dsh is a pinned npm dependency of cocode-host-supervisor, and upstream work belongs in DeepSeek Harness. If a feature needs a runtime capability that does not exist yet, land the capability upstream first, then consume the wire API here.

AGENTS.md describes these boundaries in more detail. cocode-gui/AGENTS.md is the binding architecture contract for GUI code — DDD layering, IPC rules, TypeScript conventions, and the React and Tailwind baseline. Read it before touching cocode-gui/src.

Development setup

Each component installs separately. See the README for the Node.js and pnpm versions each one needs — they are not the same, and the GUI pins pnpm exactly.

make install-gui && make dev gui   # desktop workspace
make install-tui && make dev tui   # terminal client (needs a TTY)
make dev gui-web                   # browser-only GUI

make on its own lists every target.

Making a change

Keep changes minimal and scoped. Prefer the smallest edit that fixes the problem over a broad refactor that happens to include it. Do not leave deprecated code paths behind — update every call site instead.

New behavior should come with a test at the lowest useful layer: unit tests for domain rules, integration tests for adapters and IPC contracts, component tests for non-trivial UI behavior.

Do not commit build output. cocode-gui/packages/**/lib/, cocode-host-supervisor/runtime/, and the various dist/ and out/ trees are generated and gitignored.

Commit messages

Commits follow Conventional Commits, enforced by commitlint on the commit-msg hook. Headers are limited to 72 characters.

feat(gui): add diff preview to the approval panel
fix(tui): restore session after a dropped supervisor lease
docs: document DSH_SESSION_ROOT

Supported types: build, chore, ci, config, docs, feat, fix, major, perf, refactor, revert, style, test.

Write commit messages and code comments in English.

Checks

A pre-commit hook runs lint-staged for whichever components have staged files. Run the full checks for the component you changed before opening a pull request:

# cocode-gui
cd cocode-gui
corepack pnpm@10.34.5 format:check
corepack pnpm@10.34.5 typecheck
corepack pnpm@10.34.5 lint
corepack pnpm@10.34.5 test

# cocode-tui
cd cocode-tui
pnpm format:check && pnpm typecheck && pnpm lint && pnpm test

# cocode-host-supervisor
cd cocode-host-supervisor
pnpm typecheck && pnpm test

If a check cannot run because your environment does not satisfy the declared engines, say so in the pull request with the exact versions and failure. Do not relax the constraints to make it pass.

GUI changes that touch components or design tokens should be verified against cocode-gui/.dev/guide/design-system.html, which is the visual source of truth.

Pull requests

Describe what changed and why, link the issue it closes, and note anything you deliberately left out. Include before/after screenshots for visible UI changes. State which checks you ran.

Keep pull requests focused on one thing. Unrelated formatting churn makes review slower and is likely to be sent back.

License

By contributing, you agree that your contributions are licensed under the MIT License that covers this project.