Avoiding being a Meat Proxy with Claude Code Mods Developer Jamie Tanna built a Claude Code Mod that intercepts the `/copy` command and automatically prepends the responding model's name to copied assistant output, so shared text carries attribution instead of being pasted as unattributed AI output. The Mod registers a handler on the `command.run` event for `copy`, accepts an optional argument N to select the Nth-latest non-empty assistant reply, and wraps the text in a markdown code block prefixed with "Via ``:" before calling `$.ui.copy`. Tanna said the approach avoids introducing a new `/copy-with-model` skill and preserves existing muscle memory for `/copy`. I'm very much not a fan of people being meat proxies https://dontbeameatproxy.com/ and pasting AI-generated output to each other, least of all me. It's super frustrating to read it, and feels wasteful of my time, as well as anyone else in the conversation, who are having to unpack the verbose text for what is actually being communicated. That rant aside, sometimes I want to copy some text from an LLM, or sometimes you do need to reply to someone based on what an LLM has given you - sometimes it's passive aggressive, but sometimes it's actually needed - although I'd still recommend some edits + rewords. As someone who's very careful about attributing my use of LLM-derived code https://www.jvt.me/posts/2026/02/25/llm-attribute/ , as well as on this blog https://www.jvt.me/ai/ , I'm also very conscious of the source of the text I share in chat messages, so want to make sure I attribute the model that's come up with the words I'm parroting. This results in me writing something like: Via Claude Sonnet 5.5: markdown {... response from agent goes here ...} I've ended up repeating this one too many time recently that I decided to look at how I could automate this. I didn't really want to introduce a new /copy-with-model skill, and require that my muscle memory changing, as I wanted to be able to continue /copy ing if possible. I remember hearing about Claude Code's Mods system https://code.claude.com/docs/en/plugins/mods/overview which was recently added, and wondered if this may help out here. It turns out, yes, it's fairly straightforward to create a Mod to intercept the /copy and add extra info into it 👏🏼 python import type { Register } from "claude-code"; export const register: Register = on = { on "command.run", { command: "copy" }, async $, e = { const arg = e.args.trim ; const n = arg === "" ? 1 : Number arg ; if Number.isInteger n || n < 1 { return { text: Usage: /copy N where N is 1 latest , 2, 3, … Got: ${arg} }; } const messages = await $.session.messages ; const replies = messages.filter m = m.role === "assistant" && m.text == "" ; const reply = replies.at -n ; if reply === undefined { return { text: No assistant response ${n} to copy. }; } const model = await $.session.model ; const lines = "Via " + model + " :", "", " markdown", reply.text, " ", ; const text = lines.join "\n" ; const copied = await $.ui.copy { text } ; return { text: copied.isCopied ? Copied response ${n} with model info \ ${model}\ . : Copy failed: ${copied.reason} , }; } ; }; This way, I now get that resulting output automagically inserted every time I do a /copy , which is much better