[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92768":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":15,"starSnapshotCount":15,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},92768,"ditto","ohad6k\u002Fditto","ohad6k","Mine your Claude Code and Codex logs into a local you.md agent profile.",null,"Python",168,16,1,3,0,103,53.69,"MIT License",false,"main",true,[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"agent-memory","agent-skills","ai","ai-agents","ai-coding","claude","claude-code","codex","context-engineering","cursor","developer-tools","llm","local-first","personalization","2026-07-22 04:02:07","\u003Cp align=\"center\">\u003Cimg src=\"assets\u002Fditto.png\" width=\"360\" alt=\"ditto\">\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Ditto\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\u003Cb>Your AI agents act like they just met you. Ditto fixes that.\u003C\u002Fb>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fohad6k\u002Fditto?style=for-the-badge&color=3a3a3a&labelColor=141414&logo=github&logoColor=white&cacheSeconds=1800\" alt=\"stars\">\n\u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FVNnMq2U5r\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdiscord-join-3a3a3a?style=for-the-badge&labelColor=141414&logo=discord&logoColor=white\" alt=\"discord\">\u003C\u002Fa>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-3a3a3a?style=for-the-badge&labelColor=141414\" alt=\"MIT\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-zero_deps-3a3a3a?style=for-the-badge&labelColor=141414&logo=python&logoColor=white\" alt=\"python, zero deps\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fworks_with-claude_·_cursor_·_codex_·_gemini-141414?style=for-the-badge&labelColor=3a3a3a\" alt=\"works with claude, cursor, codex, gemini\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\nYou have months of chat logs with Claude \u002F Codex \u002F Cursor sitting on your disk.\u003Cbr>\nIt is the most honest record of how you actually think, and you are deleting it.\u003Cbr>\nDitto mines it into a \u003Ccode>you.md\u003C\u002Fcode> your agents read before every task.\n\u003C\u002Fp>\n\n---\n\n## Not Memory\n\nMemory is what you explicitly told the model.\n\nDitto mines what your work already proved about you: what you reject, what \"done\" means, when you ask for proof, how you talk when you're actually working, and the agent behaviors that make you stop the task.\n\nThat's why it reads raw session logs, not your `CLAUDE.md` or rules file.\n\n\u003Cp align=\"center\">\u003Cimg src=\"assets\u002Fcard.png\" width=\"460\" alt=\"a ditto profile card: archetype, laws with consensus counts, session stats, and the one uncomfortable truth\">\u003C\u002Fp>\n\n## A Real Run\n\nI asked an agent to help me launch this repo. One line: **\"help me post ditto on reddit.\"** Same model, once cold, once with my Ditto profile loaded.\n\n\u003Ctable>\u003Ctr>\u003Ctd>\n\n**🡒 agent**\n\nHere's how I'd play it.\n\n**Subreddits:** r\u002FClaudeAI and r\u002FChatGPTCoding are your core audience — they've got the .jsonl logs on disk right now. r\u002FLocalLLaMA fits the local angle but is allergic to hype. r\u002Fcursor, r\u002FSideProject, r\u002Fopensource for reach. Skip r\u002Fprogramming on launch day. Don't blast all at once — post to one, tune the title, repost over a few days.\n\n**Titles (pick per sub):**\n- I built a local tool that reads your AI coding logs and writes a \"you.md\" your agents read before every task\n- ditto: mine your own Claude Code \u002F Cursor history into a profile so your agent codes like you (local, open source)\n\n**Body:**\n> Every fresh agent session starts from zero — it doesn't know how you work, so you re-explain yourself every time. All of that is already in your session logs. So I built **ditto**: it reads your history, mines how you decide and talk, and writes a `you.md` your agents read before every task.\n> - runs locally, your logs never leave your machine\n> - redacts secrets before processing\n> - open source: [link]\n\nAlso: open with the pain not the product, reply fast in the first hour, add a demo gif, and flair it correctly. Want me to write tuned variants for each subreddit?\n\n\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\n\u003Ctable>\u003Ctr>\u003Ctd>\n\n**🡒 agent + ditto**\n\nthe insight first: the mining number is your whole post. \"i read 1,656 of my own sessions\" is a confession, not a pitch, and nobody scrolls past a confession. lead with the mirror, not the mechanism. the tool is secondary.\n\npost it in r\u002FClaudeCode. one sub, not five — that crowd lives in their session logs, they'll get it instantly. the repo link goes in your first comment, not the body.\n\n**title:** I had 20 AI agents read 8 months of my claude sessions and build a model of how I think. it was unsettling how accurate it was\n\n**body:** i work with claude and codex every day. 8 months, solo. every session gets logged and i never looked back at them.\n\nlast night it hit me those logs are the most honest record of how i actually work that exists anywhere. i don't perform in them, i just work. so i mined them.\n\npulled every message i ever typed, ~1,656 sessions, about 3M tokens of just me. split it into 20 chunks, sent 20 agents at it in parallel, each pulling how i decide, what i reject, how i talk, where i get stuck. merged them into one profile ranked by how many agents independently found each trait. what 15+ of them caught is the real me.\n\nturned the top of it into a skill claude reads before every task. now it starts already knowing how i work instead of me re-explaining myself every session.\n\nyou have this same goldmine sitting on your disk right now and you're probably deleting it.\n\nthen the move: post it, drop the repo as your own first comment within a minute, and answer every \"how\" with the mining approach, not features. the comments are where it converts.\n\n\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\n## What It Finds\n\nThe kind of profile Ditto builds, ranked by how many of the 20 agents independently pulled each trait. What 15+ of them agree on is the real you. Your agent reads this before every task.\n\n> **done means it runs live.** never trust \"done\" off a code edit. show it working first.\n>\n> **fix the one thing.** rewriting or \"cleaning up\" code that isn't the problem gets rejected every time.\n>\n> **builds faster than they understand what they built** — then asks the agent to explain their own system back.\n>\n> **voice:** lowercase, short, \"you get me\", no walls of text, no hype.\n>\n> **gets frustrated by repeating the same ask** until it lands, not by escalating.\n\nNobody wrote those rules down. 20 agents pulled them out of one person's own history and agreed on them.\n\n> This is an example. Yours is mined from your logs and will read nothing like it.\n\n---\n\n## What It Does\n\n1. Reads your local session logs and keeps **only the words you typed** (strips all the tool output, file dumps, and pasted errors).\n2. **Redacts secrets + personal info** by default, before anything is written or seen by an agent.\n3. Splits it into chunks and hands you a prompt to fan a coding agent across them, then merge into one `you.md`.\n\nThat `you.md` is a skill\u002Fcontext file. Drop it in `.claude\u002Fskills\u002F`, `.codex\u002Fskills\u002F`, your `AGENTS.md`, or Cursor rules, and every agent starts already knowing how you work.\n\n## Quickstart\n\nOne command installs the Ditto skill into your agent:\n\n```bash\nnpx skills add ohad6k\u002Fditto\n```\n\nThen tell your agent **`run ditto`** and it mines your local Claude \u002F Codex \u002F Cursor logs into your `you.md`. Works in Claude Code, Codex, and Cursor.\n\nPrefer the raw script? It's one stdlib file, no clone needed:\n\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fohad6k\u002Fditto\u002Fmain\u002Fditto.py\npython ditto.py --dry-run  # preview counts + output paths without writing files.\npython ditto.py            # auto-detects Codex + Claude + Copilot logs. no deps, stdlib only.\n```\n\nOr the full repo (gets you the mining prompt + skill too):\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fohad6k\u002Fditto\ncd ditto\npython ditto.py\n```\n\nWhat you can audit before running it:\n\n- [`ditto.py`](ditto.py) is the extractor. stdlib only, no network calls.\n- Redaction happens before text is written to `ditto-out\u002F`.\n- The mining prompt is plain markdown: [`MINING_PROMPT.md`](MINING_PROMPT.md).\n- The full security model is here: [`SECURITY.md`](SECURITY.md).\n\nYou get:\n\n```\nsessions: 1,656\nyour messages: 7,678\ntokens (approx): 2,950,000\nsecrets\u002FPII redacted: 41\nwrote: ditto-out\u002Fyou-corpus.txt  +  20 chunks in ditto-out\u002Fchunks\u002F\n```\n\nThen open your coding agent (Claude Code \u002F Codex \u002F Cursor), paste [`MINING_PROMPT.md`](MINING_PROMPT.md), point it at `ditto-out\u002Fchunks\u002F`, and let it build your `you.md`. Size chunks so each is ~70K tokens (`--chunks N`, N ≈ tokens \u002F 70000) — agents genuinely read that; bigger gets skimmed. Example output: [`examples\u002Fyou.md`](examples\u002Fyou.md).\n\nWhen it finds something true about you that you never wrote down - [post the weirdest one](https:\u002F\u002Fgithub.com\u002Fohad6k\u002Fditto\u002Fissues\u002F1). Don't post your full `you.md`, just the one trait that got you.\n\n## Install Your you.md (Any Agent)\n\n> **More than one self.** The default `you.md` is your *working self* — laws and taste for doing a task. The same logs also hold a *thinking self* (how you reason) and a *designer self* (how you make taste calls). See [`examples\u002F`](examples\u002Flenses\u002F) for all three mined from one real 8-month history, and [`examples\u002Funified-system.md`](examples\u002Funified-system.md) for how ditto stacks with graph memory (Obsidian) and soul.md.\n\nYour `you.md` is just a context file. Drop it where your agent already looks and it reads it before every task:\n\n| Tool | Where it goes |\n|---|---|\n| Claude Code | `.claude\u002Fskills\u002Fyou\u002FSKILL.md` (or append to `CLAUDE.md`) |\n| Codex skill | `~\u002F.codex\u002Fskills\u002Fyou\u002FSKILL.md` |\n| Cursor | `.cursor\u002Frules\u002Fyou.mdc` |\n| Codex repo context | `AGENTS.md` |\n| Gemini CLI | `GEMINI.md` |\n| Windsurf \u002F other | its rules or context file |\n\nDitto writes the `you.md` with the right frontmatter already, so on Claude Code, Codex, and Cursor it **registers as a skill the moment you drop it in** - nothing to wire. For Codex, use the native skill path above if you want it everywhere; use `AGENTS.md` if you only want it in one repo. That's it, no plugin, no config.\n\n**Using a coding agent?** Point it at this repo and say *\"run ditto and install my you.md\"* - the skill in [`skills\u002Fditto\u002F`](skills\u002Fditto\u002FSKILL.md) walks it through the whole flow (extract, mine, write, place the file) on its own. Works in Claude Code, Cursor, Codex, and Gemini.\n\nCopy\u002Fpaste version:\n\n```text\nrun ditto on my local Claude\u002FCodex logs, mine a you.md from the chunks, install it for my current agent, and show me the session\u002Fmessage\u002Ftoken\u002Fredaction counts before claiming it worked.\n```\n\nManual install:\n\n```bash\npython ditto.py --install you.md --target codex\npython ditto.py --install you.md --target claude\npython ditto.py --install you.md --target cursor --repo .\npython ditto.py --install you.md --target agents --repo .\npython ditto.py --install you.md --target gemini --repo .\n```\n\n## Your Card\n\nAfter mining, get your profile as a card:\n\n```bash\npython ditto.py --card\n```\n\nYour archetype, your laws with their receipt counts (how many of the 20 agents independently found each one), your session stats, and the one uncomfortable truth. Rendered in the terminal + as `ditto-out\u002Fcard.html`. Screenshot the card, not the profile - the `you.md` is for your agent; the card is for everyone else.\n\n## Privacy (Read This)\n\n- **100% local.** Ditto makes zero network calls. Your logs never leave your machine. It's plain Python; read the file.\n- **Redaction is on by default.** API keys, tokens, JWTs, emails, phone numbers, IPs get stripped before your text hits disk or an agent. (`--no-redact` exists; don't use it.)\n- The mining step runs in *your* coding agent, on *your* machine. Nothing gets uploaded unless you choose to.\n\n## How It Works\n\nYour logs are ~95% noise (tool output, file contents, diffs). The signal is the small slice of words you actually typed. Ditto isolates that, drops verbatim-duplicate specs and injected rules you pasted more than once (often ~40% of a heavy history — this is what keeps the token cost down), then uses an agent fan-out so no single context has to hold all of it: each agent reads a chunk and pulls how you decide, what you reject, how you talk, where you get stuck. Traits that show up across many chunks are the real you. One-offs are noise. That ranking is the whole trick.\n\n**It mines your raw sessions, not your `CLAUDE.md` or rules file.** That's the entire point - anything can summarize the rules you already wrote (that's what `\u002Finit` does). Ditto surfaces the stuff you *never* wrote down, straight from how you actually worked. If a run builds a profile without reading your real `.jsonl` logs, it isn't Ditto - it's just your rules file reflected back.\n\n## Limits (Being Honest)\n\n- It models how you *work and talk*, not your knowledge. It won't make an agent smarter, it makes it act more like you.\n- Garbage in, garbage out: if your logs are 3 sessions long, the profile is thin. It shines around months of history.\n- It reads Codex (`~\u002F.codex\u002Fsessions`), Claude Code (`~\u002F.claude\u002Fprojects`), and Copilot CLI (`~\u002F.copilot\u002Fsession-state`) jsonl out of the box. Other tools: point `--path` at a folder of jsonl.\n\n## Roadmap\n\nNext up: one-command installer, more log sources, and counterweight profiles that use your `you.md` to challenge you instead of mimic you.\n\nSee [`ROADMAP.md`](ROADMAP.md).\n\n## Community\n\nBuilding this in the open.\n\nIf you run it, don't post your full `you.md`. Post the weirdest thing it found about how you work:\n\n- [Share what Ditto found in your logs](https:\u002F\u002Fgithub.com\u002Fohad6k\u002Fditto\u002Fissues\u002F1)\n- [discord.gg\u002FVNnMq2U5r](https:\u002F\u002Fdiscord.gg\u002FVNnMq2U5r)\n\n## License\n\nMIT. It's yours. If you build something on it, I'd love to see it.\n\n\u003Cp align=\"center\">\u003Ci>Made by \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fohad6k\">@ohad6k\u003C\u002Fa> while building in public.\u003C\u002Fi>\u003C\u002Fp>\n","Ditto 是一个本地化 AI 代理个性化工具，通过解析用户在 Claude、Cursor、Codex 等编码助手中的原始会话日志（如 JSONL 格式），自动提炼出反映其真实工作习惯、判断标准与沟通风格的个人档案（you.md）。它不依赖显式规则或人工编写记忆，而是基于实际交互行为进行上下文挖掘，支持零依赖 Python 运行、完全离线处理。适用于希望提升 AI 编程代理一致性与适配度的开发者，尤其适合长期使用 AI 编程工具并积累大量本地日志的个体用户。",2,"2026-07-10 02:30:25","CREATED_QUERY"]