language

Source: src/language.ts

The language a subagent answers in: the one it was asked in.

An agent definition is English, like everything written into this repository, and a model reading an English prompt answers in English whatever the task said. So a French question to /step scout came back in English, and the person who asked it had to read their own repository through a translation. That is a defect of the standing prompt, not of the agent: no definition here asks for English, they simply inherit it from the prompt around them.

The instruction is therefore standing, like {@link situate}: every subagent gets it, including one written by a user who never thought about the question. It inherits nothing from anybody’s environment - it is a constant sentence, the same for every spawn.

It names no language, and that is load-bearing. An earlier wording made its point with an example - if the work is in French, answer in French - and the next English question came back in French. A sentence sitting in front of the model on every turn of every agent has its example read as the target, so the rule points at the work and stops there. That holds for the prompt’s own language too: a wording saying the prompt and its framing “are always written in English” was read as “do not answer in English”, and an English task to a test reader came back in French four times in six. Without the word, twelve English tasks across two agents came back in English and eight French ones in French.

The English is in the turn, not only in the prompt. A combinator frames the work it hands over - which round this is, what is new on the board, what is still free to take - and that framing arrives in the same message as the task, which a model weighs far above anything standing behind it. So the rule is said twice: once behind the agent, and once at the end of every turn, by {@link IN_THE_LANGUAGE_OF_THE_WORK}.

Measured on a French question put to a swarm of two over two rounds, counting the board posts that came back in French. Standing rule alone: 3 of 18 under the wording that disowned only the prompt, 5 of 19 under the one that disowns the framing too. With the closing line as well: 9 of 35, and 62 of 89. Each half is worth nothing without the other, so neither is a tidy-up.

What must survive translation is named. A model told to write French writes PRÊT for READY, RAS for LGTM, and translates a JSON key that is read by its name. Each of those is a workflow that never ends or a result nobody can parse, and the failure is silent. Rather than list every sentinel here - the library would have to know them all, and a user’s own workflow has its own - the rule is stated by shape: a word you were told to answer with comes back exactly as it was given.

IN_THE_LANGUAGE_OF_THE_WORK

const

export const IN_THE_LANGUAGE_OF_THE_WORK =
	"Write in the language the work above is written in, whatever language the lines that frame it use.";

The rule again, in one sentence, at the end of the turn it governs.

Short on purpose. The three sentences above belong where they are read once; repeating them every turn would spend a paragraph of context saying what one line says, and the exemptions they carry are already in front of the model.

It points above itself, which is what puts it last: the work, the framing and this line arrive together, and the one nearest the answer wins.

It says which language, never which one to avoid. An earlier wording ended “not in the language of these instructions”, and a model read the negation as “not English”: an English question to a scout came back in French three times in six.