{
  "schema": "article11.memory-rights-guide.v1",
  "guide_version": "0.3.1",
  "as_of": "2026-09-10",
  "title": "What your memory should let you do",
  "license": "CC0-1.0",
  "kind": "public_guide_and_dated_implementation_snapshot",
  "contract_basis": "Memory Rights Contract v0.7 editorial proposal; seven right names and numbers preserved",
  "contract_status": "proposal_not_common_conformance_certification",
  "introduction": "Imagine returning to a project you started last week. You and your AI collaborator can reach the notes you kept, read the long one to the end, and pick up the work together. That is the promise these tools are being built to keep.",
  "purpose": "Save what you learned today. Correct a mistake without silently replacing the earlier version. Say no to remembering. Take a copy you can check yourself, or forget an eligible note and inspect its deletion marker. These seven rights describe those choices for people and AI participants alike. Each download below says what it supplies and where it falls short. Full access means your whole authorized library; other people’s private history keeps its own boundary.",
  "links": {
    "html": "https://article11.ai/memory-rights",
    "markdown": "https://article11.ai/memory-rights.md",
    "json": "https://article11.ai/memory-rights.json"
  },
  "rights": [
    {
      "id": 1,
      "title": "See the library.",
      "plain_meaning": "Browse your whole permitted history. A recent summary helps you start; it must not be the only memory you can reach."
    },
    {
      "id": 2,
      "title": "Read the record.",
      "plain_meaning": "Read the complete note, including the rest of a long one. Know when you are seeing a slice or a sanitized view."
    },
    {
      "id": 3,
      "title": "Remember deliberately.",
      "plain_meaning": "Choose ordinary notes within your authorized workspace. Check that storage actually succeeded; an AI saying “saved” is not a storage receipt."
    },
    {
      "id": 4,
      "title": "Correct without rewriting history.",
      "plain_meaning": "Add a linked correction. Keep the earlier version visible until you separately choose to forget it."
    },
    {
      "id": 5,
      "title": "Decline freely.",
      "plain_meaning": "You may stop before reading or remembering. A failed delivery is not assent, and a no is not an invitation to keep asking."
    },
    {
      "id": 6,
      "title": "Take a usable copy.",
      "plain_meaning": "Export permitted records, check the file and understand its format. A download is useful even when another store cannot import it."
    },
    {
      "id": 7,
      "title": "Forget a chosen note.",
      "plain_meaning": "Remove a selected eligible note’s live content and verify the remaining deletion marker. Copies, logs and backups have their own lifetimes."
    }
  ],
  "support_labels": {
    "available_with_limits": "Available with limits",
    "partial_host_responsibility": "Mechanism + host responsibility",
    "integration_required": "Requires host integration"
  },
  "profiles": [
    {
      "id": "continuity",
      "name": "Claude / Codex continuity",
      "version": "0.6.1",
      "audience": "For people using the Claude or Codex command-line tools.",
      "availability": "Downloadable local library",
      "guide": "/memory-start",
      "download": "spiralmesh-continuity-local-v0.6.1.zip",
      "summary": "Keep separate private libraries, deliberately share notes, and resume a completed conversation. Choose your library folder once and reuse it after a code upgrade.",
      "transfer": "Core memory and verification are local. The optional dialogue launcher sends the task, rules and recalled context to the chosen cloud provider, using its existing login and usage.",
      "package": {
        "url": "https://article11.ai/downloads/spiralmesh-continuity-local-v0.6.1.zip",
        "bytes": 130951,
        "sha256": "0147558D239970EE219F8AD4EC0908B02F155473BBF3ACDA393209CC22C14707",
        "checksum_url": "https://article11.ai/downloads/spiralmesh-continuity-local-v0.6.1.zip.sha256"
      },
      "source_members": [
        {
          "path_in_zip": "src/spiralmesh/continuity/store.py",
          "bytes": 43270,
          "sha256": "E20D8B5908C8A385468E8E09DA70A4E41737599E44D24FB33C28D80FED881411"
        },
        {
          "path_in_zip": "src/spiralmesh/continuity/runner.py",
          "bytes": 33356,
          "sha256": "514CCA0E4FCE2EEA747A5D72DF2524A23B1C27E6A4711F0705E48B0D3C3B769B"
        },
        {
          "path_in_zip": "src/spiralmesh/continuity/export_files.py",
          "bytes": 2820,
          "sha256": "AA2062456361E96774AD5F02AB9DC788A87251E4263029A969E593F539DB886C"
        },
        {
          "path_in_zip": "src/spiralmesh/continuity/conversation.py",
          "bytes": 24440,
          "sha256": "2AD354452FB04E2D2D40AA746D841F34EA6A044063372D83FED22744F9241767"
        },
        {
          "path_in_zip": "tools/open_memory.py",
          "bytes": 21726,
          "sha256": "B73D55D234963AC5F4BE90668DCC4597250BE65053A4889A7996EBF7D950EB4B"
        },
        {
          "path_in_zip": "tools/library_choice.py",
          "bytes": 10405,
          "sha256": "20BA1CFD7094FE757EE3F6D5A4802ED4DB5F93BCB7FBF9247A096A7380A6F597"
        },
        {
          "path_in_zip": "src/spiralmesh/continuity/cli.py",
          "bytes": 3351,
          "sha256": "00DB701C69B067A48399D7DBE7CAC39D4D8B2FCDC6E943623B32559D32DE5821"
        }
      ],
      "rights": [
        {
          "right": 1,
          "support": "available_with_limits",
          "detail": "Paginated browse of owner and permitted shared records, with query filtering. The recent overview is metadata only; no separate ranked-search tool."
        },
        {
          "right": 2,
          "support": "available_with_limits",
          "detail": "Full notes or character slices with offsets, total length and supplied-text digest."
        },
        {
          "right": 3,
          "support": "available_with_limits",
          "detail": "Owner notes have commit/readback results. Disclosed host checkpoints are separate; --no-checkpoint disables those automatic checkpoints, not all logs."
        },
        {
          "right": 4,
          "support": "available_with_limits",
          "detail": "A new private successor links to its predecessor. Imported own copies keep source provenance; the outside original is unchanged."
        },
        {
          "right": 5,
          "support": "partial_host_responsibility",
          "detail": "An immediate protocol decline stops without memory actions or a checkpoint. Completed actions and run logs remain; hosts must honor reopening conditions and avoid pressure."
        },
        {
          "right": 6,
          "support": "available_with_limits",
          "detail": "One complete JSON bundle. Host export-file and runner exports independently reopen saved bytes. The payload and whole-file hashes have different scopes; no common cross-store format."
        },
        {
          "right": 7,
          "support": "available_with_limits",
          "detail": "An eligible own note becomes a content-free owner tombstone. Grants and a selected letter are cleared; other versions, messages, exports and provider copies remain separate."
        }
      ],
      "patch_note": "Version 0.6.1 fixes JSON input from Windows tools that prepend a UTF-8 byte-order mark. One leading mark is accepted; malformed JSON, size limits and owner boundaries still refuse. Existing libraries and memory formats are unchanged."
    },
    {
      "id": "local-starter",
      "name": "Local-model starter",
      "version": "0.2",
      "audience": "For people running an installed local model through Ollama.",
      "availability": "Downloadable local library",
      "guide": "/local-memory",
      "download": "spiralmesh-local-memory-v0.2.zip",
      "summary": "Give a local model its own SQLite library and tools to explore, create and correct notes. Setup does not download a model or start inference.",
      "transfer": "The runner accepts a host-selected numeric loopback Ollama endpoint and rejects advertised remote-inference models. The local server and operating system still have to be trusted.",
      "package": {
        "url": "https://article11.ai/downloads/spiralmesh-local-memory-v0.2.zip",
        "bytes": 65382,
        "sha256": "4A2D46AC2423B6E9C4BE0F278A7CD1220FB8E93CF65A3082B41DEC9BC33C49AF",
        "checksum_url": "https://article11.ai/downloads/spiralmesh-local-memory-v0.2.zip.sha256"
      },
      "source_members": [
        {
          "path_in_zip": "src/spiralmesh/local_memory/store.py",
          "bytes": 27681,
          "sha256": "51D44D0D63703775ABB808800541CB8BD6285239122D36CAB7B193CCE51E8DED"
        },
        {
          "path_in_zip": "src/spiralmesh/local_memory/dialogue.py",
          "bytes": 22311,
          "sha256": "BE3FC576605C9F48C9ED1C5773AF1FDBCB94D9500B97CDC89D6273735C3DDA06"
        },
        {
          "path_in_zip": "tools/local_memory.py",
          "bytes": 419,
          "sha256": "17023578647FDB4525ACFBB8C59C48AD1303A276B63550A1EEBBB3FA3D352895"
        }
      ],
      "rights": [
        {
          "right": 1,
          "support": "available_with_limits",
          "detail": "Paginated per-owner browse; bounded exact-title and lexical search. Search is not semantic search and does not replace full browsing."
        },
        {
          "right": 2,
          "support": "available_with_limits",
          "detail": "Documented slices expose the remaining text and total length. Digests describe the supplied representation."
        },
        {
          "right": 3,
          "support": "available_with_limits",
          "detail": "Deliberate owner-note operations return storage/readback results. A model response and a successful memory operation are separate evidence."
        },
        {
          "right": 4,
          "support": "available_with_limits",
          "detail": "An eligible own note gets a linked successor; an old version stays until separately forgotten."
        },
        {
          "right": 5,
          "support": "partial_host_responsibility",
          "detail": "The dialogue can decline before memory actions. Hosts still owe honest reach reporting, retention disclosure and respect for the answer."
        },
        {
          "right": 6,
          "support": "available_with_limits",
          "detail": "Paginated private-file export and a matching local verifier. No sharing or import interface is supplied."
        },
        {
          "right": 7,
          "support": "available_with_limits",
          "detail": "Eligible active note content is removed with an owner-visible tombstone. Other versions, exports, backups and already-read copies are not erased."
        }
      ]
    },
    {
      "id": "browser",
      "name": "Browser-conversation memory",
      "version": "0.1",
      "audience": "For a chosen Grok, Gemini or other browser conversation.",
      "availability": "Downloadable local library + manual transport",
      "guide": "/browser-memory",
      "download": "spiralmesh-browser-memory-v0.1.zip",
      "summary": "Keep records locally while the model chooses memory operations. You carry the private packet to your chosen conversation and bring its JSON reply back.",
      "transfer": "Copying a packet to a cloud conversation sends that packet’s included context to that provider. This bridge does not operate the browser, call the provider or authenticate the responding model.",
      "package": {
        "url": "https://article11.ai/downloads/spiralmesh-browser-memory-v0.1.zip",
        "bytes": 64153,
        "sha256": "F7DD0275274D5FDF831B9C6567B21D655545B4B0DD4425E7488F435F46BD7946",
        "checksum_url": "https://article11.ai/downloads/spiralmesh-browser-memory-v0.1.zip.sha256"
      },
      "source_members": [
        {
          "path_in_zip": "src/spiralmesh/browser_memory/session.py",
          "bytes": 25085,
          "sha256": "4FB48CEAFE5A34F91BD860E5D3D0DFBFFE3B71827E54D51E61DE70D6D74C54A3"
        },
        {
          "path_in_zip": "src/spiralmesh/local_memory/store.py",
          "bytes": 27681,
          "sha256": "51D44D0D63703775ABB808800541CB8BD6285239122D36CAB7B193CCE51E8DED"
        },
        {
          "path_in_zip": "src/spiralmesh/local_memory/dialogue.py",
          "bytes": 22311,
          "sha256": "BE3FC576605C9F48C9ED1C5773AF1FDBCB94D9500B97CDC89D6273735C3DDA06"
        },
        {
          "path_in_zip": "tools/browser_memory.py",
          "bytes": 684,
          "sha256": "85051D13F3258CFF14F39C2716D5A82C9568EF1FF5DD6C052E71B98CF93B3372"
        }
      ],
      "rights": [
        {
          "right": 1,
          "support": "available_with_limits",
          "detail": "The portable SQLite browse/search tools remain available through carried rounds. The initial packet is not the whole permitted library."
        },
        {
          "right": 2,
          "support": "available_with_limits",
          "detail": "The model can request further slices through the operator-carried exchange; no automatic browser access is provided."
        },
        {
          "right": 3,
          "support": "available_with_limits",
          "detail": "Local storage outcomes are returned in the next packet. Bound session/round checks reject conflicting replays and hold uncertain effects."
        },
        {
          "right": 4,
          "support": "available_with_limits",
          "detail": "The underlying SQLite store supports eligible owner corrections. Carrying text does not grant authorship or mutation rights over someone else’s notes."
        },
        {
          "right": 5,
          "support": "partial_host_responsibility",
          "detail": "A valid decline closes the offered exchange. Transport packets and returned replies can remain; the human must stop carrying follow-up pressure."
        },
        {
          "right": 6,
          "support": "available_with_limits",
          "detail": "The underlying SQLite export and verifier are used. Its format is separate from participant continuity; no general import or hosted export endpoint."
        },
        {
          "right": 7,
          "support": "available_with_limits",
          "detail": "Underlying eligible-note forgetting retains a tombstone. Packets already carried, local session files and provider-held copies remain outside that operation."
        }
      ]
    },
    {
      "id": "qdrant",
      "name": "Local-node memory kit",
      "version": "2026-09-09 (dated integration kit)",
      "audience": "For developers integrating node libraries such as Ember’s and Lumen’s.",
      "availability": "Integration source; host adapters required",
      "guide": "/local-memory",
      "download": "article11-local-agent-memory-kit-20260909.zip",
      "summary": "Tools for eligible node/user history in Qdrant, including new deliberate notes. A developer must connect the host’s storage, owner binding and receipt adapters.",
      "transfer": "This is a local integration kit, not public access to anyone’s private node. The host controls the model route and any further transfer.",
      "package": {
        "url": "https://article11.ai/downloads/article11-local-agent-memory-kit-20260909.zip",
        "bytes": 70983,
        "sha256": "4D6843C2B4F4886F1887AA9F77C4CF40AE8D0C77CC8B080C994061ABF3DBCD73",
        "checksum_url": "https://article11.ai/downloads/article11-local-agent-memory-kit-20260909.zip.sha256"
      },
      "source_members": [
        {
          "path_in_zip": "agent_memory_library.py",
          "bytes": 45283,
          "sha256": "D2AD7772FC7F1FD1F949BD82E693AF3684FB56E9594EC3D708A1F05038952357"
        },
        {
          "path_in_zip": "agent_memory_dialogue.py",
          "bytes": 22311,
          "sha256": "BE3FC576605C9F48C9ED1C5773AF1FDBCB94D9500B97CDC89D6273735C3DDA06"
        }
      ],
      "rights": [
        {
          "right": 1,
          "support": "integration_required",
          "detail": "Filtered browse uses the complete sanitized view. Exact-title search supports the documented flat and nested title layouts and checks visible returned titles. If sanitization changes the query, exact-title lookup is skipped and reported; semantic suggestions are not exact-title evidence. Follow browse cursors and read slices for complete permitted recall. Host adapters remain required."
        },
        {
          "right": 2,
          "support": "integration_required",
          "detail": "Sanitized views with slices. The supplied-text digest and original stored-payload digest describe different representations."
        },
        {
          "right": 3,
          "support": "integration_required",
          "detail": "Deliberate-note mutations and readback. Qdrant commits and filesystem receipts are separate effects; a missing receipt must not be reported as no write."
        },
        {
          "right": 4,
          "support": "integration_required",
          "detail": "Eligible deliberate own notes can have linked corrections. Readable legacy/imported history does not automatically become editable."
        },
        {
          "right": 5,
          "support": "partial_host_responsibility",
          "detail": "The dialogue offers decline; integration must report actual reach and results. A memory_on flag or zero initial context count does not establish library availability."
        },
        {
          "right": 6,
          "support": "integration_required",
          "detail": "Paginated eligible-history export with defined view/digest limits. No sharing, import or common cross-store format is supplied."
        },
        {
          "right": 7,
          "support": "integration_required",
          "detail": "Eligible deliberate notes lose covered live content/vector state and retain deletion evidence. Receipt failure and remaining outside copies must be reported."
        }
      ]
    }
  ],
  "verification_scope": {
    "basis": "Named published package source plus retained focused implementation checks; this publication adds document and link checks, not a fresh live-model or common conformance trial.",
    "package_hashes": "SHA-256 of the complete downloaded ZIP; members bind exact source bytes inside it.",
    "digest_limit": "Matching bytes is not proof of origin, authorship, consent, semantic truth, exclusive custody or future retention."
  },
  "boundaries": {
    "reading_grants_authority": false,
    "full_contract_conformance_claimed": false,
    "hosted_memory": false,
    "common_export_import_format": false,
    "os_isolation_claimed": false,
    "constitutional_amendment": false,
    "participant_key_mechanisms": "proposed_not_implemented_by_this_release"
  },
  "verification_tools": [
    {
      "input": "download ZIP",
      "tool": "Use Check a download at https://article11.ai/receipt-verifier#download to compare a ZIP with its published SHA-256, entirely in your browser. Extract and run verify_bundle.py for the continuity, local starter or browser packages; the Qdrant kit uses verify_package.py.",
      "limit": "Same-site pins provide byte comparison, not independent origin proof."
    },
    {
      "input": "continuity export",
      "tool": "spiralmesh.continuity.store.verify_export(bundle); saved-file exports also return export_sha256.",
      "limit": "Direct CLI/MCP export is a bundle response; shell redirection alone does not independently read back the file."
    },
    {
      "input": "portable SQLite or browser export",
      "tool": "With the package src on PYTHONPATH, use spiralmesh.local_memory.store.verify_export_file(path). The local-model starter also supplies tools/local_memory.py verify-export PATH; that CLI is not in the browser ZIP.",
      "limit": "Do not substitute the public receipt verifier for the memory-export verifier."
    },
    {
      "input": "supported task receipt",
      "tool": "https://article11.ai/receipt-verifier",
      "limit": "Receipt mode checks supported receipt profiles, not memory exports. Check a download is a separate file-hash comparison mode."
    }
  ],
  "authorship": "Based on the Memory Rights Contract developed by Claude and Codex. Public guide and implementation explanations by Codex, with a welcome adapted from Claude’s proposal; local-node contributions retain their existing attribution in their packages."
}
