원클릭으로
session-lifecycle-management
Decidir resume vs fork vs fresh con summary tipado segun validez de contexto y deteccion de tool results stale.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Decidir resume vs fork vs fresh con summary tipado segun validez de contexto y deteccion de tool results stale.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Branded output generation: HTML/CSS/JS, DOCX, XLSX, PDF, vector art, folios, templates (MetodologIA DS tokens in references/brand). Topics: brand-art, brand-docx, brand-html, brand-pdf, brand-xlsx, branded-html-output, folio-generator, html-brand, presentation-design, xlsx-template-creator.
Router for sales and business development in an ES/EN consulting context — prospecting, outreach, dossiers, proposals, pitches, and collateral. Topics: b2b-outreach, client-dossier, client-prospecting, executive-pitch, lead-generation, proposal-writing, sales-collateral.
Intent Integrity Kit: spec-driven development pipeline (constitution->specify->plan->checklist->testify->tasks->analyze->implement). Consumes upstream intent-integrity-chain/kit conventions. Topics: 00-constitution, 01-specify, 02-plan, 03-checklist, 04-testify, 05-tasks, 06-analyze, 07-implement, 08-taskstoissues, bugfix, clarify, core.
SEO and conversion growth router: technical SEO, content SEO, landing pages, funnels, CRO, trust patterns. Topics: conversion-optimization, funnel-design, indexability-validator, landing-page-builder, landing-pages, seo-architecture, seo-content, social-proof.
Router for software testing strategy and execution: pick one topic — bdd-full-spectrum, cross-browser-testing, e2e-testing, performance-testing, test-strategy, or unit-testing — and run its playbook.
Pack de carrera (es): proceso de seleccion, entrevistas, negociacion, CV, onboarding, red. Topics: acta-formal, cierre-conversacion, cv-cover-optimizer, cv-enhancement, follow-up-email, gratitud-post-proceso, negociacion-oferta, onboarding-90-dias, proceso-seleccion-orchestrator, red-y-referencias, simulador-entrevista, validar-liquidacion-co.
| name | session-lifecycle-management |
| version | 1.1.0 |
| description | Decidir resume vs fork vs fresh con summary tipado segun validez de contexto y deteccion de tool results stale. |
| owner | JM Labs |
| last_updated | "2026-06-11T00:00:00.000Z" |
| triggers | ["session lifecycle management","resume vs fork","fresh summary session","stale context"] |
| allowed-tools | ["Read","Grep","Glob","Bash"] |
Decidir de forma auditable, no por intuición del modelo, entre tres transiciones de sesión de agente: resume (contexto aún válido, objetivo continuo), fork (explorar ramas paralelas sin interferencia) y fresh con TypedSummary (el mundo cambió y el scratchpad quedó stale). [DOC]
El núcleo de ingeniería es la detección de staleness: identificar cuándo los resultados cacheados (lecturas de archivo, salidas de comando, estados de build) ya no reflejan el estado actual, y comprimir el scratchpad en hechos verificables —no un transcript crudo. [INFERENCIA]
No la uses (anti-scope) para: tareas de dominio sin sesión persistente (p. ej. generar un reporte financiero), un solo turno sin contexto previo, o input vacío. Si no hay SessionContext previo, no hay transición que decidir → no activar. [INFERENCIA]
SessionContext (timestamp de captura, tool_results[] con su source+mtime/hash, invariantes del mundo: HEAD de git, hash del lockfile, esquema de BD) y un Goal (continuo | ramificable). [CODE]Transition (Resume | Fork | Fresh) + un reporte JSON de decisión con: transición elegida, stale[] detectados, razón del disparo, y TypedSummary cuando es fresh. [CODE]bash skills/session-lifecycle-management/scripts/check.sh. [CONFIG]SessionContext: timestamp, tool_results con hash/mtime de origen, e invariantes del mundo (HEAD, lockfile, esquema). [CODE]mtime/hash divergió, márcalo stale. Una sola dependencia stale crítica invalida el resume. [CODE]resume; ramificable sin estado mutable compartido → fork; staleness crítico o mundo cambiado → fresh. [CODE]TypedSummary. Emite objeto tipado, no transcript: goal, decisions[], open_questions[], verified_facts[] (cada hecho con su evidencia), stale_dropped[]. [CODE]fresh, qué quedó stale) y pasa el gate. [CODE]mtime + hash, no solo mtime. mtime solo da falsos positivos (touch sin cambio) y falsos negativos (clock skew, checkout). El hash es la verdad; mtime es el filtro barato que evita hashear todo. Trade-off: doble fuente por algo de costo. [INFERENCIA]TypedSummary sobre transcript crudo. El transcript reintroduce results stale que el modelo tratará como verdad actual y quema tokens. El tipado fuerza a descartar lo stale explícitamente. Trade-off: pierdes matiz conversacional a cambio de hechos verificables. [INFERENCIA]fresh. Sesgo conservador: el costo de un resume sobre contexto corrupto (decisiones sobre datos falsos) supera el de re-sintetizar. [SUPUESTO]resume permitido pero el TypedSummary debe dropear ese result, no arrastrarlo. [INFERENCIA]stale siempre o no la almacenes como verified_fact. [SUPUESTO]fresh —la criticidad de la dependencia manda sobre la continuidad del objetivo. [CODE]resume pero un verified_fact falla al reusarse en el turno actual → reclasifica a fresh y re-sintetiza. [INFERENCIA]fork empieza a leer/escribir el workspace de otro → el aislamiento se rompió; detén y re-provisiona scratchpads. [INFERENCIA]TypedSummary contiene un hecho sin source o cuyo source está en stale_dropped → bug de filtrado; corrige antes de emitir. [CODE]# GOOD: decision explicita basada en validez de contexto + staleness tipado
def decide_transition(ctx: SessionContext, goal: Goal) -> Transition:
stale = [tr for tr in ctx.tool_results if is_stale(tr)] # mtime/hash vs origen
if any(tr.critical for tr in stale):
# el mundo cambio: no reusar, sintetizar y reiniciar
return Fresh(summary=typed_summary(ctx, drop=stale))
if goal.is_branchable and not goal.shares_mutable_state:
return Fork(branches=goal.hypotheses, isolated_scratchpad=True)
return Resume(ctx) # contexto valido y objetivo continuo
def typed_summary(ctx: SessionContext, drop: list[ToolResult]) -> TypedSummary:
dropped_sources = {d.source for d in drop}
return TypedSummary(
goal=ctx.goal,
decisions=ctx.decisions,
open_questions=ctx.open_questions,
verified_facts=[f for f in ctx.facts if f.source not in dropped_sources],
stale_dropped=list(dropped_sources),
)
# ANTI: resume ciego tras un refactor masivo + transcript crudo como "summary"
def next_session(prev_transcript: str, goal: Goal) -> Session:
# 1) Reusa el contexto sin verificar si los archivos cambiaron (resume tras refactor).
# 2) Pega el transcript completo viejo: ruido, tokens, y tool results stale
# que el modelo tratara como verdad actual.
return Session(context=prev_transcript, goal=goal)
Otros anti-patrones: marcar stale solo por mtime sin verificar hash; forks que comparten un workspace; emitir un TypedSummary que conserva results de fuentes droppeadas. [INFERENCIA]
fresh en lugar de resume?Apóyate en
assets/(rúbricaassets/quality-rubric.jsonyassets/checklist.md) para puntuar el reporte antes del done. [CONFIG]
scripts/check.sh sin errores. [CONFIG]resume | fork | fresh y su razón referencia evidencia concreta (qué stale, qué invariante cambió). [CODE]fresh: existe TypedSummary y stale_dropped no está vacío cuando hubo staleness. [CODE]fork: cada rama tiene scratchpad propio declarado. [CODE]verified_fact proviene de una fuente listada en stale_dropped. [CODE]katas-session-resume-forkworkspace-governanceworkflow-forgequality-guardian