Been studying how my custom agents differ to Claud...
# of-ai
t
Been studying how my custom agents differ to Claude Code and the drastic impact that has on performance did-plc-j7nm3lrd5h7fm3sfhcv3lhfv.lopecode.com/r/coding-tools
💡 2
m
same experience over here, it works ok if the harness is weird but not about code, when it's about code, the models get really weird. GPT 5.3 is unusable in an experiment I'm doing
t
I have switched to MiMo 2.5 (not pro). It is so insanely cheap. OpenRouter FTW
c
hoo
„newer Anthropic models emit malformed tool calls against non-Claude-Code schemas, likely because reinforcement learning inside a forgiving harness implicitly punishes alternatives. Tool schemas are not neutral. The ladder above measures the same effect as an efficiency tax, and shows it is not Anthropic-specific.“
j
Thanks for this. Very insightful. Is there a way to take advantage of Claude's R/W/E pattern over MCP, you think? That might make a huge difference in my project, where Claude starts to make JSON errors doing full replacements above a certain length. Seems like it would let it build more complicated encodings incrementally?
t
Yes in the process I writing that it made me think that maybe it was the RWE tools that is more important than bash tool and now I have remove just-bash (it was 500kb, not bad but not ideal) and kept the psuedo-file abstraction and it works well.
Copy code
const edit_file = defineTool({
  id: 'edit_file',
  description: "Replace an exact, literal string in a file, "
    + "exactly once (include surrounding context) unless replace_all is true. Editing a module file under "
    + "/src/<id>.js APPLIES the result and reports whether it compiled, in this same turn. /src/ files keep your "
    + "exact bytes, so old_string from your last write/edit always matches — prefer many small edits over rewrites.",
  parameters: { type: 'object', required: ['file_path', 'old_string', 'new_string'], properties: {
    file_path:   { type: 'string' },
    old_string:  { type: 'string' },
    new_string:  { type: 'string' },
    replace_all: { type: 'boolean' },
  } },
  execute: async ({ file_path, old_string, new_string, replace_all }) => {
    ...
  },
});
note it returns compilation failures when editing source. There is no such thing as source in Lopecode so this is LARPing.
performance is so much better
😎 1
j
Hmm, that's interesting. Makes me wonder whether the things I had been doing to shorten the length should be undone to make it easier to specify targets for replacements.