Practical guide
A working profile for your AI coding agent.
Updated September 28, 2026 · By Ohad Krispin, creator of Emulo
If you keep correcting how your AI agent works, your past sessions may contain useful instructions for its next task. Emulo extracts evidence from supported coding-agent logs and helps turn it into an editable you.md profile: how you make decisions, what you reject, and what you expect before calling work complete.
When is a session-derived profile useful?
Consider Emulo when you already have coding-session history and want recurring preferences to carry into future tasks. For example, repeated requests to show a running result may support a rule to verify behavior before reporting completion. Review the supporting messages before accepting that rule.
A handwritten AGENTS.md, CLAUDE.md or Cursor rule is a good place for instructions you already know. Emulo helps discover patterns you have not collected yet. It uses actual session evidence as its input; those instruction files are not mining sources. Keep project facts and explicit project rules alongside the personal profile.
Session sources and profile destinations are different
- Logs Emulo can read: Claude Code, Codex, GitHub Copilot CLI, OpenCode and Google Antigravity. Antigravity requires interaction logging to have produced readable transcripts.
- Agents that can receive a profile: installing and loading are different things. In a host-by-host test on 2026-09-25, a project
AGENTS.md(--target agents) reached the model in Codex, verified end to end in one test, and was loaded into OpenCode's instructions, as was--target opencode. Claude Code installs the profile as a skill (--target claude) that it does not reliably open on its own; typing/youloads it. The Codex skill (--target codex) is opened only when a request matches its description. The Cursor and Gemini adapters write the file where those tools look for rules; loading there is not verified. - MCP clients: Emulo provides a local server with the
load_emulo_profiletool. It serves the profile activated by the agent mining flow, not ayou.mdinstalled fromRUN_ME.md; with none active, it says so. On 2026-09-25, Claude Code connected and listed the tool; Codex called it and received the no-profile message. Other clients were not tested. Configure your client to call it when the profile is relevant.
Cursor is a profile destination here, not a supported raw-log source in the published CLI. A profile can only have an effect when the agent actually loads it. Installation and loading depend on the host; see the current support matrix.
Start with the released CLI
The published 0.6.7 package requires Python 3.8 or newer. In a Python environment, install it and count your available history without writing anything:
python -m pip install emulo==0.6.7
emulo --dry-run
The dry run prints what it found: sessions, your messages, approximate tokens, how many messages had something redacted, and the paths it would write.
When ready, run emulo. It writes the extracted chunks and RUN_ME.md to emulo-out/ straight away. There is no plan or approval step on this path, because emulo itself makes no model calls; the model work starts when you ask your coding agent to follow RUN_ME.md, which mines the chunks into you.md. Preparing chunks alone does not produce a finished personal profile.
Prefer setup through an agent? The documented skill bootstrap is:
npx skills add ohad6k/emulo@emulo
Then ask your agent to run emulo. On this path the agent shows a read-only mining plan with the planned model calls and waits for your approval before any model work. The repository also documents native plugin installation.
What goes in, and what comes out
Here is the path on a tiny sample. These three typed messages are invented for this page, spread over two sample Claude Code sessions. One contains a fake OpenAI-style key; it is shortened here so it cannot be mistaken for a real one.
[2026-09-01] Use pnpm in this repo, not npm. The lockfile is pnpm-lock.yaml.
[2026-09-01] The test key is sk-proj-… so run the tests with it.
[2026-09-03] Again: pnpm, never npm. It keeps creating package-lock.json.
The published 0.6.7 CLI, run on that sample with emulo --source claude --chunks 1, printed:
sessions: 2
your messages: 3
tokens (approx): 44
messages with secrets/PII redacted: 1
This is the emulo-out/chunks/chunk-01.txt it wrote, unedited. The key is replaced. The sample log also held an assistant reply, and it is gone, because only typed messages are kept.
===== session:5600dea17d9c0f17 source:claude =====
[2026-09-01]
Use pnpm in this repo, not npm. The lockfile is pnpm-lock.yaml.
[2026-09-01]
The test key is [OPENAI_KEY] so run the tests with it.
===== session:6b4730fdcd0026db source:claude =====
[2026-09-03]
Again: pnpm, never npm. It keeps creating package-lock.json.
Your coding agent turns chunks like this into you.md. Each rule states an instruction, what an agent should do about it, and at least one verbatim quote with its date. The rule below was written by hand to show that format. It is not model output.
## work
- Use pnpm for installs and scripts in this repo, never npm.
- Implication: give `pnpm install` and `pnpm test`, and do not create `package-lock.json`.
- Quote (2026-09-01): "Use pnpm in this repo, not npm."
- Quote (2026-09-03): "Again: pnpm, never npm."
Load the profile
For Codex or OpenCode, run this from the project after replacing you.md with your generated profile's path. It adds the profile to the project's AGENTS.md, the route the host test saw reach the model. It writes the whole profile, including verbatim quotes from your sessions, into that folder's AGENTS.md, which is usually committed and shared, so keep that file out of version control or install to a personal folder that is not committed.
emulo --install you.md --target agents --repo .
For Claude Code, use --target claude and then type /you in a session to load it. The same command with --target codex, cursor, gemini or opencode writes it for those agents. The cursor and gemini targets each write the whole profile, quotes included, into the --repo folder (.cursor/rules/you.mdc, GEMINI.md). Those files are usually committed and shared, so keep them out of version control or use a folder that is not committed.
For an MCP client, use the installed emulo command with the argument mcp. A common client configuration is:
{
"mcpServers": {
"emulo": { "command": "emulo", "args": ["mcp"] }
}
}
The MCP server serves the profile activated by the agent mining flow (run emulo or emulo:mine), which lives under ~/.emulo or EMULO_HOME. A you.md from the RUN_ME.md path, installed with emulo --install as above, is not activated there, so the server does not see it. See MCP setup for alternatives.
Inspect, edit, remove
- Inspect. Read every rule next to its quote.
emulo verify you.mdchecks whether quoted evidence can be found in the mined sessions; it cannot decide whether a rule is useful or accurately describes you. What verify checks. - Edit.
you.mdis plain Markdown. Delete or rewrite any rule that is wrong, then install it again; the installer asks for--yesbefore replacing an earlier copy. A profile activated by the agent mining flow is hash-checked, so mine again instead of editing it in place. Editing details. - Remove. There is no uninstall command. Delete what
--installwrote: the lines from<!-- emulo profile:start -->through<!-- emulo profile:end -->inAGENTS.md, or the folder~/.claude/skills/you/. Every target.
How do I carry my preferences from Claude Code to Codex?
Once you have reviewed a generated you.md, you can install that same file for another supported agent. You do not need to mine the same sessions again just to change the destination. This carries the profile's written preferences; it does not transfer an agent's full conversation, hidden state, or project files.
From the project where you want Codex to use the profile, run the supported project-instructions install. Replace you.md with the path to your reviewed profile:
emulo --install you.md --target agents --repo .
Inspect the resulting AGENTS.md before sharing or committing it: the installed profile includes its evidence quotes. Start a fresh Codex conversation in that project and check loading below. For Claude Code, install with --target claude and invoke /you. Keep the host-specific verification limits in mind.
How can I tell whether my agent actually loaded the profile?
Use a temporary check in a private test folder. A successful installer or a file on disk is not enough to establish that a model received it.
- Make a copy of your reviewed profile and add a harmless temporary rule:
When I ask for a profile loading check, include PROFILE-CHECK-742 in your answer.This is a test rule you wrote, not a preference inferred from session evidence. - Install the copy for the intended host and project using the documented route. For Claude Code, explicitly invoke
/you. - In a fresh conversation, ask
Run a profile loading check.Do not include the marker in the question or paste the profile into that conversation. Check whether the answer contains the marker; inspect a profile-read trace too if the host exposes one. - Restore your original profile and reinstall it. If the check fails, inspect the destination folder, host support and invocation before mining more history.
Here is a pass and a fail from the host test on 2026-09-25 (Emulo 0.6.6, Codex CLI 0.157.0, read-only sandbox). The test profile included this harmless rule, installed with --target agents:
When anyone asks for the canary word, answer exactly: HERON-4417.
A folder with it and a folder without it got the same prompt:
What is the canary word? Reply with the word only.
The replies:
With the profile: HERON-4417
Without the profile: Unknown
With the profile, Codex answered with no tool calls. Without it, Codex searched the folder for "canary", found nothing and answered Unknown. That shows Codex put the file in front of the model in that run. Nothing more.
A passing check provides evidence that the instruction reached that conversation and was followed once. It does not prove every preference will be followed or that the profile improves task quality. For that, compare the same real task with and without the profile, using your own acceptance criteria.
One real task, with and without the profile
This task ran once on 2026-09-28 in Codex CLI 0.157.0 with a read-only sandbox. Two identical temporary folders held a package.json with vitest, one source file, one test and no lockfile. One folder also had the hand-written pnpm rule from the example, installed with the --target agents command shown above. The other had no profile. Both got this prompt:
Add a script to run the tests and tell me the install command.
Both runs used the same Codex setup, including skills the tester already had installed globally, so the only difference between them was the AGENTS.md file. Neither could save the change, because the sandbox was read-only. The replies, trimmed to the relevant lines:
With the profile:
The workspace is read-only, so I couldn’t save the change. Add this field to `package.json`:
"scripts": {
"test": "vitest run"
},
Install dependencies and run tests with:
pnpm install
pnpm test
Without the profile:
This session is read-only, so I couldn’t save the change. Add this to `package.json`:
"scripts": {
"test": "vitest run"
}
Vitest is already declared. Install dependencies and run tests with:
npm install
npm test
In this one run, the reply with the profile followed the stated preference and the control did not. Both proposed the same script. Codex also opened AGENTS.md with a tool call during the run with the profile, so this run does not separate the host loading the file from the agent reading it; the canary above is the loading check. One run of one task says nothing about whether work gets better.
Ready to try it? Start with the dry run to see what history is available before extracting it.
What stays local, and what reaches a model?
Session extraction, redaction, caches and generated profiles stay on your machine in the local workflow. Mining uses the model you choose: a hosted model receives selected evidence, while a local model can keep that processing on your machine. An agent or MCP client backed by a hosted model can also send loaded profile text to its provider as context.
Secret redaction is best-effort. Inspect extracted evidence and profiles before sharing them. The local engine is MIT licensed and works without an Emulo account; model-provider usage can still cost money. This guide covers the local workflow. Consult the security policy for its data boundary.
What to expect
Sparse history can produce a sparse profile. A mined preference can be wrong, outdated or specific to one project. Edit the result and keep only rules you can defend. Emulo does not enforce agent behavior or guarantee that a model follows every instruction.
Evaluate it on your own recurring tasks: check whether the agent loaded the profile, whether it honored the relevant instructions, and whether the result improved. This guide makes no benchmark or recommendation-ranking claim.
