This page is for AI coding agents making changes to the Obsidian Quick Note Widget repo.
- Windows 11 Widget Board provider packaged as MSIX, implemented as an out-of-proc COM server on .NET 10.
- Adaptive Cards UI rendered by the Widget Host; all Obsidian I/O goes through the official
obsidianCLI (1.12+), with a URI-scheme launcher fallback for actions that must work when Obsidian is closed. - Four projects:
ObsidianQuickNoteWidget.Core(headless, tested),ObsidianQuickNoteWidget(COM server),ObsidianQuickNoteTray(WinForms tray + global hotkey),tools/AppExtProbe(diagnostic).
.github/copilot-instructions.md— the extensive project prompt. Read first.docs/agents/conventions.md— invariants + sharp edges. Do not skip.docs/agents/commands.md— copy-paste commands for build / test / deploy / probe.src/ObsidianQuickNoteWidget/Program.cs— STA + Win32 pump entry point.src/ObsidianQuickNoteWidget/Providers/ObsidianWidgetProvider.cs— sole verb router.src/ObsidianQuickNoteWidget.Core/AdaptiveCards/Templates/*.json— form contracts.src/ObsidianQuickNoteWidget.Core/AdaptiveCards/CardDataBuilder.cs— data bound into templates.src/ObsidianQuickNoteWidget.Core/Cli/ObsidianCli.cs— CLI resolution + invocation.tests/ObsidianQuickNoteWidget.Core.Tests/—PerWidgetGateTests,ObsidianCliResolutionTests,CardTemplatesTests,CardDataBuilderTests.
| Task | Start here |
|---|---|
| Add a new verb to a widget | docs/contributing/adaptive-cards.md + src/ObsidianQuickNoteWidget/Providers/ObsidianWidgetProvider.cs (HandleVerbAsync, ~line 261) |
| Wrap a new Obsidian CLI verb | docs/contributing/cli-surface.md + src/ObsidianQuickNoteWidget.Core/Cli/IObsidianCli.cs + ObsidianCli.cs + ObsidianCliParsers.cs |
| Add a new widget definition | src/ObsidianQuickNoteWidget/Package.appxmanifest (<Definition>) + src/ObsidianQuickNoteWidget/WidgetIdentifiers.cs + routing in ObsidianWidgetProvider.PushUpdate |
| Add a new Adaptive Card template | src/ObsidianQuickNoteWidget.Core/AdaptiveCards/Templates/*.json + CardTemplates.Load* + CardDataBuilder.Build*Data |
| Change per-widget persisted state | src/ObsidianQuickNoteWidget.Core/State/WidgetState.cs + JsonStateStore (atomic write preserved) |
| Ship a release | docs/contributing/release.md |
- 403 tests, all
Coreonly. Rundotnet test -c Release. Seedocs/agents/commands.md. - No UI / COM test harness. If you touch COM, manifest, or the message pump, validate by packaging + installing the MSIX and watching
%LocalAppData%\Packages\ObsidianQuickNoteWidget_*\LocalCache\Local\...\log.txt.
- Don't add
System.Windows.*references toObsidianQuickNoteWidget.Core. - Don't spread
Process.Start("obsidian", ...)calls — the CLI seam isIObsidianCli. - Don't throw out of a COM entry point — see
conventions.md. - Don't bump versions without syncing all four locations — see
conventions.md.