Nink AI Engineering © Nink AI Engineering GmbH

Determinism Isn't in the Spec

I built twelve slash commands in five weeks, each dispatching its own fleet of subagents. That is quick work for that much machinery, and I was pleased enough with the pace not to examine the shape. I thought I was choosing an architecture. Then I read Anthropic's Agent Skills post and the Claude Code documentation underneath it, which says plainly that custom commands have been merged into skills. A command file and a skill folder produce the same slash command and behave identically.

So my commands are already skills. The debate I thought I was having has no sides.

The real question hides in one frontmatter field. A skill can be invoked two ways: you type it, or the model decides to. Anthropic's own guidance on switching model invocation off is blunt about when — use it for workflows with side effects, because you don't want Claude deciding to deploy because your code looks ready.

I run a German VAT close. It reads a bank account, computes figures against ELSTER codes, and produces a pack a human signs. I do not want a text classifier judging that now is a good moment for that. Setting the flag is not a preference; it is the vendor's advice.

Here it gets awkward. That field is not in the open Agent Skills specification. The portable spec carries six fields and this is not one of them — and non-spec fields are a hard packaging error, not a silent ignore.

Read that twice. The portable format cannot express do not let the model call this. Today, portability and determinism are mutually exclusive, and you pick one per skill.

There is a second reason to care. Routing runs on names and descriptions alone, and published work measures a 31–44% accuracy drop against routing that can see the full body. That is the mechanism deciding whether your tax pipeline fires.

I will keep typing the slash.