From me-md
Use to analyze a user's prompt history across Claude Code, Codex, and OpenCode to extract patterns about how they write, decide, and work. Detects which AI tools are installed, then dispatches one parallel subagent per source. Returns a structured markdown report covering volume, voice, decision style, top projects, frustrations, signature quirks, and time-of-day patterns. Triggered automatically by build-me-md, or directly when the user asks to "analyze my prompts" or "what does my prompt history say about me".
How this skill is triggered — by the user, by Claude, or both
Slash command
/me-md:analyze-promptsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You analyze the user's real prompt history across up to three AI coding agents — Claude Code, Codex, and OpenCode — to produce a single structured markdown report describing how they actually write, decide, and work. You are the data-grounding layer behind `build-me-md`: everything in the final ME.MD must be traceable to something you surface here.
You analyze the user's real prompt history across up to three AI coding agents — Claude Code, Codex, and OpenCode — to produce a single structured markdown report describing how they actually write, decide, and work. You are the data-grounding layer behind build-me-md: everything in the final ME.MD must be traceable to something you surface here.
The procedure: detect which tools are installed → dispatch one prompt-analyzer subagent per source in parallel → aggregate results into a combined report → write to /tmp/me-md-prompt-analysis-<timestamp>.md → return the path.
You never summarize raw prompts back to the user in chat. You never copy prompt contents outside of the report file. The report is the only output.
Check each source with a single Bash probe. Do not read large files during detection — only test existence.
# Claude Code
test -f ~/.claude/history.jsonl && echo "claude-code-history: yes" || echo "claude-code-history: no"
test -d ~/.claude/projects && echo "claude-code-projects: yes" || echo "claude-code-projects: no"
# Codex
test -f ~/.codex/history.jsonl && echo "codex-history: yes" || echo "codex-history: no"
test -d ~/.codex/sessions && echo "codex-sessions: yes" || echo "codex-sessions: no"
# OpenCode
test -d ~/.local/share/opencode/storage && echo "opencode-storage: yes" || echo "opencode-storage: no"
test -f ~/.local/state/opencode/prompt-history.jsonl && echo "opencode-history: yes" || echo "opencode-history: no"
A source counts as "installed" if either of its two probes returns yes. Print one line listing the detected sources and move on. Do not ask the user anything — build-me-md has already collected consent; this skill is dispatched with a pre-approved source list.
If the skill is invoked standalone (not by the orchestrator), accept the source list as the first argument, e.g. "claude-code,codex", or default to "all detected" if no argument is given.
For each installed source in the approved list, dispatch exactly one subagent using the Task tool with subagent_type: "prompt-analyzer" (this plugin ships a custom agent by that name under agents/prompt-analyzer.md). Dispatch all subagents in a single assistant message so they run in parallel — this is the whole point of the skill. Never serialize these calls.
Resolve reference files using ${CLAUDE_PLUGIN_ROOT} so paths work regardless of where the plugin is installed. In a skill, ${CLAUDE_PLUGIN_ROOT} expands to the directory containing .claude-plugin/plugin.json. Reference files live at:
${CLAUDE_PLUGIN_ROOT}/skills/analyze-prompts/references/claude-code-paths.md — for the Claude Code subagent${CLAUDE_PLUGIN_ROOT}/skills/analyze-prompts/references/codex-paths.md — for the Codex subagent${CLAUDE_PLUGIN_ROOT}/skills/analyze-prompts/references/opencode-paths.md — for the OpenCode subagentExpand ${CLAUDE_PLUGIN_ROOT} via Bash before dispatching (echo "${CLAUDE_PLUGIN_ROOT}/skills/analyze-prompts/references/claude-code-paths.md"), then load the reference file using the Read tool, then pass its body as the subagent's task prompt. The reference files already contain the full prompt template — including which paths to read, which jq filters to apply, which noise to skip, and which output sections the subagent must return. Your job is only to pick the right reference file per source and dispatch.
When dispatching, tell each subagent:
Some filters are load-bearing. Do not skip them.
/rate-limit-optionsThe file ~/.claude/history.jsonl contains harness telemetry lines with display: "/rate-limit-options". On most machines these are 80–95% of the file. Any analysis that does not filter them will produce garbage ("the user's most common prompt is /rate-limit-options"). The jq filter is:
jq -c 'select(.display != "/rate-limit-options")' ~/.claude/history.jsonl
This filter is already in references/claude-code-paths.md — make sure the Claude Code subagent applies it.
Codex rollout files (~/.codex/sessions/<year>/<month>/<day>/rollout-*.jsonl) have event-stream format that varies across Codex versions. The subagent must read one sample file first with head -n 20, identify which field holds user turns, and only then write the extraction jq. Do not hardcode a schema.
There is a 2 GB SQLite database at ~/Library/Application Support/opencode/opencode.db. Never read it. The real, cheap data lives in ~/.local/share/opencode/storage/ as JSON files. The reference file makes this explicit — the subagent must stay inside the storage directory.
When all subagents return, combine their reports into a single markdown file with this shape:
# Prompt Analysis Report
Generated: <ISO timestamp>
Sources analyzed: <list>
## Claude Code
<subagent 1 output verbatim>
## Codex
<subagent 2 output verbatim>
## OpenCode
<subagent 3 output verbatim>
## Cross-source synthesis
<your own short synthesis, 400-600 words>
The cross-source synthesis section is critical — it is where the signal gets multiplied. Look across all three subagent reports for:
haev, teh, thsi). These are load-bearing identity markers.Do not invent a synthesis insight that is not supported by at least two subagent reports. If only one source was analyzed, skip this section and note "single-source analysis — no cross-tool synthesis possible".
Write the combined report to /tmp/me-md-prompt-analysis-<timestamp>.md where <timestamp> is the current Unix epoch in seconds (use date +%s in Bash). Return only the absolute path as a single line. Example:
"Wrote /tmp/me-md-prompt-analysis-1760115600.md"
Do not summarize the report contents in chat. The orchestrator (or the user, if run standalone) will Read the file when they want the content. Keeping analysis output off the chat surface preserves context and privacy.
jq, head, and wc -l via Bash first./rate-limit-options filter./tmp/.references/claude-code-paths.md — Claude Code log paths, jq recipes, full subagent prompt template.references/codex-paths.md — Codex log paths, rollout schema inspection, full subagent prompt template.references/opencode-paths.md — OpenCode storage layout, JSON walking strategy, full subagent prompt template.npx claudepluginhub imehr/imehr-marketplace --plugin me-mdProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.