evernote-core-workflow-b
Implements a robust search and retrieval workflow for Evernote using note filters and metadata specifications.
Install
mkdir -p .claude/skills/evernote-core-workflow-b && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8668" && unzip -o skill.zip -d .claude/skills/evernote-core-workflow-b && rm skill.zipInstalls to .claude/skills/evernote-core-workflow-b
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Execute Evernote secondary workflow: Search and Retrieval.Key capabilities
- →Build a SearchService wrapping findNotesMetadata()
- →Implement a fluent QueryBuilder class that chains operators
- →Use an async generator to iterate through large result sets page by page
- →Call noteStore.findRelated() to discover related notes, notebooks, and tags
- →Cache notebook and tag lookups, then map GUIDs to human-readable names
How it works
The skill uses a SearchService to wrap findNotesMetadata() with a NoteFilter and NotesMetadataResultSpec. It builds queries with a QueryBuilder and processes results with pagination and enrichment.
Inputs & outputs
When to use evernote-core-workflow-b
- →Implement search functionality for Evernote
- →Filter notes by tags and notebooks
- →Retrieve note metadata via API
- →Build custom search query builders
About this skill
Evernote Core Workflow B: Search & Retrieval
Overview
Comprehensive search and retrieval workflow for Evernote, including search grammar, filters, pagination, related notes discovery, and result enrichment with notebook/tag names.
Prerequisites
- Completed
evernote-install-authsetup - Understanding of Evernote search grammar
- Valid access token configured
Instructions
Step 1: Search Service Foundation
Build a SearchService wrapping findNotesMetadata(). Use NoteFilter for query terms, sort order, and notebook scope. Use NotesMetadataResultSpec to control which metadata fields are returned (title, dates, tags, notebook GUID).
const filter = new Evernote.NoteStore.NoteFilter({
words: 'tag:urgent notebook:"Work"',
ascending: false,
order: Evernote.Types.NoteSortOrder.UPDATED
});
const spec = new Evernote.NoteStore.NotesMetadataResultSpec({
includeTitle: true, includeUpdated: true,
includeTagGuids: true, includeNotebookGuid: true
});
const result = await noteStore.findNotesMetadata(filter, 0, 50, spec);
Step 2: Advanced Search Grammar Builder
Implement a fluent QueryBuilder class that chains operators: notebook("Work"), tag("urgent"), intitle("meeting"), createdAfter(date), hasUncompletedTodos(), hasAttachments(). Call .build() to produce the query string. Use any: prefix for OR logic.
const query = new QueryBuilder()
.notebook('Work')
.tag('urgent')
.lastNDays(7)
.hasUncompletedTodos()
.build();
// Result: 'notebook:"Work" tag:"urgent" created:day-7 todo:false'
Step 3: Paginated Search Results
Use an async generator to iterate through large result sets page by page. Track offset and compare against totalNotes to determine when to stop. Default page size of 50-100 balances API calls versus response size.
Step 4: Related Notes Discovery
Call noteStore.findRelated() with a RelatedQuery (by note GUID or plain text) and RelatedResultSpec to discover related notes, notebooks, and tags.
Step 5: Search Result Enrichment
Cache notebook and tag lookups, then map GUIDs to human-readable names. Return enriched results with notebookName, tags[], created, and updated fields.
For the full SearchService, QueryBuilder, pagination, and enrichment implementations, see Implementation Guide.
Search Grammar Quick Reference
| Operator | Example | Description |
|---|---|---|
notebook: | notebook:"Work" | Restrict to notebook |
tag: | tag:urgent | Has tag |
-tag: | -tag:archived | Exclude tag |
intitle: | intitle:meeting | Word in title |
created: | created:day-7 | Created within last 7 days |
updated: | updated:week | Updated this week |
todo: | todo:false | Has uncompleted todos |
resource: | resource:image/* | Has attachment type |
any: | any: term1 term2 | Match ANY term (default is AND) |
Output
SearchServicewith text search, notebook search, and tag search- Fluent
QueryBuilderfor composing search grammar queries - Async generator for paginated results
- Related notes discovery via
findRelated() - Enriched results with notebook and tag names
Error Handling
| Error | Cause | Solution |
|---|---|---|
RATE_LIMIT_REACHED | Too many search calls | Add delay between paginated requests |
BAD_DATA_FORMAT | Invalid search grammar syntax | Validate query with QueryBuilder |
QUOTA_REACHED | Search quota exceeded | Reduce search frequency, cache results |
Resources
- Search Grammar
- Search Overview
- Related Notes
- API Reference
Next Steps
For error handling patterns, see evernote-common-errors.
Examples
Find action items: Search for notes with uncompleted todos from the past week using QueryBuilder().thisWeek().hasUncompletedTodos().build(). Enrich results with notebook names.
Meeting search: Find all notes titled "meeting" in the "Work" notebook from the last 30 days, paginate through results, and export titles with tags.
Prerequisites
Limitations
- →Rate limits can be reached with too many search calls
- →Invalid search grammar syntax causes errors
- →Search quota can be exceeded
How it compares
This workflow provides a structured approach to building complex Evernote searches, unlike manual keyword searches.
Compared to similar skills
evernote-core-workflow-b side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| evernote-core-workflow-b (this skill) | 0 | 27d | Review | Intermediate |
| identify-vault-protocol | 1 | 7mo | No flags | Intermediate |
| openevidence-core-workflow-a | 1 | 27d | Review | Intermediate |
| biopython | 1 | 7mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
identify-vault-protocol
tradingstrategy-ai
Identify an unknown vault protocol based on its smart contract address
openevidence-core-workflow-a
jeremylongshore
Execute OpenEvidence clinical query workflow for point-of-care decisions. Use when implementing real-time clinical decision support, building EHR-integrated evidence lookups, or point-of-care queries. Trigger with phrases like "openevidence clinical query", "point of care", "quick clinical lookup", "evidence search".
biopython
davila7
Primary Python toolkit for molecular biology. Preferred for Python-based PubMed/NCBI queries (Bio.Entrez), sequence manipulation, file parsing (FASTA, GenBank, FASTQ, PDB), advanced BLAST workflows, structures, phylogenetics. For quick BLAST, use gget. For direct REST API, use pubmed-database.
reference-sdk
parcadei
Check reference SDK implementations using btca ask
apollo-hello-world
jeremylongshore
Create a minimal working Apollo.io example. Use when starting a new Apollo integration, testing your setup, or learning basic Apollo API patterns. Trigger with phrases like "apollo hello world", "apollo example", "apollo quick start", "simple apollo code", "test apollo api".
juicebox-migration-deep-dive
jeremylongshore
Advanced Juicebox data migration strategies. Use when migrating from other recruiting platforms, performing bulk data imports, or implementing complex data transformation pipelines. Trigger with phrases like "juicebox data migration", "migrate to juicebox", "juicebox import", "juicebox bulk migration".