flowing-abyss/obsidian-local-fonts/observability-and-instrumentation
Claude Code and agent skill by flowing-abyss/obsidian-local-fonts
- community
Checking that the SKILL.md file is still in the repository.
Makes plugin failures visible to the user and diagnosable from a bug report, without telemetry. Use when adding any file I/O, network call, or parsing step that can fail. Use when a user reports "it doesn't work" with no other detail.
Install
npx vskill@latest install flowing-abyss/obsidian-local-fonts/observability-and-instrumentationSKILL.md
Observability and Instrumentation (Obsidian plugin edition)
Why this looks different from the usual version of this skill
There's no server, no on-call, no metrics backend, no dashboards — a plugin runs on someone else's machine and the only diagnostic channel is whatever the user chooses to paste into a GitHub issue. AGENTS.md already rules out the usual fallback (phone-home telemetry: no hidden analytics, no undisclosed network calls). So "observability" here means exactly two things: the user sees that something went wrong and why, and a developer reading a bug report has enough to reproduce it — both from information already on the user's own screen.
When to use
- Any
app.vault/app.fileManagerread, write, or path resolution that can fail (missing file, permission error, malformed frontmatter) - Any
fetch/network call (already requires disclosure per AGENTS.md — pair that disclosure with visible failure handling) - Any parsing of user-authored content (settings JSON, a config file the plugin reads from the vault)
- A silent
catch {}or a promise rejection with no.catch— the classic "plugin just stops working" bug class
Process
1. Every user-triggered failure gets a Notice(), not a silent catch
A Notice() is the plugin's entire "alerting" system. Word it like an on-call runbook line: name what was being attempted and what specifically failed — not just "An error occurred."
2. console.error/console.warn for the part a Notice can't hold
Obsidian's own guidelines only allow warn/error/debug console methods (already enforced by eslint-plugin-obsidianmd's no-console override). Use them for the detail a toast is too small for — stack traces, the full failing object — since that's what ends up in a screenshot of DevTools attached to a bug report:
Prefix with the plugin id so it's greppable in a console full of every other plugin's output.
3. A debug-mode setting, not always-on verbose logging
If a feature needs step-by-step tracing to debug, gate it behind a settings toggle (this.settings.debugLoggingEnabled) rather than always emitting it — matches the "minimize noise" spirit of Obsidian's console-usage guideline, and gives users a switch to flip when a maintainer asks "can you enable debug logging and reproduce?"
4. Make errors reproducible, not just visible
When catching an error you can't fully handle, include what a maintainer needs to reproduce it: the input that failed (file path, setting value), not just the exception message. This is the entire substitute for a trace/correlation ID — there's no distributed system to correlate across, just one bug report to make useful.
Explicitly not applicable here
Metrics, dashboards, distributed tracing, alerting/paging, SLOs, cardinality — all assume a backend collecting data from many instances of a running service. A plugin has neither the backend nor (per this template's own privacy stance) permission to phone one. Don't reach for OpenTelemetry/Prometheus/etc. for an Obsidian plugin; if a future feature genuinely needs opt-in usage analytics, that's a source-driven-development-grounded, explicitly-disclosed decision on its own, not something this skill covers.
Red Flags
- A
catch {}with nothing inside it - A promise with no
.catchin a place Vitest's unhandled-rejection reporting won't cover (seetest-driven-development— but don't rely on tests catching every runtime path a real user hits) - An error message that's just the raw exception (
String(error)) with no context about what the plugin was trying to do - Reaching for a network call, analytics SDK, or crash reporter to "get visibility" — that's the thing AGENTS.md already says not to do without disclosure
Verification
- [ ] Every
awaitthat touches the vault, filesystem, or network has acatchthat shows the user aNotice(), not a silent failure - [ ] Notice text names what was attempted and what failed, not just "An error occurred"
- [ ] Anything logged to console goes through
warn/error/debug(notlog), prefixed with the plugin id - [ ] No new telemetry, analytics, or crash-reporting network call was added without the disclosure AGENTS.md requires
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.ai/skills/observability-and-instrumentation/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/flowing-abyss/obsidian-local-fonts/observability-and-instrumentation)