PluginBench
MCP Server
Active
MIT

io.github.ohad6k/emulo MCP Server

io.github.ohad6k/emulo

Mine your AI coding session logs into a you.md profile so agents understand how you actually work.

What is the io.github.ohad6k/emulo MCP server?

Emulo is an MCP server that extracts patterns from your real AI coding sessions (Claude Code, Codex, Cursor, etc.) and generates a private you.md profile your agents read before every task. It mines dated evidence of how you define "done", what code you reject, how you debug, and your actual working voice—then loads that profile natively in Claude, Codex, Cursor, and other MCP clients.

Emulo solves the problem of AI agents starting every session from scratch without knowing your preferences, standards, or working style. Instead of manually writing rules, it automatically extracts real patterns from your session history with dated receipts, then creates a shareable profile that makes agents code like you from the start. The profile stays private on your machine and works across Claude Code, Codex, Cursor, Gemini, and other MCP-compatible tools.

How to install io.github.ohad6k/emulo

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "emulo": {
      "command": "uvx",
      "args": [
        "emulo",
        "mcp"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • load_emulo_profile — MCP tool that loads your mined work, design, writing, or video profile for the agent to read before a task
  • emulo:mine — Mines your session history and generates a you.md profile with dated evidence
  • emulo:work — Loads your work profile layer
  • emulo:design — Loads your design profile layer
  • emulo:write — Loads your writing profile layer
  • emulo:video — Loads your video/motion profile layer
  • emulo:coach — Runs a usage report showing where you lose time with the model (asks repeated, context re-explained, rephrased requests)
  • emulo:card — Renders your profile as a shareable card with archetype, top laws, coverage stats, and key insight
  • emulo verify — Verifies profile receipts by searching mined sessions for every quoted evidence

Use cases

  • Extract your actual coding standards and preferences from months of session history, then load them automatically so Claude/Cursor code like you without re-explaining yourself
  • Identify patterns in how you work (what you reject, how you debug, when you ask for proof) with dated receipts from real sessions, not guesses
  • Generate a shareable profile card showing your archetype and top working principles to share with teammates or use across multiple AI agents
  • Diagnose where you lose time with AI models (repeated asks, lost context, rephrased requests) via the usage coach report
  • Load separate profile layers (work, design, writing, video) so the right part of your style loads for the right task

io.github.ohad6k/emulo MCP server FAQ

What is Emulo and how does it work?

Emulo reads your real AI coding session logs (from Claude Code, Codex, Cursor, etc.), extracts patterns about how you work with dated evidence, and generates a private you.md profile. When you run a task, your agent reads this profile first so it already knows your standards, voice, and working style.

Is Emulo free and open source?

Yes. Emulo is MIT licensed, free, and works without an account or sign-up. It runs locally on your machine with zero dependencies.

How do I install Emulo in Claude or Cursor?

In Claude Code: `/plugin marketplace add ohad6k/emulo` then `/plugin install emulo@emulo`. In Cursor or Claude Desktop: configure the MCP server in your settings with `"command": "uvx", "args": ["emulo", "mcp"]`. Or install via pip: `pip install emulo`.

Does Emulo send my session logs to the cloud?

No. Session extraction, redaction, caches, and your profile all stay on your machine. The only exception is if you point the miner at a hosted model (like Claude API); if you use a local model, everything stays private.

What kind of rules does Emulo extract?

Real patterns from your work: how you define "done", what code you reject, when you ask for proof, how you talk when actually working, what makes you stop a task. Each rule includes dated receipts from your actual sessions, not invented rules.

Can I verify that the rules in my profile are real?

Yes. Run `emulo verify you.md` to check that every quote in your profile is a verbatim match from your mined sessions. It reports any invented or single-session-only evidence.

README (reference)

Source of truth, from the repository.

<!-- mcp-name: io.github.ohad6k/emulo --> <p align="center"><img src="assets/emulo.png" width="360" alt="Emulo"></p> <h1 align="center">Emulo</h1> <p align="center"><b>Your AI agents act like they just met you. Emulo fixes that.</b></p> <p align="center"> <img src="https://img.shields.io/github/stars/ohad6k/emulo?style=for-the-badge&color=3a3a3a&labelColor=141414&logo=github&logoColor=white&cacheSeconds=600" alt="stars"> <a href="https://discord.gg/QMnYtVcxk2"><img src="https://img.shields.io/badge/discord-join-3a3a3a?style=for-the-badge&labelColor=141414&logo=discord&logoColor=white" alt="discord"></a> <img src="https://img.shields.io/badge/license-MIT-3a3a3a?style=for-the-badge&labelColor=141414" alt="MIT"> <img src="https://img.shields.io/badge/python-zero_deps-3a3a3a?style=for-the-badge&labelColor=141414&logo=python&logoColor=white" alt="Python, zero dependencies"> <img src="https://img.shields.io/badge/works_with-claude_·_codex_·_cursor_·_copilot_·_openclaw_·_hermes-141414?style=for-the-badge&labelColor=3a3a3a" alt="works with claude, codex, cursor, copilot, openclaw, hermes"> </p>

Your real coding-agent sessions already contain the rules you never wrote down: what “done” means, what you reject on sight, how you debug, how you design UI, and how you write when you are actually working.

Emulo mines selected evidence from those sessions — Claude Code, Codex, Copilot CLI, OpenCode, and Google Antigravity logs out of the box — into a private working profile your agent reads before every task. Separate layers for work, design, writing, and video mean the right part of you loads for the right task.

The mined profile loads where your agents already live: Claude Code and Codex natively, Cursor, Gemini, and OpenCode through explicit adapters, and OpenClaw and Hermes Agent as a standard skill (guide).

The Emulo Proof v1 methodology is an unexecuted methodology until a separately approved evidence release exists.

The video layer, and where it comes from

<p align="center"><img src="assets/vercel-spec-loop.webp" width="760" alt="A spec commercial made in Claude Design"></p>

A spec commercial, made in Claude Design. No After Effects and no motion software: the whole thing is a composition rendered out to video.

It is spec work. It was not commissioned by Vercel and it was not made for them. A brand was picked to see how far the motion could go.

It is here because emulo:video is mined from sessions like the one that produced it. The other layers work the same way: the profile is not a template, it is what survived from real work.

Install

Inside Claude Code:

/plugin marketplace add ohad6k/emulo
/plugin install emulo@emulo

Inside Codex:

codex plugin marketplace add ohad6k/emulo --ref v0.6.2 --json
codex plugin add emulo@emulo --json

Then run emulo:mine and point it at your session history. Everything below explains what that produces and why. If you want the CLI instead of the plugin, see Quickstart.

Open source and privacy

Emulo is MIT licensed, free, and works without an account. There is nothing to buy and no sign-in.

Session extraction, redaction, caches, the profile itself, and the agent adapters all stay on your machine. The one exception is mining: if you point it at a hosted model, the selected evidence goes to that provider. Point it at a local model and the whole run stays on your machine.

Not memory

Memory is what you explicitly told the model.

Emulo 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.

That's why it reads raw session logs, not your CLAUDE.md or rules file.

A real run

One line to the same agent, twice: "help me post emulo on reddit." Once cold, once with the Emulo profile loaded.

<table> <tr> <th width="500">🡒 agent</th> <th width="500">🡒 agent + emulo</th> </tr> <tr valign="top"> <td>

Here's how I'd play it.

Subreddits: r/ClaudeAI and r/ChatGPTCoding are your core audience. r/LocalLLaMA fits the local angle. r/cursor, r/SideProject, r/opensource for reach. Don't blast all at once — post to one, tune the title, repost over a few days.

Title: I built a local tool that reads your AI coding logs and writes a "you.md" your agents read before every task

<details open> <summary>full reply</summary>

Titles (pick per sub):

  • I built a local tool that reads your AI coding logs and writes a "you.md" your agents read before every task
  • emulo: mine your own Claude Code history into a profile so your agent codes like you (local, open source)

Body:

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 emulo: it reads your history, mines how you decide and talk, and writes a you.md your agents read before every task.

  • runs locally, your logs never leave your machine
  • redacts secrets before processing
  • open source: [link]

Also: 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?

</details> </td> <td>

the 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.

one sub, not five — a skills sub, where people come looking for this instead of arguing about it.

Title: I built a Claude skill from 8 months of my own Claude Code sessions

<details open> <summary>the full post it wrote</summary>

body: I use claude code and codex every day. 8 months, solo. every session gets logged and i never really looked back at them.

then it hit me that those logs are probably the most honest record of how i actually work. not my CLAUDE.md, not my docs, not the rules i remembered to write down. the real sessions.

so i built emulo.

What I did: pulled every message i typed from my local claude/codex logs. stripped tool output, pasted errors, file dumps, and assistant replies. kept only my words. came out to around 1,656 sessions and almost 3M tokens of just me.

then i split it into chunks and had agents read each slice. each one pulled patterns like how i define done, what kind of code i reject, when i ask for proof, what makes me stop a task, and how i talk when i am actually working.

then i merged the repeated traits into one you.md.

the useful part is that it installs as a claude skill. so now instead of starting every task cold, claude reads my profile first and already knows how i work.

not memory exactly. memory is what you told the model. this is more like mining what your work already proved about you.

</details> </td> </tr> </table>

I posted it on r/ClaudeSkills, as written:

<p align="center"><img src="assets/reddit-proof.png" width="460" alt="The post the Emulo-loaded agent wrote: 200 upvotes, 32 comments, 102K views"></p> <p align="center"><strong>200 upvotes &middot; 32 comments &middot; 102K views</strong><br> <sub>from an account with no followers. The cold plan was reasonable. The loaded plan knew its user's voice — and it worked.</sub></p>

What it finds

The kind of rules a mine pulls out, each backed by dated verbatim receipts from real sessions:

done means it runs live. never trust "done" off a code edit. show it working first.

fix the one thing. rewriting or "cleaning up" code that isn't the problem gets rejected every time.

builds faster than they understand what they built — then asks the agent to explain their own system back.

gets frustrated by repeating the same ask until it lands, not by escalating.

Nobody wrote those rules down. They came out of one person's own history, with receipts.

This is an example. Yours is mined from your logs and will read nothing like it.

The usage report

Mining answers "who is this person." The usage report answers a different question: where are you losing time with the model.

python emulo.py --coach                   # every source it can find
python emulo.py --coach --source claude   # Claude Code only

It runs before any mining, makes no model call, and finishes in seconds. It counts what your own messages already show: asks you sent three times in a row without changing them, context you re-explained after the agent lost it, runs where you rephrased the same request instead of adding the missing constraint, and how often you open a turn by correcting the last answer.

Every finding prints the dated messages behind it. Checks that come in under their bar are printed with their counts as well, so a clean result reads as a result rather than as silence.

It reads only the messages you typed, which is all Emulo keeps. It cannot see cost, tokens, tool calls, or whether the agent was right, and it never scores those.

The card

After mining, python emulo.py --card renders your profile as a shareable card: archetype, top laws ranked by distinct supporting session receipts, coverage stats, and one sharp truth.

<p align="center"><img src="assets/card.png" width="460" alt="An Emulo profile card: archetype, laws with receipts, session stats, and the one uncomfortable truth"></p>

Share the card or one short trait, never your full profile.

Quickstart

Install the cross-agent bootstrap — runs in Claude Code and Codex, and installs profiles for Cursor and Gemini through the explicit adapters:

npx skills add ohad6k/emulo@emulo

Then tell your agent:

run emulo

That installs the bootstrap and creates a read-only full-history mining plan. Your agent must show the cost and wait for approval before model work.

Once your profile exists, the bootstrap offers the native plugin so you also get namespaced emulo: routing. It asks first and takes a no. In Codex it can run the install itself; in Claude Code /plugin is typed by you, so it hands you the two exact lines to paste.

Install the CLI

If you'd rather run Emulo yourself instead of through an agent:

pip install emulo

That puts emulo on your path. emulo runs the miner, emulo --dry-run prints the read-only plan first, and emulo mcp runs the MCP server below. uv tool install emulo works the same way, and uvx emulo runs it without installing.

emulo writes RUN_ME.md next to your chunks. It is self-contained, so the whole remaining step is one line to your agent:

read emulo-out/RUN_ME.md and follow it

Your agent makes one pass per chunk, merges them, writes you.md, and prints the install command. Nothing to paste and nothing else to download.

Check the receipts

A profile is only worth loading if its evidence is real. The failure that matters is not a missing rule, it is a confident rule quoting something you never said:

emulo verify you.md

It pulls every quote out of the profile and searches the mined sessions for it. Quotes it cannot find are reported and the command exits non-zero, because a receipt that cannot be traced was invented. Quotes resting on a single session are flagged separately: one session is context, not a rule. Add --json for machine-readable output, including which session ids support each quote.

This checks what is mechanically checkable. Whether a rule is vague, generic, or true of every developer alive is still a judgment call, and still yours.

Native Codex plugin

The native plugin adds emulo:mine, emulo:work, emulo:design, emulo:write, and emulo:video:

codex plugin marketplace add ohad6k/emulo --ref v0.6.2 --json
codex plugin add emulo@emulo --json

The plugin-install command itself scans no logs, writes no private profile state, and schedules zero mining model calls. Asking an agent to install, run, or update Emulo still consumes that host interaction plus its normal system and tool overhead.

Native Claude Code plugin

The Claude Code plugin exposes the same five skills. Install it from inside Claude Code:

/plugin marketplace add ohad6k/emulo
/plugin install emulo@emulo

MCP server

Emulo also ships a Model Context Protocol (MCP) server, so any MCP client — Claude Desktop, Cursor, and other agents — can load your profile before a task. The server implements MCP over stdio and exposes one tool, load_emulo_profile, which returns your mined work, design, or writing profile over the Model Context Protocol.

Run it from the published package with uvx emulo mcp, or from a checkout with python emulo.py mcp, and point an MCP client at it:

{
  "mcpServers": {
    "emulo": { "command": "uvx", "args": ["emulo", "mcp"] }
  }
}

The MCP server is stdlib-only and serves the profile you already mined locally; it makes no network calls of its own.

What happens when you run it

Emulo first prints a read-only plan:

{
  "valid_sessions": "--",
  "post_dedupe_source_tokens": "--",
  "mode": "full",
  "profile_scope": "full_profile",
  "quality_default": true,
  "candidate_index": null,
  "selected_source_tokens": "--",
  "planned_worker_calls": "--",
  "planned_reducer_calls": "--"
}

The full-history quality default reads all eligible history. Emulo shows the exact plan first and waits for approval before any worker or reducer runs. Cached reports are reused, so the displayed remaining cost can fall over time.

If you explicitly want a cheaper first look, ask for run emulo quick preview or use --preview:

python emulo.py plugin preflight --preview

Quick preview creates a starter profile from selected history, not the full profile.

The quick-preview ladder is:

CandidateNew source textMaximum planned passes
4 × 25K100K tokens4 workers + 1 reducer
6 × 25Kup to 150K tokensup to 6 workers + 1 reducer
8 × 25K160K-token hard capup to 8 workers + 1 reducer

The frozen calibration recovered only 5 of 22 required traits at the widest bounded candidate. Quick preview therefore cannot be described as the quality default unless a future run passes all 22 frozen requirements. The permanent non-private baseline is in tests/fixtures/bounded-calibration-baseline.json.

The first real full-history release mine recovered 12 of the same 22 frozen requirements: work 5/10, design 5/5, and writing 2/7. Full history remains the quality default because it materially improves recall over preview, not because it guarantees a complete personal model. The validated pack keeps only supported rules; missing traits require future mining improvements rather than a softened score.

On update, unchanged segment and evidence hashes are reused. An identical update plans zero additional Emulo mining passes. New history plans only affected full-history work plus one reducer.

These are selected source tokens and planned worker/reducer passes, not provider billing events. Emulo cannot measure provider system prompts, tool traffic, orchestration overhead, or a percentage of a proprietary subscription allowance.

Experimental adaptive recall

The receipt-salience and scout pipeline remains available to developers through explicit --stage A, but it is experimental and is not used by the Plugin release, quality-default setup, updates, or calibration.

What makes the result trustworthy

  • Only real user-authored .jsonl messages are mined. AGENTS.md, CLAUDE.md, memory files, and typed self-descriptions are rejected as source evidence.
  • Every bounded worker covers work, design, writing, and video in one validated report.
  • Quotes must be short, dated, verbatim receipts from known session IDs.
  • Inferred rules require at least two distinct sessions and, when available, two source/time strata.
  • One uncontradicted explicit instruction may survive as low-frequency evidence.
  • Generic filler, invented quotes, unresolved contradictions, partial profile packs, and corrupt caches fail closed.

The native loaders are deliberately separate:

SkillLoads
emulo:workCore working profile
emulo:designCore + design taste
emulo:writeCore + writing voice
emulo:videoCore + video taste
emulo:mineOnly explicit setup, update, or deepen requests

Privacy

Emulo's extractor, redaction, caches, and generated profiles stay local. Selected redacted text is processed by the model provider you choose. With a local model, the entire mining flow can remain local.

emulo.py itself is one stdlib-only file and makes no network calls. The skills.sh command downloads the selected bootstrap. Outside a repository checkout, that bootstrap downloads only emulo.py and MINING_PROMPT.md from the exact release tag after SHA-256 verification. Those downloads happen before log discovery and read no session data.

Redaction is best-effort and runs before selected text is written to Emulo caches. Inspect private output before sharing it. Share the card or one short trait, never your full profile or receipt appendix.

See SECURITY.md for the exact boundary.

Raw one-file CLI

The legacy extractor remains available and backward compatible:

curl -O https://raw.githubusercontent.com/ohad6k/emulo/v0.6.2/emulo.py
python emulo.py --dry-run
python emulo.py --chunks 4 --out emulo-out

Manual adapters remain available:

python emulo.py --install you.md --target codex
python emulo.py --install you.md --target claude
python emulo.py --install you.md --target cursor --repo .
python emulo.py --install you.md --target agents --repo .
python emulo.py --install you.md --target gemini --repo .
python emulo.py --install you.md --target opencode

Support matrix

SurfaceStatus in this release
Codex native pluginProven locally with four namespaced skills
Codex skills.sh bootstrapSupported
Claude Code skills.sh/direct adapterSupported
Claude native pluginNot claimed; host unavailable during validation
Cursor / Gemini adaptersSupported through explicit install commands
OpenCodeBoth directions verified live: sessions mined from its SQLite store and legacy JSON layout (--source opencode), profile installed to its global rules (--target opencode)
Google AntigravityMining verified live against a real local install (--source antigravity): typed prompts extracted from ~/.gemini/antigravity/brain transcripts, harness envelopes stripped. Antigravity only writes transcripts when interaction logging is enabled in its privacy settings
OpenClaw / Hermes AgentProfile skill discovery verified locally; guide

Updating and notifications

Run update emulo to reuse stable caches and plan only changed work.

A GitHub star bookmarks the repository but does not subscribe you to releases. To receive release notifications, choose Watch → Custom → Releases on GitHub.

Limits

  • Emulo models how you work, design, write, and make videos. It does not make the underlying model smarter.
  • Sparse or repetitive histories can leave design or writing inactive. Emulo reports the exact targeted-deepen instruction instead of inventing a persona.
  • Provider token accounting remains outside Emulo's exact measurement.
  • Benchmarks, leaderboard results, and proof videos are a separate later release.

FAQ

The three things people push back on, answered once.

"Why not just ask Claude to summarize my logs?"

One pass can't do it. My history is 1,656 sessions, about 3M tokens after extraction, and the raw logs are mostly tool output, file dumps, and pasted errors. A single summarize call burns the window on that noise. Emulo keeps only the words you typed, gives each validated segment its own evidence pass, and requires distinct supporting sessions before an inferred rule can survive. The resulting profile keeps session receipts instead of an obsolete worker-count score.

"Claude already has memory. Why do I need this?"

Use both. Memory is what you told the model: curated notes, CLAUDE.md, and it stays inside one tool. Emulo reads supported raw sessions from Codex, Claude Code, Copilot CLI, OpenCode, and Google Antigravity and pulls out what you never wrote down: what you reject, what "done" means to you, and when you demand proof. The output is plain files you own and can load through supported agents.

"Claude only keeps 30 days of logs. Where did 9 months come from?"

Claude Code's retention is a setting (cleanupPeriodDays, 30 by default), and my longer history combines Claude Code, Codex, and Copilot CLI sessions plus archives. If you keep the default retention, older Claude sessions can roll off before Emulo sees them. Raise the retention, then mine what's left.

Roadmap

See ROADMAP.md for what is intentionally deferred.

Community

License

MIT. Made by @ohad6k.

Related MCP servers

Local app readiness checks, provider context, and release verification for AI coding agents.

Cited web search for MCP hosts. Returns source-bearing results from Groundlink.

View repository →

Patient-Versicherungsdaten → Echtzeit-Eligibility-Prüfung via Payer-API → Strukturiertes…

View repository →

Überfällige Rechnungen automatisch per Agenten-Call nachfassen

View repository →

ActiveCampaign API: ~325 endpoints (v3, SMS, WhatsApp, Segments) as safety-categorized MCP tools.

1
TypeScript
MIT
View repository →

Self-hosted Anytype MCP server: the full Anytype API as an always-on Docker + HTTP endpoint.

1
TypeScript
MIT
View repository →