Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute Hex secondary workflow: Core Workflow B. Use when implementing secondary use case, or complementing primary workflow. Trigger with phrases like "hex secondary workflow", "secondary task with hex".
.claude/skills/jeremylongshore-hex-core-workflow-b/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -47% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 52% | 0% |
Configure scheduled runs and manage workspace resources via the Hex Admin API. Scheduled runs execute projects on cron-based intervals. The Admin API manages users, groups, and data connections.
typescriptconst TOKEN = process.env.HEX_API_TOKEN!; const BASE = 'https://app.hex.tech/api/v1'; async function getProjectRuns(projectId: string) { const response = await fetch(`${BASE}/project/${projectId}/runs`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); const runs = await response.json(); for (const run of runs) { console.log(`${run.runId}: ${run.status} (${run.startTime} → ${run.endTime || 'running'})`); } return runs; }
Schedules are configured in the Hex UI. For API-based scheduling, use external cron:
typescript// cron-trigger.ts — run via cron job or CI import cron from 'node-cron'; // Daily at 6 AM UTC cron.schedule('0 6 * * *', async () => { console.log('Triggering daily report...'); await triggerRun({ projectId: 'daily-report-project-id', inputParams: { date: new Date().toISOString().split('T')[0] }, updateCache: true, }); }); // Weekly on Monday at 9 AM cron.schedule('0 9 * * 1', async () => { await triggerRun({ projectId: 'weekly-summary-project-id' }); });
typescript// List workspace users async function listUsers() { const response = await fetch(`${BASE}/workspace/users`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); return response.json(); } // List groups async function listGroups() { const response = await fetch(`${BASE}/workspace/groups`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); return response.json(); }
typescript// List configured data connections async function listConnections() { const response = await fetch(`${BASE}/workspace/connections`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); return response.json(); }
| Method | Intervals | Plan Required | |--------|-----------|---------------| | Hex UI | Hourly, daily, weekly, monthly | Team+ | | Hex UI (cron) | Any cron expression | Team+ | | API trigger + external cron | Any schedule | Team+ | | Airflow/Dagster integration | Any schedule | Team+ |
For common errors, see hex-common-errors.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,115 | 11,285 | -30% | 1 | 1 | 0% | 2,235 | 2,085 | -7% | 0 | 0 | — |
case-02 | fail→pass | 26,707 | 19,209 | -28% | 1 | 1 | 0% | 3,325 | 2,963 | -11% | 0 | 0 | — |
case-03 | pass→pass | 12,294 | 7,565 | -38% | 1 | 1 | 0% | 1,318 | 1,165 | -12% | 0 | 0 | — |
case-04 | pass→pass | 9,274 | 9,020 | -3% | 1 | 1 | 0% | 1,723 | 1,470 | -15% | 0 | 0 | — |
case-05 | pass→pass | 12,703 | 3,901 | -69% | 1 | 1 | 0% | 1,284 | 1,390 | +8% | 0 | 0 | — |
case-06 | pass→pass | 9,727 | 10,859 | +12% | 1 | 1 | 0% | 894 | 1,595 | +78% | 0 | 0 | — |
case-07 | fail→pass | 15,989 | 5,092 | -68% | 1 | 1 | 0% | 1,801 | 1,722 | -4% | 0 | 0 | — |
case-08 | fail→pass | 14,404 | 9,472 | -34% | 1 | 1 | 0% | 2,598 | 1,374 | -47% | 0 | 0 | — |
case-09 | fail→pass | 10,367 | 3,277 | -68% | 1 | 1 | 0% | 787 | 1,194 | +52% | 0 | 0 | — |
case-10 | fail→pass | 17,017 | 8,021 | -53% | 1 | 1 | 0% | 2,350 | 1,300 | -45% | 0 | 0 | — |
case-11 | fail→pass | 13,584 | 8,760 | -36% | 1 | 1 | 0% | 1,352 | 1,292 | -4% | 0 | 0 | — |
case-12 | pass→pass | 11,302 | 3,641 | -68% | 1 | 1 | 0% | 777 | 1,305 | +68% | 0 | 0 | — |
case-13 | pass→pass | 18,679 | 17,698 | -5% | 1 | 1 | 0% | 2,441 | 3,161 | +29% | 0 | 0 | — |
case-14 | fail→pass | 8,476 | 6,806 | -20% | 1 | 1 | 0% | 1,466 | 1,018 | -31% | 0 | 0 | — |
case-15 | fail→pass | 12,647 | 14,491 | +15% | 1 | 1 | 0% | 2,432 | 2,413 | -1% | 0 | 0 | — |
case-16 | pass→pass | 9,966 | 6,881 | -31% | 1 | 1 | 0% | 890 | 999 | +12% | 0 | 0 | — |
case-17 | pass→pass | 10,888 | 7,048 | -35% | 1 | 1 | 0% | 1,868 | 1,980 | +6% | 0 | 0 | — |
case-18 | pass→pass | 12,549 | 2,114 | -83% | 1 | 1 | 0% | 1,293 | 1,047 | -19% | 0 | 0 | — |
case-19 | pass→pass | 12,617 | 1,931 | -85% | 1 | 1 | 0% | 1,311 | 1,007 | -23% | 0 | 0 | — |
case-20 | pass→pass | 13,176 | 7,330 | -44% | 1 | 1 | 0% | 2,391 | 1,142 | -52% | 0 | 0 | — |
case-21 | fail→pass | 3,322 | 7,335 | +121% | 1 | 1 | 0% | 619 | 1,111 | +79% | 0 | 0 | — |
case-22 | pass→pass | 6,319 | 3,322 | -47% | 1 | 1 | 0% | 1,133 | 1,349 | +19% | 0 | 0 | — |
case-23 | pass→pass | 7,642 | 4,845 | -37% | 1 | 1 | 0% | 1,196 | 1,498 | +25% | 0 | 0 | — |
case-24 | pass→pass | 14,342 | 7,376 | -49% | 1 | 1 | 0% | 1,514 | 1,843 | +22% | 0 | 0 | — |
case-25 | pass→pass | 12,734 | 5,777 | -55% | 1 | 1 | 0% | 1,363 | 1,661 | +22% | 0 | 0 | — |
case-26 | pass→pass | 5,818 | 10,014 | +72% | 1 | 1 | 0% | 927 | 1,318 | +42% | 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. 26 cases were attempted. The headline lift of +38 percentage points is the difference between those two pass rates over the 26 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.