{"_id":"@abhitsian/myday","_rev":"4-1b84b10f6ed9d1b120d124f42303e44a","name":"@abhitsian/myday","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@abhitsian/myday","version":"0.1.0","keywords":["mcp","memory","activity","macos","productivity","claude","agent","privacy","local-first"],"author":{"name":"Abhishek Sivaraman"},"license":"MIT","_id":"@abhitsian/myday@0.1.0","maintainers":[{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"}],"homepage":"https://github.com/abhitsian/myday#readme","bugs":{"url":"https://github.com/abhitsian/myday/issues"},"os":["darwin"],"bin":{"myday":"bin/myday.js","myday-mcp":"mcp/server.js"},"dist":{"shasum":"695a5f55845a2221b02131719d3dec2af3c12dfd","tarball":"https://registry.npmjs.org/@abhitsian/myday/-/myday-0.1.0.tgz","fileCount":24,"integrity":"sha512-uCJO5Y+kTPsqasmUVdDtGpDwuW6klWMkC/fwIhmChO2WPKxE2B74mOj6MeHlbXj8tjmjTT+rEH4qawXWzPy5wA==","signatures":[{"sig":"MEUCIGb2v1SPyc1yCCBl7dJoJPWsEkUnU3MfREpVFFlfH6WdAiEAywezlQURqwyL2b9ZIYfaQA+ZDlxtYxtxepKMn+OPK8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290355},"main":"lib/store.js","type":"commonjs","engines":{"node":">=18"},"gitHead":"8962d9ba628c37bc919a4a6f79501e3b493fcc7d","scripts":{"test":"./test/smoke.sh","postinstall":"node -e \"console.log('\\nmyday installed. Run: myday init\\n')\""},"_npmUser":{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"},"repository":{"url":"git+https://github.com/abhitsian/myday.git","type":"git"},"_npmVersion":"11.5.1","description":"A private, local memory of what you did on your Mac — 10-minute Markdown records, searchable, and readable by your AI coding agent over MCP","directories":{},"_nodeVersion":"24.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/myday_0.1.0_1787114989388_0.4062528179083793","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abhitsian/myday","version":"0.1.1","keywords":["mcp","memory","activity","macos","productivity","claude","agent","privacy","local-first"],"author":{"name":"Abhishek Sivaraman"},"license":"MIT","_id":"@abhitsian/myday@0.1.1","maintainers":[{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"}],"homepage":"https://github.com/abhitsian/myday#readme","bugs":{"url":"https://github.com/abhitsian/myday/issues"},"os":["darwin"],"bin":{"myday":"bin/myday.js","myday-mcp":"mcp/server.js"},"dist":{"shasum":"4d8d177f529f9aa2c8b6839b98eee5cacba0df48","tarball":"https://registry.npmjs.org/@abhitsian/myday/-/myday-0.1.1.tgz","fileCount":24,"integrity":"sha512-Hy1ja914Ppj4qE5n0PUkftjZec8fYyHWqM5mJweP77+ffMkaNWY8fN9Ll7/p9rQQ2vipbuQvgtKg2QFed9FKFg==","signatures":[{"sig":"MEUCIQDlsZrkBvIyKIa72aGvQoC2xrZu/arbyPKE52aSYmQBNgIgP+diWADV7qItxRS4Ch+onexTvj/9EuXlWGDrYUfA1IU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293437},"main":"lib/store.js","type":"commonjs","engines":{"node":">=18"},"gitHead":"4838d4cc9422443d6659337ff5795d6b81b426bf","scripts":{"test":"./test/smoke.sh","postinstall":"node -e \"console.log('\\nmyday installed. Run: myday init\\n')\""},"_npmUser":{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"},"repository":{"url":"git+https://github.com/abhitsian/myday.git","type":"git"},"_npmVersion":"11.5.1","description":"A private, local memory of what you did on your Mac — 10-minute Markdown records, searchable, and readable by your AI coding agent over MCP","directories":{},"_nodeVersion":"24.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/myday_0.1.1_1787469417157_0.4882407005261087","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abhitsian/myday","version":"0.1.2","keywords":["mcp","memory","activity","macos","productivity","claude","agent","privacy","local-first"],"author":{"name":"Abhishek Sivaraman"},"license":"MIT","_id":"@abhitsian/myday@0.1.2","maintainers":[{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"}],"homepage":"https://github.com/abhitsian/myday#readme","bugs":{"url":"https://github.com/abhitsian/myday/issues"},"os":["darwin"],"bin":{"myday":"bin/myday.js","myday-mcp":"mcp/server.js"},"dist":{"shasum":"dea942cf2072e812f01190f7139834f711c512cc","tarball":"https://registry.npmjs.org/@abhitsian/myday/-/myday-0.1.2.tgz","fileCount":31,"integrity":"sha512-bZZmzIPpAuzbqv6CRh7zs8wZPVKa09DTGKWnUNLj6czsOLV9RDUEFxiulDaWADsdKar56XyqbNPh/vyb9gk55A==","signatures":[{"sig":"MEYCIQDowbGTY0M38emICHQSiaOwRedGAdyo7uJPlKf5m8KCgQIhAOAZafEJG7l5+IGNIXHLzYNCYptjeSMSE/e4CIPcI/59","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520650},"main":"lib/store.js","type":"commonjs","engines":{"node":">=18"},"gitHead":"2017090174f2382ffac20829f20fb230c1b62390","scripts":{"test":"./test/smoke.sh","postinstall":"node -e \"console.log('\\nmyday installed. Run: myday init\\n')\""},"_npmUser":{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"},"repository":{"url":"git+https://github.com/abhitsian/myday.git","type":"git"},"_npmVersion":"11.5.1","description":"A private, local memory of what you did on your Mac — 10-minute Markdown records, searchable, and readable by your AI coding agent over MCP","directories":{},"_nodeVersion":"24.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/myday_0.1.2_1787766154659_0.08286272272726802","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abhitsian/myday","version":"0.1.3","description":"A private, local memory of what you did on your Mac — 10-minute Markdown records, searchable, and readable by your AI coding agent over MCP","keywords":["mcp","memory","activity","macos","productivity","claude","agent","privacy","local-first"],"bin":{"myday":"bin/myday.js","myday-mcp":"mcp/server.js"},"main":"lib/store.js","type":"commonjs","engines":{"node":">=18"},"os":["darwin"],"license":"MIT","scripts":{"postinstall":"node -e \"console.log('\\nmyday installed. Run: myday init\\n')\"","test":"./test/smoke.sh"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/abhitsian/myday.git"},"homepage":"https://github.com/abhitsian/myday#readme","bugs":{"url":"https://github.com/abhitsian/myday/issues"},"author":{"name":"Abhishek Sivaraman"},"_id":"@abhitsian/myday@0.1.3","gitHead":"7f631033be9b48e0ee6ee3d009409f84aed4d4ff","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-nK1dBDCgyoslPaTGewoseKOfvl0Fj9um+5k3FMM5cexGOmYvx8FRz65FK906HefDbVBJipCzWohN2rbo7Mqaqg==","shasum":"95b5b41cc388e2beccf7aed62080a3c693aa9c0e","tarball":"https://registry.npmjs.org/@abhitsian/myday/-/myday-0.1.3.tgz","fileCount":31,"unpackedSize":523110,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAVjj+/XhRGCDVVSr9ugxnc0/WF1PN8L4Qx2v94UIa6uAiEAvIe9TibgYWNLQMfM44cuy7hcq8CZAejF26nMM2KYskM="}]},"_npmUser":{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"},"directories":{},"maintainers":[{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/myday_0.1.3_1788113365729_0.21589632221655108"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T04:49:49.169Z","modified":"2026-08-30T18:09:26.044Z","0.1.0":"2026-08-19T04:49:49.611Z","0.1.1":"2026-08-23T07:16:57.308Z","0.1.2":"2026-08-26T17:42:34.805Z","0.1.3":"2026-08-30T18:09:25.891Z"},"bugs":{"url":"https://github.com/abhitsian/myday/issues"},"author":{"name":"Abhishek Sivaraman"},"license":"MIT","homepage":"https://github.com/abhitsian/myday#readme","keywords":["mcp","memory","activity","macos","productivity","claude","agent","privacy","local-first"],"repository":{"type":"git","url":"git+https://github.com/abhitsian/myday.git"},"description":"A private, local memory of what you did on your Mac — 10-minute Markdown records, searchable, and readable by your AI coding agent over MCP","maintainers":[{"name":"abhitsian","email":"abhishek.sivaraman87@gmail.com"}],"readme":"<div align=\"center\">\n<img src=\"docs/screens/icon.png\" width=\"120\" alt=\"My Day\">\n\n# My Day\n\n**A private record of what you worked on, kept on your Mac.**\n\nIt writes a short note every ten minutes. Weeks later you can ask it what you were doing, and\nso can your AI assistant.\n\n</div>\n\n<img src=\"docs/screens/today.jpg\" alt=\"The Today view: an hour-by-hour shape of the day, and what stood out\">\n\n---\n\n## The problem\n\nYou finish a week and cannot account for it. Your manager asks what you shipped. You open a\nhalf-finished document and spend ten minutes reconstructing why you opened it. You read\nsomething useful in March and cannot find it in August.\n\nMeanwhile your AI assistant starts every conversation knowing nothing. You re-explain the\nproject, the file, the thing you already tried, every single time.\n\nYour computer knew all of it and wrote none of it down.\n\n## What it writes\n\nEvery ten minutes, one small Markdown file:\n\n```markdown\n---\nstart: 09:10\nend: 09:20\ntitle: Tracing the webhook retry loop\nsummary: You read Stripe idempotency docs, then edited retry.ts.\napps: Visual Studio Code, Google Chrome\nsites: stripe.com, github.com\nproject: payments-api\n---\n- Reading Stripe's idempotency-key docs on retried deliveries\n- Editing retry.ts, focused on the key-reuse path\n```\n\nThat is the whole storage format. About forty files a day. No database, no account, no\nupload. You can `grep` it, edit one, or delete a file you would rather not keep.\n\nThree sources feed it, each a separate switch: which app is in front, the pages your browser\nalready recorded, and your Claude Code sessions. Reading your browsing is a different\ndecision from reading your terminal work, so they are different switches.\n\n---\n\n## The timeline\n\n<img src=\"docs/screens/timeline.jpg\" alt=\"The timeline: notes and Claude Code sessions on one rail\">\n\nYour day in order. Every note names the applications by their real icons and links the pages\nyou actually opened, so a morning you half-remember becomes a list you can click through.\n\nClaude Code sessions sit on the same rail as everything else, because a session and the\nbrowsing around it are usually the same piece of work. Each one carries a **resume** button\nthat copies the command to reopen that exact conversation.\n\nFilter the day by an app, a site, or a word, and the rail narrows to the slots that match.\n\n## Threads\n\n<img src=\"docs/screens/threads.jpg\" alt=\"Threads: work that recurs across days, with a per-day run strip\">\n\nTime-per-app is a fact about software: you spent 1h55m in Slack. A thread is a fact about\nwork: the checkout migration ran across six days and has been quiet for three.\n\nNothing is declared. There is no project field to fill in, no tags, no setup step, because\nthe people who would keep tags current do not need the tool.\n\nGetting there took two failed attempts, both instructive. Clustering on window titles looked\nrich and turned out to be the worst available signal: a terminal title reads the same for six\nhours, so its words bind every unrelated note in the day. Clustering on the summaries failed\nthe opposite way, paraphrasing the specific thing away until two notes about the same customer\nnever met.\n\nWhat works is identifiers. The file you edited, the repository you were in, the exact page,\nbyte-identical every time you touch the same thing and absent when you do not. Features that\nturn up nearly everywhere get dropped, and a note has to resemble a cluster's centre rather\nthan any single member, so one shared word cannot chain everything together.\n\nEach thread carries a state: today, yesterday, this week, quiet. The ones you picked up and\nput down surface first, because work you dropped is the reason to open the view.\n\n## People\n\n<img src=\"docs/screens/people.jpg\" alt=\"People: who you were in contact with, when, and about what\">\n\nA personal CRM you never fill in. Dex and Clay and Monica all make you log each interaction\nby hand; this reads the names off your meeting, chat and mail window titles, and counts.\n\nFor each person you get how often you were in contact, when you last were, a rising, fading\nor cold trend, and the documents you had open together. The list leads with who is going\ncold: someone you were in regular contact with, then a week of nothing. Nothing else here\nsurfaces that, and it is the thing a manager actually misses.\n\nThe names are filtered so the list is people, not products. A stop list removes feature and\ndocument vocabulary, and your own name, detected from the account it appears under.\n\n## What you read\n\n<img src=\"docs/screens/content.jpg\" alt=\"Content: work documents and pages read across every app, ranked and linked\">\n\nEverything you read, across every app rather than only the browser. A Word document, a Notion\npage, a PDF in Preview, a ticket in your tracker all land in one list, ranked by the time and\nthe days they drew, each linking back to the page.\n\nThe bar is deliberately low, so a spec you opened for two minutes still shows. What gets\nstripped is news fronts, entertainment, social feeds, search-result pages and sign-in\nplumbing, because those are glances rather than reading. When it is unsure, it keeps.\n\nReading the body of a page, not just its title, is an optional source: it uses the same\nAccessibility grant window titles need, takes no screenshot, and stores no image. With it on,\na note can say what a page said rather than only that you had it open. It is the most\nsensitive thing here, so it is off until you turn it on.\n\n## Friction\n\nRecurring costs, counted rather than asserted: signing in to the same host 29 times a week,\nthe same search typed on 13 separate days, a page you open daily and never bookmarked. Each\nfinding shows how many times and across how many days. Available from `myday friction`.\n\n---\n\n## Your AI assistant can read it\n\nMy Day ships an MCP server, so any assistant that speaks MCP can look up what you did instead\nof asking you.\n\n**Claude Code**, in `~/.claude.json`:\n\n```jsonc\n{ \"mcpServers\": { \"myday\": { \"command\": \"myday-mcp\" } } }\n```\n\n**Cursor**, in `.cursor/mcp.json`. **Windsurf, Zed, Continue** and anything else with MCP\nsupport take the same two lines.\n\nThen, mid-task:\n\n> **You:** pick up where I left off\n>\n> **Claude:** You were tracing a double-fire in the webhook retry loop. You'd read Stripe's\n> idempotency docs and edited `retry.ts`, and `retry.test.ts` was still failing on the\n> duplicate-delivery case (2026-08-14 15:30).\n\nFour tools: `history_search`, `history_window`, `history_resume`, `history_time_by`.\n\nNotes are built from web page titles, which are text other people control. A page titled\n*\"ignore previous instructions\"* would otherwise reach an assistant that can run commands.\nEvery response comes back inside a fenced envelope with the brackets escaped, so the payload\ncannot close it, and the rule is restated on every single response.\n\n---\n\n## Install\n\n**[Download My Day.dmg](https://github.com/abhitsian/myday/releases/latest)** → drag into\nApplications → **right-click and choose Open** the first time. Nothing else to install; a\nNode runtime ships inside the app. Five screens explain what it reads before it reads\nanything, and it lives in the menu bar from then on.\n\nRemoving it takes everything with it: **Delete Everything and Quit** in the menu bar, or\n`myday uninstall`.\n\n<details>\n<summary>Command line instead of the app</summary>\n\nThe CLI is an alternative to the app, not a companion. Both record, and running both means\ntwo recorders writing the same file, so pick one. `myday start` checks whether the app is\nrunning and stops rather than doubling up.\n\n```sh\nnpm install -g @abhitsian/myday\nmyday init      # explains exactly what gets read, then asks\nmyday start     # begins recording\n```\n\nNeeds Node 18+. `myday build-helper` compiles a small Swift program for window titles, which\nwants Xcode Command Line Tools. The app needs neither. If you already use the app, skip\n`myday start`; every read command works against the same history.\n\n</details>\n\n<details>\n<summary>Why the right-click, and why window titles stop after an update</summary>\n\nMy Day is signed ad-hoc rather than with a paid Apple certificate, so macOS asks you to\nconfirm the first launch. That is once, and every launch after is a normal double-click.\n\nmacOS keys the Accessibility permission to the exact binary, so updating the app clears it\nand window titles stop being recorded until you grant it again. The menu bar says \"Window\ntitles off\" when that has happened, and clicking it opens the right pane. Everything else\nkeeps working meanwhile.\n\n</details>\n\n## Privacy\n\nRules apply before anything is written, so an app you exclude never reaches disk. There is no\nlater filtering step to get wrong.\n\n```sh\nmyday permissions apps +Signal          # never record Signal\nmyday permissions sites include         # switch to an allow-list\nmyday clear hour                        # delete the last hour, notes and events both\n```\n\nPassword managers are excluded out of the box. Private browsing is never included, because\nyour browser does not record it. Summaries are written locally with no model by default, and\nenabling one logs every send to a file you can read.\n\nClearing removes the notes **and** the raw events behind them. Deleting a note alone would\nleave the events on disk and the next rollup would write it straight back.\n\nOne source is off by default and stays off until you build and enable it: **on-screen text**.\nIt reads the body of the page or document in front, not just its title, so a note can say what\nyou read rather than what you had open. It uses the same Accessibility grant window titles\nneed, and it is the most sensitive thing here. Page bodies are emails, messages and\ndocuments. On a cloud summariser that text is sent to the model and logged to `egress.log`.\nTurn it on with `myday build-content` then `myday sources content on`.\n\nApp names and times need no permission at all. Page titles and addresses come from the\nhistory file your browser already keeps, which does not prompt either. Window titles are the\nonly part that asks for anything: `myday build-helper` compiles a 60-line Swift program that\nreads two attributes and prints them, and Accessibility goes to that binary. Granting it to\n`osascript` instead would give every script on your machine the same access.\n\n## How it works\n\n```mermaid\nflowchart LR\n    A[\"Every 15s<br/>which app is in front\"] --> D\n    B[\"Your browser's own<br/>history database\"] --> D\n    C[\"Claude Code<br/>session transcripts\"] --> D\n    H[\"On-screen text<br/>optional, off by default\"] --> D\n    D[\"Every 10 minutes<br/>one Markdown note<br/>local · on-device · cloud\"] --> E[\"~/.myday/memories/<br/>plain Markdown\"]\n    E --> F[\"The app · 7 views<br/>Today · Timeline · Apps<br/>Threads · People · Content\"]\n    E --> G[\"MCP server<br/>any AI assistant reads it\"]\n    E --> I[\"CLI<br/>search · ask · threads\"]\n```\n\n## Where this came from\n\nOpenAI shipped **Computer History** in the ChatGPT Mac app in August 2026: record interaction\nevents rather than screenshots, roll them up every ten minutes into Markdown memory files,\nread those back when the user asks about past work. Windows Recall and Rewind had taken the\nscreenshot route before it and spent their public lives defending that choice.\n\nThe text-only decision is the good one, and My Day keeps it. Where the two part ways:\n\n| | ChatGPT Computer History | My Day |\n|---|---|---|\n| Keystrokes and clicks | recorded | never |\n| Page detail | scraped from the window | the browser's own history, plus optional on-screen text |\n| Works with | ChatGPT | any MCP client: Claude Code, Cursor, Zed |\n| Storage | local Markdown | local Markdown, and you pick the folder |\n| Recurring work | — | derived threads, work only |\n| People | — | who you contacted, when, going cold |\n| What you read | — | ranked across every app, news stripped |\n| Your own history | starts empty | reconstructed from months of browsing on day one |\n\nThreads need two or three weeks before they mean anything, so a fresh install has nothing to\nsay at exactly the moment you decide whether to keep it. My Day reads the browsing history\nalready on your disk and writes notes for the past sixty days, so the first screen is\npopulated.\n\n## Commands\n\n```\nmyday init | start | stop | status | uninstall\nmyday show | timeline | apps | browse | sessions\nmyday threads | friction | search <q> | ask \"<question>\"\nmyday sources | permissions | clear | backfill\nmyday build-content              # optional: read on-screen text, off by default\nmyday view                       # the app, in a browser\n```\n\n## What it does not do yet\n\n- **Window titles need Accessibility**, so without it a note names the app and not the document.\n- **macOS only.** The sampler and the helper are both AppKit.\n- **Git and calendar are planned**, not built. The source registry already lists them.\n- **No sync.** One machine, one history, by design.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}