evernote-core-workflow-b
Execute Evernote secondary workflow: Search and Retrieval. Use when implementing search features, finding notes, filtering content, or building search interfaces. Trigger with phrases like "search evernote", "find evernote notes", "evernote search", "query evernote".
What this skill does
# 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-auth` setup
- 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).
```javascript
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.
```javascript
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](references/implementation-guide.md).
## 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
- `SearchService` with text search, notebook search, and tag search
- Fluent `QueryBuilder` for 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](https://dev.evernote.com/doc/articles/search_grammar.php)
- [Search Overview](https://dev.evernote.com/doc/articles/search.php)
- Related Notes
- [API Reference](https://dev.evernote.com/doc/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.
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.