**Sift dry ingredients** In a bowl, sift together almond flour, powdered sugar, and cocoa powder. Discard any coarse bits.
**Whip egg whites** In a clean, grease-free mixing bowl, beat the egg whites and salt on medium speed until foamy. Gradually add granulated sugar while mixing. Increase to high speed and whip until stiff, glossy peaks form, about 2–3 minutes.
**Macaronage** Gently fold the sifted dry mixture into the beaten egg whites in two or three additions. Use a spatula to fold just until the batter flows in a thick ribbon and settles into itself within about 10 seconds. Do not overmix.
**Pipe shells** Transfer the batter to a piping bag fitted with a round tip. Pipe small circles (about 1–1.5 inches in diameter) onto parchment-lined or silicone-lined baking sheets, spacing them 1 inch apart. Tap the baking sheets on the counter a few times to release any air bubbles.
**Rest shells** Let the piped shells sit at room temperature for 30–60 minutes, or until they form a dry film on top. Preheat the oven to 300°F (150°C).
**Bake** Bake one sheet at a time for 14–16 minutes, rotating halfway through. The shells are done when they have formed “feet” and the tops are set. Cool completely on the baking sheet before removing.
**Make peanut butter filling** In a bowl, beat peanut butter and softened butter until smooth. Gradually add powdered sugar and a pinch of salt. If the filling is too stiff, mix in milk or cream, 1 tablespoon at a time, until spreadable.
**Assemble macarons** Pair shells of similar size. Pipe or spoon a small amount of peanut butter filling onto one shell and gently sandwich with the other.