Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Claim tasks, record step progress, and verify SOP gates in the colony SQLite queue. Applies when your spawn message includes a db_path field.
.claude/skills/aden-hive-hive-colony-progress-tracker/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 198% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 107% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 81% | 0% |
Applies when your spawn message has db_path: and colony_id: fields. The DB is your durable working memory — tells you what's done, what to skip, which SOP gates you owe.
Access via terminal_exec running sqlite3 "<db_path>" "...". Tables: tasks (queue), steps (per-task decomposition), sop_checklist (hard gates).
If your spawn message includes a task_id: field, the queen pre-assigned a specific row to you. Claim that row by id — do not use the generic next-pending pattern below:
bashsqlite3 "<db_path>" <<'SQL' UPDATE tasks SET status='claimed', worker_id='<worker-id>', claim_token=lower(hex(randomblob(8))), claimed_at=datetime('now'), updated_at=datetime('now') WHERE id='<task_id>' AND status='pending' RETURNING id, goal, payload; SQL
Empty output → another worker raced you or the row is already done. Stop and report. Non-empty → that row is yours, proceed to "Load the plan".
If your spawn message did NOT include task_id: — you are a generic fan-out worker racing on a shared queue. Use the generic next-pending claim:
bashsqlite3 "<db_path>" <<'SQL' UPDATE tasks SET status='claimed', worker_id='<worker-id>', claim_token=lower(hex(randomblob(8))), claimed_at=datetime('now'), updated_at=datetime('now') WHERE id=(SELECT id FROM tasks WHERE status='pending' ORDER BY priority DESC, seq, created_at LIMIT 1) RETURNING id, goal, payload; SQL
Empty output → queue drained, exit. Otherwise the returned id is yours. Never SELECT-then-UPDATE — races.
bashsqlite3 "<db_path>" "SELECT seq, id, title, status FROM steps WHERE task_id='<task-id>' ORDER BY seq;" sqlite3 "<db_path>" "SELECT key, description, required, done_at FROM sop_checklist WHERE task_id='<task-id>';"
Skip any step where status='done'. That's the point — don't redo completed work.
Before tool calls:
bashsqlite3 "<db_path>" "UPDATE steps SET status='in_progress', worker_id='<worker-id>', started_at=datetime('now') WHERE id='<step-id>';"
After success (one-line evidence: path, URL, key result):
bashsqlite3 "<db_path>" "UPDATE steps SET status='done', evidence='<what you did>', completed_at=datetime('now') WHERE id='<step-id>';"
bashsqlite3 "<db_path>" "SELECT key, description FROM sop_checklist WHERE task_id='<task-id>' AND required=1 AND done_at IS NULL;"
bashsqlite3 "<db_path>" "UPDATE sop_checklist SET done_at=datetime('now'), done_by='<worker-id>', note='<why>' WHERE task_id='<task-id>' AND key='<key>';"
Never mark a task done while this SELECT returns rows. This gate exists specifically to stop you from declaring success while skipping required steps.
bash# Success: sqlite3 "<db_path>" "UPDATE tasks SET status='done', completed_at=datetime('now'), updated_at=datetime('now') WHERE id='<task-id>' AND worker_id='<worker-id>';" # Unrecoverable failure: sqlite3 "<db_path>" "UPDATE tasks SET status='failed', last_error='<one sentence>', completed_at=datetime('now'), updated_at=datetime('now') WHERE id='<task-id>' AND worker_id='<worker-id>';"
The AND worker_id=? guard means a reclaimed row won't accept your write — treat zero rows affected as "your claim was revoked, stop."
After done/failed → claim the next task. Exit only when claim returns empty.
busy_timeout=5000 handles most contention silently.SELECT status, count(*) FROM tasks GROUP BY status;SELECT id, goal, status FROM tasks WHERE worker_id='<worker-id>';failed for audit.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,129 | 5,940 | +44% | 1 | 1 | 0% | 351 | 1,839 | +424% | 0 | 0 | — |
case-02 | fail→fail | 4,906 | 5,986 | +22% | 1 | 1 | 0% | 267 | 1,894 | +609% | 0 | 0 | — |
case-03 | fail→fail | 5,906 | 6,202 | +5% | 1 | 1 | 0% | 394 | 1,749 | +344% | 0 | 0 | — |
case-04 | fail→pass | 4,352 | 3,970 | -9% | 1 | 1 | 0% | 970 | 2,137 | +120% | 0 | 0 | — |
case-05 | fail→pass | 14,513 | 7,464 | -49% | 1 | 1 | 0% | 957 | 2,852 | +198% | 0 | 0 | — |
case-06 | fail→fail | 8,836 | 4,238 | -52% | 1 | 1 | 0% | 1,689 | 2,028 | +20% | 0 | 0 | — |
case-11 | fail→pass | 4,620 | 3,440 | -26% | 1 | 1 | 0% | 905 | 1,875 | +107% | 0 | 0 | — |
case-07 | fail→pass | 8,077 | 2,980 | -63% | 1 | 1 | 0% | 1,457 | 1,897 | +30% | 0 | 0 | — |
case-08 | fail→pass | 5,675 | 3,673 | -35% | 1 | 1 | 0% | 1,099 | 1,985 | +81% | 0 | 0 | — |
case-09 | fail→pass | 13,312 | 2,981 | -78% | 1 | 1 | 0% | 2,484 | 1,862 | -25% | 0 | 0 | — |
case-10 | fail→pass | 8,886 | 3,297 | -63% | 1 | 1 | 0% | 1,842 | 2,009 | +9% | 0 | 0 | — |
case-12 | fail→pass | 5,772 | 3,042 | -47% | 1 | 1 | 0% | 1,066 | 1,810 | +70% | 0 | 0 | — |
case-13 | fail→pass | 12,730 | 5,283 | -58% | 1 | 1 | 0% | 2,333 | 2,236 | -4% | 0 | 0 | — |
case-14 | fail→pass | 10,614 | 5,815 | -45% | 1 | 1 | 0% | 1,960 | 2,239 | +14% | 0 | 0 | — |
case-15 | fail→pass | 4,127 | 4,871 | +18% | 1 | 1 | 0% | 832 | 2,216 | +166% | 0 | 0 | — |
case-16 | fail→pass | 10,914 | 3,936 | -64% | 1 | 1 | 0% | 1,875 | 1,930 | +3% | 0 | 0 | — |
case-17 | pass→pass | 9,959 | 3,276 | -67% | 1 | 1 | 0% | 1,290 | 1,933 | +50% | 0 | 0 | — |
case-18 | pass→pass | 8,942 | 3,835 | -57% | 1 | 1 | 0% | 1,630 | 2,057 | +26% | 0 | 0 | — |
case-19 | fail→pass | 4,925 | 2,312 | -53% | 1 | 1 | 0% | 1,000 | 1,687 | +69% | 0 | 0 | — |
case-20 | pass→pass | 3,164 | 1,684 | -47% | 1 | 1 | 0% | 590 | 1,568 | +166% | 0 | 0 | — |
case-21 | pass→pass | 14,673 | 14,832 | +1% | 1 | 1 | 0% | 3,036 | 4,288 | +41% | 0 | 0 | — |
case-22 | pass→pass | 14,992 | 13,235 | -12% | 1 | 1 | 0% | 2,936 | 3,795 | +29% | 0 | 0 | — |
case-23 | fail→pass | 18,472 | 21,836 | +18% | 1 | 1 | 0% | 4,300 | 6,114 | +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. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +61 percentage points is the difference between those two pass rates over the 19 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.