Session Memory Builder

Build structured XML session context for AI agents. Maintain a local ledger of project architecture, milestones, and active tasks. All data stored locally in your browser — zero database cost, 100% privacy.

📋 Project Metadata

🗂️ Architecture Map (Key Files)

No files added yet. Click "Add File" to start building your architecture map.

✅ Accomplished Milestones

No milestones recorded yet.

🎯 Active Task Instructions

No active tasks defined yet.

Related Tools

JSON FormatterBase64 ConverterTimestamp Converter

Collects a project's metadata, important files, finished milestones and open tasks and assembles them into one XML session-context document for an AI coding agent. Fields are saved into this browser as you type, and pressing Generate builds the XML in the page and offers it as a copyable block or a .xml download, with no request leaving the tab.

How to use it

  1. Fill in the project name, tech stack, repository URL and a short description. Every keystroke is stored in localStorage.
  2. Use + Add File to list the files an agent should know about, each with a one-line purpose and the date it last changed.
  3. Add milestones and tick Completed for the ones that actually shipped, because only ticked rows reach the XML.
  4. Add the open work with a status, a priority and an optional assignee, then press Generate XML Context and either Copy XML or Download .xml.

Worked example

name=TrendAgent; 1 file; 1 milestone; 1 taskbecomes<?xml version="1.0" encoding="UTF-8"?> <session_context generated="2026-09-27T20:15:32.808Z" version="1.0"> <project_meta> <name>TrendAgent</name> <description>Trend tracking dashboard</description> <tech_stack>Next.js, TypeScript</tech_stack> <repo_url>https://github.com/acme/trendagent</repo_url> </project_meta> <architecture_map> <files> <file> <path>src/lib/parse.ts</path> <purpose>Parses upstream CSV feeds</purpose> <last_modified>2026-09-20</last_modified> </file> </files> </architecture_map> <accomplished_milestones> <milestone id="m1758400000000" date="2026-09-20"> <title>CSV parser shipped</title> <description>Handles quoted fields and CRLF</description> </milestone> </accomplished_milestones> <active_task_instructions> <task id="t1758400100000" status="in-progress" priority="high" assignee="dev-2"> <title>Add retry to feed fetch</title> <description>Exponential backoff, max 3 attempts</description> </task> </active_task_instructions> </session_context>

The form held the project name TrendAgent, the file src/lib/parse.ts with its purpose, one ticked milestone and one in-progress task. The generated attribute is the timestamp of the Generate click, 20:15:32 on 27 September 2026 in this run, and the ids are minted from the clock as rows are added, so your own file carries different values.

name=Ledger; 1 milestone left untickedbecomes<?xml version="1.0" encoding="UTF-8"?> <session_context generated="2026-09-27T21:17:48.122Z" version="1.0"> <project_meta> <name>Ledger</name> <description></description> <tech_stack></tech_stack> <repo_url></repo_url> </project_meta> <architecture_map> <files> </files> </architecture_map> <accomplished_milestones> </accomplished_milestones> <active_task_instructions> </active_task_instructions> </session_context>

One milestone was typed in but left unticked, so the accomplished_milestones block is empty. Empty form fields are still written as empty tags rather than being skipped.

When to use it

What it does not do