Pre-heat the oven to 425 degrees. Line a baking sheet with aluminum foil.
Rub the potatoes all over with about 2 teaspoons of the olive oil, season with salt and pepper, and pierce each about 6 times with the tines of a fork. (This will allow moisture to escape while the potatoes bake.) Bake for about 1 hour, turning the potatoes every 20 minutes, until the skins feel crisp but the flesh beneath is soft.
Meanwhile, prepare the filling. Heat a large skillet over medium-high heat. When hot, add the beef and cook for about 5 minutes, stirring and breaking up the meat into small pieces with a spatula, until no longer pink. Transfer the beef to a fine mesh strainer to drain the excess fat. Wipe out the skillet and return it to the stove.
Heat 1 tablespoon of olive oil in the skillet. When the oil is shimmering, add the onions and carrots. Cook until the onions become translucent and the carrots have softened, about 5-7 minutes. (If the vegetables start to brown, reduce the heat to medium.) Stir in the garlic.
Return the strained beef to the pan and sprinkle with the flour. Cook for 1 minute, then stir in the tomato paste, soy sauce, Worcestershire and fresh thyme. Cook for 1 minute (just to remove the bite from the tomato paste), then add the beef broth. Reduce the heat to a simmer, and cook for about 5 minutes until the filling has thickened slightly. Stir in the peas and cook for 2-3 minutes just until thawed. Cover the skillet with a lid and keep warm until ready to use.
Split the baked potatoes almost in half lengthwise (you still want them to remain intact on their undersides), drizzle the inside of each with a teaspoon of olive oil, and sprinkle with salt and pepper. Roughly mash the flesh with a fork. Fold a tablespoon of Gruyère into each potato’s mash. Load each potato with a quarter of the beef filling (some will come out the sides, and that’s okay!) and top with the remaining cheese. Return to the oven for 5 minutes just until the cheese has melted. Serve warm.