Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Algolia example — index records and search them. Use when starting a new Algolia integration, testing your setup, or learning the saveObjects/searchSingleIndex pattern. Trigger: "algolia hello world", "algolia example", "algolia quick start", "first algolia search".
.claude/skills/jeremylongshore-algolia-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 239% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 25% | 0% |
| case-21 | ✓→✓ | = Same ✓ | 67% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 18% | 0% |
Index records into Algolia and search them back — the two fundamental operations. Uses the algoliasearch v5 client where all methods live on the client directly (no initIndex).
algoliasearch v5 installed (npm install algoliasearch)ALGOLIA_APP_ID and ALGOLIA_ADMIN_KEY environment variables setalgolia-install-auth for setuptypescriptimport { algoliasearch } from 'algoliasearch'; const client = algoliasearch( process.env.ALGOLIA_APP_ID!, process.env.ALGOLIA_ADMIN_KEY! ); // saveObjects adds or replaces records. Each must have objectID // (or Algolia auto-generates one). const { taskID } = await client.saveObjects({ indexName: 'movies', objects: [ { objectID: '1', title: 'The Matrix', year: 1999, genre: 'sci-fi' }, { objectID: '2', title: 'Inception', year: 2010, genre: 'sci-fi' }, { objectID: '3', title: 'Pulp Fiction', year: 1994, genre: 'crime' }, ], }); // Wait for indexing to complete before searching await client.waitForTask({ indexName: 'movies', taskID }); console.log('Indexing complete.');
typescript// Basic search — Algolia searches all searchableAttributes by default const { hits } = await client.searchSingleIndex({ indexName: 'movies', searchParams: { query: 'matrix' }, }); console.log(`Found ${hits.length} results:`); hits.forEach(hit => { // _highlightResult shows which parts matched console.log(` ${hit.title} (${hit.year})`); });
typescript// Settings define how Algolia ranks results await client.setSettings({ indexName: 'movies', indexSettings: { searchableAttributes: ['title', 'genre'], // Fields to search attributesForFaceting: ['genre', 'year'], // Filterable fields customRanking: ['desc(year)'], // Tie-breaker: newer first attributesToRetrieve: ['title', 'year', 'genre'],// Fields returned in hits }, });
Indexing complete.
Found 1 results:
The Matrix (1999)| Error | Cause | Solution | |-------|-------|----------| | Invalid Application-ID or API key | Wrong credentials | Verify in dashboard > Settings > API Keys | | Record is too big | Object > 10KB (free) or 100KB (paid) | Reduce record size or split into smaller records | | Index does not exist (on search) | Index not created yet | saveObjects auto-creates the index | | taskID never resolves | Indexing queue backlog | Check dashboard > Indices > Operations |
typescript// Search multiple indices in one API call const { results } = await client.search({ requests: [ { indexName: 'movies', query: 'inception' }, { indexName: 'actors', query: 'inception' }, ], }); results.forEach(result => { if ('hits' in result) { console.log(`${result.index}: ${result.hits.length} hits`); } });
typescript// browse returns up to 1000 records per call — use for data export const { hits, cursor } = await client.browse({ indexName: 'movies', browseParams: { hitsPerPage: 1000 }, }); console.log(`First page: ${hits.length} records`); // Use cursor to fetch next pages
typescript// Delete by objectID await client.deleteObject({ indexName: 'movies', objectID: '3' }); // Delete by query match await client.deleteBy({ indexName: 'movies', deleteByParams: { filters: 'genre:crime' }, });
Proceed to algolia-local-dev-loop for development workflow setup.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 12,721 | 9,876 | -22% | 1 | 1 | 0% | 2,929 | 3,653 | +25% | 0 | 0 | — |
case-21 | pass→pass | 8,412 | 7,659 | -9% | 1 | 1 | 0% | 1,540 | 2,578 | +67% | 0 | 0 | — |
case-02 | pass→pass | 9,782 | 5,683 | -42% | 1 | 1 | 0% | 2,101 | 2,481 | +18% | 0 | 0 | — |
case-03 | pass→pass | 7,770 | 4,163 | -46% | 1 | 1 | 0% | 1,549 | 2,065 | +33% | 0 | 0 | — |
case-04 | pass→pass | 11,050 | 3,739 | -66% | 1 | 1 | 0% | 2,236 | 1,949 | -13% | 0 | 0 | — |
case-05 | pass→pass | 6,202 | 3,388 | -45% | 1 | 1 | 0% | 1,205 | 1,738 | +44% | 0 | 0 | — |
case-06 | pass→pass | 9,278 | 6,126 | -34% | 1 | 1 | 0% | 1,861 | 2,493 | +34% | 0 | 0 | — |
case-07 | pass→pass | 4,058 | 3,239 | -20% | 1 | 1 | 0% | 722 | 1,806 | +150% | 0 | 0 | — |
case-08 | pass→pass | 9,598 | 5,895 | -39% | 1 | 1 | 0% | 2,005 | 2,403 | +20% | 0 | 0 | — |
case-09 | fail→pass | 12,119 | 7,782 | -36% | 1 | 1 | 0% | 2,348 | 2,742 | +17% | 0 | 0 | — |
case-10 | pass→pass | 6,651 | 2,917 | -56% | 1 | 1 | 0% | 1,321 | 1,721 | +30% | 0 | 0 | — |
case-11 | pass→pass | 9,294 | 3,747 | -60% | 1 | 1 | 0% | 1,734 | 1,925 | +11% | 0 | 0 | — |
case-12 | pass→pass | 11,546 | 8,392 | -27% | 1 | 1 | 0% | 2,178 | 2,801 | +29% | 0 | 0 | — |
case-13 | pass→pass | 6,163 | 3,588 | -42% | 1 | 1 | 0% | 1,025 | 1,861 | +82% | 0 | 0 | — |
case-14 | fail→fail | 13,947 | 11,365 | -19% | 1 | 1 | 0% | 2,420 | 3,118 | +29% | 0 | 0 | — |
case-15 | pass→pass | 2,963 | 2,210 | -25% | 1 | 1 | 0% | 476 | 1,614 | +239% | 0 | 0 | — |
case-16 | fail→pass | 2,395 | 2,046 | -15% | 1 | 1 | 0% | 456 | 1,544 | +239% | 0 | 0 | — |
case-17 | pass→pass | 3,787 | 2,379 | -37% | 1 | 1 | 0% | 694 | 1,649 | +138% | 0 | 0 | — |
case-18 | pass→pass | 7,413 | 5,571 | -25% | 1 | 1 | 0% | 1,528 | 2,323 | +52% | 0 | 0 | — |
case-19 | pass→pass | 2,919 | 2,636 | -10% | 1 | 1 | 0% | 509 | 1,655 | +225% | 0 | 0 | — |
case-20 | pass→pass | 9,750 | 9,635 | -1% | 1 | 1 | 0% | 2,097 | 3,230 | +54% | 0 | 0 | — |
case-22 | pass→pass | 21,924 | 17,895 | -18% | 1 | 1 | 0% | 4,421 | 4,731 | +7% | 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 +9 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.