Prep the fish: Rinse the snapper with lime or lemon water and pat dry. Score each side with 2–3 shallow slashes. Season inside and out with salt, black pepper, and all-purpose seasoning.
Build the flavor base: Heat oil in a wide pan over medium.
Add onion, garlic, scallions, thyme, pimento, carrot, and bell pepper. Sauté 2–3 minutes until fragrant, then add tomato.
Add liquids: Pour in coconut milk and water. Stir in vinegar and butter if using.
Taste and adjust salt. Bring to a gentle simmer.
Add heat carefully: Add the Scotch bonnet whole for mild heat, or sliced for more kick. Keep seeds for maximum spice.
Steam the fish: Nestle the snapper into the pan.
Spoon sauce over the top. Cover and cook on low-medium for 12–15 minutes, turning once if needed, until the flesh is opaque and flakes easily.
Finish and serve: Baste with the sauce, remove the Scotch bonnet if you want less heat, and garnish with chopped herbs. Serve hot.