An Outlook add-in and set of supporting libraries to triage, tag, and file email quickly; visualize tasks; and apply ML-assisted classifiers (spam, triage, folder/category predictions) — all integrated into the Outlook Ribbon.
Target platform: Windows • Outlook desktop (Microsoft 365/2019+) • .NET Framework 4.8.1 • Visual Studio (recommended: 2022) with VSTO development tools.
- Features
- Solution layout
- Getting started
- Build & debug (VSTO add-in)
- Running the tests
- Configuration & storage
- Dependency updates (Dependabot)
- Common issues
- Contributing & branches
- License
-
Outlook Ribbon integration via the
TaskMasterVSTO add-in- Launch Quick Filer for keyboard-driven email filing and queueing
- SpamBayes: trainable Bayesian spam classifier (enable/disable, save/load state)
- Triage: A/B/C trainable classifier; precision controls; filter viewer
- Tags: apply/view people, project, topic tags via a dedicated viewer
- Task Visualization: tree/graph views to explore projects, people, topics
-
ML & analytics helpers
- Engines and utilities in
UtilitiesCS.EmailIntelligence(SpamBayes, Triage, folder/category predictors) - Uses Microsoft.ML, Deedle, and related data/ML dependencies
- Optional WebView2 hosting and Graph client utilities included in
UtilitiesCS
- Engines and utilities in
-
Outlook & filesystem tooling
- Rich Outlook interop helpers (Explorer/Inspector hooks, folder utilities, PST helpers)
- File/save helpers for model state and diagnostics (JSON snapshots, staging areas)
Top-level Visual Studio solution: TaskMaster.sln
Most projects target .NET Framework 4.8.1 and build as Class Library; the VSTO add-in (
TaskMaster) is a COM add-in loaded by Outlook.
| Project | Type | Purpose (one-liner) |
|---|---|---|
| TaskMaster | VSTO Add-in | Outlook add-in entrypoint (ThisAddIn, Ribbon wiring) orchestrating modules. |
| TaskMaster.Test | MSTest | Unit tests for add-in-level orchestration and contracts. |
| QuickFiler | Library (WinForms) | Keyboard-centric filing UI (Explorer integration, queues, viewers, controllers). |
| QuickFiler.Test | MSTest | Unit tests for QuickFiler controllers and helpers. |
| TaskVisualization | Library (WinForms) | Task/project/people/topic viewers, auto-assign context, Outlook links. |
| TaskVisualization.Test | MSTest | Unit tests for visualization components. |
| TaskTree | Library | Core tree models and operations used by viewers and classifiers. |
| Tags | Library (WinForms) | Tag controller & viewer for applying people/project/topic labels. |
| Tags.Test | MSTest | Unit tests for tag logic. |
| ToDoModel | Library | To-do, people/project data model; email capture, PST helpers, sorting utilities. |
| ToDoModel.Test | MSTest | Unit tests for to-do model & utilities. |
| UtilitiesCS | Library | Shared utilities: Outlook extensions, threading, serialization, EmailIntelligence (SpamBayes/Triage/multiclass engines), log4net, ML, Graph helpers. |
| UtilitiesCS.Test | MSTest | Unit tests for UtilitiesCS (mail helpers, file system helpers, etc.). |
| UtilitiesSwordfish.NET.General | Library | General helper library (collections, misc utilities). |
| UtilitiesSwordfish.Test | MSTest | Tests for Swordfish helpers. |
| SVGControl | Library (WinForms) | SVG rendering control used across UI projects. |
| SVGControl.Test | MSTest | Tests for SVG control. |
| VBFunctions | Library | Small VB-style helper functions (ported to C#). |
| VBFunctions.Test | MSTest | Tests for VB helper wrappers. |
The repo also contains
UtilitiesSwordfish/Swordfish.NET.slnfor the standalone sub-solution.
-
Windows 10/11
-
Microsoft Outlook (Microsoft 365 or 2019+) desktop installed
-
Visual Studio 2022 (recommended) with:
- Office/SharePoint development workload (installs VSTO tools)
- .NET desktop development
-
.NET Framework Developer Pack 4.8.1
-
Internet access to restore NuGet packages
- Clone the repository and open
TaskMaster.slnin Visual Studio. - Restore NuGet packages (VS usually auto-restores on open).
- Build the solution (Debug, Any CPU).
Projects use packages such as
Microsoft.ML,log4net,Newtonsoft.Json,ObjectListView.Official,Svg,Microsoft.Graph,WebView2.
Because TaskMaster is an Outlook add-in (OutputType=Library, VSTO), you debug by launching Outlook under the debugger:
- Right-click TaskMaster → Properties → Debug.
- Choose Start external program and browse to your Outlook executable, e.g.:
C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE - Press F5. Outlook starts, loads the add-in, and shows the TaskMaster Ribbon.
- Set breakpoints in
TaskMaster,QuickFiler,TaskVisualization, etc.
If Outlook is already running, close it before F5. For 64-bit Office, ensure the interop assemblies match your Office bitness.
The solution uses MSTest v3 with Microsoft.Testing.Platform.
- In Visual Studio, open Test Explorer → Run All.
- Or run at the command line via
vstest.console.exe(installed with VS) if needed.
This repository includes workspace settings under .vscode/ so you can stay on the existing Visual Studio solution/project model (TaskMaster.sln + *.csproj) while building and running tests from VS Code.
- Install recommended extensions when prompted:
ms-dotnettools.csdevkitms-dotnettools.csharp
- Use Terminal → Run Build Task to run
build: TaskMaster.sln (VS MSBuild). - Use Terminal → Run Task to run
test: MSTest (vstest.console). - You can also use the VS Code Testing view to discover and run MSTest tests once the C# extensions finish loading the solution.
Notes:
- The VS Code tasks discover
MSBuild.exeandvstest.console.exeusingvswhere, so they work from a regular VS Code terminal (no Developer Command Prompt required). - For these tasks, install Visual Studio 2022 (or Build Tools) with MSBuild + Test Platform components.
Test projects include:
*.Test projects for TaskMaster, QuickFiler, TaskVisualization, TaskTree, ToDoModel, UtilitiesCS, UtilitiesSwordfish, SVGControl, VBFunctions.
-
Logging: log4net (
log4net.config), enabled inTaskMaster(see assembly attribute). -
Classifier state (e.g., SpamBayes, Triage):
- Controllable from the Ribbon (Enable/Disable, Save, Save Local, Get Save Location).
- Saved via file helpers in
UtilitiesCS(JSON serialization + file path helper).
-
UI scaling: TreeListView and forms adjust pixel constants at startup for DPI scaling.
-
Packages bring optional capabilities (e.g., Microsoft.Graph, WebView2) used where available.
Privacy note: The add-in processes Outlook items locally. Saved classifier snapshots and diagnostics are written to your local filesystem; review the save location from the Ribbon before sharing files.
- Dependabot's NuGet updater cannot independently bump a transitive/indirect dependency beyond what its referencing primary dependency's own manifest supports. This is documented default ecosystem behavior (GitHub Docs, "About Dependabot security updates"), not a mechanism this repo's
.github/dependabot.ymlinvents. - The
semver-major-scopedignorerule set in.github/dependabot.yml— covering the eight Microsoft.NET-runtime-aligned package families (Microsoft.Extensions.*,Microsoft.Bcl.*,System.Text.Json,System.Drawing.Common,Microsoft.Graph*,Apache.Arrow*,Microsoft.Data.Analysis,Microsoft.ML*) — is this repo's defense against a future.NET Framework 4.8.1(net481) compatibility drop. It was adopted because no currently-published version of any package referenced in this repo has dropped net481 support (verified 2026-07-16; seedocs/features/active/2026-07-16-dependabot-net481-support-340/research/2026-07-16T16-10-dependabot-net481-support-research.md§4). Minor and patch updates for the same package families remain unaffected by this ignore rule. - The config scopes all 16
packages.configproject directories viadirectories: ["/*"](a single-segment wildcard matching every immediate-child directory of the repository root). A pre-decided fallback exists if post-merge verification shows under-coverage: the literal 16-entrydirectories:list documented indocs/features/active/2026-07-16-dependabot-net481-support-340/spec.mdAppendix A, to be substituted for the glob in a follow-up commit only if that verification shows fewer directories scanned than expected. - Runbook note (manual, post-merge verification): after this configuration merges, a maintainer must manually confirm via the repository's Insights → Dependency graph → Dependabot tab (or the "Recent update jobs" log) that at least one of the 16 directories is scanned and produces a dependency list. This check is out of scope for any automated toolchain — no format/lint/type-check/test stage applies to a static YAML file — and is tracked as spec AC-11.
-
Add-in not loading
- Verify Outlook started under the debugger from the
TaskMasterproject. - Check File → Options → Add-ins (COM Add-ins) in Outlook for load failures.
- Ensure VSTO runtime and Office PIA are installed (VS Office workload).
- Verify Outlook started under the debugger from the
-
Interop / bitness mismatch
- Match Outlook bitness (x64 vs x86) with installed interop assemblies and any native dependencies.
-
NuGet restore problems
- Clear
~\AppData\Local\NuGet\Cacheand re-restore; confirm internet access to feeds.
- Clear
-
Permissions / file saves
- If saving classifier state fails, review the save path (Ribbon → “Get Save Location”) and file system permissions.
- Current working branch (from the project brief):
feature/PstCompareat commit273feb632f56. - Standard GitHub workflow: feature branches → PR → review → merge.
Coding guidelines (high-level):
- Prefer small, testable controllers and viewers.
- Keep Outlook interop isolated behind helper classes and adapters.
- Put shared logic in
UtilitiesCS(andUtilitiesSwordfish.NET.General) to reduce duplication. - Add MSTest coverage for regressions, especially in email parsing, model serialization, and keyboard handlers.
TaskMaster — Outlook add-in and supporting libraries for email triage, tagging, and task visualization.
SPDX-License-Identifier: GPL-3.0-or-later Copyright (C) 2025 Dan Moisan
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program in a file named “COPYING”. If not, see https://www.gnu.org/licenses/.
- Quick Filer — Keyboard-driven UI to rapidly queue and file emails into folders.
- SpamBayes — Trainable Bayesian spam classifier with Ribbon controls (enable/save/load).
- Triage — A/B/C classifier for prioritization; precision tuning and a filter viewer.
- Tags — People/project/topic tagging UI and controllers.
- Task Visualization — Views to explore tasks across projects/people/topics.
- UtilitiesCS — Shared ML, Outlook, threading, and file helpers (includes EmailIntelligence).
- SVGControl — Custom control for rendering SVG assets in WinForms.
If you want this README saved into the repo (or tailored for end-user vs developer audiences), tell me the audience and I’ll produce that variant.