Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Hex example. Use when starting a new Hex integration, testing your setup, or learning basic Hex API patterns. Trigger with phrases like "hex hello world", "hex example", "hex quick start", "simple hex code".
.claude/skills/jeremylongshore-hex-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 17% | 0% |
List projects, trigger a project run, and poll for results using the Hex API. The core workflow is: trigger a run of a published project, poll for completion, then access the results.
hex-install-auth setuptypescript// hello-hex.ts import 'dotenv/config'; const TOKEN = process.env.HEX_API_TOKEN!; const BASE = 'https://app.hex.tech/api/v1'; async function listProjects() { const response = await fetch(`${BASE}/projects`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); const projects = await response.json(); for (const p of projects) { console.log(`${p.name} (${p.projectId}) — ${p.status}`); } return projects; }
typescriptasync function runProject(projectId: string, inputParams?: Record<string, any>) { const response = await fetch(`${BASE}/project/${projectId}/run`, { method: 'POST', headers: { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ inputParams: inputParams || {}, updateCacheResult: true, }), }); const { runId, projectId: pid, runStatusUrl } = await response.json(); console.log(`Run started: ${runId}`); console.log(`Status URL: ${runStatusUrl}`); return { runId, projectId: pid, runStatusUrl }; }
typescriptasync function waitForRun(projectId: string, runId: string, timeoutMs = 300000): Promise<any> { const startTime = Date.now(); while (Date.now() - startTime < timeoutMs) { const response = await fetch(`${BASE}/project/${projectId}/run/${runId}`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); const status = await response.json(); console.log(`Run ${runId}: ${status.status}`); if (status.status === 'COMPLETED') return status; if (status.status === 'ERRORED' || status.status === 'KILLED') { throw new Error(`Run failed: ${status.status}`); } await new Promise(r => setTimeout(r, 5000)); // Poll every 5s } throw new Error('Run timed out'); }
typescriptasync function main() { const projects = await listProjects(); if (projects.length === 0) { console.log('No projects found'); return; } const project = projects[0]; const { runId } = await runProject(project.projectId, { date: '2025-01-01' }); const result = await waitForRun(project.projectId, runId); console.log('Run completed:', result); } main().catch(console.error);
bash# List projects curl -s -H "Authorization: Bearer $HEX_API_TOKEN" \ https://app.hex.tech/api/v1/projects | python3 -m json.tool # Trigger a run curl -X POST -H "Authorization: Bearer $HEX_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"inputParams": {}}' \ https://app.hex.tech/api/v1/project/PROJECT_ID/run | python3 -m json.tool
| Error | Cause | Solution | |-------|-------|----------| | 401 | Invalid token | Regenerate API token | | 403 | Read-only token | Create token with "Run projects" scope | | 404 | Project not found | Verify project ID, ensure it's published | | Run ERRORED | Project code failed | Check Hex project logs |
Proceed to hex-local-dev-loop for development workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | fail→pass | 19,925 | 7,634 | -62% | 1 | 1 | 0% | 2,338 | 2,463 | +5% | 0 | 0 | — |
case-01 | fail→pass | 22,156 | 31,335 | +41% | 1 | 1 | 0% | 3,683 | 3,362 | -9% | 0 | 0 | — |
case-02 | fail→pass | 18,996 | 18,576 | -2% | 1 | 1 | 0% | 3,748 | 5,238 | +40% | 0 | 0 | — |
case-03 | fail→pass | 17,689 | 13,611 | -23% | 1 | 1 | 0% | 2,664 | 3,933 | +48% | 0 | 0 | — |
case-04 | fail→pass | 17,935 | 5,396 | -70% | 1 | 1 | 0% | 1,917 | 2,237 | +17% | 0 | 0 | — |
case-05 | pass→pass | 15,925 | 12,489 | -22% | 1 | 1 | 0% | 2,079 | 2,442 | +17% | 0 | 0 | — |
case-06 | fail→fail | 13,835 | 6,686 | -52% | 1 | 1 | 0% | 1,394 | 2,371 | +70% | 0 | 0 | — |
case-07 | pass→pass | 19,858 | 13,838 | -30% | 1 | 1 | 0% | 2,949 | 2,747 | -7% | 0 | 0 | — |
case-08 | pass→pass | 18,947 | 11,491 | -39% | 1 | 1 | 0% | 2,814 | 2,417 | -14% | 0 | 0 | — |
case-09 | fail→fail | 20,154 | 9,614 | -52% | 1 | 1 | 0% | 2,877 | 3,096 | +8% | 0 | 0 | — |
case-10 | pass→pass | 5,245 | 1,851 | -65% | 1 | 1 | 0% | 895 | 1,348 | +51% | 0 | 0 | — |
case-11 | fail→pass | 10,014 | 8,055 | -20% | 1 | 1 | 0% | 917 | 1,645 | +79% | 0 | 0 | — |
case-13 | pass→pass | 16,588 | 6,853 | -59% | 1 | 1 | 0% | 1,943 | 2,308 | +19% | 0 | 0 | — |
case-14 | pass→pass | 16,170 | 9,462 | -41% | 1 | 1 | 0% | 2,030 | 2,784 | +37% | 0 | 0 | — |
case-15 | pass→pass | 10,915 | 19,187 | +76% | 1 | 1 | 0% | 1,686 | 2,584 | +53% | 0 | 0 | — |
case-16 | pass→pass | 27,894 | 11,903 | -57% | 1 | 1 | 0% | 3,756 | 3,483 | -7% | 0 | 0 | — |
case-17 | fail→fail | 21,481 | 14,598 | -32% | 1 | 1 | 0% | 2,933 | 3,922 | +34% | 0 | 0 | — |
case-18 | pass→pass | 8,540 | 8,908 | +4% | 1 | 1 | 0% | 1,237 | 1,826 | +48% | 0 | 0 | — |
case-19 | pass→pass | 9,447 | 8,778 | -7% | 1 | 1 | 0% | 803 | 1,690 | +110% | 0 | 0 | — |
case-20 | fail→fail | 12,222 | 12,338 | +1% | 1 | 1 | 0% | 1,780 | 2,389 | +34% | 0 | 0 | — |
case-21 | pass→fail | 24,395 | 26,168 | +7% | 1 | 1 | 0% | 3,293 | 4,896 | +49% | 0 | 0 | — |
case-22 | pass→pass | 14,023 | 12,021 | -14% | 1 | 1 | 0% | 1,562 | 2,270 | +45% | 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 +23 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.