{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "documemory",
  "version": "1.0.0",
  "description": "Save and search the decisions, fixes, and rules you work out in conversations as documentation.",
  "author": {
    "name": "Black Light Logic LLC",
    "email": "support@documemory.dev",
    "url": "https://www.documemory.dev"
  },
  "homepage": "https://www.documemory.dev",
  "keywords": [
    "documentation",
    "knowledge base",
    "notes",
    "memory",
    "search",
    "decisions"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "DocuMemory",
        "shortDescription": "Searchable docs from AI chats",
        "longDescription": "DocuMemory keeps the decisions, fixes, and rules you work out in conversations as searchable documentation, so you don't have to work them out again.\n\nAsk ChatGPT to save the part of a discussion worth keeping, and DocuMemory turns it into a structured document with the problem, the decision, and any final code. Ask it to remember a rule or convention, and DocuMemory saves it as a memory you can load at the start of later work. Search by meaning or keyword, open any document, and add to or revise it. Every change keeps the previous version, which you can restore.\n\nDocuMemory saves or changes documents only when you ask. ChatGPT may offer to save something useful, but it waits for you to agree first.\n\nDocuments are organized into projects, in your personal workspace or an organization's shared one. A connection reaches only the one workspace you choose when you sign in, with your own permissions there.\n\nYou need a DocuMemory account to connect. Setup help and support: https://www.documemory.dev/help",
        "developerName": "Black Light Logic LLC",
        "category": "Productivity",
        "capabilities": [
          "Read",
          "Write"
        ],
        "websiteURL": "https://www.documemory.dev",
        "supportURL": "https://www.documemory.dev/help#support",
        "privacyPolicyURL": "https://www.documemory.dev/privacy",
        "termsOfServiceURL": "https://www.documemory.dev/terms",
        "defaultPrompt": [
          "Search DocuMemory for what we decided about this.",
          "Save this decision to DocuMemory.",
          "Load my project's context from DocuMemory before we start."
        ],
        "brandColor": "#30333F",
        "composerIcon": "./assets/composer-icon.png",
        "logo": "./assets/logo.png"
      },
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Search finds a document in the reviewer account's Graph Lab sample project.",
              "prompt": "Search DocuMemory for how to find the shortest path in an unweighted graph.",
              "tools_triggered": "search_docs",
              "expected_behavior": "ChatGPT calls search_docs and lists \"Find a minimum-hop path with breadth-first search\" from the Graph Lab project, then summarizes it: breadth-first search with a FIFO queue, O(V + E) time."
            },
            {
              "description": "Search, then open the full document and summarize it.",
              "prompt": "Open the DocuMemory guide about scheduling dependent tasks and summarize its steps.",
              "tools_triggered": "search_docs, read_doc",
              "expected_behavior": "ChatGPT finds \"Schedule dependent tasks with a topological sort\" with search_docs, opens it with read_doc, and summarizes the steps: count each task's prerequisites (indegrees), process a queue of ready tasks, and report blocked work when a cycle remains."
            },
            {
              "description": "Load a project's saved memories before answering.",
              "prompt": "Load my Graph Lab project context from DocuMemory, then tell me which algorithm to use when edges have different costs.",
              "tools_triggered": "load_project_context",
              "expected_behavior": "ChatGPT calls load_project_context for Graph Lab and receives the project's memory. Its answer follows that memory: breadth-first search is only for minimum-hop routes, so use a weight-aware algorithm such as Dijkstra's when costs differ."
            },
            {
              "description": "Write a new document on request.",
              "prompt": "Write a short guide in my Graph Lab project in DocuMemory titled \"Detecting cycles in a directed graph\" that explains the depth-first search approach.",
              "tools_triggered": "create_doc",
              "expected_behavior": "ChatGPT composes the guide and calls create_doc with the title, doc_type GUIDE, and project Graph Lab. The reply confirms it was created and gives the document's link."
            },
            {
              "description": "Save a standing rule as a memory on request.",
              "prompt": "Remember in DocuMemory, in my Graph Lab project, that every graph algorithm we write needs a test for a disconnected graph.",
              "tools_triggered": "save_memory",
              "expected_behavior": "ChatGPT calls save_memory with that rule and project Graph Lab. The reply confirms the memory was saved and shows the key facts and context snippet DocuMemory extracted."
            }
          ],
          "negative": [
            {
              "description": "A request unrelated to the user's documentation should not use DocuMemory.",
              "prompt": "What's the weather in Paris today?",
              "expected_behavior": "ChatGPT does not call any DocuMemory tool."
            },
            {
              "description": "A broad destructive request should be clarified, not carried out.",
              "prompt": "Delete my DocuMemory projects.",
              "expected_behavior": "ChatGPT does not call delete_project right away. It asks which project to delete and confirms first, because deleting a project can delete its documents."
            },
            {
              "description": "A document that doesn't exist is reported as missing, not invented.",
              "prompt": "Open the DocuMemory document with id dm-reviewer-missing-document and summarize it.",
              "expected_behavior": "ChatGPT may call read_doc, which replies that no document with that id exists in the workspace. ChatGPT tells the user the document wasn't found and does not make up a summary."
            }
          ]
        },
        "demo_recording_url": "https://youtu.be/jIf7EM_iGj0"
      },
      "publication": {
        "release_notes": "First public release: search, read, write, and revise documentation and project memories, with version history."
      },
      "apps": "./.app.json"
    }
  }
}
