add brings in something new. upgrade refreshes what is already there, using the exact selection the project was generated with.
cd my-app npx ai-project-bootstrap upgrade npx ai-project-bootstrap upgrade --dry-run npx ai-project-bootstrap upgrade --dir ../my-app
Edit the aiTools array in ai-project.config.json and upgrade again. A config saved before that question existed has no aiTools key at all, which is treated as Cursor plus Claude Code — the original behaviour — not as 'nothing selected'.
The same fingerprint comparison add uses: unchanged since generation means safe to overwrite; changed means left alone, always.