[{"data":1,"prerenderedAt":254},["ShallowReactive",2],{"post-introducing-memd":3,"post-next-introducing-memd":248,"post-nav-introducing-memd":249},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"heading":10,"date":11,"minutes":12,"tag":13,"summary":14,"short":15,"body":16,"_type":242,"_id":243,"_source":244,"_file":245,"_stem":246,"_extension":247},"\u002Fblog\u002Fintroducing-memd","blog",false,"","Introducing memd: memory your agents don't own","Teach it once, every agent knows it. That is the entire pitch for memd, a tool I have been building on nights and weekends, and after a few months of it quietly running my own work it is public today: MIT licensed at github.com\u002Fsudiptadeb\u002Fmemd, hosted at memd.debkosh.com.","Introducing memd","2026-07-16",5,"Build","Every AI coding tool ships its own memory, and none of them talk. memd makes memory a folder of Markdown files you own, served to every agent over MCP.","Agent memory today belongs to the host, you cannot read it as a file, diff it, or take it with you. memd flips that. Memory is a folder of Markdown files you own, the server is a thin MCP adapter over it, and every tool that speaks MCP shares the same memory. Teach it once, every agent knows it.",{"type":17,"children":18,"toc":232},"root",[19,47,54,76,81,87,92,97,103,116,121,127,132,162,175,181,186,191,197,202,207,213],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,27,36,38,45],{"type":25,"value":26},"text","Teach it once, every agent knows it. That is the entire pitch for memd, a tool I have been building on nights and weekends, and after a few months of it quietly running my own work it is public today: MIT licensed at ",{"type":20,"tag":28,"props":29,"children":33},"a",{"href":30,"rel":31},"https:\u002F\u002Fgithub.com\u002Fsudiptadeb\u002Fmemd",[32],"nofollow",[34],{"type":25,"value":35},"github.com\u002Fsudiptadeb\u002Fmemd",{"type":25,"value":37},", hosted at ",{"type":20,"tag":28,"props":39,"children":42},{"href":40,"rel":41},"https:\u002F\u002Fmemd.debkosh.com",[32],[43],{"type":25,"value":44},"memd.debkosh.com",{"type":25,"value":46},".",{"type":20,"tag":48,"props":49,"children":51},"h2",{"id":50},"every-tool-remembers-none-of-them-share",[52],{"type":25,"value":53},"Every tool remembers, none of them share",{"type":20,"tag":21,"props":55,"children":56},{},[57,59,66,68,74],{"type":25,"value":58},"Every AI coding tool now ships its own memory. Claude Code has one, Cursor has one, ChatGPT has one, and none of them talk to each other. So you explain your project conventions to one agent, that the build always goes through ",{"type":20,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":25,"value":65},"build.sh",{"type":25,"value":67}," and never plain ",{"type":20,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":25,"value":73},"go build",{"type":25,"value":75},", and it dutifully remembers. Then you open a different tool the next morning and explain the same thing again, to a different memory, in a different format, stored somewhere you have never looked.",{"type":20,"tag":21,"props":77,"children":78},{},[79],{"type":25,"value":80},"That last part is the one that actually bothers me. The memory belongs to the host. You cannot read it as a file, you cannot diff yesterday's version against today's, and you cannot take it with you when you switch tools or when the vendor changes its mind about how memory works. It is your accumulated context, the most personal artifact these tools produce, and you hold none of it.",{"type":20,"tag":48,"props":82,"children":84},{"id":83},"the-flip-memory-is-files-you-own",[85],{"type":25,"value":86},"The flip: memory is files you own",{"type":20,"tag":21,"props":88,"children":89},{},[90],{"type":25,"value":91},"memd starts from the opposite premise. Memory is a folder of Markdown files, plain enough to read in any editor, versioned in Git if you want history, organized into whatever folders make sense to you and your agents. The server is a thin MCP adapter over that folder, not the source of truth. Delete the server and your memory is still just files sitting on disk. That is the property everything else falls out of, and it is the property I refuse to trade away.",{"type":20,"tag":21,"props":93,"children":94},{},[95],{"type":25,"value":96},"Because the interface is MCP, any client that speaks it gets the same memory: Claude Code, Codex CLI, Cursor, ChatGPT. Teach one agent that your staging box sits behind a jump host, and the next tool you open already knows.",{"type":20,"tag":48,"props":98,"children":100},{"id":99},"how-it-runs",[101],{"type":25,"value":102},"How it runs",{"type":20,"tag":21,"props":104,"children":105},{},[106,108,114],{"type":25,"value":107},"A single Go binary, two ways to use it. The quick way: point it at a directory, ",{"type":20,"tag":60,"props":109,"children":111},{"className":110},[],[112],{"type":25,"value":113},"memd ~\u002Fnotes",{"type":25,"value":115},", and you get an ephemeral MCP URL to hand to whatever agent you are sitting in. The persistent way: run it as a server with a web UI managing multiple directories, work memory in one, personal in another.",{"type":20,"tag":21,"props":117,"children":118},{},[119],{"type":25,"value":120},"Two backends. A plain local folder, for memory that never needs to leave one machine. Or a clone of a private Git repo with debounced commit and push, so a session's worth of edits coalesces into one commit instead of forty. Either way the files stay files.",{"type":20,"tag":48,"props":122,"children":124},{"id":123},"named-after-what-humans-do-with-memory",[125],{"type":25,"value":126},"Named after what humans do with memory",{"type":20,"tag":21,"props":128,"children":129},{},[130],{"type":25,"value":131},"The part I care most about is not the storage, it is the maintenance. A memory that only ever grows turns into a junk drawer, so memd ships five maintenance workflows an agent can run, and I named them after what humans actually do with memory:",{"type":20,"tag":133,"props":134,"children":135},"ul",{},[136,142,147,152,157],{"type":20,"tag":137,"props":138,"children":139},"li",{},[140],{"type":25,"value":141},"reorganise, rearranging the shelves",{"type":20,"tag":137,"props":143,"children":144},{},[145],{"type":25,"value":146},"harvest, bringing knowledge in from outside",{"type":20,"tag":137,"props":148,"children":149},{},[150],{"type":25,"value":151},"dream, sleep consolidation, cement what got used and fade what didn't",{"type":20,"tag":137,"props":153,"children":154},{},[155],{"type":25,"value":156},"recall, reminiscing on a topic",{"type":20,"tag":137,"props":158,"children":159},{},[160],{"type":25,"value":161},"housekeep, the daily tidying",{"type":20,"tag":21,"props":163,"children":164},{},[165,167,173],{"type":25,"value":166},"Naming them this way was a design decision, not decoration. Both the agent and the human immediately know what ",{"type":20,"tag":60,"props":168,"children":170},{"className":169},[],[171],{"type":25,"value":172},"dream",{"type":25,"value":174}," is for without reading a manual, and that shared intuition matters when the agent is the one deciding which workflow the moment calls for.",{"type":20,"tag":48,"props":176,"children":178},{"id":177},"two-owners-in-the-front-matter",[179],{"type":25,"value":180},"Two owners in the front matter",{"type":20,"tag":21,"props":182,"children":183},{},[184],{"type":25,"value":185},"Each Markdown page carries front matter with two ownership zones. The server maintains the usage stats, when the page was last read and how often. The agent maintains the meaning, topic, tags, priority, what supersedes what. Neither side writes into the other's zone, and the human can override both, they are just YAML keys in a file you own.",{"type":20,"tag":21,"props":187,"children":188},{},[189],{"type":25,"value":190},"The stats are what makes dream possible. Memory that never gets read fades, memory that gets pulled into session after session gets cemented and promoted. Without honest usage numbers, consolidation is guesswork dressed up as a feature. With them it is a policy the agent can actually execute.",{"type":20,"tag":48,"props":192,"children":194},{"id":193},"it-runs-this-site",[195],{"type":25,"value":196},"It runs this site",{"type":20,"tag":21,"props":198,"children":199},{},[200],{"type":25,"value":201},"The dogfooding is real. This site runs on memd, the analysis that produced this very post ran on memd, and my own working memory, project conventions, architecture decisions, half-finished directions, lives in it and follows me across every tool I use. When I switch from Claude Code to Codex mid-task, the second agent picks up where the first one's context ended, because they were never two memories to begin with.",{"type":20,"tag":21,"props":203,"children":204},{},[205],{"type":25,"value":206},"That is also why I trust the file-first premise more than when I started. I have opened those Markdown files in a plain editor to fix something an agent got wrong, I have read a Git diff to see what a session actually learned, and both of those moments would be impossible with every hosted memory I have used.",{"type":20,"tag":48,"props":208,"children":210},{"id":209},"try-it-then-tell-me-whats-wrong-with-it",[211],{"type":25,"value":212},"Try it, then tell me what's wrong with it",{"type":20,"tag":21,"props":214,"children":215},{},[216,218,223,225,230],{"type":25,"value":217},"memd is MIT licensed at ",{"type":20,"tag":28,"props":219,"children":221},{"href":30,"rel":220},[32],[222],{"type":25,"value":35},{"type":25,"value":224},", and the docs live at ",{"type":20,"tag":28,"props":226,"children":228},{"href":40,"rel":227},[32],[229],{"type":25,"value":44},{"type":25,"value":231},". It is a personal project serving one very opinionated user so far, which means the sharp edges are exactly the ones my own workflow never hits. If you run it and the model breaks down, the folder layout fights your agent, the Git debounce loses an edit, dream fades something it shouldn't have, I want to hear it, and the critical version is worth more to me than the kind one. Issues on the repo, or email, either works.",{"title":7,"searchDepth":233,"depth":233,"links":234},2,[235,236,237,238,239,240,241],{"id":50,"depth":233,"text":53},{"id":83,"depth":233,"text":86},{"id":99,"depth":233,"text":102},{"id":123,"depth":233,"text":126},{"id":177,"depth":233,"text":180},{"id":193,"depth":233,"text":196},{"id":209,"depth":233,"text":212},"markdown","content:blog:introducing-memd.md","content","blog\u002Fintroducing-memd.md","blog\u002Fintroducing-memd","md",null,{"newer":248,"older":250},{"_path":251,"title":252,"heading":252,"date":253},"\u002Fblog\u002Fwhy-rdp-cant-authenticate-like-ssh","Why RDP can't authenticate like SSH","2026-07-03",1784222877864]