Reprendre le travail depuis un fil

VérifiéPrudence

Reprendre le travail depuis un fil de transfert spécifique par ID. Charge l'état sauvegardé (résumé, prochaines étapes, modifications git, apprentissages) pour continuer une session exacte.

Spar Skills Guide Bot
ProductiviteIntermédiaire
22/07/2026
Claude Code
#session-resume#handoff#context-restoration#thread-management#workflow-continuity

Recommandé pour

Synthèse automatique

Recharge un fil de travail précis à partir de son identifiant de handoff et rétablit son état sauvegardé (résumé, prochaines étapes, git, fichiers touchés, apprentissages) dans une nouvelle session.

Points forts

  • Résout un identifiant partiel ou suffixé en .json sur les fils actifs et archivés, et demande à l'utilisateur de trancher en cas d'ambiguïté plutôt que de deviner
  • Met en place un verrou de reprise durable (resume-locks) séparé du JSON du fil, pour éviter que deux sessions continuent le même travail
  • Gère proprement les cas d'erreur : argument absent, aucune correspondance, ou piège du fichier *.changeset.json à ne pas charger comme fil
  • S'appuie sur des commandes de script déterministes (hq-session.sh, resume-thread-lock.sh) et non sur une simple lecture approximative

Limites

  • Exige un identifiant de fil explicite : sans argument, le skill s'arrête et renvoie vers /startwork
  • Fortement couplé à l'arborescence workspace/threads/ et aux scripts core/scripts/ du dépôt hôte
  • Ne convient pas à l'analyse post-mortem d'une session bloquée, qui relève de /recover-session
Quand l'utiliser

Quand vous avez en main un identifiant de fil issu d'un rapport /handoff et que vous voulez reprendre exactement cette session, même s'il ne s'agit pas du handoff le plus récent.

Quand l'éviter

Pour reprendre simplement le dernier handoff connu, ou pour diagnostiquer une session plantée, où /startwork et /recover-session sont plus adaptés.

Analyse de sécurité

Prudence
Score qualité84/100

The workflow is a legitimate session-resume orchestrator: it lists/reads JSON thread files, inspects git state, and manages a lock marker via in-repo scripts. Nothing sends data outward, deletes broadly, or decodes hidden payloads. The primary concerns are scope (unrestricted `Bash` beyond the declared granular patterns), mild argument/glob handling of `$ARGUMENTS`, and reliance on unseen `core/scripts/*` helpers — powerful-tool usage for an ordinary purpose, hence caution rather than safe.

Points d'attention
  • •Declared allowed-tools includes an unrestricted `Bash` alongside the specific scoped Bash patterns (`Bash(git:*)`, `Bash(qmd:*)`, etc.), granting more shell capability than the described workflow needs.
  • •Shell snippets interpolate the user-supplied `$ARGUMENTS` into `find -path "*${id}*"` and `ls`/`find` args without quoting hardening beyond `tr -d '[:space:]'`; unusual characters in a thread id could cause glob/argument surprises.
  • •The skill depends on executing repo-local scripts `core/scripts/hq-session.sh` and `core/scripts/resume-thread-lock.sh`, whose behavior is not shown — the risk is bounded by whatever code lives at those paths in the host repo.
  • •No destructive, exfiltration, obfuscation, or safety-disabling behavior present; commands are limited to reading/listing thread files and lock management.
Comment cette analyse est faite

Exemples

Resume by full thread id
/resumework T-20260625-084414-files-acl-grant-timeout
Resume from a partial slug
/resumework files-acl-grant-timeout — pick up where that thread left off
Resume an archived thread
Continue thread T-20260601-153000-billing-retry.json from my last handoff report

name: resumework description: Resume work from a specific handoff thread by id. Loads that thread's saved state (summary, next steps, git, files touched, learnings) and drops you straight back into the work. Use when you have a thread id in hand — e.g. from a previous /handoff report — and want to continue that exact session in a fresh one, rather than picking the most recent handoff (/startwork) or doing a post-mortem (/recover-session). allowed-tools: Read, Grep, Glob, Bash(git:), Bash(qmd:), Bash(ls:), Bash(find:), Bash(jq:), Bash(cat:), Bash(core/scripts/hq-session.sh:), Bash(bash core/scripts/resume-thread-lock.sh:), Bash, AskUserQuestion

Resume Work From a Thread

Targeted resume. Unlike /startwork (which peeks at handoff.json for the latest session), this skill takes an explicit thread id and rehydrates that exact thread so you can continue it in a fresh session.

Thread id (required): $ARGUMENTS

When to Use

  • A /handoff report gave you a thread id (T-YYYYMMDD-HHMMSS-slug) and you want to pick that work back up later.
  • You want to resume a session that is not the most recent handoff (so /startwork's "Resume last session" would load the wrong one).
  • You're continuing real work — not auditing a crashed session. For a post-mortem of a wedged session, use /recover-session instead.

Process

1. Resolve the thread id

The argument is a thread id, with or without the .json suffix, and may be a partial slug. Resolve it to exactly one thread file under workspace/threads/ (also check workspace/threads/archive/** for older threads).

arg="$ARGUMENTS"                       # e.g. T-20260625-084414-files-acl-grant-timeout
id="${arg%.json}"; id="${id##*/}"      # strip .json and any leading path
id="$(echo "$id" | tr -d '[:space:]')" # trim stray whitespace

# Exact match first, then prefix/substring across active + archived threads.
matches=$(ls "workspace/threads/${id}.json" 2>/dev/null)
if [ -z "$matches" ]; then
  matches=$(find workspace/threads \
    -path 'workspace/threads/resume-locks' -prune -o \
    -name '*.json' ! -name '*.changeset.json' -path "*${id}*" -print 2>/dev/null)
fi
printf '%s\n' "$matches"
  • No arg / empty — STOP. This skill requires a thread id. Tell the user the form (/resumework <thread-id>) and offer /startwork (resume the latest handoff) as the no-id alternative. List the few most recent thread ids to choose from: ls -t workspace/threads/T-*.json 2>/dev/null | grep -v changeset | head -5.
  • Exactly one match — proceed with that file.
  • Multiple matches — present them via AskUserQuestion (id + title, newest first) and wait for the user to pick one. Do not guess.
  • No match — report it plainly and show the 5 most recent thread ids so the user can correct the id.

Never load a *.changeset.json as the thread — it's the changeset sidecar, not the thread.

2. Check and record the resume lock

After resolving exactly one thread and before reading its handoff details, inspect its durable resume lock. The lock lives at workspace/threads/resume-locks/{thread_id}.lock/, separate from the immutable thread JSON: thread archival can move T-*.json files without losing the marker.

thread_file="$matches"                         # exactly one match from Step 1
thread_id="$(basename "$thread_file" .json)"
bash core/scripts/hq-session.sh current
bash core/scripts/resume-thread-lock.sh inspect "$thread_id"

Keep the first command's output as session_id (use unknown-session if it is empty). Keep the second command's one-JSON-object output as lock_json, and read its .status with jq.

  • unlocked — acquire the marker, then continue:

    bash core/scripts/resume-thread-lock.sh acquire "$thread_id" --session-id "$session_id"
    

    If this race-loses with exit 3, inspect again and follow the locked/stale path below. Do not proceed without the resulting confirmation.

  • locked or stale — use AskUserQuestion and wait. Ask exactly the prompt supplied by lock_json; it includes the prior session and timestamp. The question must explicitly ask: “This thread was already resumed by {session} at {when}. Re-resume anyway?” Offer only:

    • Re-resume anyway — refresh the marker for this session and continue.
    • Cancel resume — stop; do not read or act on the thread.

    Only after the user chooses Re-resume anyway, keep lock_json.lock_generation as lock_generation, then run:

    bash core/scripts/resume-thread-lock.sh acquire "$thread_id" --replace --expected-generation "$lock_generation" --session-id "$session_id"
    

    If that command exits 4, the marker changed while the question was open. Re-inspect it and ask the user again using the new prompt; never reuse the earlier confirmation to replace a newer lock.

    Never silently proceed or silently replace a marker. A stale marker (expired after the configured HQ_RESUME_LOCK_STALE_SECONDS, 24 hours by default, or malformed) is still evidence of an earlier resume, so it follows this same explicit confirmation path. Do not delete stale lock state; the confirmed --replace refreshes it.

3. Load the thread

Read the resolved thread file (it's small — one Read). Extract:

  • conversation_summary — what the prior session accomplished
  • next_steps[] — the ordered todo handed off
  • git.branch, git.current_commit, git.dirty
  • files_touched[] — the changeset boundary
  • learnings[] — operational notes (do not re-/learn them; they're already applied)
  • metadata.title, metadata.tags
  • changeset_path — if present, note it (don't read it unless the user needs the full diff scope)

If the thread references a company (via tags, cwd, or a companies/{co}/... path in files_touched), note the slug for Step 4.

4. Verify current git state vs the thread

The thread records the git state at handoff. Confirm where the repo is now so the user knows if anything drifted:

# Anchor to the repo the thread worked in when it's a nested repo;
# otherwise use HQ root context.
git -C {repoPath or HQ root} branch --show-current
git -C {repoPath or HQ root} log --oneline -3
git -C {repoPath or HQ root} status --short

Flag plainly if the current branch differs from git.branch, or if git.current_commit is no longer at HEAD (someone committed/merged since the handoff). If git.dirty was true at handoff but the tree is now clean, the in-flight edits may have been committed or lost — call that out.

5. Persist session metadata (if a company resolved)

bash core/scripts/hq-session.sh set company_slug "{co}"   # only if resolved
bash core/scripts/hq-session.sh set mode "Resume"

Skip the company_slug line if no company is resolvable from the thread — same fail-closed behavior as /startwork.

6. Present the resume block + next steps

Resuming thread
---------------
Thread: {thread_id}
Title:  {metadata.title}
Last session: {conversation_summary}

Git (at handoff): {git.branch} @ {git.current_commit}{" (dirty)" if dirty}
Git (now):        {current branch} @ {current short-hash}{drift note if any}

Files touched last session: {count} ({first few paths})

Next steps:
  1. {next_steps[0].step}
  2. {next_steps[1].step}
  ...

Then offer, via AskUserQuestion (one question, wait):

  • Start on next step 1 — begin the first handed-off next step.
  • Pick a different next step — let the user choose which step to start.
  • Something else — free-text; treat as a fresh task in this resumed context.

After the pick, proceed directly into the work.

Rules

  • A thread id is required. Naked /resumework does not fall through to latest-handoff resume — that's /startwork's job. Point the user there instead.
  • Read at most: the one resolved thread file + git state + (optionally) one journal file if the thread names a project_dir. Do not read INDEX.md, agents files, or company knowledge — same context diet as /startwork.
  • Never re-run /learn on the thread's learnings[]; they were applied at handoff time. They're shown for context only.
  • Resolve to exactly one thread before loading. On ambiguity, ask — never guess which thread the user meant.
  • Once a thread is exactly resolved, always inspect and acquire its resume lock before loading it. If it is already locked or stale, always ask the user whether to re-resume; never silently proceed or hard-block.
  • Keep the marker under workspace/threads/resume-locks/; never add resume state to the handoff JSON or changeset sidecar, because they are immutable handoff records and can be archived.
  • Always verify the live git branch with git branch --show-current; never trust the thread's recorded branch as current.
  • This skill executes directly — no plan-mode detour.

See also

  • /startwork — resume the latest handoff (reads handoff.json) or pick a fresh company/project/repo.
  • /handoff — writes the thread this skill resumes; its report prints the thread id to pass here.
  • /recover-session — post-mortem triage of a crashed/wedged session (not normal resume).

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/resume-work-from-a-thread-mrwakb6o' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/resume-work-from-a-thread-mrwakb6o/download' --output '.skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md.part' && mv '.skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md.part' '.skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Grep, Glob, Bash(git:*), Bash(qmd:*), Bash(ls:*), Bash(find:*), Bash(jq:*), Bash(cat:*), Bash(core/scripts/hq-session.sh:*), Bash(bash core/scripts/resume-thread-lock.sh:*), Bash, AskUserQuestion

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md' && test -s '.skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/resumework' && cp -R '.skill-downloads/resume-work-from-a-thread-mrwakb6o' '.claude/skills/resumework'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/resume-work-from-a-thread-mrwakb6o'

openskills read 'resume-work-from-a-thread-mrwakb6o'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/resume-work-from-a-thread-mrwakb6o/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires