Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsAn agent that reliably tracks promises needs an explicit, durable commitment record that it reads and updates on every run. A long chat transcript is not enough. Keep two things apart: conversational continuity (resuming the current thread) and cross-session memory (knowing what is still owed next week, in a brand-new conversation). Then make the stored record inspectable and correctable by the user. “Never” is a design target, not a guarantee, so you also need tests that show where the agent fails.
Why chat history alone fails
If you ask how an AI agent can remember things across sessions, the first answer most people reach for is “keep the conversation.” That solves a different problem. LangGraph’s persistence documentation separates checkpointers, which save state for a single thread, from stores, which hold application-defined information that persists across threads. The OpenAI Agents SDK follows a similar split. Its sessions keep conversation history for one session across runs, while its sandbox memory feature saves reusable lessons in files and is distinct from session history.
As an Amazon Associate I earn from qualifying purchases.
Neither mechanism knows what a promise is. Your application has to decide what counts as one, which fields to save, and how to find and update the record later. The framework documentation covers the storage primitives. The schema and workflow below are design recommendations built on them, not anything those frameworks mandate. I have not tested this design in a running agent, and I found no published benchmark for promise recall or memory reliability, so none is claimed here.
Step 1: Define the promise record
Use a schema your application owns rather than trusting the model’s implicit recollection. A minimal version:
#1 Best Overall
id: stable identifier, so updates modify a record instead of creating duplicates.commitment: short, faithful wording of what was promised.ownerandrecipient: who must act and who it is owed to, when known.due_atortrigger: only if the user actually stated one.status:open,fulfilled,canceled,changedorneeds_clarification.source: the message or run identifier, or a user-approved reference, so the original statement can be shown.created_at,updated_at.confidenceor an explicit “inferred” flag, if the model extracts candidates.
Separate what the user said from what the agent inferred. “I’ll try to send that soon” is not a firm promise with a Friday deadline. Either keep the uncertainty in the record or ask the user to confirm before saving it as a commitment.
Step 2: Split thread state from durable state
Thread continuity
Use a checkpointer (LangGraph) or a session (OpenAI Agents SDK) so the agent can resume the current conversation or workflow. This is short-term memory.
Rank #2
Cross-session commitments
Put the promise record in a durable store or an ordinary database, so any later thread or session can read it. LangGraph’s store and the long-term memory described in the LangGraph.js documentation fit here. A plain application database works too, and it may be the better choice if other systems need to read the same records.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Step 3: Make reads and writes explicit workflow steps
- Detect. When a message may contain a commitment, have the model extract a candidate and keep the exact source text.
- Confirm if unclear. If the owner, recipient or date is missing or ambiguous, mark the record
needs_clarificationand ask. - Retrieve. At the start of each run, load the open commitments relevant to this user and context before the model responds.
- Update, don’t duplicate. When the user says “done” or “push that to Monday,” match the existing record and change its status or date.
- Validate deterministically. Let the model interpret natural language, but check dates and status transitions in ordinary code. For example, reject moving a
canceledrecord tofulfilledwithout confirmation. The database, not the model, is the source of truth.
Loading open commitments on every run, rather than waiting for the model to decide to look them up, is the main reason a promise is not “forgotten.” A retrieval the model must remember to make is just another thing it can forget.
Step 4: Design for correction, retention and access
A forgotten promise is a reliability bug. A wrongly remembered one is also a bug, and it can be worse, because the agent will confidently nag about something that never happened. So treat the memory as a maintained record, not an append-only summary:
- Let users list, edit, mark fulfilled, cancel or dispute any record, and show the source statement beside it.
- Record changes as updates with timestamps instead of silently overwriting history.
- Treat stored promises as retained user data. OpenAI’s sandbox memory guidance says to apply the same sensitivity and retention practices you use for workspace data to generated memory artifacts. Define who can read records, how long they live, and how deletion works under your deployment’s data policy.
Step 5: Evaluate behavior, not storage
A successful database write does not prove the agent remembers correctly. Build test conversations in which a commitment is explicit, implicit, revised, canceled, fulfilled or contradicted. Then start a fresh thread and ask what is still open. Track these measures:
| Measure | What it catches |
|---|---|
| Capture precision | Casual remarks wrongly saved as promises |
| Capture recall | Real promises never saved |
| Retrieval correctness | Open items missing, or wrong user’s items surfaced, in a new session |
| Stale-record rate | Fulfilled or canceled items still reported as open |
| Incorrect assertion rate | The agent claiming a promise or date the user never gave |
These are proposed dimensions. Set your own thresholds, and rerun the suite whenever you change the model, prompt or schema.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Framework-managed persistence or your own database?
For a prototype, compare the two on five axes:
| Axis | Framework-managed (checkpointer, session, store) | Application-owned database |
|---|---|---|
| Scope | Checkpointers and sessions are per thread or session; stores span threads | Whatever you design, including sharing with other systems |
| Durability and recovery | Depends on the backend you configure | Your existing backup and recovery practices apply |
| Inspectability and correction | Possible, but you build the interface | Standard queries and admin tools |
| Retention and access control | You must map your policy onto the framework’s storage | Uses your existing controls |
| Operational complexity | Lower to start | Higher up front, more control later |
The deciding question is whether the promise record must be shared across sessions and systems, and how your application manages user data. Frameworks and APIs change, so check current documentation for your version before committing.




