# AutoGPT Platform Contribution Guide This guide provides context for Codex when updating the **autogpt_platform** folder. ## Directory overview - `autogpt_platform/backend` – FastAPI based backend service. - `autogpt_platform/autogpt_libs` – Shared Python libraries. - `autogpt_platform/frontend` – Next.js + Typescript frontend. - `autogpt_platform/docker-compose.yml` – development stack. See `docs/content/platform/getting-started.md` for setup instructions. ## Code style - Format Python code with `poetry run format`. - Format frontend code using `pnpm format`. ## Frontend guidelines: See `/frontend/CONTRIBUTING.md` for complete patterns. Quick reference: 1. **Pages**: Create in `src/app/(platform)/feature-name/page.tsx` - Add `usePageName.ts` hook for logic - Put sub-components in local `components/` folder 2. **Components**: Structure as `ComponentName/ComponentName.tsx` + `useComponentName.ts` + `helpers.ts` - Use design system components from `src/components/` (atoms, molecules, organisms) - Never use `src/components/__legacy__/*` 3. **Data fetching**: Use generated API hooks from `@/app/api/__generated__/endpoints/` - Regenerate with `pnpm generate:api` - Pattern: `use{Method}{Version}{OperationName}` 4. **Styling**: Tailwind CSS only, use design tokens, Phosphor Icons only 5. **Testing**: Add Storybook stories for new components, Playwright for E2E 6. **Code conventions**: Function declarations (not arrow functions) for components/handlers - Component props should be `interface Props { ... }` (not exported) unless the interface needs to be used outside the component - Separate render logic from business logic (component.tsx + useComponent.ts + helpers.ts) - Colocate state when possible and avoid creating large components, use sub-components ( local `/components` folder next to the parent component ) when sensible - Avoid large hooks, abstract logic into `helpers.ts` files when sensible - Use function declarations for components, arrow functions only for callbacks - No barrel files or `index.ts` re-exports - Do not use `useCallback` or `useMemo` unless strictly needed - Avoid comments at all times unless the code is very complex ## Testing - Backend: `poetry run test` (runs pytest with a docker based postgres + prisma). - Frontend: `pnpm test` or `pnpm test-ui` for Playwright tests. See `docs/content/platform/contributing/tests.md` for tips. Always run the relevant linters and tests before committing. Use conventional commit messages for all commits (e.g. `feat(backend): add API`). Types: - feat - fix - refactor - ci - dx (developer experience) Scopes: - platform - platform/library - platform/marketplace - backend - backend/executor - frontend - frontend/library - frontend/marketplace - blocks ## Pull requests - Use the template in `.github/PULL_REQUEST_TEMPLATE.md`. - Rely on the pre-commit checks for linting and formatting - Fill out the **Changes** section and the checklist. - Use conventional commit titles with a scope (e.g. `feat(frontend): add feature`). - Keep out-of-scope changes under 20% of the PR. - Ensure PR descriptions are complete. - For changes touching `data/*.py`, validate user ID checks or explain why not needed. - If adding protected frontend routes, update `frontend/lib/supabase/middleware.ts`. - Use the linear ticket branch structure if given codex/open-1668-resume-dropped-runs