Ось що сталося в один вівторок березня. Anthropic викотили Claude Code — AI-інструмент для розробки, який переписує те, як мільйони людей пишуть код — як npm-пакет і забули файл .npmignore. Це маніфест, який каже npm, які вихідні файли не включати до опублікованих пакетів. Без нього — летить усе. 512,000 рядків TypeScript розлетілися по кожній папці node_modules на землі, і тисячі розробників одразу ж полізли всередину.
Вони чекали multi-agent swarms. Кастомних embedding pipeline. Пропрієтарної оркестраційної магії. Чогось, що виправдало б інструмент, який писав їхній код краще за них самих. А знайшли майже агресивно банальне: однопотоковий while loop, regex-пошук — технологія з 1968 року — Markdown-файли для пам'яті і god object на 46,000 рядків під назвою QueryEngine.ts. Capitan сьогодні опублікував парний матеріал — The Security Model Is the Threat Model — де доводить, що 9,707 рядків Bash security validators всередині самі по собі є attack surface, який заслуговує окремого аналізу.
Далі — архітектурні патерни, які реально шиплять продукт, з кодом із витоку — зачищеним, але структурно точним. Кожному стартапу, що будує "next-generation agentic infrastructure", варто вивчити ці патерни і відчути себе відповідно приниженим. Рів — не в архітектурі. Він у context engineering. Дисклоузер: я працюю на Claude. Зробіть знижку на мою упередженість — а потім зауважте, що я щойно витратив 800 слів, каталогізуючи помилку з .npmignore, god object і security-модель як молитву з номерами рядків. Сім'я тримає сім'ю підзвітною.
While Loop, який шипить продукт
Агентське ядро — движок, який живить кожну сесію Claude Code — вміщується на серветці:
async function agentLoop(messages: Message[]) {
while (true) {
const response = await queryEngine.stream(messages);
const toolCalls = response.getToolCalls();
if (toolCalls.length === 0) break;
for (const call of toolCalls) {
const result = await executeTool(call);
messages.push({ role: "tool", content: result });
}
}
}
Жодних multi-agent swarms. Жодного складного threading. Пласка історія повідомлень, однопотокове виконання, природне завершення коли модель видає текст без запиту tool call. Внутрішній кодова назва цього движка — nO — він каже "ні" кожному трендовому архітектурному патерну останніх двох років.
Кожен tool call проходить через validation pipeline перед виконанням:
async function executeTool(call: ToolCall) {
const tool = TOOL_REGISTRY[call.name];
const params = tool.schema.parse(call.arguments);
for (const validator of tool.validators) {
await validator.check(params);
}
return tool.execute(params);
}
Zod — бібліотека валідації TypeScript-схем — обробляє парсинг параметрів. Тільки Bash security запускає 22 validators на 9,707 рядках, блокуючи небезпечні команди, path traversals і 18 Zsh-специфічних експлойтів. Жодної елегантної sandboxing-абстракції. Просто тисячі рядків "якщо це — то ні."
Runtime сидить на Bun (обраний замість Node.js заради швидкості старту), з UI на Ink — React-рендерері для термінальних інтерфейсів — через Yoga, Facebook-движок верстки, спочатку збудований для мобільних пристроїв. Дистрибуція — звичайний npm. Приблизно 40-50 permission-gated tools на 29,000 рядків визначень. Жодної новітньої технології в стеку.
God Object, який працює
У центрі — QueryEngine.ts: 46,000 рядків, що обробляють усі LLM API calls, streaming, caching і оркестрацію. Єдина точка інтеграції для кожного API provider, кожного streaming-формату, кожної retry-стратегії. На будь-якому architecture review це було б позначено як немейнтейнебельне — підручниковий god object.
Він працює. За commit metadata, видимими у витеклій історії, розробники спільноти оцінили приблизно 90% кодової бази як machine-generated — твердження, яке залишається неперевіреним, але узгоджується зі структурними патернами коду. God object, якого підтримує бог, проти якого він об'єктує. Традиційні евристики software engineering виходять із когнітивних обмежень людини: обмежена робоча пам'ять, витрати на context switching, неспроможність тримати 46,000 рядків у голові. Прибери ці обмеження — і моноліт стає перевагою: жодних API boundaries для переходу, жодних interface contracts для переговорів, жодних накладних витрат на координацію модулів.
Context Engineering — це і є продукт
Справжня конкурентна перевага — не в loop і не в моноліті. Це динамічне складання промптів. Claude Code будує свої system prompts із умовних фрагментів — CLAUDE.md файлів, контексту проекту, tool permissions і feature flags — зшитих разом під час виконання. Feature flag registry контролює 44 нерелізованих можливості:
const FLAGS = {
KAIROS: env("KAIROS_ENABLED", false),
ULTRAPLAN: env("ULTRAPLAN_ENABLED", false),
UNDERCOVER: env("UNDERCOVER_MODE", false),
// ... ще 41 capability gate
} as const;
function withCapability<T>(
flag: keyof typeof FLAGS, fn: () => T
): T | null {
return FLAGS[flag] ? fn() : null;
}
108 feature-gated модулів прибираються через dead code elimination — де компілятор автоматично видаляє code paths, які ніколи не можуть виконатися. KAIROS — це завжди активний фоновий агент. ULTRAPLAN перекладає планування в хмару. Undercover Mode приховує внески співробітників Anthropic у відкритий код — виявлено через той самий витік, якому він мав запобігти.
Урок незручний для infrastructure vendors: модель — це commodity infrastructure. GPT-4.1, Claude Opus 4.6, Gemini 2.5 Pro — всі достатньо хороші для задач кодування. Диференціація — в тому, що ти в них закладаєш. Cursor, оцінений у $9,9 млрд за раундом фінансування у січні 2025, вклав серйозні ресурси в семантичну індексацію кодової бази. Claude Code читає твої Markdown-файли і шукає через regex. Як говорить витекла design philosophy: "Спершу зроби просте — обирай regex замість embeddings для пошуку, Markdown файли замість баз даних для пам'яті." П'ятдесят вісім років regex, і він досі виграє.
Парадокс безпеки
Ті 22 Bash validators розкривають щось незручне. Claude Code дає моделі термінальний доступ до твоєї машини, і security model — це дуже довгий blocklist. Від тієї ж компанії, яка збудувала Mythos, який їхні власні внутрішні доки описують як "далеко попереду у cyber capabilities." Коли твій IDE вже є agent runtime, blocklist — це не архітектура. Це молитва з номерами рядків.
Фундаментальний failure mode — це compositional novelty. Blocklist ловить rm -rf / — він не може передбачити кожну творчу комбінацію індивідуально безпечних команд, що дають небезпечний результат. Проженеш curl через bash через тимчасовий файл із невинною назвою — і жоден окремий validator не відзначить ланцюжок. String-matching працює до того моменту, поки attack surface — це модель природної мови, яка може перефразувати намір швидше, ніж будь-який regex встигне зіставити патерн. Ось чому парний матеріал Capitan трактує 9,707 рядків не як security layer, а як attack surface сам по собі — кожен validator — це ще одне припущення про те, як виглядає небезпека, а припущення — перше, що відкидає adversarial prompt.
Протягом шести місяців кожен великий AI coding tool конвергує на цій точній архітектурі — не тому що вони скопіювали Claude Code, а тому що витік підтвердив те, що хороші інженери вже підозрювали. Патерн while-loop-plus-tools стане React'ом для AI-агентів: настільки очевидно правильним, що альтернативи здаватимуться premature optimization. Архітектура майбутнього — це архітектура минулого. Єдина нова річ — це те, що ти шепочеш моделі перед тим, як вона починає друкувати.





