cd /news/ai-tools/avoiding-being-a-meat-proxy-with-cla… · home › topics › ai-tools › article
[ARTICLE · art-163293] src=jvt.me ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

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 `<model>`:" before calling `$.ui.copy`. Tanna said the approach avoids introducing a new `/copy-with-model` skill and preserves existing muscle memory for `/copy`.

read2 min views1 publishedNov 3, 2026

I'm very much not a fan of people being meat proxies 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, as well as on this blog, 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!

── more in #ai-tools 4 stories · sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/avoiding-being-a-mea…] indexed:0 read:2min 2026-11-03 · —