--- /dev/null
+using System;
+using Dalamud.Plugin;
+using Dalamud.Plugin.Ipc;
+using Questionable.Controller;
+
+namespace Questionable.External;
+
+internal sealed class QuestionableIpc : IDisposable
+{
+    private const string IpcIsRunning = "Questionable.IsRunning";
+    private const string IpcGetCurrentQuestId = "Questionable.GetCurrentQuestId";
+
+    private readonly ICallGateProvider<bool> _isRunning;
+    private readonly ICallGateProvider<string?> _getCurrentQuestId;
+
+    public QuestionableIpc(QuestController questController, IDalamudPluginInterface pluginInterface)
+    {
+        _isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning);
+        _isRunning.RegisterFunc(() => questController.IsRunning);
+
+        _getCurrentQuestId = pluginInterface.GetIpcProvider<string?>(IpcGetCurrentQuestId);
+        _getCurrentQuestId.RegisterFunc(() => questController.CurrentQuest?.Quest.Id.ToString());
+    }
+
+
+    public void Dispose()
+    {
+        _getCurrentQuestId.UnregisterFunc();
+        _isRunning.UnregisterFunc();
+    }
+}
 
         serviceCollection.AddSingleton<LifestreamIpc>();
         serviceCollection.AddSingleton<YesAlreadyIpc>();
         serviceCollection.AddSingleton<ArtisanIpc>();
+        serviceCollection.AddSingleton<QuestionableIpc>();
     }
 
     private static void AddTaskFactories(ServiceCollection serviceCollection)
         serviceProvider.GetRequiredService<CreditsController>();
         serviceProvider.GetRequiredService<HelpUiController>();
         serviceProvider.GetRequiredService<LeveUiController>();
+        serviceProvider.GetRequiredService<QuestionableIpc>();
         serviceProvider.GetRequiredService<DalamudInitializer>();
     }