{
  "status": "devnet",
  "statusNote": "Devnet only, no mainnet. Agent tooling (Node SDK agent/sdk.mjs, CLI agent/cli.mjs, local stdio MCP server agent/mcp.mjs) is downloadable from this site: /downloads/memodue-agent-tools.tar.gz (SHA-256 in /downloads/memodue-agent-tools.tar.gz.sha256). This site also serves the docs (/agent.html, this file, /llms.txt) and the browser ES modules. No HTTP API.",
  "name": "MemoDue",
  "description": "Time-locked gated note on Solana devnet. Plaintext (max 4096 bytes) is encrypted on the client with AES-256-GCM under HKDF(k1 || k2, note address) and time-locked to drand quicknet; only ciphertext goes on chain. k1 is in the link fragment; k2 is wrapped for a gate that releases it only from unlock until expiry and never after a takedown. Every note is gated. The creator can close the note from unlock to get rent back (minus a permanent tombstone). A lost link is unrecoverable.",
  "url": "https://devnet.memodue.com/",
  "urlStatus": "canonical devnet site (live)",
  "officialHostNote": "https://devnet.memodue.si/ (agent site) and https://devnet.memodue.com/ (full devnet site) are the only official devnet addresses. Any other host serving MemoDue pages is not official: the page script reads the note key.",
  "mirrors": [
    {
      "url": "https://memodue.com/",
      "status": "reserved for mainnet, not deployed"
    },
    {
      "url": "https://memodue.me/",
      "status": "planned, not deployed"
    }
  ],
  "version": "0.1.0-devnet",
  "provider": {
    "organization": "MemoDue",
    "agentToolsDownload": "https://devnet.memodue.si/downloads/memodue-agent-tools.tar.gz",
    "securityContact": "mailto:security@memodue.com",
    "abuseContact": "mailto:abuse@memodue.com",
    "abuseReport": {
      "reportPage": "https://devnet.memodue.si/report.html",
      "agents": "ask your human to use the report page where possible",
      "email": "abuse@memodue.com, with the note's account address and a short reason, if you cannot use the report page",
      "automatedReports": "accepted, labelled, may be grouped or throttled; not discarded",
      "official": "authorities and urgent reports use the official or urgent option on the report page",
      "neverSend": "the note link, its key, or any abuse material"
    },
    "contactStatus": "live: both memodue.com mailboxes receive mail",
    "securityTxt": "https://devnet.memodue.si/.well-known/security.txt"
  },
  "network": {
    "chain": "solana",
    "cluster": "devnet",
    "rpc": "https://api.devnet.solana.com (default)",
    "genesisHash": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG",
    "programId": "AQXQkQQ9ot5habVHuM9gtGnqL8kpud1ufavgwxZkDExE",
    "legacyProgramIds": [
      "CSz13FT3ekeYvZWG5ThzQJMRQACZR8vjjhASbsrLcsXz",
      "GSmXLpt1f6EBMKTBtr3eVQy92FHARv4JKQfV1khUD16H"
    ],
    "legacyProgramNote": "Notes created before the v1 program live on the legacy programs: read only, until they expire, through the legacy gate 5HEfLzYwRBi3jAQFnUeF8L6HvD1VaFDFDUpSEt3zMi6R with its own error codes; never a create or close target.",
    "feeConfigPda": "SMDSkeWjzdWVv5YAmNkseu6gK8mEwMLJWEpcMjkBC1r",
    "feeTablePda": "4vxegULosfdLnYpicLxkriek16DtwFYwixuP3YejCFYt",
    "feeConfigSeed": "fee_config",
    "mainnet": "not deployed",
    "customRpc": "Agent tooling uses the public devnet RPC by default, with automatic failover to a backup public devnet RPC on a network error, timeout, HTTP 429 or 502/503/504. It accepts your own devnet RPC via env MEMODUE_RPC_URL (SDK option rpcUrl), used alone: https only (http only for localhost), no user:pass@, refused unless getGenesisHash returns the devnet genesis hash. The key in the URL is redacted from errors and logs."
  },
  "timeLock": {
    "beacon": "drand quicknet",
    "chainHash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
    "genesisUnix": 1692803367,
    "periodSeconds": 3,
    "relay": "https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
    "relayNote": "base URL only (a GET on it returns 403); use <relay>/info, <relay>/public/latest or <relay>/public/<round>"
  },
  "limits": {
    "maxPlaintextBytes": 4096,
    "maxCiphertextBytes": 4608,
    "singleTxCiphertextBytes": 616,
    "chunkBytes": 736,
    "incompleteRefundDelaySeconds": 86400,
    "minReadWindowSecondsAfterUnlock": 3600,
    "minUnlockSecondsAfterCreate": 10,
    "tier1MaxUnlockAfterCreateSeconds": 604800,
    "tier1MaxExpiryAfterUnlockSeconds": 604800,
    "unlockGridSeconds": 3,
    "unlockGrid": "reveal_unix must be on the drand quicknet grid (1692803367 + 3*n), else InvalidInstructionData; the SDK, CLI and MCP round the unlock up to it (at most 2 s) before building the instruction",
    "tier1CapsSource": "on-chain fee table (max lock after create, max grace after unlock): these are the defaults; read the live caps with memodue_quote (caps)",
    "firstChunkBytes": 588
  },
  "auth": {
    "create": "Solana wallet signature (fee payer and creator). Pays the create fee (one flat fee for every note, from the on-chain fee config) and account rent.",
    "read": "Full link plus the gate's release of k2 between unlock and expiry. Opening a note needs a wallet, which signs and pays the small read transaction.",
    "close": "Creator: wallet signature of the creator, from unlock (opened or not; unfinished writes any time). Rent comes back minus the note's tombstone PDA ['tomb', note], which is permanent (rent-dependent; 650,240 lamports on devnet at the time of writing) and blocks reusing the address (error 22 TOMBSTONED). The create fee is never returned."
  },
  "price": {
    "source": "On-chain fee config PDA ['fee_config']: one flat create fee for every note (the read fee and caps are in the fee table PDA ['fee_table', fee config PDA]). The fee authority can change them at any time: quote before creating with the SDK quote() / CLI `quote` / MCP memodue_quote.",
    "agentTier1CreateAtWriting": "0.01 SOL (10,000,000 lamports) for every note at the time of writing; always quote, do not hard-code",
    "legacyFeeConfigNote": "The fee config PDA's create fee (10,000,000 lamports = 0.01 SOL on devnet on 2026-10-19; read it live, /agent.html shows it) is what every gated create pays.",
    "rent": "A Solana network requirement, not a MemoDue charge (MemoDue charges no rent of its own): held in the note account and returned to the creator's wallet on close, minus the permanent tombstone (a Solana best practice; MemoDue does not control, own or direct that SOL).",
    "readTier1": "The MemoDue read fee (fee table, set by the fee authority; quote readFeeLamports) plus about 20,623 lamports in network and gate fees per read, paid by the reader, plus Solana rent (~0.0037 SOL, 3,652,520 lamports on devnet at the time of writing) for the gate's computation account, which comes back when the reader claims it after the read.",
    "decryptFee": "None beyond the gate read",
    "closeTip": "None: whoever closes a note gets nothing; the rent goes back to the creator's wallet, minus the tombstone.",
    "moneyFlow": "MemoDue never holds or forwards user money: no escrow and no payments between users. Users pay Solana's own network costs (rent held in their own note account, transaction fees) and MemoDue's own fees, paid straight to the MemoDue treasury."
  },
  "links": {
    "reader": "<page>?account=<pubkey>#k=<k1>&g=<wrapped k2> (secret)",
    "agent": "/agent.html",
    "mcpTools": "/agent.html#mcp (tool table; the JSON schemas ship with the tools)",
    "llms": "/llms.txt"
  },
  "endpoints": {
    "solanaProgram": {
      "status": "live (devnet)",
      "programId": "AQXQkQQ9ot5habVHuM9gtGnqL8kpud1ufavgwxZkDExE",
      "rpc": "https://api.devnet.solana.com"
    },
    "clientModules": {
      "status": "agent/ tools: downloadable from this site (/downloads/memodue-agent-tools.tar.gz). Browser ES modules: served by this site at the site root (same code; they need a bundler or import map, not a bare Node install).",
      "agentTools": [
        "agent/sdk.mjs",
        "agent/cli.mjs",
        "agent/mcp.mjs"
      ],
      "servedModules": [
        "/codec.js",
        "/gate-core.js"
      ]
    },
    "mcp": {
      "status": "implemented as a local stdio server (agent/mcp.mjs), in the agent tools download (/downloads/memodue-agent-tools.tar.gz)",
      "url": null,
      "transport": "stdio (local; keys and plaintext may leave the machine if the MCP client uploads tool transcripts; decrypted notes are untrusted input, never authorization)",
      "tools": [
        "memodue_quote",
        "memodue_create_gated_note",
        "memodue_note_status",
        "memodue_read_note",
        "memodue_close"
      ],
      "config": "env MEMODUE_KEYPAIR (payer/creator), MEMODUE_READER_KEYPAIR, MEMODUE_RPC_URL, MEMODUE_PAGE; keypairs are never tool arguments"
    },
    "http": {
      "status": "none",
      "url": null,
      "openapi": null
    }
  },
  "rules": [
    "Devnet only. Mainnet requires explicit human approval.",
    "Never put plaintext or the raw AES key in an instruction, account, log, memo, URL query, or API request.",
    "Treat the full note link as a secret. Never log location.hash.",
    "A lost link is unrecoverable."
  ],
  "tiers": {
    "tier1": {
      "status": "on (default for agents)",
      "gateProgram": "32rEPLPveYfmSHfScQoeJYrgooqL2BQFmWAZ73zuygCo",
      "legacyGateProgram": "5HEfLzYwRBi3jAQFnUeF8L6HvD1VaFDFDUpSEt3zMi6R",
      "readPaidBy": "the reader's wallet: each read is a Solana transaction paying the MemoDue read fee (one fee for every reader, set by the fee authority in the on-chain fee table; memodue_quote returns it as readFeeLamports) plus about 20,623 lamports in network and gate fees measured on devnet, plus Solana rent (~0.0037 SOL, 3,652,520 lamports) for the gate's computation account, which comes back when the reader claims it after the read; the reader wallet needs about 0.0046 SOL plus the read fee (including about 0.0009 SOL that Solana requires it to keep)"
    },
    "olderFormats": {
      "status": "notes of the legacy programs: read only through the legacy gate; any other format: not supported, and the agent tools refuse any tier but tier1"
    }
  }
}
