Thanks for your interest in contributing to Pixel Agents! All contributions are welcome — features, bug fixes, documentation improvements, refactors, and more.
This project is licensed under the MIT License, so your contributions will be too. No CLA or DCO is required.
git clone https://github.com/pablodelucca/pixel-agents.git
cd pixel-agents
npm install
cd webview-ui && npm install && cd ..
npm run buildThen press F5 in VS Code to launch the Extension Development Host.
For development with live rebuilds, run:
npm run watchThis starts parallel watchers for both the extension backend (esbuild) and TypeScript type-checking.
Note: The webview (Vite) is not included in
watch— after changing webview code, runnpm run build:webviewor the fullnpm run build.
You can run the mocked Pixel Agent web app either from the CLI or from VS Code tasks.
From the repository root:
cd webview-ui
npm run devVite will print a local URL (typically http://localhost:5173) where the mocked app is available.
- Open the command palette and run Tasks: Run Task.
- Select Mocked Pixel Agent Dev Server.
- Open the local URL shown in the task terminal output (typically
http://localhost:5173).
| Directory | Description |
|---|---|
src/ |
Extension backend — Node.js, VS Code API |
webview-ui/ |
React + TypeScript frontend (separate Vite project) |
scripts/ |
Asset extraction and generation tooling |
assets/ |
Bundled sprites, catalog, and default layout |
No unused locals or parameters (noUnusedLocals and noUnusedParameters are enabled). All magic numbers and strings are centralized — don't add inline constants to source files:
- Extension backend:
src/constants.ts - Webview:
webview-ui/src/constants.ts - CSS variables:
webview-ui/src/index.css:rootblock (--pixel-*properties)
The project uses a pixel art aesthetic. All overlays should use:
- Sharp corners (
border-radius: 0) - Solid backgrounds and
2px solidborders - Hard offset shadows (
2px 2px 0px, no blur) — usevar(--pixel-shadow) - The FS Pixel Sans font (loaded in
index.css)
These conventions are enforced by custom ESLint rules (eslint-rules/pixel-agents-rules.mjs):
| Rule | Scope | What it checks |
|---|---|---|
no-inline-colors |
Extension + Webview | No hex/rgb/rgba/hsl/hsla literals outside constants.ts |
pixel-shadow |
Webview only | Box shadows must use var(--pixel-shadow) or 2px 2px 0px |
pixel-font |
Webview only | Font family must reference FS Pixel Sans |
These rules are set to warn — they won't block your PR but will flag violations for cleanup.
- Fork the repo and create a feature branch from
main - Make your changes
- Verify everything passes locally:
CI runs these same checks automatically on every PR.
npm run lint # Extension lint cd webview-ui && npm run lint && cd .. # Webview lint npm run build # Type check + esbuild + Vite
- Open a pull request against
mainwith:- A conventional commit PR title (e.g.
feat: add zoom controls,fix: character freezing on terminal close,refactor: extract pathfinding module). CI enforces this format — see Conventional Commits. - A clear description of what changed and why
- How you tested the changes (steps to reproduce / verify)
- Screenshots or GIFs for any UI changes
- A conventional commit PR title (e.g.
Note: PRs are merged using squash and merge — all commits in your PR are combined into a single commit on
main. Your PR title becomes the commit message, which is why the conventional commit format matters.
Open a bug report — the form will guide you through providing the details we need.
Have an idea? Open a feature request — the form will guide you through describing the problem and your proposed solution. You can also browse and join ongoing conversations in Discussions.
Please report security vulnerabilities privately — see SECURITY.md for details.
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.