It is highly recommended to use homemade beef stock for this recipe. Although it takes a little planning ahead and a bit more time, it is worth it. There will be plenty of stock to store in the freezer for the next time a French onion soup craving hits.
In a large pot with a fitted lid, over medium-high heat, add butter and onions. Stir to coat onions in butter and sauté for about 3-5 minutes, until the onions start to become tender.
Reduce the heat to medium-low, stir onions, cover the pot, and let the onions cook slowly for about 15 minutes, stirring occasionally. The onions should begin to caramelize and brown. Continue to check on the onions and stir as needed to avoid sticking and burning. Reduce heat if needed as onions caramelize best when cooked low and slow.
Once the onions are browned and very tender, add garlic and sauté for about 1-2 minutes, until fragrant.
Add beef stock or broth, whole thyme sprigs, sage, bay leaves, salt, pepper, and wine. Stir to combine ingredients, cover, and let simmer for about 10-15 minutes.
Preheat the oven broiler on high. Divide the cooked soup into each bowl. Add two slices of baguette on top of each bowl, layer with cheese, and place bowls on a baking sheet for easy placement and removal into the oven, and to catch any dripping cheese.
Place the baking sheet with the bowls on it into the oven and broil for about 2-3 minutes, until the cheese is melted and begins to slightly bubble. Serve piping hot.