Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage persistent context threads for cross-session work
.claude/skills/coco-research-gsd-thread/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -37% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -45% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -22% | 0% |
<objective> Create, list, or resume persistent context threads. Threads are lightweight cross-session knowledge stores for work that spans multiple sessions but doesn't belong to any specific phase. </objective>
<process>
Parse $ARGUMENTS to determine mode:
<mode_list> If no arguments or $ARGUMENTS is empty:
List all threads:
bashls .planning/threads/*.md 2>/dev/null
For each thread, read the first few lines to show title and status:
## Active Threads
| Thread | Status | Last Updated |
|--------|--------|-------------|
| fix-deploy-key-auth | OPEN | 2026-03-15 |
| pasta-tcp-timeout | RESOLVED | 2026-03-12 |
| perf-investigation | IN PROGRESS | 2026-03-17 |If no threads exist, show:
No threads found. Create one with: /gsd-thread <description></mode_list>
<mode_resume> If $ARGUMENTS matches an existing thread name (file exists):
Resume the thread — load its context into the current session:
bashcat ".planning/threads/${THREAD_NAME}.md"
Display the thread content and ask what the user wants to work on next. Update the thread's status to IN PROGRESS if it was OPEN. </mode_resume>
<mode_create> If $ARGUMENTS is a new description (no matching thread file):
Create a new thread:
bash SLUG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" generate-slug "$ARGUMENTS" --raw)
bash mkdir -p .planning/threads
bash cat > ".planning/threads/${SLUG}.md" << 'EOF' # Thread: {description}
## Status: OPEN
## Goal
{description}
## Context
Created from conversation on {today's date}.
## References
## Next Steps
EOF
error messages, investigation results), extract and add it to the Context section.
bash node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: create thread — ${ARGUMENTS}" --files ".planning/threads/${SLUG}.md"
## 🧵 Thread Created
Thread: {slug} File: .planning/threads/{slug}.md
Resume anytime with: /gsd-thread {slug} </mode_create>
</process>
<notes>
/gsd-add-phase or /gsd-add-backlog with context from the thread
</notes>
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 9,246 | 5,718 | -38% | 1 | 1 | 0% | 594 | 1,084 | +82% | 0 | 0 | — |
case-12 | fail→fail | 11,513 | 1,479 | -87% | 1 | 1 | 0% | 954 | 1,095 | +15% | 0 | 0 | — |
case-01 | fail→fail | 5,058 | 15,184 | +200% | 1 | 1 | 0% | 726 | 988 | +36% | 0 | 0 | — |
case-03 | fail→fail | 13,042 | 10,819 | -17% | 1 | 1 | 0% | 1,136 | 1,040 | -8% | 0 | 0 | — |
case-04 | pass→fail | 11,572 | 13,182 | +14% | 1 | 1 | 0% | 1,875 | 1,278 | -32% | 0 | 0 | — |
case-05 | fail→fail | 11,492 | 13,186 | +15% | 1 | 1 | 0% | 1,534 | 1,279 | -17% | 0 | 0 | — |
case-06 | pass→fail | 13,182 | 13,965 | +6% | 1 | 1 | 0% | 1,134 | 1,170 | +3% | 0 | 0 | — |
case-07 | fail→fail | 3,158 | 7,478 | +137% | 1 | 1 | 0% | 369 | 1,118 | +203% | 0 | 0 | — |
case-08 | fail→pass | 11,883 | 5,054 | -57% | 1 | 1 | 0% | 1,663 | 1,563 | -6% | 0 | 0 | — |
case-09 | fail→pass | 20,109 | 10,080 | -50% | 1 | 1 | 0% | 2,105 | 1,555 | -26% | 0 | 0 | — |
case-10 | fail→pass | 12,728 | 8,108 | -36% | 1 | 1 | 0% | 2,299 | 1,451 | -37% | 0 | 0 | — |
case-11 | fail→fail | 13,917 | 11,179 | -20% | 1 | 1 | 0% | 1,330 | 1,208 | -9% | 0 | 0 | — |
case-13 | fail→fail | 7,889 | 1,948 | -75% | 1 | 1 | 0% | 352 | 1,170 | +232% | 0 | 0 | — |
case-14 | pass→fail | 9,285 | 6,957 | -25% | 1 | 1 | 0% | 774 | 1,130 | +46% | 0 | 0 | — |
case-15 | fail→fail | 12,598 | 7,917 | -37% | 1 | 1 | 0% | 2,135 | 1,418 | -34% | 0 | 0 | — |
case-16 | fail→fail | 14,491 | 6,121 | -58% | 1 | 1 | 0% | 1,646 | 1,187 | -28% | 0 | 0 | — |
case-17 | fail→fail | 9,759 | 5,730 | -41% | 1 | 1 | 0% | 1,594 | 1,219 | -24% | 0 | 0 | — |
case-18 | fail→pass | 18,168 | 7,574 | -58% | 1 | 1 | 0% | 2,211 | 1,222 | -45% | 0 | 0 | — |
case-19 | fail→pass | 9,141 | 7,143 | -22% | 1 | 1 | 0% | 1,504 | 1,171 | -22% | 0 | 0 | — |
case-20 | fail→fail | 12,956 | 2,091 | -84% | 1 | 1 | 0% | 1,762 | 1,076 | -39% | 0 | 0 | — |
case-21 | fail→fail | 19,494 | 6,190 | -68% | 1 | 1 | 0% | 2,666 | 993 | -63% | 0 | 0 | — |
case-22 | fail→pass | 20,393 | 3,009 | -85% | 1 | 1 | 0% | 3,605 | 1,428 | -60% | 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, and 13 counted toward the lift figure. The other 9 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 +14 percentage points is the difference between those two pass rates over the 13 comparable cases. 6 cases got worse with the skill loaded, and they are 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.