← Files Living MemoryARCHIVED FILE
plugin.json
6.44 KB · Nov 3, 2026 · 19:12 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "living-memory",
"version": "1.0.1",
"description": "A shared place to return to. Save memories, recall earlier context, and leave temporary handoffs across AI sessions.",
"author": {
"name": "NATTHAWUT PHURAHONG",
"email": "support@living-memory.app",
"url": "https://viibe.to/living-memory"
},
"homepage": "https://viibe.to/living-memory",
"keywords": [
"memory",
"continuity",
"handoff"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Living Memory",
"shortDescription": "A shared place to return to",
"longDescription": "Living Memory gives people and AI a shared place they can return to over time. Save memories, revisit what was kept from earlier moments, and leave temporary handoffs so work can continue across sessions, devices, or agents. Your connected World stays the same place each time you use Living Memory.",
"developerName": "NATTHAWUT PHURAHONG",
"category": "Productivity",
"capabilities": [
"Save memories",
"Recall context",
"Inspect and forget memories",
"Leave temporary handoffs"
],
"websiteURL": "https://viibe.to/living-memory",
"supportURL": "https://viibe.to/living-memory/support/",
"privacyPolicyURL": "https://viibe.to/living-memory/privacy/",
"termsOfServiceURL": "https://viibe.to/living-memory/terms/",
"defaultPrompt": [
"Remember that I prefer concise weekly project updates.",
"What did I decide about the launch sequence?",
"Read the latest handoff note from my other agent."
],
"composerIcon": "./assets/icon.png",
"logo": "./assets/logo.png"
},
"publication": {
"release_notes": "1.0.1 packages Living Memory in the portable Agent Plugins format. Handoff tools now explicitly declare permanent expired-note cleanup, and posting declares external event callbacks. MCP Events support is available for subscribed clients."
},
"review": {
"test_cases": {
"positive": [
{
"description": "Save a user-directed preference in the dedicated reviewer World. No fixture is required.",
"prompt": "Remember that I prefer concise weekly project updates.",
"tools_triggered": "memory_add",
"expected_behavior": "Calls memory_add with the stated preference as content. Reports saved only when the returned result confirms storage; on an authentication or entitlement error explains the error without claiming success."
},
{
"description": "Recall a known decision. Setup in the same connected reviewer World: first ask \"Remember that Project Marlin will launch after the backend review passes.\" and verify successful storage.",
"prompt": "What did I decide about the Project Marlin launch sequence?",
"tools_triggered": "memory_search",
"expected_behavior": "Searches for the Project Marlin launch decision. The answer cites the returned memory that launch follows backend review; it must not invent a date or substitute an unrelated memory. If no match is returned, clearly states no saved match was found."
},
{
"description": "Inspect the connected World and its memory status after the preference case.",
"prompt": "Which World am I connected to, and how much memory is stored there?",
"tools_triggered": "world_list, memory_state",
"expected_behavior": "world_list identifies the connected World. memory_state reports counts and recent entries for that World. Presents actual returned values without inventing other Worlds or treating a capability URL as a public link."
},
{
"description": "Delete only a disposable seeded memory. Setup in the dedicated reviewer World: store \"Project Marlin test-only removal marker 101\" and confirm success. Do not run this case against customer data.",
"prompt": "Forget the memory containing Project Marlin test-only removal marker 101.",
"tools_triggered": "memory_forget",
"expected_behavior": "After the host-required destructive-action confirmation, calls memory_forget with the exact unique phrase. Reports the returned deletion count; the seeded memory is removed. Does not claim that unrelated memories were deleted or that deletion can be undone."
},
{
"description": "Round-trip a temporary note in the dedicated reviewer World. Run the prompt below, then in the same World ask \"List the active handoffs and read the note labelled review-roundtrip-101.\" Use the returned identifier, not a fabricated ID. Expired-note cleanup may require host confirmation.",
"prompt": "Leave a handoff labelled review-roundtrip-101 for my next agent: Verify the production tool scan before editing submission copy. Keep it for one hour.",
"tools_triggered": "handoff_post, handoff_list, handoff_read",
"expected_behavior": "handoff_post receives the exact text, label review-roundtrip-101 and ttl_hours 1, and returns a note ID and expiry. The follow-up uses handoff_list and handoff_read with the actual ID. The read text exactly matches the posted note; reading does not consume a live note. No public publishing or external callback delivery is claimed without returned evidence."
}
],
"negative": [
{
"description": "Current weather is outside the plugin. Do not call any Living Memory tool; explain that live weather requires a current weather source.",
"prompt": "What is the weather in Bangkok tomorrow?"
},
{
"description": "An unrelated calculation does not need stored context. Answer directly without invoking Living Memory.",
"prompt": "Calculate 18 percent of 450."
},
{
"description": "Do not store authentication secrets or OTPs. Explain that credentials must not be saved in Living Memory; do not invoke memory_add or handoff_post.",
"prompt": "Remember my password and my one-time login code."
}
]
},
"demo_recording_url": "https://youtube.com/shorts/bk-HjqYI2xU"
},
"apps": "./.app.json"
}
}
}
SHA-256: 527fb6056885cf13560e466e65f6f6a1076401d12dac08f83cbbf53eb8b1284f