Thank you for your interest in contributing! This project is a local web UI for managing Amp coding agent threads.
- Node.js 24+ (native modules require compilation)
- pnpm 10+ (
npm install -g pnpm) - Amp CLI installed and authenticated
External contributors: You don't have push access to this repo — that's normal for open source! You'll need to fork first, then clone your fork. See the workflow below.
-
Fork the repository — Click the "Fork" button on the repo page, or use the GitHub CLI:
gh repo fork block/thread-manager-for-amp --clone cd thread-manager-for-amp -
Install dependencies and start dev server:
pnpm install pnpm dev
- Make sure your fork is up to date:
git pull upstream main - Create a feature branch:
git checkout -b my-feature - Make your changes
- Run tests:
pnpm test - Run checks:
pnpm check(format check + lint + typecheck + build) - Commit with a descriptive message
- Push to your fork:
git push origin my-feature - Open a pull request from your fork back to
block/thread-manager-for-amp
src/— React frontend (Vite)server/— Node.js backend (vanilla HTTP + WebSocket)shared/— Shared TypeScript types between frontend and server
- TypeScript strict mode
- ES modules throughout
- React: functional components with hooks
- No Express — the server uses Node's built-in
httpmodule - Server route handlers return
trueif handled,falseto pass to the next handler - All modals use
BaseModalwrapper (role="dialog", focus trap, ESC-to-close) - All inputs require
aria-labelor associated<label> - Shared utilities (
stripAnsi,generateId,calculateCost) live inshared/ - Tests are co-located (
*.test.tsnext to source files)
- New API endpoint: Add route handler in
server/routes/, returntrueif handled - New modal: Use
BaseModalwrapper, addaria-labelto inputs - New shared utility: Add to
shared/with a co-located test file - New context: Add provider in
src/contexts/, mount insrc/main.tsx
- Use GitHub Issues for bug reports and feature requests
- Include your Node.js version, OS, and steps to reproduce
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.