Evernote Common ErrorsSAFE
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Overview
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
4f83675ca38aOBSERVED · 2026-10-08Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: evernote-common-errors description: 'Diagnose and fix common Evernote API errors. Use when encountering Evernote API exceptions, debugging failures, or troubleshooting integration issues. Trigger with phrases like "evernote error", "evernote exception", "fix evernote issue", "debug evernote", "evernote troubleshooting". ' allowed-tools: Read, Write, Edit, Grep version: 1.13.0 license: MIT author: Jeremy Longshore <[email protected]> tags: - saas - evernote - api - debugging compatibility: Designed for Claude Code --- # Evernote Common Errors ## Overview Comprehensive guide to diagnosing and resolving Evernote API errors. Evernote uses three exception types: `EDAMUserException` (client errors), `EDAMSystemException` (server/rate limit errors), and `EDAMNotFoundException` (invalid GUIDs). ## Prerequisites - Basic Evernote SDK setup - Understanding of Evernote data model ## Instructions ### EDAMUserException Error Codes | Code | Name | Cause | Fix | |------|------|-------|-----| | 1 | `BAD_DATA_FORMAT` | Invalid ENML, missing DOCTYPE | Validate ENML before sending; check for forbidden elements | | 2 | `DATA_REQUIRED` | Missing required field (title, content) | Ensure `note.title` and `note.content` are set | | 3 | `PERMISSION_DENIED` | API key lacks permissions | Request additional permissions from Evernote | | 4 | `INVALID_AUTH` | Invalid or revoked token | Re-authenticate user via OAuth | | 5 | `AUTH_EXPIRED` | Token past expiration date | Check `edam_expires`, refresh token | | 6 | `LIMIT_REACHED` | Account limit exceeded (250 notebooks) | Clean up resources before creating new ones | | 7 | `QUOTA_REACHED` | Monthly upload quota exceeded | Check `user.accounting.remaining` | ### ENML Validation The most common error is `BAD_DATA_FORMAT` from invalid ENML. Validate before sending: ```javascript function validateENML(content) { const errors = []; if (!content.includes('<?xml version="1.0"')) errors.push('Missing XML declaration'); if (!content.includes('<!DOCTYPE en-note')) errors.push('Missing DOCTYPE'); if (!content.includes('<en-note>')) errors.push('Missing <en-note> root'); const forbidden = [/<script/i, /<form/i, /<iframe/i, /<input/i]; forbidden.forEach(p => { if (p.test(content)) errors.push(`Forbidden: ${p.source}`); }); if (/\s(class|id|onclick)=/i.test(content)) errors.push('Forbidden attributes'); return { valid: errors.length === 0, errors }; } ``` ### EDAMSystemException Handling Rate limit errors include `rateLimitDuration` (seconds to wait). Maintenance errors should be retried with progressive backoff. ```javascript async function withRetry(operation, maxRetries = 3) { for (let i = 0; i < maxRetries; i++) { try { return await operation(); } catch (error) { if (error.rateLimitDuration) { await new Promise(r => setTimeout(r, error.rateLimitDuration * 1000)); continue; } throw error; } } } ``` ### EDAMNotFoundException Handling Thrown when a GUID does not exist (deleted note, wrong user, invalid format). Handle gracefully by returning null instead of throwing. ```javascript async function safeGetNote(noteStore, guid) { try { return await noteStore.getNote(guid, true, false, false, false); } catch (error) { if (error.identifier === 'Note.guid') return null; throw error; } } ``` ### Error Handler Service Build a centralized error handler that classifies exceptions and returns structured results with `type`, `code`, `action`, and `recoverable` flags. See [Implementation Guide](references/implementation-guide.md) for the complete `EvernoteErrorHandler` class. ## Output - Error code reference table for all `EDAMUserException` codes - ENML validation utility that catches common content errors - Rate limit retry with `rateLimitDuration` handling - Safe getter pattern for `EDAMNotFoundException` - Centralized `EvernoteErrorHandler` service class ## Error Handling | Exception | When Thrown | Recovery | |-----------|------------|----------| | `EDAMUserException` | Client error (invalid input, permissions) | Fix input or re-authenticate | | `EDAMSystemException` | Server error (rate limits, maintenance) | Wait and retry | | `EDAMNotFoundException` | Resource not found (invalid GUID) | Verify GUID, check trash | ## Resources - [Error Handling](https://dev.evernote.com/doc/articles/error_handling.php) - [Rate Limits](https://dev.evernote.com/doc/articles/rate_limits.php) - [API Reference](https://dev.evernote.com/doc/reference/) - [ENML DTD](http://xml.evernote.com/pub/enml2.dtd) ## Next Steps For debugging tools and techniques, see `evernote-debug-bundle`. ## Examples **ENML debugging**: Note creation fails with `BAD_DATA_FORMAT`. Run `validateENML()` on the content to identify missing DOCTYPE, unclosed tags, or forbidden elements like `<script>`. **Token refresh flow**: API call returns `AUTH_EXPIRED` (code 5). Check stored `edam_expires` timestamp, redirect user to OAuth re-authorization, store new token with updated expiration.
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
// 2. Trying to access business features without business API key
Gates applied: no_behavioural_pass.
4f83675ca38afull audit observations/trust-audit/skill/jeremylongshore__evernote-common-errors.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 4f83675ca38a | SAFE | B | 89 | first audit |
Questions
What does the Evernote Common Errors skill do?
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Is Evernote Common Errors safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Evernote Common Errors access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does Evernote Common Errors work with?
Its documentation mentions claude-code. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (4f83675ca38a), read on 2026-10-08. The repository is watched, and a new audit runs when it changes — this is the first audit.