Disena un scratchpad persistente en disco (Hypotheses/Decisions/Findings/Open) con solo conclusiones validadas que sobrevive a /compact y reset, se lee una vez y luego se referencia para no romper el prompt cache.
Disenar e implementar un scratchpad persistente en disco que actua como memoria duradera de un agente: un archivo estructurado (Hypotheses / Decisions / Findings / Open) que solo contiene conclusiones validadas, sobrevive a /compact o a un reset de sesion, se lee una sola vez al arrancar y despues se referencia en vez de releerse. Es ingenieria de contexto: separa la memoria de trabajo volatil (la conversacion) de la memoria persistente auditada (el archivo). [DOC]
No la uses para apuntes efimeros de un solo turno, para volcar transcript crudo, ni como cola de tareas mutable de alta frecuencia (eso pertenece a un task store, no a memoria auditada). Eso no es conclusion validada. [INFERENCE]
.agent/scratchpad.md con esquema fijo + un protocolo de lectura-unica/escritura-idempotente que el runtime del agente respeta. Opcional: reporte JSON de diseno validado por el checker. [DOC].agent/scratchpad.md) y esquema fijo: ## Hypotheses, ## Decisions, ## Findings, ## Open. El esquema es invariante. [DOC]/compact o reset el agente reconstruye estado solo desde el archivo, sin la conversacion previa. [DOC]assets/. [INFERENCE]Usa assets/manifest.json como indice de contratos offline. Los contratos en assets/ fijan la ruta permitida, secciones, evidencia minima, politica de lectura unica, escritura idempotente y reconstruccion tras compact/reset. Si produces un reporte JSON de diseno, validalo con bash skills/persistent-memory-design/scripts/check.sh antes de marcarlo como aceptado. [CONFIG] Si assets/ o scripts/ aun no existen en el repo, generalos a partir del esquema de este SKILL antes de cerrar la tarea — el gate de validacion los exige. [SUPUESTO]
# GOOD: scratchpad estructurado, solo conclusiones validadas, lectura unica.
SCRATCHPAD = ".agent/scratchpad.md"
def bootstrap(ctx):
# Read once at session start; cache the parsed state.
if ctx.scratchpad_loaded:
return ctx.memory # reference, do not re-read
ctx.memory = parse_sections(read_file(SCRATCHPAD))
ctx.scratchpad_loaded = True
return ctx.memory
def record_finding(finding):
# Append only validated conclusions, each with provenance; upsert by key.
assert finding.validated and finding.source
upsert_section(SCRATCHPAD, "Findings", key=finding.id,
line=f"- {finding.text} [src:{finding.source} @ {finding.date}]")# ANTI: la "memoria" vive en la conversacion y el archivo se relee cada turno.
def step(ctx):
notes = read_file(".agent/notes.txt") # re-read every turn -> breaks cache
ctx.history.append(notes) # state lives in volatile chat
notes += "\n" + raw_tool_dump # unstructured, unvalidated noise
write_file(".agent/notes.txt", notes) # full rewrite, no schema
# After /compact: state is gone, agent re-derives everything.Otros anti-patrones: secciones de esquema variable entre sesiones (rompe el parser de bootstrap); guardar hipotesis sin marcar como no-validadas mezcladas con findings (contamina el estado de verdad); meter la cola de tareas pendientes con churn alto en el mismo archivo cacheado. [INFERENCE]
record_* reescribe el archivo completo -> cambia a upsert por clave. [INFERENCE][src:... @ ...] -> no es conclusion validada; va a Hypotheses/Open, no a Findings/Decisions. [DOC]/compact el agente pide datos que estaban en la conversacion -> esos datos nunca se persistieron; el filtro de "que entra" esta mal. [INFERENCE]Acepta solo si TODO se cumple:
/compact y a un reset de sesion, reconstruible solo desde el archivo? [DOC]scripts/check.sh contra los contratos en assets/? [CONFIG]18. [CONFIG]katas-persistent-scratchpad, adaptive-investigation-method, provenance-engineering, session-lifecycle-management. [CONFIG]fdad39c
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.