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]JaviMontano/jm-adk-beta
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.