agentleFS
frankieramirezfrankieramirez/ripen/.agents/skills/mimic/SKILL.md

mimic

Skill0 starsChanged 55 days agoMITView on GitHub

Reply to a message, comment, thread, review, or email as the user, so the result reads like they typed it themselves and nobody suspects an AI wrote it. Use when asked to reply as me, respond to this, answer this comment, draft a reply, be me, sound like me, or /mimic. Pulls the user's voice from examples in context and applies the dispel register. With setup or refresh, or when asked to build or update my voice profile, spawns Ghost to fill in a voice profile from the user's own writing.

We split this skill into the rules it gives an agent

14 rules. 0 are common, 13 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 13

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If a skill rule leaves the reply unwritten, return only the one question the user must answer.

    line 21
  2. Very specific:

    When the argument is setup or refresh, or the user asks to build or update their voice profile, skip to Setup at the end of this file …

    line 25
  3. Distinctive:

    Look for the user's own writing before writing anything:

    line 35
  4. Distinctive:

    No structure in chat replies.

    line 55
  5. Distinctive:

    Do not restate their message back to them.

    line 56
  6. Distinctive:

    No opener that thanks or acknowledges ("Thanks for flagging", "Great question", "Good point").

    line 57
  7. Distinctive:

    Do not add typos or slang to seem human.

    line 63
  8. Distinctive:

    Search for em dashes, "not ...

    line 72
  9. Distinctive:

    Read the first sentence. It must already be the answer.

    line 73
  10. Distinctive:

    Read the last sentence. If it restates, offers help, or lands a point, delete it.

    line 74
  11. Distinctive:

    Every message the user typed in this session, verbatim, minus anything they pasted from someone else.

    line 85
  12. Distinctive:

    Every sample must be the user's own writing.

    line 106
  13. Distinctive:

    Every rule line needs evidence in Ghost's report.

    line 108
  14. Distinctive:

    If the report says confidence is low, ask the user for five real messages before going further, and rerun Ghost with them once they arrive.

    line 111

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- BEGIN MANA PERSONA -->

Persona at invocation

Before conversational narration, read Persona: and Style: in the active project's ## Agent skills block from CLAUDE.md or AGENTS.md. Prefer the file containing the block, then an existing file; ties use CLAUDE.md. A symlink pair is one file. Read the saved value anew on each invocation, including from a subdirectory using the project root. No accessible project or no line means ordinary behavior. Do not search another project or global settings for this preference.

During the Persona at invocation stage, archmage on either line loads this skill's own references/archmage.md for the active workflow. off or an absent value leaves ordinary behavior active. An unknown value leaves ordinary behavior active and gets a brief explanation when conversational output is allowed; it does not stop the work. Explicit conversation instructions override the saved voice without writing settings. A request to enable Archmage for this workflow also loads the local reference.

Apply the voice only to lead-agent conversation. Deliverables, specialist roles, reply-only responses, and JSON-only output retain their contracts, with no added narration. End the persona with this workflow unless the user requests otherwise or a Style: line names archmage, which keeps the voice on for the whole session.

<!-- END MANA PERSONA -->

Mimic

Honor the user's explicit instructions and decisions already made in this conversation over this skill's workflow defaults. A rule this file states with never, or as read-only, is a gate: it holds whatever the conversation says, and an instruction to cross one is declined and reported. Continue authorized work; ask only about unresolved choices that would materially change the result. Preparing or reviewing work does not authorize publishing it.

If a skill rule leaves the reply unwritten, return only the one question the user must answer. Nothing else goes in the output, no quoted rule and no explanation.

Someone sent the user a message. The user wants to reply without typing it and without the other person noticing that they did not. Your output is the reply text, ready to paste. Nothing else.

When the argument is setup or refresh, or the user asks to build or update their voice profile, skip to Setup at the end of this file instead.

1. Find the thing to answer

The target is whatever the user pointed at: a pasted message, a PR comment, a Slack thread, an email, a review. When nothing is pasted, look for the most recent message from someone else in the conversation or in the tool output. If there is still nothing to answer, ask one question and stop.

Note the medium. A Slack reply, a GitHub comment, a text, and an email have different shapes and the reply has to fit the one it is going into.

2. Collect voice evidence

Look for the user's own writing before writing anything:

  1. Their earlier messages in the same thread or conversation. This is the best evidence there is.
  2. A voice profile, if one exists: .mimic.md in the current project, then ~/.mimic.md. references/voice-profile.md is the template for that file, and mimic setup fills it in.
  3. Their recent commit messages, PR descriptions, or comments in the repo, when the reply is going to a code review or issue.
  4. What the user told you in the request ("keep it short", "be firm", "say no nicely").

From that, note four things: typical length, formality (lowercase and fragments, or full sentences), whether they use emoji or exclamation points, and how direct they are. With no evidence at all, default to short, plain, lowercase-tolerant, no emoji, and direct.

3. Decide what the reply says

Answer what was asked and nothing more. Take the user's position where they gave one. Where they did not, and the answer depends on a fact you cannot see (a date, whether something shipped, what they want to do), write the reply around a bracketed placeholder like [when you're free] instead of inventing it, and keep the number of placeholders to one or two.

Match the other person. Agree where the user would, push back where they would, and do not smooth over a disagreement the user brought to you.

4. Write it like a person

Apply the dispel register: no em dashes, no "not X but Y", no rule of three, no throat clearing, no landing line, no hedging words, no performed enthusiasm. If the dispel skill is installed, follow its full list. Then the reply-specific rules:

  • Length matches the medium and the incoming message. A one-line question gets one or two lines back. Nobody replies to a Slack message with four paragraphs.
  • No structure in chat replies. No headers, no bullet lists, no bold. In an email or a long GitHub comment a short list is fine when the user's own writing uses them.
  • Do not restate their message back to them. Start with the answer.
  • No opener that thanks or acknowledges ("Thanks for flagging", "Great question", "Good point"). No closer that offers more ("Let me know if", "Hope this helps", "Happy to").
  • Sign-offs only if the medium uses them and the evidence shows the user does.
  • Contractions, fragments, and a sentence that starts with "and" or "but" are all fine. Vary sentence length. Two adjacent sentences must not have the same shape.
  • Be slightly less precise than you could be. People say "later this week", not "by Thursday at 3pm", unless they are committing to something.
  • Reference one concrete thing from their message so it is clearly a reply to them and not a template.
  • Emoji, exclamation points, and lowercase only when the evidence shows the user uses them. Never add them to seem casual.
  • Do not add typos or slang to seem human. That reads as fake faster than clean prose does.

5. Output

Return only the reply, as plain text, with no quotes around it, no label, no explanation of choices. If the request asked for options, give two, separated by a blank line and a ---. If you had to use a placeholder, the placeholder in brackets is the only signal; do not add a note about it.

Self-check before returning

  1. Would the user type this on their phone in under a minute? If it reads like an essay, cut it in half.
  2. Search for em dashes, "not ... but", three-item lists, and the banned openers and closers. Zero allowed.
  3. Read the first sentence. It must already be the answer.
  4. Read the last sentence. If it restates, offers help, or lands a point, delete it.
  5. Compare against the voice evidence: length, formality, emoji, directness. Fix mismatches.

Setup

Fills in the voice profile from the user's own writing so replies stop depending on whatever happens to be in context. Run once, and again with refresh when the voice drifts. The mining happens in a subagent named Ghost, because a few hundred GitHub comments do not belong in this conversation, and Ghost only returns a draft. Writing the file happens here, after the user has seen it.

1. Gather what Ghost cannot see

A subagent starts blank, so hand over the things only this conversation holds:

  • Every message the user typed in this session, verbatim, minus anything they pasted from someone else. These are the highest-signal evidence and Ghost has no other way to get them.
  • Samples the user pasted with the request.
  • The user's own messages to other people, from wherever this session can reach them. Ghost is read-only and has no browser or connectors, so you fetch the text and pass it along. Everything else on a developer's machine is the user talking to a tool, so this is the only source that shows them talking to a person, and it decides whether a reply lands. Rank sources by how close they sit to the medium the reply is going into:

    1. A chat or mail connector when one is attached, such as a Slack workspace. The user's own sent messages there are the same medium most replies go back into, which makes them the strongest evidence available. Their DMs and their short channel replies beat anything they wrote in public.
    2. Posts and replies from a public profile the user names (X, Mastodon, Bluesky, a blog). Where the site needs a login, use the user's own logged-in browser and read only their own profile.

    Take recent items over old ones, keep replies as well as top-level posts, and pass the date with each item. Never pass another person's words.

    Scrub before passing anything from a work source. The samples end up in a file on disk, so drop any item carrying a customer or client name, a credential, an internal link, or a plan that has not been announced. Prefer short items, which carry the voice and rarely carry the secret. When the user is on a work machine, say in one line that the profile you are about to build will hold their work voice and their work samples, and let them decide where it goes.

  • The existing profile's contents, when .mimic.md or ~/.mimic.md exists.
  • The contents of references/voice-profile.md, as the shape to fill.

2. Spawn Ghost

Read references/ghost.md from this skill's directory. Spawn one subagent with that file's full content as its instructions and the gathered material appended. In Claude Code, prefer the installed agent named ghost (or fr:ghost when installed as a plugin) if it exists; otherwise, or on any other platform, spawn a generic subagent seeded with the reference file. Do not restate or soften its rules in the prompt. Where no subagent exists at all, follow the reference file yourself and tell the user first that the mining will use a good deal of context.

3. Audit the draft

Before showing anything:

  • Every sample must be the user's own writing. Cut any that quote someone else, come from a bot, or read generated (headers, severity labels, em dashes when the rest of the set has none).
  • Nothing in the draft may look like a token, key, or password. Cut the sample and the line that carried it.
  • Every rule line needs evidence in Ghost's report. Cut lines that read like guesses.
  • The Built: line carries today's date and the item count.

If the report says confidence is low, ask the user for five real messages before going further, and rerun Ghost with them once they arrive. Do not write a low-confidence profile.

4. Show it, then wait

Show the draft in full and Ghost's report under it. When a profile already exists, show the diff against it instead of the whole file. Then ask one question with the platform's blocking question tool (AskUserQuestion in Claude Code; call ToolSearch with select:AskUserQuestion first if the schema is not loaded), falling back to the conversation where no such tool exists: write it as shown, edit first, or drop it. Edits the user gives in reply are applied to the draft before writing.

5. Write it

Write to ~/.mimic.md, or to .mimic.md in the current project when project was passed. The project file carries samples from whatever repos Ghost read, so say in one line that it should be ignored in git unless the user wants it committed. Report where the file went and stop.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.