Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Debug Evernote API issues with diagnostic tools and techniques. Use when troubleshooting API calls, inspecting requests/responses, or diagnosing integration problems. Trigger with phrases like "debug evernote", "evernote diagnostic", "troubleshoot evernote", "evernote logs", "inspect evernote".
.claude/skills/jeremylongshore-evernote-debug-bundle/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 86% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -3% | 0% |
!node --version 2>/dev/null || echo 'N/A' !python3 --version 2>/dev/null || echo 'N/A'
Comprehensive debugging toolkit for Evernote API integrations, including request/response logging, ENML validation with auto-fix, token inspection, and diagnostic CLI utilities.
evernote-common-errors)Create a logger that captures API method names, arguments (with token redaction), response times, and error details. Write to both console and file for post-mortem analysis.
javascriptclass EvernoteDebugLogger { constructor(logFile = 'evernote-debug.log') { this.logFile = logFile; this.requests = []; } logRequest(method, args, response, duration, error) { const entry = { timestamp: new Date().toISOString(), method, duration: `${duration}ms`, success: !error, error: error?.message || error?.errorCode }; this.requests.push(entry); fs.appendFileSync(this.logFile, JSON.stringify(entry) + '\n'); } }
Wrap the NoteStore with a Proxy that automatically logs every API call, measures response time, and catches errors. This adds zero-config debugging to any existing integration.
javascriptfunction instrumentNoteStore(noteStore, logger) { return new Proxy(noteStore, { get(target, prop) { if (typeof target[prop] !== 'function') return target[prop]; return async (...args) => { const start = Date.now(); try { const result = await targetprop; logger.logRequest(prop, args, result, Date.now() - start); return result; } catch (error) { logger.logRequest(prop, args, null, Date.now() - start, error); throw error; } }; } }); }
Validate ENML content against the DTD rules: check for XML declaration, DOCTYPE, <en-note> root, forbidden elements, and unclosed tags. Optionally auto-fix common issues (add missing headers, close tags, strip forbidden elements).
Check token validity by calling userStore.getUser(). Report token owner, expiration date (edam_expires), account type, and remaining upload quota.
Create a CLI script with commands: diagnose (run all checks), validate-enml <file> (validate ENML content), inspect-token (show token info), test-api (verify API connectivity).
For the full debug logger, instrumented client, ENML auto-fixer, token inspector, and diagnostic CLI, see Implementation Guide.
EvernoteDebugLogger with file and console outputdiagnose, validate-enml, inspect-token commands| Issue | Diagnostic | Solution | |-------|------------|----------| | Auth failures | Run inspect-token to check expiration | Re-authenticate if expired | | ENML errors | Run validate-enml on content | Auto-fix or manually correct | | Rate limits | Check request frequency in debug log | Increase delay between calls | | Missing data | Inspect response in debug log | Verify API parameters (withContent flags) |
For rate limit handling, see evernote-rate-limits.
Request tracing: Wrap NoteStore with the instrumented proxy, run your workflow, then review evernote-debug.log for slow calls (>2s), failed requests, and rate limit hits.
ENML debugging: Pipe note content through the ENML validator to find missing DOCTYPE, forbidden <script> tags, or unclosed elements. Use auto-fix mode to correct issues automatically.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 24,456 | 24,213 | -1% | 1 | 1 | 0% | 3,900 | 4,970 | +27% | 0 | 0 | — |
case-02 | fail→pass | 39,010 | 47,966 | +23% | 1 | 1 | 0% | 6,415 | 9,226 | +44% | 0 | 0 | — |
case-03 | fail→pass | 16,198 | 17,708 | +9% | 1 | 1 | 0% | 2,118 | 3,365 | +59% | 0 | 0 | — |
case-04 | pass→pass | 17,215 | 16,893 | -2% | 1 | 1 | 0% | 3,162 | 3,545 | +12% | 0 | 0 | — |
case-05 | pass→pass | 12,018 | 11,483 | -4% | 1 | 1 | 0% | 1,757 | 2,712 | +54% | 0 | 0 | — |
case-06 | pass→pass | 4,792 | 2,235 | -53% | 1 | 1 | 0% | 838 | 1,408 | +68% | 0 | 0 | — |
case-07 | pass→pass | 6,435 | 3,346 | -48% | 1 | 1 | 0% | 855 | 1,691 | +98% | 0 | 0 | — |
case-08 | pass→pass | 13,522 | 23,653 | +75% | 1 | 1 | 0% | 2,182 | 3,083 | +41% | 0 | 0 | — |
case-09 | fail→pass | 7,434 | 22,069 | +197% | 1 | 1 | 0% | 1,098 | 2,039 | +86% | 0 | 0 | — |
case-10 | fail→pass | 11,340 | 3,416 | -70% | 1 | 1 | 0% | 1,543 | 1,494 | -3% | 0 | 0 | — |
case-11 | fail→pass | 13,889 | 5,158 | -63% | 1 | 1 | 0% | 1,889 | 1,839 | -3% | 0 | 0 | — |
case-12 | pass→pass | 16,809 | 16,182 | -4% | 1 | 1 | 0% | 2,442 | 3,333 | +36% | 0 | 0 | — |
case-13 | fail→pass | 8,229 | 6,583 | -20% | 1 | 1 | 0% | 1,371 | 1,936 | +41% | 0 | 0 | — |
case-14 | pass→pass | 9,839 | 13,525 | +37% | 1 | 1 | 0% | 1,617 | 3,087 | +91% | 0 | 0 | — |
case-15 | pass→pass | 18,148 | 14,548 | -20% | 1 | 1 | 0% | 2,590 | 3,153 | +22% | 0 | 0 | — |
case-16 | fail→pass | 16,292 | 4,940 | -70% | 1 | 1 | 0% | 2,264 | 1,600 | -29% | 0 | 0 | — |
case-17 | pass→pass | 12,325 | 6,409 | -48% | 1 | 1 | 0% | 1,814 | 2,161 | +19% | 0 | 0 | — |
case-18 | fail→pass | 15,636 | 2,525 | -84% | 1 | 1 | 0% | 2,179 | 1,411 | -35% | 0 | 0 | — |
case-19 | fail→pass | 9,671 | 2,658 | -73% | 1 | 1 | 0% | 1,625 | 1,378 | -15% | 0 | 0 | — |
case-20 | pass→pass | 23,484 | 24,578 | +5% | 1 | 1 | 0% | 3,503 | 4,960 | +42% | 0 | 0 | — |
case-21 | pass→pass | 19,913 | 15,385 | -23% | 1 | 1 | 0% | 3,096 | 3,843 | +24% | 0 | 0 | — |
case-22 | pass→pass | 7,815 | 6,834 | -13% | 1 | 1 | 0% | 1,326 | 2,344 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.