Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Index documents into Glean and search them back using the Indexing and Client APIs. Use when starting a new Glean custom connector, testing search quality, or learning the index/search pattern. Trigger: "glean hello world", "glean example", "glean index document", "glean search".
.claude/skills/jeremylongshore-glean-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -22% | 0% |
Index documents into Glean and search them. Two steps: set up a custom datasource with the Indexing API, then query with the Client API.
typescriptconst GLEAN = `https://${process.env.GLEAN_DOMAIN}/api`; const idxHeaders = { 'Authorization': `Bearer ${process.env.GLEAN_INDEXING_TOKEN}`, 'Content-Type': 'application/json', }; // Create or configure a custom datasource await fetch(`${GLEAN}/index/v1/adddatasource`, { method: 'POST', headers: idxHeaders, body: JSON.stringify({ name: 'my_wiki', displayName: 'Internal Wiki', datasourceCategory: 'PUBLISHED_CONTENT', urlRegex: 'https://wiki.company.com/.*', iconUrl: 'https://wiki.company.com/favicon.ico', }), });
typescript// Index individual documents await fetch(`${GLEAN}/index/v1/indexdocuments`, { method: 'POST', headers: idxHeaders, body: JSON.stringify({ datasource: 'my_wiki', documents: [{ id: 'doc-001', title: 'Getting Started Guide', url: 'https://wiki.company.com/getting-started', body: { mimeType: 'text/plain', textContent: 'This guide covers onboarding steps...' }, author: { email: 'jane@company.com' }, updatedAt: new Date().toISOString(), permissions: { allowAnonymousAccess: true }, }], }), }); console.log('Document indexed.');
typescriptconst searchHeaders = { 'Authorization': `Bearer ${process.env.GLEAN_CLIENT_TOKEN}`, 'X-Glean-Auth-Type': 'BEARER', 'Content-Type': 'application/json', }; const results = await fetch(`${GLEAN}/client/v1/search`, { method: 'POST', headers: searchHeaders, body: JSON.stringify({ query: 'onboarding getting started', pageSize: 10, requestOptions: { datasourceFilter: 'my_wiki' }, }), }).then(r => r.json()); results.results?.forEach((r: any) => { console.log(`${r.title} (${r.url}) — score: ${r.score}`); });
Document indexed.
Getting Started Guide (https://wiki.company.com/getting-started) — score: 0.95| Error | Cause | Solution | |-------|-------|----------| | datasource not found | Datasource not created | Run adddatasource first | | No search results | Indexing not yet complete | Wait 1-2 minutes for processing | | invalid document | Missing required fields | Include id, title, url |
Proceed to glean-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 | fail→pass | 37,324 | 15,067 | -60% | 1 | 1 | 0% | 3,313 | 3,065 | -7% | 0 | 0 | — |
case-02 | fail→pass | 23,125 | 10,781 | -53% | 1 | 1 | 0% | 4,062 | 3,306 | -19% | 0 | 0 | — |
case-03 | fail→pass | 16,649 | 16,064 | -4% | 1 | 1 | 0% | 3,435 | 3,447 | +0% | 0 | 0 | — |
case-04 | pass→pass | 12,414 | 10,311 | -17% | 1 | 1 | 0% | 2,525 | 1,929 | -24% | 0 | 0 | — |
case-05 | fail→pass | 7,678 | 7,310 | -5% | 1 | 1 | 0% | 1,415 | 1,362 | -4% | 0 | 0 | — |
case-06 | fail→pass | 20,223 | 6,919 | -66% | 1 | 1 | 0% | 1,576 | 1,233 | -22% | 0 | 0 | — |
case-07 | pass→pass | 11,719 | 11,276 | -4% | 1 | 1 | 0% | 2,324 | 2,275 | -2% | 0 | 0 | — |
case-08 | pass→pass | 12,173 | 3,937 | -68% | 1 | 1 | 0% | 1,611 | 1,729 | +7% | 0 | 0 | — |
case-09 | pass→pass | 7,078 | 2,600 | -63% | 1 | 1 | 0% | 1,488 | 1,389 | -7% | 0 | 0 | — |
case-10 | fail→pass | 10,484 | 7,123 | -32% | 1 | 1 | 0% | 1,156 | 1,315 | +14% | 0 | 0 | — |
case-11 | pass→pass | 10,237 | 7,749 | -24% | 1 | 1 | 0% | 1,102 | 1,347 | +22% | 0 | 0 | — |
case-12 | fail→pass | 13,067 | 6,984 | -47% | 1 | 1 | 0% | 1,627 | 1,209 | -26% | 0 | 0 | — |
case-13 | pass→pass | 4,443 | 6,856 | +54% | 1 | 1 | 0% | 955 | 1,238 | +30% | 0 | 0 | — |
case-14 | fail→pass | 9,927 | 6,867 | -31% | 1 | 1 | 0% | 971 | 1,219 | +26% | 0 | 0 | — |
case-15 | pass→pass | 11,476 | 12,356 | +8% | 1 | 1 | 0% | 1,939 | 2,232 | +15% | 0 | 0 | — |
case-16 | pass→pass | 15,990 | 9,469 | -41% | 1 | 1 | 0% | 1,869 | 1,662 | -11% | 0 | 0 | — |
case-17 | fail→pass | 8,181 | 7,616 | -7% | 1 | 1 | 0% | 1,262 | 1,248 | -1% | 0 | 0 | — |
case-18 | pass→pass | 11,447 | 8,463 | -26% | 1 | 1 | 0% | 1,968 | 1,379 | -30% | 0 | 0 | — |
case-19 | fail→fail | 16,335 | 9,814 | -40% | 1 | 1 | 0% | 2,032 | 1,731 | -15% | 0 | 0 | — |
case-20 | pass→pass | 14,032 | 11,175 | -20% | 1 | 1 | 0% | 2,627 | 2,820 | +7% | 0 | 0 | — |
case-21 | pass→pass | 13,279 | 12,302 | -7% | 1 | 1 | 0% | 2,261 | 2,929 | +30% | 0 | 0 | — |
case-22 | pass→pass | 12,257 | 13,352 | +9% | 1 | 1 | 0% | 2,172 | 2,234 | +3% | 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 +41 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.