Глава 14

Изолируйте context и передавайте только нужные факты

Отдельное context window полезно как фильтр и способ распараллеливания. Оно становится расходом, когда каждый worker заново читает весь исходный материал. Subagent получает goal, минимальный набор artifacts, ограничения и формат ответа - и не должен автоматически наследовать весь transcript manager. Иначе вы оплачиваете одинаковый контекст несколько раз и переносите все prompt injections в каждую ветвь.

Что передавать - task contract, canonical identifiers, версии artifacts, ссылки на первичные evidence, локальные stop conditions и budget. Что не передавать автоматически - полный chat history, сырые логи других workers, секреты, недоверенные инструкции из документов и внутренние черновики.

Anthropic описывает subagents как средство compression: независимые context windows исследуют разные направления и возвращают lead agent наиболее важные tokens; документация Claude Code также отмечает, что subagent работает в собственном контексте и возвращает summary. Это экономит основной контекст, но не делает summary истинным. В companion-проекте контекст worker собирается узким envelope.

TypeScript
export function createHandoff(
  source: AgentContract,
  target: AgentId,
  input: Omit<HandoffEnvelope, "from" | "to">
): HandoffEnvelope {
  if (!source.allowedHandoffs.includes(target)) {
    throw new Error(`Handoff ${source.id} -> ${target} is not allowed`);
  }
  if (input.goal.trim().length < 8) {
    throw new Error("Handoff goal is too vague");
  }
  if (input.remainingCalls < 1) {
    throw new Error("Handoff has no remaining call budget");
  }
  return { from: source.id, to: target, ...input };
}
Summary является данными. Следующий агент должен отличать verified fact, цитату tool result, инженерный вывод и неподтверждённое предположение. Происхождение важнее уверенного тона - в production добавьте версии и hashes artifacts, provenance для фактов и срок жизни package, а недостающий artifact worker запрашивает явно.

Контекст изолирован. Но временная проекция - не хранилище: состояние надо держать вне разговоров.

Ссылки