<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>
<title>Блог — Егор Урванов</title><link>https://www.urvanov.com/blog/</link><description>AI-разработка, инженерное управление, сообщества</description><language>ru</language>
<atom:link href="https://www.urvanov.com/rss.xml" rel="self" type="application/rss+xml" />
<item><title>Claude Code, Codex, Cursor и Hermes Agent: сравнение ИИ-агентов для программирования на одной карте</title><link>https://www.urvanov.com/blog/ai-in-code-harness-and-tools/</link><guid>https://www.urvanov.com/blog/ai-in-code-harness-and-tools/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Claude Code или Codex, Cursor или Hermes Agent: где работает агент, что он видит, на какой модели думает и сколько стоит — пять харнессов рядом и подсказка, какой брать под задачу. Со ссылками на документацию.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-harness-ru"><div class="grp3" aria-label="Три группы инструментов"><div class="gc pair"><span class="gk">агенты вендоров</span><div class="chips"><span class="chip">Claude Code</span><span class="vsw"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 9h15l-4-4M20 15H5l4 4"/></svg>почти равнозначны</span><span class="chip">Codex</span></div></div><div class="gc open"><span class="gk">опенсорс-харнессы</span><div class="chips"><span class="chip">Hermes Agent</span></div><small class="alts">и аналоги: OpenCode, Aider, Cline, Goose</small><small>Харнесс того же типа с любой моделью: через API с оплатой за токены или локально на собственном компьютере</small></div><div class="gc"><span class="gk">ИИ-редактор кода</span><span class="chip">Cursor</span><small>AI-native IDE, модели разных вендоров</small></div><div class="gc chat"><span class="gk">ИИ-ассистент в браузере</span><span class="chip">ChatGPT, Claude</span><small>код выполняется в песочнице, доступа к проекту нет</small></div></div><p class="cap">Пометка <span class="drift sm"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg>срез</span> означает, что сведения актуальны на сентябрь 2026 года и могут устареть в течение недели.</p><section class="chapter" id="tasks"><h2><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="12" r="6"/><circle cx="15" cy="12" r="6"/></svg></span>Какой харнесс под какую задачу</h2><p class="why">Выбор начинается с задачи. Два круга — семейства моделей, Claude и GPT: положение продукта на карте показывает, с какими моделями он работает. Claude Code и Codex привязаны каждый к своему семейству, Cursor и чат находятся на пересечении, Hermes Agent целиком охватывает Cursor и чат, частично пересекается с Claude Code и Codex и выходит за оба круга: он подключает любые модели, в том числе локальные<a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: локальные модели через Ollama, llama.cpp, vLLM или LM Studio — «Ollama runs open-weight models locally with one command. Best for: quick local experimentation, privacy-sensitive work, offline use» — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><span class="drift"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg>подписи · срез сентябрь 2026</span><div class="venn"><svg viewBox="0 0 920 540" role="img" aria-label="Два круга — модели Claude и модели GPT; Claude Code только в круге Claude, Codex только в круге GPT; на пересечении Cursor и чат; Hermes Agent целиком содержит Cursor и чат, частично пересекается с Claude Code и Codex и выходит за пределы обоих кругов; всё внутри рамки харнесса"><defs><clipPath id="hxXor-ru" clipPathUnits="userSpaceOnUse"><path clip-rule="evenodd" d="M275,270 A150,150 0 1,0 575,270 A150,150 0 1,0 275,270 Z M345,270 A150,150 0 1,0 645,270 A150,150 0 1,0 345,270 Z"/></clipPath><clipPath id="hxGpt-ru" clipPathUnits="userSpaceOnUse"><circle cx="495" cy="270" r="150"/></clipPath></defs><rect class="rg v-h" x="6" y="6" width="908" height="528" rx="36"/><text class="vts" x="890" y="40" text-anchor="end">харнесс — у всех</text><g clip-path="url(#hxXor-ru)"><circle class="rg v-cc" cx="425" cy="270" r="150"/></g><g clip-path="url(#hxXor-ru)"><circle class="rg v-cx" cx="495" cy="270" r="150"/></g><g clip-path="url(#hxGpt-ru)"><circle class="rg v-sh" cx="425" cy="270" r="150"/></g><ellipse class="rg v-hm" cx="460" cy="340" rx="230" ry="130"/><circle class="rg v-cu" cx="460" cy="265" r="42"/><circle class="rg v-ch" cx="460" cy="365" r="44"/><circle class="vpt" cx="340" cy="175" r="5"/><path class="vld" d="M336,168 L200,100"/><text class="vtl" x="190" y="72" text-anchor="middle">Claude Code</text><text class="vts" x="190" y="90" text-anchor="middle">только модели Claude</text><circle class="vpt" cx="580" cy="175" r="5"/><path class="vld" d="M584,168 L720,100"/><text class="vtl" x="730" y="72" text-anchor="middle">Codex</text><text class="vts" x="730" y="90" text-anchor="middle">только модели GPT</text><text class="vtl" x="460" y="263" text-anchor="middle">Cursor</text><text class="vts" x="460" y="281" text-anchor="middle">редактор</text><text class="vtl" x="460" y="358" text-anchor="middle">ChatGPT</text><text class="vtl" x="460" y="376" text-anchor="middle">Claude</text><text class="vts" x="460" y="393" text-anchor="middle">чат</text><text class="vts" x="300" y="505" text-anchor="middle">модели Claude</text><text class="vts" x="620" y="505" text-anchor="middle">модели GPT</text><text class="vtl" x="460" y="440" text-anchor="middle">Hermes Agent</text><text class="vts" x="460" y="458" text-anchor="middle">любые модели</text></svg></div><div style="margin-top:14px"></div><div class="tbl"><table><thead><tr><th>Задача</th><th>Группа</th></tr></thead><tbody><tr><td>Разовый вопрос без доступа к репозиторию</td><td>чат: ChatGPT или Claude</td></tr><tr><td>Правка внутри открытого проекта, несколько файлов</td><td>агент в редакторе</td></tr><tr><td>Задача от начала до результата без пошагового участия</td><td>Claude Code или Codex</td></tr><tr><td>Работа в одном проекте в привычном редакторе с моделями разных вендоров</td><td>Cursor</td></tr><tr><td>Собственный харнесс на любой модели с оплатой за токены</td><td>Hermes Agent</td></tr><tr><td>Промпт для промышленной эксплуатации через API с большим объёмом данных</td><td>данные в XML-тегах</td></tr></tbody></table></div><div class="sublabel" style="margin-top:22px">Частые вопросы</div><div class="qa"><div><h3>Claude Code или Codex</h3><p>По доступу к проекту и действиям они совпадают, различаются моделью (Claude и GPT) и отдельными функциями, которые меняются от релиза к релизу. Выбор определяют модель и тариф, которые уже доступны команде.</p></div><div><h3>Cursor или Claude Code</h3><p>Cursor работает внутри редактора с открытым проектом и даёт выбор между моделями разных вендоров. Claude Code ведёт задачу от начала до результата в терминале, но только на моделях Claude.</p></div><div><h3>Hermes Agent или Claude Code</h3><p>Hermes Agent — опенсорс-харнесс: подключает любые модели, в том числе локальные, оплата за токены. Claude Code привязан к семейству Claude и подписке. Hermes — если нужны модели разных вендоров или своя модель.</p></div><div><h3>Аналоги Claude Code</h3><p>Из разобранных здесь: Codex (то же устройство, модели GPT), Cursor (редактор, модели разных вендоров) и Hermes Agent. Похожим образом устроены <a href="https://opencode.ai" target="_blank" rel="noopener">OpenCode</a>, <a href="https://aider.chat" target="_blank" rel="noopener">Aider</a>, <a href="https://cline.bot" target="_blank" rel="noopener">Cline</a> и <a href="https://goose-docs.ai" target="_blank" rel="noopener">Goose</a>.</p></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Задача задаёт харнессу два требования: нужен ли доступ к проекту и какое семейство моделей подходит. Вендорские агенты работают с одним семейством, Cursor и чат дают выбор между Claude и GPT, опенсорс-харнессы — любые модели, включая локальные.</div><div class="fg"><span class="fk">В общем случае</span>Сначала по задаче выбирают группу, затем продукт внутри группы. Claude Code и Codex различаются моделью и отдельными функциями харнесса, которые меняются от релиза к релизу, но концептуально устроены одинаково. Поэтому решающим оказывается то, какая модель и какой тариф уже доступны команде.</div><div class="fa"><span class="fk">Что сделать</span>Сформулируйте задачу одной строкой и определите три условия: нужен ли доступ к проекту, требуется ли участие человека на каждом шаге и нужна ли модель другого вендора или локальная модель. По этим условиям выберите группу.</div></div></section><section class="chapter" id="stable"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="11" width="14" height="9" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/></svg></span>Что не меняется</h2><p class="why">Claude Code и Codex — конкурирующие продукты, и их возможности сближаются с каждым выпуском. Разница между ними невелика, поэтому статья опирается на то, что остаётся неизменным.</p><div class="sc"><div><div class="sh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="11" width="14" height="9" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/></svg>Стабильно</div><ul><li>семейство моделей</li><li>устройство харнесса</li><li>приёмы работы с агентом</li></ul></div><div class="mv"><div class="sh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg>Меняется каждую неделю<a class="proof" href="https://code.claude.com/docs/en/changelog" target="_blank" rel="noopener" data-quote="Claude Code: с 17 по 25 сентября 2026 вышло 8 версий, от 2.1.275 до 2.1.283 — code.claude.com/docs/en/changelog" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/changelog" target="_blank" rel="noopener" data-quote="Codex: с 22 по 26 сентября 2026 — четыре версии CLI и новые модели GPT-6 Sol и Luna — learn.chatgpt.com/docs/changelog" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div><ul><li>функции и режимы</li><li>настройки автономности по умолчанию</li><li>позиционирование</li><li>модели, тарифы и лимиты</li></ul></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>С 17 по 25 сентября вышло восемь версий Claude Code, с 22 по 26 сентября — четыре версии Codex и новые модели GPT-6.</div><div class="fg"><span class="fk">В общем случае</span>Сравнение функций Claude Code и Codex устаревает быстрее, чем в нём успевают разобраться. Устойчивы три вещи: семейство моделей, устройство харнесса и приёмы работы с агентом.</div><div class="fa"><span class="fk">Что сделать</span>При выборе между Claude Code и Codex исходите из того, какая модель и какой тариф уже доступны команде.</div></div></section><section class="chapter" id="harness"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l9 5-9 5-9-5z"/><path d="M3 13l9 5 9-5"/></svg></span>Что такое харнесс</h2><p class="why">Модель отвечает текстом. Харнесс — всё вокруг неё: скиллы, инструменты, среда, человек в контуре. Он есть у любого ИИ-продукта, от агента в терминале до чата в браузере<a class="proof" href="https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code" target="_blank" rel="noopener" data-quote="Anthropic называет Claude Code харнессом: пост «A harness for every task» — claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Различается состав. Колонка «По API» показана на примере Hermes Agent; опенсорс-харнессов много, например OpenCode, Aider, Cline и Goose, и устроены они аналогично.</p><span class="drift"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg>срез · сентябрь 2026</span><div class="hx" aria-label="Состав харнесса по колонкам"><div class="hx-row h"><div></div><div class="hh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 6L3 12l6 6M15 6l6 6-6 6"/></svg><span>По API</span><small>Hermes Agent · публичный API</small></div><div class="hh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16v10H4z M2 19h20"/></svg><span>Энтерпрайз</span><small>Claude Code · Codex · приватный API</small></div><div class="hh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 19H17Q21 19 21 15Q21 11.5 17.5 11Q16.5 6.5 12 6.5Q8 6.5 6.8 10.5Q3 11 3 15Q3 19 7 19Z"/></svg><span>В облаке</span><small>Claude Code · Codex</small></div><div class="hh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H9l-5 4z"/></svg><span>Чат</span><small>ChatGPT · Claude</small></div></div><div class="hx-row"><div class="rl">Человек</div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg><span class="cap2">рядом / в конце</span><span class="ps"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/security" target="_blank" rel="noopener" data-quote="Hermes Agent: для опасных команд «the user must explicitly approve it», для сессий без человека есть unattended_mode — hermes-agent.nousresearch.com/docs/user-guide/security" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg><span class="cap2">рядом / в конце</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/permission-modes" target="_blank" rel="noopener" data-quote="Claude Code: «In Manual mode, Claude Code stops and asks you before most actions… In auto mode, a second model, the classifier, reviews actions instead of you» — code.claude.com/docs/en/permission-modes" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/sandboxing" target="_blank" rel="noopener" data-quote="Codex: «The agent works inside the sandbox by default and asks when it needs to go beyond that boundary» — learn.chatgpt.com/docs/sandboxing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg><span class="cap2">рядом / в конце</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/claude-code-on-the-web" target="_blank" rel="noopener" data-quote="Claude Code: «You pick a cloud session&#39;s permission mode from the mode dropdown, both when you create the task and while the session runs» — code.claude.com/docs/en/claude-code-on-the-web" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/cloud" target="_blank" rel="noopener" data-quote="Codex: «Give longer tasks dedicated environments and let them continue while you work on something else» — learn.chatgpt.com/docs/cloud" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div title="отличие от энтерпрайза" class="diff c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg><span class="cap2">каждый шаг</span></div></div><div class="hx-row"><div class="rl">Среда</div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="7" rx="2"/><rect x="3" y="13" width="18" height="7" rx="2"/></svg><span class="cap2">ваш компьютер</span><span class="ps"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/security" target="_blank" rel="noopener" data-quote="Hermes Agent: бэкенд по умолчанию «local — runs on host», команды выполняются на вашем компьютере — hermes-agent.nousresearch.com/docs/user-guide/security" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="7" rx="2"/><rect x="3" y="13" width="18" height="7" rx="2"/></svg><span class="cap2">ваш компьютер</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «Desktop scheduled tasks run on your machine, with direct access to your local files and tools» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener" data-quote="Codex: «Codex can inspect files, make edits, and run the tools already installed on your machine» — learn.chatgpt.com/docs/codex/cli" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div title="отличие от энтерпрайза" class="diff c part"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 19H17Q21 19 21 15Q21 11.5 17.5 11Q16.5 6.5 12 6.5Q8 6.5 6.8 10.5Q3 11 3 15Q3 19 7 19Z"/></svg><span class="cap2">VM провайдера</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/claude-code-on-the-web" target="_blank" rel="noopener" data-quote="Claude Code: «Isolated virtual machines: each session runs in an isolated, Anthropic-managed VM» — code.claude.com/docs/en/claude-code-on-the-web" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/cloud" target="_blank" rel="noopener" data-quote="Codex: «Run tasks in isolated cloud environments, work in parallel, and start work from the web, GitHub, GitLab, Linear, or Slack» — learn.chatgpt.com/docs/cloud" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div title="отличие от энтерпрайза" class="diff c part"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="7" rx="2"/><rect x="3" y="13" width="18" height="7" rx="2"/></svg><span class="cap2">песочница</span><span class="ps"><a class="proof" href="https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude" target="_blank" rel="noopener" data-quote="Claude: «When Claude executes code or creates files, it operates within an isolated, sandboxed container» — support.claude.com/en/articles/12111783" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/8437071-data-analysis-with-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: для анализа данных пишет и запускает Python в изолированной среде без внешних запросов. Пересказ справки OpenAI — help.openai.com/en/articles/8437071" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div></div><div class="hx-row"><div class="rl">Инструменты</div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M7 9l3 3-3 3M13 16h4"/></svg><span class="ps"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/features/overview" target="_blank" rel="noopener" data-quote="Hermes Agent: встроенные инструменты — «web search, terminal execution, file editing, memory, delegation» — hermes-agent.nousresearch.com/docs/user-guide/features/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M7 9l3 3-3 3M13 16h4"/></svg><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «reads your codebase, edits files, runs commands, and integrates with your development tools» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener" data-quote="Codex: «Inspect code, make changes, run commands, and automate repeatable work without leaving your terminal» — learn.chatgpt.com/docs/codex/cli" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M7 9l3 3-3 3M13 16h4"/></svg><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «reads your codebase, edits files, runs commands, and integrates with your development tools» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener" data-quote="Codex: «Inspect code, make changes, run commands, and automate repeatable work without leaving your terminal» — learn.chatgpt.com/docs/codex/cli" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div title="отличие от энтерпрайза" class="diff c part"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M7 9l3 3-3 3M13 16h4"/></svg><span class="cap2">коннекторы</span><span class="ps"><a class="proof" href="https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities" target="_blank" rel="noopener" data-quote="Claude: «Connectors let Claude access your apps and services, retrieve your data, and take actions within connected services» — support.claude.com/en/articles/11176164" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/11487775-connected-apps-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: «An app connects ChatGPT to an external service, such as Google Drive or Slack, so it can access information or perform supported actions» — help.openai.com/en/articles/11487775" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div></div><div class="hx-row"><div class="rl">Скиллы</div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l2.2 5.8L20 11l-5.8 2.2L12 19l-2.2-5.8L4 11l5.8-2.2z"/></svg><span class="ps"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/features/skills" target="_blank" rel="noopener" data-quote="Hermes Agent: скиллы — «on-demand knowledge documents the agent can load when needed», по стандарту agentskills.io — hermes-agent.nousresearch.com/docs/user-guide/features/skills" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l2.2 5.8L20 11l-5.8 2.2L12 19l-2.2-5.8L4 11l5.8-2.2z"/></svg><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «Each surface connects to the same underlying Claude Code engine, so your repo&#39;s CLAUDE.md files, settings, and MCP servers work across all of them» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/customization/overview" target="_blank" rel="noopener" data-quote="Codex: «AGENTS.md gives Codex durable project guidance that travels with your repository»; «Skills give Codex reusable capabilities for repeatable workflows» — learn.chatgpt.com/docs/customization/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l2.2 5.8L20 11l-5.8 2.2L12 19l-2.2-5.8L4 11l5.8-2.2z"/></svg><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «Each surface connects to the same underlying Claude Code engine, so your repo&#39;s CLAUDE.md files, settings, and MCP servers work across all of them» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/customization/overview" target="_blank" rel="noopener" data-quote="Codex: «AGENTS.md gives Codex durable project guidance that travels with your repository»; «Skills give Codex reusable capabilities for repeatable workflows» — learn.chatgpt.com/docs/customization/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l2.2 5.8L20 11l-5.8 2.2L12 19l-2.2-5.8L4 11l5.8-2.2z"/></svg><span class="ps"><a class="proof" href="https://support.claude.com/en/articles/12512180-use-skills-in-claude" target="_blank" rel="noopener" data-quote="Claude: «Skills extend Claude&#39;s capabilities by giving it access to specialized knowledge and workflows» — support.claude.com/en/articles/12512180" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/20001066-skills-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: скиллы — переиспользуемые сценарии с инструкциями, примерами и кодом, на планах Business, Enterprise и Edu. Пересказ справки OpenAI — help.openai.com/en/articles/20001066" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div></div><div class="hx-row"><div class="rl">Модель</div><div title="отличие от энтерпрайза" class="diff c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3"/></svg><span class="cap2">любая · API за $/токен или локально</span><span class="ps"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: «works with any OpenAI-compatible API endpoint»; с ключом провайдера «requests are billed pay-per-token against that key&#39;s organization (standard API pricing)» — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: локальные модели через Ollama, llama.cpp, vLLM или LM Studio — «Ollama runs open-weight models locally with one command. Best for: quick local experimentation, privacy-sensitive work, offline use» — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3"/></svg><span class="cap2">Claude / GPT · приватный API, подписка</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «Most surfaces require a Claude subscription or Anthropic Console account» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/pricing" target="_blank" rel="noopener" data-quote="Codex: «ChatGPT Work and Codex are included in your ChatGPT Free, Go, Plus, Pro, Business, Edu, or Enterprise plan» — learn.chatgpt.com/docs/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3"/></svg><span class="cap2">Claude / GPT · приватный API, подписка</span><span class="ps"><a class="proof" href="https://code.claude.com/docs/en/claude-code-on-the-web" target="_blank" rel="noopener" data-quote="Claude Code: «Cloud sessions are available on Pro, Max, and Team plans, and for Enterprise users with premium seats» — code.claude.com/docs/en/claude-code-on-the-web" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/pricing" target="_blank" rel="noopener" data-quote="Codex: «ChatGPT Work and Codex are included in your ChatGPT Free, Go, Plus, Pro, Business, Edu, or Enterprise plan» — learn.chatgpt.com/docs/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div title="отличие от энтерпрайза" class="diff c"><svg class="i" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3"/></svg><span class="cap2">Claude / GPT, free / подписка</span></div></div></div><div class="legend"><span><i class="dif"></i>отличие от энтерпрайза</span><span><i class="full"></i>есть</span><span><i class="part"></i>частично</span></div><div class="sublabel" style="margin-top:22px">Чат и агент</div><div class="qa"><div><h3>Чем Claude Code отличается от Claude в чате</h3><p>Семейство моделей одно, различается харнесс. Чат отвечает в диалоге и не видит ваш проект. Claude Code читает код, правит файлы и запускает команды в проекте: в терминале, редакторе, приложении или браузере. <a href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener">Документация</a></p></div><div><h3>Чем Codex отличается от ChatGPT</h3><p>То же правило: модели GPT общие, среда разная. ChatGPT ведёт диалог без доступа к проекту, Codex работает с кодом и запускает команды.</p></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Четыре типа различаются двумя свойствами: где выполняется код и как устроен доступ к модели. Опенсорс и энтерпрайз работают на вашем компьютере и различаются только доступом к модели, отсюда разница в стоимости.</div><div class="fg"><span class="fk">В общем случае</span>Локальные типы нужны для работы с файлами и секретами на вашем компьютере, облако — для долгих и параллельных задач, чат — для задач без доступа к проекту. Выбор сужают ограничения: энтерпрайз-план доступен не во всех юрисдикциях<a class="proof" href="https://www.anthropic.com/supported-countries" target="_blank" rel="noopener" data-quote="Anthropic: «To the extent permitted by law, Anthropic reserves the right to not provide its products or services to entities whose majority direct or indirect ownership is attributable to nations other than those listed in our Supported Regions Policy» — anthropic.com/supported-countries" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Определите, нужны ли задаче файлы на вашем компьютере, должен ли агент работать без вас и какая модель вам доступна. Первое ведёт к локальному типу, второе — к облаку, отсутствие обоих — к чату.</div></div></section><section class="chapter" id="compare"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg></span>Что видят и что делают</h2><span class="drift"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg>срез · сентябрь 2026</span><div class="cv" aria-label="Что видит · Что делает сам · Модели"><div class="cv-h"><span></span><span class="cv-hi" title="Что видит" aria-label="Что видит"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg></span><span class="cv-hi" title="Что делает сам" aria-label="Что делает сам"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18l3 3 6.3-6.3a4 4 0 0 0 5.4-5.4l-2.5 2.5-2.4-.6-.6-2.4z"/></svg></span><span class="cv-hi" title="Модели" aria-label="Модели"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="6" y="6" width="12" height="12" rx="2"/><path d="M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4"/></svg></span><span class="cv-hi" title="Стоимость" aria-label="Стоимость"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M14.5 9.2c-.4-.9-1.4-1.5-2.5-1.5-1.4 0-2.5.8-2.5 2s1.1 1.6 2.5 2 2.5.8 2.5 2-1.1 2-2.5 2c-1.2 0-2.2-.6-2.6-1.6M12 6v1.7M12 16.3V18"/></svg></span><span class="cv-hi" title="Источники" aria-label="Источники"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1"/></svg></span></div><div class="cv-r"><div class="cv-n">Hermes Agent</div><div class="cv-c"><svg class="cv-scope" viewBox="0 0 96 64" role="img" aria-label="Кодовая база целиком"><title>Кодовая база целиком</title><rect x="4" y="4" width="88" height="56" rx="4" class="on"/><rect x="18" y="14" width="60" height="36" rx="4" class="on"/><rect x="32" y="24" width="32" height="16" rx="4" class="on"/></svg></div><div class="cv-c cv-acts"><span class="cv-a on" title="Правит файлы проекта: есть" aria-label="Правит файлы проекта: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></span><span class="cv-a on" title="Запускает команды на вашем компьютере: есть" aria-label="Запускает команды на вашем компьютере: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span><span class="cv-a on" title="Самостоятельно проходит цикл «правка → тест → правка»: есть" aria-label="Самостоятельно проходит цикл «правка → тест → правка»: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><span class="cv-a" title="Работает в изолированной среде: нет" aria-label="Работает в изолированной среде: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></span></div><div class="cv-c"><span class="cv-v" title="Любые модели: через API или локально" aria-label="Любые модели: через API или локально"><i></i><i></i><i></i><i></i><i></i></span></div><div class="cv-c cv-cost"><span class="cv-usd" title="$/токен или $0. API по ценам провайдера или своя модель локально" aria-label="$/токен или $0. API по ценам провайдера или своя модель локально"><i class="on">$</i><i class="on">$</i><i class="on">$</i></span><span class="cv-cp"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: с ключом провайдера «requests are billed pay-per-token against that key&#39;s organization (standard API pricing)» — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: локальные модели через Ollama, llama.cpp, vLLM или LM Studio — «Ollama runs open-weight models locally with one command. Best for: quick local experimentation, privacy-sensitive work, offline use» — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="cv-c cv-p"><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/security" target="_blank" rel="noopener" data-quote="Hermes Agent: работает в твоём проекте, бэкенд по умолчанию «local — runs on host» — hermes-agent.nousresearch.com/docs/user-guide/security" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://hermes-agent.nousresearch.com/docs/user-guide/features/overview" target="_blank" rel="noopener" data-quote="Hermes Agent: правит файлы, запускает команды в терминале, использует скиллы — hermes-agent.nousresearch.com/docs/user-guide/features/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://hermes-agent.nousresearch.com/docs/integrations/providers" target="_blank" rel="noopener" data-quote="Hermes Agent: подключается к моделям разных провайдеров через API — hermes-agent.nousresearch.com/docs/integrations/providers" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div class="cv-r"><div class="cv-n">Claude Code и Codex</div><div class="cv-c"><svg class="cv-scope" viewBox="0 0 96 64" role="img" aria-label="Кодовая база целиком"><title>Кодовая база целиком</title><rect x="4" y="4" width="88" height="56" rx="4" class="on"/><rect x="18" y="14" width="60" height="36" rx="4" class="on"/><rect x="32" y="24" width="32" height="16" rx="4" class="on"/></svg></div><div class="cv-c cv-acts"><span class="cv-a on" title="Правит файлы проекта: есть" aria-label="Правит файлы проекта: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></span><span class="cv-a on" title="Запускает команды на вашем компьютере: есть" aria-label="Запускает команды на вашем компьютере: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span><span class="cv-a on" title="Самостоятельно проходит цикл «правка → тест → правка»: есть" aria-label="Самостоятельно проходит цикл «правка → тест → правка»: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><span class="cv-a" title="Работает в изолированной среде: нет" aria-label="Работает в изолированной среде: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></span></div><div class="cv-c"><span class="cv-v" title="Одна модель: у каждого продукта своя" aria-label="Одна модель: у каждого продукта своя"><i></i></span></div><div class="cv-c cv-cost"><span class="cv-usd" title="от $20/мес. или $/токен по API" aria-label="от $20/мес. или $/токен по API"><i class="on">$</i><i class="on">$</i></span><span class="cv-cp"><a class="proof" href="https://claude.com/pricing" target="_blank" rel="noopener" data-quote="Claude: Pro — $20 в месяц при помесячной оплате, Claude Code входит в Pro и Max; Enterprise — «Seat price + usage at API rates» — claude.com/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/pricing" target="_blank" rel="noopener" data-quote="Codex: «ChatGPT Work and Codex are included in your ChatGPT Free, Go, Plus, Pro, Business, Edu, or Enterprise plan»; второй вариант — «Pay for Codex usage based on API pricing» — learn.chatgpt.com/docs/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/6950777-what-is-chatgpt-plus" target="_blank" rel="noopener" data-quote="ChatGPT Plus — $20 в месяц. Пересказ справки OpenAI — help.openai.com/en/articles/6950777" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="cv-c cv-p"><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «Claude Code is an agentic coding tool that reads your codebase» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener" data-quote="Codex: «Codex can inspect files, make edits, and run the tools already installed on your machine» — learn.chatgpt.com/docs/codex/cli" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener" data-quote="Claude Code: «reads your codebase, edits files, runs commands, and integrates with your development tools» — code.claude.com/docs/en/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener" data-quote="Codex: «Inspect code, make changes, run commands, and automate repeatable work without leaving your terminal» — learn.chatgpt.com/docs/codex/cli" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div class="cv-r"><div class="cv-n">Cursor</div><div class="cv-c"><svg class="cv-scope" viewBox="0 0 96 64" role="img" aria-label="Открытый проект"><title>Открытый проект</title><rect x="4" y="4" width="88" height="56" rx="4" class="off"/><rect x="18" y="14" width="60" height="36" rx="4" class="on"/><rect x="32" y="24" width="32" height="16" rx="4" class="on"/></svg></div><div class="cv-c cv-acts"><span class="cv-a on" title="Правит файлы проекта: есть" aria-label="Правит файлы проекта: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></span><span class="cv-a on" title="Запускает команды на вашем компьютере: есть" aria-label="Запускает команды на вашем компьютере: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span><span class="cv-a" title="Самостоятельно проходит цикл «правка → тест → правка»: нет" aria-label="Самостоятельно проходит цикл «правка → тест → правка»: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><span class="cv-a" title="Работает в изолированной среде: нет" aria-label="Работает в изолированной среде: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></span></div><div class="cv-c"><span class="cv-v" title="Модели 4 вендоров" aria-label="Модели 4 вендоров"><i></i><i></i><i></i><i></i></span></div><div class="cv-c cv-cost"><span class="cv-usd" title="от $20/мес. сверх лимита — по факту" aria-label="от $20/мес. сверх лимита — по факту"><i class="on">$</i><i class="on">$</i></span><span class="cv-cp"><a class="proof" href="https://cursor.com/pricing" target="_blank" rel="noopener" data-quote="Cursor: Pro — «$20 / mo.»; «Every plan includes a set amount of model usage. On-demand usage allows you to continue using models after your included amount is consumed, billed in arrears» — cursor.com/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="cv-c cv-p"><a class="proof" href="https://cursor.com/docs/agent/chat/checkpoints" target="_blank" rel="noopener" data-quote="Cursor: «Checkpoints save snapshots of your codebase during an Agent session» — cursor.com/docs/agent/chat/checkpoints" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://cursor.com/docs/agent/overview" target="_blank" rel="noopener" data-quote="Cursor: «Suggest edits to files and apply them automatically», «Execute terminal commands and monitor output» — cursor.com/docs/agent/overview" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://cursor.com/docs/models" target="_blank" rel="noopener" data-quote="Cursor: «Cursor supports frontier models from OpenAI, Anthropic, Google, SpaceXAI, and more»; есть и собственные модели, например Composer 2.5 — cursor.com/docs/models" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://cursor.com/pricing" target="_blank" rel="noopener" data-quote="Cursor: «Every plan includes a set amount of model usage. On-demand usage allows you to continue using models after your included amount is consumed, billed in arrears» — cursor.com/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div class="cv-r"><div class="cv-n">Чат: ChatGPT, Claude</div><div class="cv-c"><svg class="cv-scope" viewBox="0 0 96 64" role="img" aria-label="Только диалог и подключённые сервисы"><title>Только диалог и подключённые сервисы</title><rect x="4" y="4" width="88" height="56" rx="4" class="off"/><rect x="18" y="14" width="60" height="36" rx="4" class="off"/><rect x="32" y="24" width="32" height="16" rx="4" class="on"/></svg></div><div class="cv-c cv-acts"><span class="cv-a" title="Правит файлы проекта: нет" aria-label="Правит файлы проекта: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></span><span class="cv-a" title="Запускает команды на вашем компьютере: нет" aria-label="Запускает команды на вашем компьютере: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span><span class="cv-a" title="Самостоятельно проходит цикл «правка → тест → правка»: нет" aria-label="Самостоятельно проходит цикл «правка → тест → правка»: нет"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><span class="cv-a on" title="Работает в изолированной среде: есть" aria-label="Работает в изолированной среде: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></span></div><div class="cv-c"><span class="cv-v" title="Одна модель: у каждого продукта своя" aria-label="Одна модель: у каждого продукта своя"><i></i></span></div><div class="cv-c cv-cost"><span class="cv-usd" title="free · от $20. подписка" aria-label="free · от $20. подписка"><i class="on">$</i></span><span class="cv-cp"><a class="proof" href="https://claude.com/pricing" target="_blank" rel="noopener" data-quote="Claude: Pro — $20 в месяц при помесячной оплате, Claude Code входит в Pro и Max; Enterprise — «Seat price + usage at API rates» — claude.com/pricing" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/6950777-what-is-chatgpt-plus" target="_blank" rel="noopener" data-quote="ChatGPT Plus — $20 в месяц. Пересказ справки OpenAI — help.openai.com/en/articles/6950777" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="cv-c cv-p"><a class="proof" href="https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities" target="_blank" rel="noopener" data-quote="Claude: «Connectors let Claude access your apps and services, retrieve your data, and take actions within connected services» — support.claude.com/en/articles/11176164" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/11487775-connected-apps-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: «An app connects ChatGPT to an external service, such as Google Drive or Slack, so it can access information or perform supported actions» — help.openai.com/en/articles/11487775" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude" target="_blank" rel="noopener" data-quote="Claude: «When Claude executes code or creates files, it operates within an isolated, sandboxed container» — support.claude.com/en/articles/12111783" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/8437071-data-analysis-with-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: для анализа данных пишет и запускает Python в изолированной среде без внешних запросов. Пересказ справки OpenAI — help.openai.com/en/articles/8437071" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div class="cv-leg"><span class="cv-li"><span class="cv-usd sm"><i class="on">$</i></span><small>дешевле</small><span class="cv-usd sm"><i class="on">$</i><i class="on">$</i><i class="on">$</i></span><small>дороже · точные цены — в подсказке</small></span><span class="cv-li"><span class="cv-a on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></span><small>Правит файлы проекта</small></span><span class="cv-li"><span class="cv-a on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span><small>Запускает команды на вашем компьютере</small></span><span class="cv-li"><span class="cv-a on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><small>Самостоятельно проходит цикл «правка → тест → правка»</small></span><span class="cv-li"><span class="cv-a on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></span><small>Работает в изолированной среде</small></span></div></div><div class="sublabel" style="margin-top:22px">Что есть что</div><div class="qa three"><div><h3>Что такое Codex</h3><p>Агент OpenAI для работы с кодом: берёт задачу, правит файлы и запускает команды. Работает в терминале, в расширении для редактора и в облаке, на моделях GPT. От чата ChatGPT его отличает доступ к проекту. <a href="https://learn.chatgpt.com/docs/codex/cli" target="_blank" rel="noopener">Документация</a></p></div><div><h3>Что такое Cursor</h3><p>Редактор кода со встроенным агентом: агент решает задачи самостоятельно, запускает команды в терминале и правит код. Работает в открытом проекте и поддерживает модели разных вендоров. <a href="https://cursor.com/docs/agent/overview" target="_blank" rel="noopener">Документация</a></p></div><div><h3>Что такое Hermes Agent</h3><p>Опенсорс-агент от Nous Research. Запускается на вашем компьютере, подключается к разным провайдерам моделей, включая Claude и открытые модели, и может работать с локальной моделью. <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/overview" target="_blank" rel="noopener">Документация</a></p></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Claude Code и Codex совпадают по доступу к проекту и по действиям; различаются они моделью и отдельными функциями харнесса, концептуально оставаясь одинаковыми.</div><div class="fg"><span class="fk">В общем случае</span>Cursor выделяется встроенным редактором и моделями разных вендоров, чат — отсутствием доступа к проекту. Между Claude Code и Codex выбор определяют модель и тариф.</div><div class="fa"><span class="fk">Что сделать</span>Если для задачи нужны файлы проекта, чат не подходит. Далее выбирайте по модели, которая уже доступна команде.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/chatgpt-enterprise-usage-report/"><div class="k">Отчёт</div><div class="t">Отчёт по ChatGPT Enterprise</div><div class="d">Кто в компании чем пользуется</div></a><a href="/blog/ai-interviews-without-leading-questions/"><div class="k">Интервью</div><div class="t">Интервью без наводящих вопросов</div><div class="d">Как выяснить реальные потребности сотрудников в AI</div></a></div></section><footer>Срез на сентябрь 2026. Утверждения о продуктах — по официальной документации Anthropic, OpenAI, Cursor и Nous Research, источник — у значка рядом с утверждением. Две цитаты из справки OpenAI даны пересказом.</footer></div>]]></content:encoded></item>
<item><title>Как провести и проанализировать интервью о работе с AI: сценарий на 30 минут, промпт разбора и таблица в Airtable</title><link>https://www.urvanov.com/blog/ai-interviews-without-leading-questions/</link><guid>https://www.urvanov.com/blog/ai-interviews-without-leading-questions/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Сценарий звонка на 30 минут, правила против ухода в сторону, короткая анкета на всю компанию, анализ интервью через ChatGPT или агента с готовым промптом и сверка «со слов» с данными отчёта.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-intervyu-ru"><p class="credit">Дизайн интервью — по рекомендациям <a href="https://t.me/Kseniya_Vasil" target="_blank" rel="noopener">@Kseniya_Vasil</a>. Люди, группы и цифры для интервью — из <a href="/blog/chatgpt-enterprise-usage-report/">отчёта по ChatGPT Enterprise</a>. Там же <a href="/blog/chatgpt-enterprise-usage-report/#why">бизнес-задача</a>: какое решение принимает компания, кто и по каким признакам.</p><p class="lead-a">Анализ интервью здесь строится в четыре шага: текст разговора отдают в ChatGPT одним и тем же промптом, ответ переносят в строку человека в таблице, таблицу группируют по затруднению, а повторы проверяют анкетой на всю компанию. Слова человека сверяют с данными из отчёта. Ниже сценарий звонка, таблица и <a href="#after">промпт разбора</a>.</p><div class="flow" aria-label="Два формата интервью сходятся в одной таблице"><div class="lane"><div class="lane-h" style="color:var(--c-chat)"><span class="dot" style="background:var(--c-chat)"></span>Голос</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h4l2 5-2.5 1.5a11 11 0 0 0 5 5L15 13l5 2v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2"/></svg><b>Звонок</b><small>30 мин</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg><b><a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> · <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a></b><small>Заметки</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg><b>Транскрипт</b><small>В Notes</small></span></div></div><div class="lane"><div class="lane-h" style="color:var(--c-work)"><span class="dot" style="background:var(--c-work)"></span>Текст</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"/><path d="M8 8h8M8 12h8M8 16h5"/></svg><b>Вопросы</b><small>В переписке</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"/></svg><b>Уточнение</b><small>1 сообщение</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg><b>Переписка</b><small>Копия в Notes</small></span></div></div><div class="drop" style="grid-column:1 / -1" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M6 13l6 6 6-6"/></svg><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M6 13l6 6 6-6"/></svg></div><div class="sink"><div class="sink-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg><b><a href="https://airtable.com" target="_blank" rel="noopener">Airtable</a></b><span>Всё в одной таблице</span><small>16 записей</small></div><div class="mini"><span class="h">Имя</span><span class="h nt">Notes</span><span class="h fm">Формат</span><span class="h me">Частота со слов</span><span class="h">По отчёту</span><span class="h stc">Статус</span><span>Hana Sato</span><span class="nt">Ведущий [00:00]: Вспомните последний…</span><span class="fm"><span class="at c">голос</span></span><span><span class="at g">каждую неделю</span></span><span><span class="at g">каждую неделю</span></span><span class="stc"><span class="at g">Успех</span></span><span>Pavel Novak</span><span class="nt">[27.09 10:15] Ведущий: Опишите последнюю…</span><span class="fm"><span class="at p">текст</span></span><span><span class="at c">регулярно</span></span><span><span class="at rd">не пользуется</span><span class="dif">≠</span></span><span class="stc"><span class="at g">Успех</span></span><span>Nadia Rahimi</span><span class="nt">Ведущий [00:00]</span><span class="fm"><span class="at c">голос</span></span><span><span class="at y">изредка</span></span><span><span class="at y">изредка</span></span><span class="stc"><span class="at g">Успех</span></span></div></div></div><section class="chapter" id="format"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v6M12 9l-6 6v6M12 9l6 6v6"/></svg></span>Какой формат выбрать</h2><div class="tbl"><table class="rate"><thead><tr><th>Критерий</th><th><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0M12 18v3"/></svg> Голос</th><th><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/></svg> Текст</th></tr></thead><tbody><tr><td>Глубина ответа</td><td><span class="rt" aria-label="5 из 5"><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i></span></td><td><span class="rt" aria-label="2 из 5"><i class="on"></i><i class="on"></i><i></i><i></i><i></i></span></td></tr><tr><td>Можно уточнить на ходу</td><td><span class="rt" aria-label="5 из 5"><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i></span></td><td><span class="rt" aria-label="1 из 5"><i class="on"></i><i></i><i></i><i></i><i></i></span></td></tr><tr><td>Сколько людей охватить</td><td><span class="rt" aria-label="2 из 5"><i class="on"></i><i class="on"></i><i></i><i></i><i></i></span></td><td><span class="rt" aria-label="5 из 5"><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i></span></td></tr><tr><td>Время респондента</td><td>30 мин</td><td>10 мин</td></tr><tr><td>Риск уйти в сторону</td><td><span class="rt w" aria-label="4 из 5"><i class="on"></i><i class="on"></i><i class="on"></i><i class="on"></i><i></i></span></td><td><span class="rt w" aria-label="1 из 5"><i class="on"></i><i></i><i></i><i></i><i></i></span></td></tr></tbody></table></div><p class="cap">Точки — оценка от 1 до 5. Для риска больше точек — хуже.</p><div class="sublabel" style="margin-top:22px">Микс: формат выбирает респондент</div><div class="mix" aria-label="Голос или текст — выбирает респондент"><span class="mx">Приглашение<small>В личном сообщении</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="mx">Готов созвониться?<small>30 минут</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><div class="mxo"><div><em>да</em><span class="at c">голос</span> звонок с ассистентом для заметок</div><div><em>нет</em><span class="at p">текст</span> те же вопросы по одному в переписке</div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Голос даёт 5 из 5 по глубине, текст — 5 из 5 по охвату. Формат выбирает сам человек.</div><div class="fg"><span class="fk">В общем случае</span>Когда человек сам выбирает формат, отказов меньше. Глубина у форматов разная: звонок даёт подробный рассказ с уточнениями, переписка — короткие ответы. Поэтому ответы из переписки помогают найти случаи и темы, но их не приравнивают к звонкам. Голос — основной формат, переписка — для тех, кому неудобен звонок. Анкета на всю компанию — отдельный инструмент, её составляют после интервью.</div><div class="fa"><span class="fk">Что сделать</span>В приглашении предложите оба формата одной фразой: «Созвонимся на 30 минут или отвечу на вопросы в переписке — как удобнее?»</div></div></section><section class="chapter" id="prep"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0M12 18v3"/></svg></span>Подготовка ко встрече</h2><ul class="todo"><li><span class="box" aria-hidden="true"></span><div><b>Предупредить про ассистента для заметок</b><span class="d">В приглашении и в начале звонка: ассистент ведёт заметки и расшифровку, их видим только мы, в отчёт ответы попадают без имени. С <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a> звук не сохраняется</span></div></li><li><span class="box" aria-hidden="true"></span><div><b><a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> или <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a></b><span class="d"><a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> подключён к календарю и сам заходит во встречу Google Meet или Zoom. <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a> работает без бота, со звуком компьютера, и хранит только расшифровку и заметки</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Строка в Airtable создана заранее</b><span class="d">Имя, группа и цифры из <a href="/blog/chatgpt-enterprise-usage-report/#people">таблицы всех людей</a>, статус «В работе» — до первого сообщения</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Гайд открыт на втором экране</b><span class="d">Семь блоков сценария и таймер на 30 минут</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Один ведущий, без конспекта</b><span class="d">Расшифровку делает <a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> или <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a>, разбор — ChatGPT</span></div></li></ul><div class="finding"><b>Вывод</b><div class="fa"><span class="fk">Что сделать</span>До встречи проверьте, что <a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> видит встречу в календаре или <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a> запущена на компьютере, и заведите строку в Airtable — тогда на звонке останутся только вопросы.</div></div></section><section class="chapter" id="script"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg></span>Сценарий на 30 минут</h2><div class="tline" aria-label="30"><div style="flex:2;background:var(--c-none);color:var(--ink)">2</div><div style="flex:3;background:var(--c-light)">3</div><div style="flex:8;background:var(--c-chat)">8</div><div style="flex:5;background:var(--c-proj)">5</div><div style="flex:4;background:var(--c-team)">4</div><div style="flex:5;background:var(--c-work)">5</div><div style="flex:3;background:var(--c-none);color:var(--ink)">3</div></div><p class="cap">Минуты на блок</p><ol class="script"><li><span class="sn" style="background:var(--c-none);color:var(--ink)">1</span><div><div class="st-t">Вступление</div><div class="q">«Я изучаю, как в компании на самом деле решают рабочие задачи. Это не оценка вас. Мне одинаково полезны и удачные, и неудачные случаи. Со мной ассистент для заметок: расшифровку видим только мы, в отчёт ответы попадут без имени. Можно его подключить?»</div></div></li><li><span class="sn" style="background:var(--c-light)">2</span><div><div class="st-t">Роль и контекст</div><div class="q">«Чем вы занимаетесь большую часть недели?»</div><div class="fu">Какие задачи повторяются · где ищете информацию и делаете черновики</div></div></li><li><span class="sn" style="background:var(--c-chat)">3</span><div><div class="st-t">Последняя рабочая задача</div><div class="q">«Вспомните последнюю рабочую задачу, которая заняла у вас заметное время. Что нужно было получить?»</div><div class="fu">Какими средствами располагали · что выбрали и почему · как дошли до результата</div></div></li><li><span class="sn" style="background:var(--c-proj)">4</span><div><div class="st-t">Результат и затраты</div><div class="q">«Что получилось в итоге и сколько сил это заняло?»</div><div class="fu">Что взяли как есть · что доделали сами · какие были ограничения: данные, доступ, безопасность</div></div></li><li><span class="sn" style="background:var(--c-team)">5</span><div><div class="st-t">Удачный случай</div><div class="q">«Вспомните, когда похожая задача получилась хорошо. Что тогда было иначе?»</div><div class="fu">Инструмент · данные · подготовка</div></div></li><li><span class="sn" style="background:var(--c-work)">6</span><div><div class="st-t">Отказ и переключение</div><div class="q">«Бывало, что вы переставали пользоваться инструментом или переходили на другой? Как это было?»</div><div class="fu">Какой инструмент · на что перешли · почему. Если такого не было — пропустить</div></div></li><li><span class="sn" style="background:var(--c-none);color:var(--ink)">7</span><div><div class="st-t">Завершение</div><div class="q">«О чём я не спросил, но это важно, чтобы понять вашу работу?»</div><div class="fu">Поблагодарить · сказать, что ответы пойдут в общий разбор без имён</div></div></li></ol><div class="branch"><span class="bi" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="9" r="2.5"/><path d="M6 8.5v7M8.3 7c4 1 7 0 7.7 0"/></svg></span><div><b>Если человек не упоминает AI</b><span>Не спрашивать, почему он им не пользуется. Спросить, как он решил задачу и какие варианты рассматривал. Про AI спрашивать, только если человек сам назвал его возможным вариантом</span></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Последняя задача, результат и затраты занимают 13 из 30 минут, удачный случай и отказ или переключение — ещё 9.</div><div class="fg"><span class="fk">В общем случае</span>Разговор строится вокруг работы, а не инструмента. Так видно, где AI помогает, где человек выбрал другой способ и где новый инструмент не нужен. Удачный случай показывает, что уже работает, отказ и переключение — почему инструмент меняют.</div><div class="fa"><span class="fk">Что сделать</span>Поставьте таймер: к 5-й минуте переходите к последней рабочей задаче. Если не успели, сократите контекст до одного вопроса. Тему задачи подбирайте под человека: его задачи видны в <a href="/blog/chatgpt-enterprise-usage-report/#projects">«Темах проектов»</a>.</div></div></section><section class="chapter" id="focus"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg></span>Как не уйти в сторону</h2><div class="rules"><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="3"/><path d="M10 17V8h3a2.5 2.5 0 0 1 0 5h-3"/></svg></span><b>Парковка</b><span>Посторонняя тема записывается в отдельное поле, к ней возвращаются в последние 2 минуты</span></div><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 7l3-2v14M9 19h7"/></svg></span><b>Один вопрос за раз</b><span>Без «и ещё…» в той же фразе</span></div><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 14L4 9l5-5"/><path d="M4 9h11a5 5 0 0 1 0 10h-3"/></svg></span><b>Назад к случаю</b><span>Общая оценка → «можете вспомнить конкретный раз?»</span></div><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6z"/><path d="M5 5l14 14"/></svg></span><b>Не защищать инструмент</b><span>На критику — только «что было дальше?»</span></div><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M10 9v6M14 9v6"/></svg></span><b>Пауза 5 секунд</b><span>После ответа молчать: люди сами добавляют главное</span></div><div class="rule"><span class="ri"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18h6M10 21h4M12 3a6 6 0 0 0-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0 0 12 3z"/><path d="M4 4l16 16"/></svg></span><b>Не предлагать решения</b><span>Ни своих идей, ни названий других продуктов</span></div></div><div class="sublabel" style="margin-top:22px">Ситуация → что сказать</div><div class="tbl"><table><thead><tr><th>Ситуация</th><th>Реплика ведущего</th></tr></thead><tbody><tr><td>Просит новую функцию</td><td>«Когда она понадобилась в последний раз? Что вы тогда сделали?»</td></tr><tr><td>Уходит в жалобы на процессы</td><td>«Запишу на парковку. Вернёмся к задаче с отчётом: что было после?»</td></tr><tr><td>Отвечает «обычно» и «всегда»</td><td>«А в последний раз как было?»</td></tr><tr><td>Спрашивает мнение ведущего</td><td>«Расскажу в конце. Сейчас важнее, как это у вас»</td></tr><tr><td>Время блока вышло</td><td>«Это важно, пометим. Перейду к следующему вопросу»</td></tr></tbody></table></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Пять типовых ситуаций, в каждой — реплика, которая возвращает к эпизоду.</div><div class="fg"><span class="fk">В общем случае</span>За просьбой о функции стоит конкретный случай, его и нужно достать. Сама формулировка просьбы полезна позже, как подсказка, где искать проблему.</div><div class="fa"><span class="fk">Что сделать</span>Держите таблицу реплик рядом с гайдом и записывайте каждую просьбу о функции дословно в отдельное поле таблицы для посторонних тем.</div></div></section><section class="chapter" id="base"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg></span>Запись в Airtable</h2><p class="why">Таблица держит всех людей выборки, их разговоры и данные отчёта в одном месте. <b>Решение:</b> кого ещё пригласить, чтобы в каждой группе хватило интервью, кому отправить уточнение и какие расхождения «со слов» и «по отчёту» обсудить с человеком.</p><div class="pipe" aria-label="Путь записи от звонка до таблицы"><span class="pn" style="--c:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg><span style="font-weight:700"><a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> · <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a></span><small>Транскрипт</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="pn" style="--c:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg><a href="https://airtable.com" target="_blank" rel="noopener" style="color:inherit;text-decoration:none">Airtable</a><small>Поле Notes в строке человека</small></span></div><div class="srcs"><a href="https://airtable.com" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg>Airtable<small>База и формы</small></a><a href="https://tldv.io" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg>tl;dv<small>Заметки и расшифровка звонков</small></a><a href="https://www.granola.ai/" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg>Granola<small>Заметки без бота, звук не хранится</small></a></div><p class="cap">Голос: транскрипт из <a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a> или <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a> копируется в поле Notes. Текст: переписка копируется в то же поле с датой и временем каждого сообщения.</p><div class="sublabel" style="margin-top:22px">Одна таблица: строка — человек</div><div class="atbl"><table><thead><tr><th></th><th><span class="fieldtype">A</span>Имя</th><th><span class="fieldtype">≡</span>Notes</th><th><span class="fieldtype">◉</span>Формат</th><th><span class="fieldtype">◉</span>Группа</th><th><span class="fieldtype">◉</span>Статус</th><th class="me"><span class="fieldtype">◉</span>Частота · со слов</th><th><span class="fieldtype">◉</span>Частота · по отчёту</th><th><span class="fieldtype">ƒ</span>≠</th><th><span class="fieldtype">#</span>Токены · 3 мес</th><th><span class="fieldtype">#</span>$ / 3 мес</th><th><span class="fieldtype">▦</span>Активность</th></tr></thead><tbody><tr><td class="rn">1</td><td class="nm">Hana Sato</td><td class="nt">Ведущий [00:00]: Вспомните последний раз, когда…</td><td><span class="at c">голос</span></td><td>код</td><td><span class="at g">Успех</span></td><td><span class="at g">каждую неделю</span></td><td><span class="at g">каждую неделю</span></td><td style="text-align:center"><span class="same">=</span></td><td class="r">21,9 млн</td><td class="r">438</td><td class="r">25.09</td></tr><tr><td class="rn">2</td><td class="nm">Luis Moreno</td><td class="nt">Ведущий [00:00]: Спасибо, что нашли время…</td><td><span class="at c">голос</span></td><td>код</td><td><span class="at g">Успех</span></td><td><span class="at c">регулярно</span></td><td><span class="at g">каждую неделю</span></td><td style="text-align:center"><span class="dif">≠</span></td><td class="r">12,7 млн</td><td class="r">396</td><td class="r">24.09</td></tr><tr><td class="rn">3</td><td class="nm">Mira Castellano</td><td class="nt">[26.09 18:40] Ведущий: Какой результат вы ждали…</td><td><span class="at p">текст</span></td><td>агент</td><td><span class="at y">Не все вопросы</span></td><td><span class="at c">регулярно</span></td><td><span class="at c">регулярно</span></td><td style="text-align:center"><span class="same">=</span></td><td class="r">3,9 млн</td><td class="r">97</td><td class="r">26.09</td></tr><tr><td class="rn">4</td><td class="nm">Jonas Keller</td><td class="nt">Ведущий [00:00]: Чем вы заняты большую часть…</td><td><span class="at c">голос</span></td><td>ресёрч</td><td><span class="at g">Успех</span></td><td><span class="at g">каждую неделю</span></td><td><span class="at g">каждую неделю</span></td><td style="text-align:center"><span class="same">=</span></td><td class="r">1,1 млн</td><td class="r">19</td><td class="r">26.09</td></tr><tr><td class="rn">5</td><td class="nm">Ben Ortiz</td><td class="nt"></td><td></td><td>только Codex</td><td><span class="at c">Жду ответа</span></td><td></td><td><span class="at p">только Codex</span></td><td style="text-align:center"></td><td class="r">3,2 млн</td><td class="r">64</td><td class="r">22.09</td></tr><tr><td class="rn">6</td><td class="nm">Pavel Novak</td><td class="nt">[27.09 10:15] Ведущий: Опишите последнюю задачу…</td><td><span class="at p">текст</span></td><td>неактивные</td><td><span class="at g">Успех</span></td><td><span class="at c">регулярно</span></td><td><span class="at rd">не пользуется</span></td><td style="text-align:center"><span class="dif">≠</span></td><td class="r">0</td><td class="r">0</td><td class="r">—</td></tr><tr><td class="rn">7</td><td class="nm">Sara Quinn</td><td class="nt"></td><td></td><td>неактивные</td><td><span class="at rd">Отказ</span></td><td></td><td><span class="at rd">не пользуется</span></td><td style="text-align:center"></td><td class="r">0</td><td class="r">0</td><td class="r">—</td></tr><tr><td class="rn">8</td><td class="nm">Nadia Rahimi</td><td class="nt">Ведущий [00:00]: Что вы делали вчера в ChatGPT…</td><td><span class="at c">голос</span></td><td>другие инструменты</td><td><span class="at g">Успех</span></td><td><span class="at y">изредка</span></td><td><span class="at y">изредка</span></td><td style="text-align:center"><span class="same">=</span></td><td class="r">0,3 млн</td><td class="r">6</td><td class="r">20.09</td></tr><tr><td class="rn">9</td><td class="nm">Elif Demir</td><td class="nt"></td><td></td><td>проекты</td><td><span class="at n">В работе</span></td><td></td><td><span class="at g">каждую неделю</span></td><td style="text-align:center"></td><td class="r">1,8 млн</td><td class="r">41</td><td class="r">27.09</td></tr></tbody><tfoot><tr><td colspan="12">16 записей · показаны 9</td></tr></tfoot></table></div><p class="cap">Оранжевое поле ChatGPT заполняет по разговору из Notes. «По отчёту», «Токены», «$» и «Активность» берутся из <a href="/blog/chatgpt-enterprise-usage-report/">отчёта по ChatGPT Enterprise</a>. Поле «≠» — формула, которая сравнивает две частоты.</p><div class="sublabel" style="margin-top:22px">Разбор таблицы: что даёт каждый столбец</div><div class="tbl"><table><thead><tr><th>Столбец</th><th>Откуда</th><th>На что влияет</th></tr></thead><tbody><tr><td>Имя · Группа</td><td><a href="/blog/who-to-interview-before-buying-ai-tools/#groups">выборка «Восемь групп»</a></td><td>какой способ решать задачи представляет человек</td></tr><tr><td>Notes</td><td><a href="https://tldv.io/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">tl;dv</a>, <a href="https://www.granola.ai/" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;text-underline-offset:3px">Granola</a> или переписка</td><td>источник всех полей; любой вывод сверяется с цитатой</td></tr><tr><td>Формат</td><td>ведущий</td><td>глубина ответа: в переписке меньше деталей, чем в звонке</td></tr><tr><td>Статус</td><td>ведущий</td><td>следующее действие: напомнить, уточнить или заменить человека</td></tr><tr><td>Частота · со слов</td><td>ChatGPT берёт из разговора</td><td>как часто человек, по его словам, пользуется AI</td></tr><tr><td>Частота · по отчёту</td><td><a href="/blog/chatgpt-enterprise-usage-report/#depth">отчёт · глубина проникновения</a></td><td>как часто он пользуется по данным консоли</td></tr><tr><td>≠</td><td>формула Airtable: сравнивает две частоты</td><td>не совпало — вопрос для уточнения на интервью: отчёт видит только корпоративный инструмент за 3 месяца</td></tr><tr><td>Токены · 3 мес</td><td>отчёт · <a href="/blog/chatgpt-enterprise-usage-report/#top-spend">топ по расходам</a></td><td>объём работы в корпоративном инструменте за 3 месяца — для выборки, не для веса ответа</td></tr><tr><td>$ · 3 мес</td><td>отчёт · таблица лидеров</td><td>траты за 3 месяца — для выборки, не для веса ответа</td></tr><tr><td>Активность</td><td>отчёт · выгрузка пользователей</td><td>дата последнего действия: давно — кандидат в группу «Попробовали и бросили»</td></tr></tbody></table></div><div class="sublabel" style="margin-top:22px">Как читать строки примера</div><div class="tbl"><table><thead><tr><th>Строка</th><th>Сигнал</th><th>Что делать</th></tr></thead><tbody><tr><td>Hana Sato</td><td>частоты совпали · $438 на код · <span class="at g">Успех</span></td><td>самые большие траты на код: разговор о её последней задаче покажет, хватает ли текущего инструмента</td></tr><tr><td>Luis Moreno</td><td><span class="dif">≠</span> говорит «регулярно», по факту каждую неделю</td><td>уточнить: какие задачи он считает работой с AI</td></tr><tr><td>Pavel Novak</td><td><span class="dif">≠</span> «регулярно» при нуле токенов</td><td>уточнить: какими инструментами и для каких задач он пользуется</td></tr><tr><td>Mira Castellano</td><td><span class="at y">Не все вопросы</span></td><td>отправить одно уточнение: где в задаче пришлось доделывать вручную</td></tr><tr><td>Ben Ortiz</td><td><span class="at c">Жду ответа</span> · только Codex · $64</td><td>напомнить: без него группа «Только Codex» останется пустой</td></tr><tr><td>Sara Quinn</td><td><span class="at rd">Отказ</span></td><td>заменить по <a href="/blog/who-to-interview-before-buying-ai-tools/#teams">правилу замены</a>: следующий кандидат группы «Неактивные»</td></tr><tr><td>Elif Demir</td><td><span class="at n">В работе</span> · 7 активных проектов</td><td>назначить звонок, частоту со слов заполнить после разговора</td></tr></tbody></table></div><div class="sublabel" style="margin-top:22px">Со слов и по данным: что уточнить на интервью</div><div class="vs"><div class="h">Замер в интервью</div><div class="h">Пара в отчёте</div><div class="h">Если не совпало — уточнить</div><div><b>Как часто пользуется</b></div><div><a href="/blog/chatgpt-enterprise-usage-report/#depth">активность по неделям</a></div><div>какими инструментами и для каких задач человек пользуется</div><div><b>Основная задача</b></div><div><a href="/blog/chatgpt-enterprise-usage-report/#main-tool">основной инструмент</a></div><div>какие задачи человек считает работой с AI</div><div><b>Сколько задач закрывает</b></div><div><a href="/blog/chatgpt-enterprise-usage-report/#projects">число проектов</a></div><div>какие из проектов живые и для каких задач</div><div><b>Чем ещё пользуется</b></div><div><a href="/blog/chatgpt-enterprise-usage-report/#connectors">коннекторы</a></div><div>что это за инструменты и для каких задач — записать как способ решения</div><div><b>Сколько времени экономит</b></div><div>нет пары</div><div>только со слов</div></div><p class="cap">Границы данных: отчёт видит только корпоративный инструмент и только за 3 месяца. Личные аккаунты и другие инструменты в него не попадают, поэтому несовпадение — вопрос для уточнения, а не вывод.</p><div class="sublabel" style="margin-top:22px">Статусы 16 приглашённых</div><div class="sbar" aria-label="Распределение статусов"><div style="flex:9;background:var(--pg);color:var(--pg-i)">Успех · 9</div><div style="flex:2;background:var(--py);color:var(--py-i)">2</div><div style="flex:2;background:var(--pc);color:var(--pc-i)">2</div><div style="flex:2;background:var(--pn);color:var(--pn-i)">2</div><div style="flex:1;background:var(--pr);color:var(--pr-i)">1</div></div><div class="legend"><span><i style="background:var(--pg)"></i>Успех</span><span><i style="background:var(--py)"></i>Не все вопросы</span><span><i style="background:var(--pc)"></i>Жду ответа</span><span><i style="background:var(--pn)"></i>В работе</span><span><i style="background:var(--pr)"></i>Отказ</span></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>9 из 16 приглашённых дали интервью: доля «Успех» — 56%. У Pavel Novak частота со слов не совпала с отчётом.</div><div class="fg"><span class="fk">В общем случае</span>Одна строка на человека держит вместе данные отчёта, формат, сырой разговор и статус. По статусам видно, хватает ли людей: доля «Успех» среди приглашённых показывает, сколько приглашать, чтобы в каждой группе было нужное число интервью. Расхождение «со слов» и «по отчёту» — вопрос для уточнения: отчёт видит только корпоративный инструмент за 3 месяца.</div><div class="fa"><span class="fk">Что сделать</span>Обновляйте статус сразу после разговора. Держите в каждой группе нужное число интервью: при доле «Успех» 56% на два интервью в группе приглашайте четырёх человек. Всем со статусом «Не все вопросы» отправляйте одно уточнение.</div></div></section><section class="chapter" id="wording"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/></svg></span>Текстом: формулировки</h2><p class="why">В переписке и в анкете переспросить сложно, поэтому неудачный вопрос портит ответ без возможности исправить. Пять типичных ошибок:</p><div class="pairs"><div class="pr"><span class="tg">наводящий</span><div class="no">Насколько вам удобно пользоваться инструментом?</div><div class="yes">Опишите последнюю рабочую задачу, которая заняла у вас заметное время.</div></div><div class="pr"><span class="tg">провокационный</span><div class="no">Почему вы не пользуетесь инструментом, если компания за него платит?</div><div class="yes">Как вы сделали последнюю задачу такого типа? Какие варианты рассматривали?</div></div><div class="pr"><span class="tg">запрос функций</span><div class="no">Каких функций вам не хватает?</div><div class="yes">В какой момент последней задачи вам пришлось доделывать работу вручную?</div></div><div class="pr"><span class="tg">гипотетический</span><div class="no">Стали бы вы пользоваться чаще, если бы появился агент?</div><div class="yes">Что вы сделали в последний раз, когда результат вас не устроил?</div></div><div class="pr"><span class="tg">двойной</span><div class="no">Что вы делаете в инструменте и как часто?</div><div class="yes">Какую последнюю задачу вы делали с помощью AI?</div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Все пять исправленных вопросов спрашивают о прошлом эпизоде.</div><div class="fg"><span class="fk">В общем случае</span>Вопросы об удобстве, функциях и будущем собирают мнения. Решение о покупке опирается на то, что люди уже сделали, поэтому хороший вопрос спрашивает о конкретном прошлом случае.</div><div class="fa"><span class="fk">Что сделать</span>Перечитайте вопросы для переписки и анкеты и перепишите каждый вопрос со словами «удобно», «хотели бы», «каких функций» в вопрос о последней рабочей задаче.</div></div></section><section class="chapter" id="agent"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg></span>Заполнить таблицу через Claude Code</h2><p class="why">Всю таблицу можно поручить агенту: Claude Code или любой другой агент с поддержкой MCP подключается к Airtable и сам заводит строки, подтягивает данные отчёта и разбирает разговоры.</p><div class="pipe" aria-label="Агент заполняет таблицу"><span class="pn" style="--c:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg><a href="https://code.claude.com/docs" target="_blank" rel="noopener" style="color:inherit;text-decoration:none">Claude Code</a><small>Или любой агент с поддержкой MCP</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="pn" style="--c:var(--c-light)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3v5M15 3v5M6 8h12v3a6 6 0 0 1-12 0zM12 17v4"/></svg>Airtable MCP<small>Чтение и запись таблицы</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="pn" style="--c:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg>Airtable<small>Все поля и статусы</small></span></div><ul class="todo" style="margin-top:12px"><li><span class="box" aria-hidden="true"></span><div><b>Создать строки</b><span class="d">Из списка отобранных для интервью людей: имя, группа, статус</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Подтянуть данные отчёта</b><span class="d">Токены, $, активность, частота по отчёту</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Разобрать Notes</b><span class="d">Тем же промптом, что и в ChatGPT: поля, затруднения, частота со слов, цитаты</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Обновить статусы</b><span class="d">«Не все вопросы» (ответ неполный), если в разборе есть «нет данных»</span></div></li></ul><div class="srcs"><a href="https://support.airtable.com/docs/using-the-airtable-mcp-server" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg>Airtable MCP<small>Как подключить</small></a></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Агент заводит строки, подтягивает отчёт, разбирает Notes и обновляет статусы — четыре шага без ручного ввода.</div><div class="fg"><span class="fk">В общем случае</span>Через MCP агент работает с таблицей напрямую, и исследователю остаются разговоры и проверка выводов по цитатам. Один промпт разбора у агента и в ChatGPT делает строки сопоставимыми.</div><div class="fa"><span class="fk">Что сделать</span>Подключите Airtable MCP к Claude Code и начните с одной команды: «Создай строки для людей из списка со статусом „В работе“».</div></div></section><section class="chapter" id="form"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"/><path d="M8 8h8M8 12h8M8 16h5"/></svg></span>Анкета</h2><p class="why">Анкету составляют после интервью, когда понятно, какие задачи и затруднения встречаются. Её отправляют всей компании, чтобы узнать, насколько они распространены. Вопросы короткие, варианты ответа берут из разбора интервью.</p><ol class="qlist"><li><span class="qn" style="background:var(--c-proj)">1</span><div><b>Какие из этих задач вы делаете по работе?</b><span class="bl">выбор: задачи из интервью · другое — открытое поле</span><span class="bl">задачи</span></div></li><li><span class="qn" style="background:var(--c-proj)">2</span><div><b>Как часто вы делаете эти задачи?</b><span class="bl">выбор: каждый день · каждую неделю · реже · не делаю</span><span class="bl">частота задач</span></div></li><li><span class="qn" style="background:var(--c-proj)">3</span><div><b>Какими инструментами вы их делаете?</b><span class="bl">выбор: ChatGPT · Claude · Cursor · другой AI-инструмент · не использую AI</span><span class="bl">инструменты</span></div></li><li><span class="qn" style="background:var(--c-proj)">4</span><div><b>С какими затруднениями вы сталкиваетесь в этих задачах?</b><span class="bl">выбор: затруднения из интервью · не сталкиваюсь · другое — открытое поле</span><span class="bl">затруднения</span></div></li><li><span class="qn" style="background:var(--c-proj)">5</span><div><b>Как часто это затруднение мешает?</b><span class="bl">выбор: почти в каждой задаче · иногда · редко</span><span class="bl">частота затруднений</span></div></li><li><span class="qn" style="background:var(--c-proj)">6</span><div><b>Насколько это важно для результата?</b><span class="bl">выбор: сильно мешает · мешает · почти не мешает</span><span class="bl">важность последствий</span></div></li><li><span class="qn">7</span><div><b>Как вы сейчас обходите это затруднение?</b><span class="bl">открытое поле · не обхожу</span><span class="bl">обходные способы</span></div></li><li><span class="qn">8</span><div><b>Что ещё важно, но не вошло в вопросы?</b><span class="bl">открытое поле</span><span class="bl">неучтённое</span></div></li></ol><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Восемь коротких вопросов: шесть с вариантами из интервью и два открытых поля.</div><div class="fg"><span class="fk">В общем случае</span>Интервью показывает, какие задачи и затруднения бывают, анкета — у скольких людей они встречаются и насколько мешают. Варианты «не сталкиваюсь», «не использую AI» и открытое поле ловят то, чего на интервью не было.</div><div class="fa"><span class="fk">Что сделать</span>Соберите варианты ответа из разбора интервью и отправьте анкету всей компании. Посчитайте, какая доля людей сталкивается с каждым затруднением, как часто и насколько оно мешает. Эти доли — вход в <a href="/blog/chatgpt-enterprise-usage-report/#decision">процедуру решения</a> в отчёте.</div></div></section><section class="chapter" id="after"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18h6M10 21h4M12 3a6 6 0 0 0-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0 0 12 3z"/></svg></span>Анализ интервью: промпт разбора и сверка с данными отчёта</h2><ol class="steps"><li><span class="step-n">1</span><div><div class="step-t">Отдать текст из Notes в ChatGPT</div><div class="step-d">Одним и тем же промптом для всех интервью</div></div></li><li><span class="step-n">2</span><div><div class="step-t">Перенести ответ ChatGPT в строку человека</div><div class="step-d">Задача, контекст, выбранный способ, результат, затраты, ограничения, затруднения, частота со слов</div></div></li><li><span class="step-n">3</span><div><div class="step-t">Сгруппировать таблицу по затруднению</div><div class="step-d">Люди с одним и тем же затруднением окажутся рядом: видно, сколько их и из каких групп</div></div></li><li><span class="step-n">4</span><div><div class="step-t">Проверить анкетой</div><div class="step-d">Повторы становятся вариантами ответа в анкете на всю компанию; разбивку по командам сверяют с <a href="/blog/chatgpt-enterprise-usage-report/#uniformity">«Однородностью»</a></div></div></li></ol><h3 class="pr-h">Промпт для анализа интервью</h3><pre class="prompt">Ниже разговор с сотрудником о рабочих задачах.&#10;Верни строго по полям, только то, что человек сказал сам:&#10;1. Задача — последняя конкретная рабочая задача&#10;2. Контекст — для кого и зачем, какими средствами располагал&#10;3. Выбранный инструмент или способ и почему&#10;4. Результат&#10;5. Затраты — время и ручная доработка&#10;6. Ограничения — данные, доступ, безопасность&#10;7. Затруднения — категории из списка {категории из таблицы признаков отчёта} или «затруднений нет»; если не подходит ни одна — новая категория своими словами&#10;8. Частота со слов: каждую неделю / регулярно / изредка / не пользуется / неизвестно&#10;9. 1–2 дословные цитаты&#10;Если чего-то в разговоре нет — пиши «нет данных», не додумывай.&#10;&#10;{текст из Notes}</pre><div class="gauge" aria-label="Что делать с повтором"><div class="gg"><span>1 человек</span><div class="gbar"><i style="width:15%;background:var(--c-none)"></i></div><em>случай</em></div><div class="gg"><span>повторяется у нескольких</span><div class="gbar"><i style="width:45%;background:var(--c-light)"></i></div><em>проверить анкетой</em></div><div class="gg"><span>анкета подтвердила</span><div class="gbar"><i style="width:100%;background:var(--c-work)"></i></div><em>в процедуру решения</em></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Затруднение у одного человека — случай, повтор у нескольких — повод проверить анкетой.</div><div class="fg"><span class="fk">В общем случае</span>Разбор сохраняет всю задачу, а не только затруднение: без контекста, выбранного способа и затрат нельзя понять, нужен ли новый инструмент. Повтор на интервью показывает, что проверять, но не сколько людей с этим сталкивается: это покажет только анкета. Один промпт на все разговоры делает поля сопоставимыми, а «нет данных» не даёт ChatGPT додумывать.</div><div class="fa"><span class="fk">Что сделать</span>Когда разборов накопилось несколько, сгруппируйте таблицу по затруднению и перенесите повторы в варианты ответа <a href="#form">анкеты</a>. «Затруднений нет» записывайте как результат. Категории берите из <a href="/blog/chatgpt-enterprise-usage-report/#signs">таблицы признаков</a> отчёта и добавляйте новые, если ни одна не подошла. Решение о пилоте — по <a href="/blog/chatgpt-enterprise-usage-report/#decision">процедуре</a> из отчёта.</div></div><div class="sublabel" style="margin-top:22px">Частые вопросы</div><div class="qa"><div><h3>Как проанализировать интервью с помощью ChatGPT</h3><p>Текст разговора из поля Notes отдают в ChatGPT одним и тем же промптом для всех интервью. Ответ переносят в строку человека: задача, контекст, способ, результат, затраты, ограничения, затруднения, частота со слов. Затем таблицу группируют по затруднению.</p></div><div><h3>Можно ли поручить анализ интервью агенту</h3><p>Да. Claude Code или другой агент с поддержкой MCP подключается к Airtable, заводит строки, подтягивает данные отчёта и разбирает Notes тем же промптом. Исследователю остаются разговоры и проверка выводов по цитатам.</p></div><div><h3>Как сверить слова человека с данными</h3><p>В таблице два поля: частота со слов и частота по отчёту, рядом признак расхождения. Расхождения обсуждают с человеком, а не исправляют молча.</p></div><div><h3>Как анализировать звонки и переписку вместе</h3><p>Текст переписки копируют в то же поле Notes с датой и временем сообщений. Ответы из переписки помогают найти случаи и темы, но их не приравнивают к звонкам.</p></div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/chatgpt-enterprise-usage-report/"><div class="k">Отчёт</div><div class="t">Отчёт по ChatGPT Enterprise</div><div class="d">Кто пользуется, для каких задач и какие инструменты покупать дальше</div></a><a href="/blog/who-to-interview-before-buying-ai-tools/"><div class="k">Выборка</div><div class="t">Кого звать на интервью</div><div class="d">Кого звать на интервью</div></a></div></section><footer>Дизайн интервью сделан по рекомендациям <a href="https://t.me/Kseniya_Vasil" target="_blank" rel="noopener">@Kseniya_Vasil</a>. Все имена, команды и цифры в примерах вымышлены.</footer></div>]]></content:encoded></item>
<item><title>Отчёт по использованию ChatGPT Enterprise в компании: кто пользуется, для каких задач и какие AI-инструменты покупать дальше</title><link>https://www.urvanov.com/blog/chatgpt-enterprise-usage-report/</link><guid>https://www.urvanov.com/blog/chatgpt-enterprise-usage-report/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Как понять, как сотрудники используют ChatGPT Enterprise: пять выгрузок консоли администратора превращаются в глубину проникновения, однородность по командам, основные инструменты, карту задач, сверку данных и список людей для интервью.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-kto-ru"><p class="lead-a">ChatGPT Enterprise — версия ChatGPT для организаций с консолью администратора, где видно, кто и как пользуется инструментом. Этот отчёт строится из пяти выгрузок консоли и показывает глубину проникновения, однородность по командам, природу задач и людей для интервью. По нему решают, какие AI-инструменты закупать, кого обучать и какие предположения проверить.</p><div class="map" aria-label="Четыре направления анализа"><a class="dir" href="#layer1"><div class="dir-h"><span class="n">01</span><i style="background:var(--c-chat)"></i>Общая картина</div><div class="viz"><div class="fun"><div style="width:82%;background:var(--d-rare);color:var(--d-rare-t)">82%</div><div style="width:47%;background:var(--d-reg);color:var(--d-reg-t)">47%</div><div style="width:21%;background:var(--d-week);color:var(--d-week-t)">21%</div></div></div><div class="big">21%<small>Пользуются каждую неделю</small></div><div class="dec">Куда вкладывать обучение</div></a><a class="dir" href="#layer2"><div class="dir-h"><span class="n">02</span><i style="background:var(--c-work)"></i>Природа работы</div><div class="viz"><svg viewBox="0 0 120 120" width="104" height="104" aria-hidden="true"><circle cx="60" cy="60" r="44" fill="none" stroke="var(--c-work)" stroke-width="18"/><circle cx="60" cy="60" r="44" fill="none" stroke="var(--c-code)" stroke-width="18" stroke-dasharray="193.6 276.5" transform="rotate(-90 60 60)"/></svg></div><div class="big">70%<small>Подключений дают Slack и Notion</small></div><div class="dec">Какой инструмент покупать</div></a><a class="dir" href="#layer3"><div class="dir-h"><span class="n">03</span><i style="background:var(--c-code)"></i>Проверка</div><div class="viz"><div class="chk"><div class="csv"><span style="background:var(--c-chat)">CHAT</span><span style="background:var(--c-work)">WORK</span><span style="background:var(--c-code)">CODEX</span></div><span class="eq">=</span><span class="ok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg></span></div></div><div class="big">±2%<small>Допуск сверки выгрузок</small></div><div class="dec">Можно ли верить цифрам</div></a><a class="dir" href="#layer4"><div class="dir-h"><span class="n">04</span><i style="background:var(--c-proj)"></i>Отбор людей</div><div class="viz"><div class="dots" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on"></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div><div class="big">16<small>Из 340 в примере — на интервью</small></div><div class="dec">С кем говорить до покупки</div></a></div><section class="chapter" id="why"><h2>Какие решения поможет принять отчёт</h2><p class="lead"><b>Бизнес-задача:</b> определить, для каких рабочих задач текущего набора AI-инструментов недостаточно и какие решения стоит проверить перед закупкой. Решение принимает владелец бюджета на AI-инструменты вместе с руководителями команд, где пройдёт пилот. Доступ к данным и безопасность согласует служба информационной безопасности. Критерии решения — признаки из таблицы ниже.</p><p>То, что текущий набор где-то неоптимален, — предположение: отчёт и интервью его проверяют. «Неоптимально» раскладывается на проверяемые признаки. Вывод «новый инструмент не нужен» — тоже результат.</p><div class="tbl" id="signs"><table><thead><tr><th>Признак</th><th>Как проявляется</th><th>Категория на интервью</th><th>Где видно в отчёте</th></tr></thead><tbody><tr><td>Качество результата</td><td>ответы неточные или выдуманные</td><td><span class="tag no">галлюцинации</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#connectors">Коннекторы</a></td></tr><tr><td>Время и ручная доработка</td><td>много переписки, результат доделывают руками</td><td><span class="tag no">промпт</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#depth">Глубина</a>, <a href="/blog/chatgpt-enterprise-usage-report/#main-tool">Основной инструмент</a></td></tr><tr><td>Воспроизводимость</td><td>на одной задаче каждый раз другой результат</td><td><span class="tag no">воспроизводимость</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#skills">Навыки</a>, <a href="/blog/chatgpt-enterprise-usage-report/#projects">Темы проектов</a></td></tr><tr><td>Масштаб</td><td>удачный сценарий не переносится в другую команду</td><td><span class="tag no">масштаб</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#uniformity">Однородность</a></td></tr><tr><td>Доступ к данным</td><td>нужная система не подключена</td><td><span class="tag no">доступ к данным</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#connectors">Коннекторы</a></td></tr><tr><td>Стоимость</td><td>дорого на единицу результата</td><td><span class="tag no">стоимость</span></td><td><a href="/blog/chatgpt-enterprise-usage-report/#top-spend">Топ по расходам</a></td></tr></tbody></table></div><p class="cap">Границы данных: отчёт видит только корпоративный инструмент и только за период выгрузки, 3 месяца. Личные аккаунты и другие инструменты в него не попадают.</p><h3 id="decision" style="margin-top:22px">Как ответы превращаются в решение о закупке</h3><p class="why">Отчёт показывает, где искать, а решение о закупке принимают только после этих пяти шагов, чтобы деньги ушли на задачу, которая есть у многих и которую сейчас нечем закрыть.</p><ol class="steps"><li><span class="step-n">1</span><div><div class="step-t">Интервью</div><div class="step-d">Какие задачи и затруднения бывают и как их сейчас обходят</div></div></li><li><span class="step-n">2</span><div><div class="step-t">Анкета на всю компанию</div><div class="step-d">У скольких людей затруднение, как часто и насколько мешает</div></div></li><li><span class="step-n">3</span><div><div class="step-t">Сопоставить</div><div class="step-d">Масштаб задачи, тяжесть последствий, обходные способы, стоимость решения</div></div></li><li><span class="step-n">4</span><div><div class="step-t">Проверить инструменты</div><div class="step-d">Перспективные варианты — на реальных задачах вместе с сотрудниками</div></div></li><li><span class="step-n">5</span><div><div class="step-t">Решение</div><div class="step-d">Владелец бюджета решает по шести <a href="#signs">признакам выше</a> — качество, время и доработка, воспроизводимость, масштаб, доступ к данным, стоимость; «новый инструмент не нужен» — допустимый итог</div></div></li></ol><div class="io"><div><div class="k">Вход</div><div class="v">Выгрузки консоли: сообщения, траты, проекты, коннекторы по каждому человеку</div></div><div><div class="k">Что делает отчёт</div><div class="v">Превращает выгрузки в сегменты, зрелость команд и конкретных людей — материал для решения</div></div><div><div class="k">Решения на выходе</div><div class="v">Какой инструмент пилотировать, для какой команды, с кем говорить перед покупкой, куда не нужно тратить бюджет</div></div></div></section><section class="chapter" id="order"><h2>Порядок работы</h2><p>Пять шагов от выгрузки до готового списка людей.</p><ol class="steps"><li><span class="step-n">1</span><div><div class="step-t">Выгрузить данные</div><div class="step-d">Пользователи, таблица лидеров, проекты, обзор и задачи — CSV из консоли администратора</div></div></li><li><span class="step-n">2</span><div><div class="step-t">Собрать общую картину</div><div class="step-d">Глубина проникновения, однородность по командам, основной инструмент, сегменты</div></div></li><li><span class="step-n">3</span><div><div class="step-t">Разметить природу работы</div><div class="step-d">Какие задачи решают, какими встроенными инструментами, с какими интеграциями</div></div></li><li><span class="step-n">4</span><div><div class="step-t">Сверить с сырыми данными</div><div class="step-d">Проверить каждую сводку по исходной выгрузке</div></div></li><li><span class="step-n">5</span><div><div class="step-t">Выбрать людей и сделать выводы</div><div class="step-d">Список для интервью и вопросы, которые на них проверить</div><div class="step-l"><a href="/blog/who-to-interview-before-buying-ai-tools/">Кого звать на интервью <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a><a href="/blog/ai-interviews-without-leading-questions/">Как провести интервью <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a></div></div></li></ol></section><section class="chapter" id="data"><h2>Что видит администратор ChatGPT Enterprise: откуда брать данные</h2><p>Всё строится из пяти разделов одной консоли администратора <a href="https://openai.com/chatgpt/enterprise/" target="_blank" rel="noopener">ChatGPT Enterprise</a>. Наведите на <b>i</b>, чтобы увидеть, что лежит в каждом разделе.</p><h3 class="pr-h">Как выгрузить данные из консоли ChatGPT Enterprise: вручную и браузерным агентом Claude in Chrome</h3><div class="howto"><b>Как выгружать.</b> API у консоли есть, но покрывает не всё: <a href="https://learn.chatgpt.com/docs/enterprise/analytics-api" target="_blank" rel="noopener">аналитика Codex</a>, стоимость по кредитам и переписки для аудита. Выгрузки пользователей, проектов, навыков и таблицу лидеров по продуктам проще собрать в интерфейсе. Выгрузку удобно поручить <a href="https://claude.com/claude-in-chrome" target="_blank" rel="noopener">Claude in Chrome</a>: он открывает нужный раздел, ставит фильтр, нажимает экспорт и сохраняет CSV. Каждый шаг виден на экране, так что ошибку в фильтре или разделе видно сразу, до того как цифры попадут в отчёт.<div class="howto-w"><span class="howto-wi"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 3v6c0 4.5-3.4 8.3-8 9-4.6-.7-8-4.5-8-9V6z"/><path d="M12 8v5M12 16h.01"/></svg></span><span><b>Доступ.</b> API консоли доступен не всегда: политики безопасности компании часто ограничивают ключи администратора. Тогда все разделы выгружают через интерфейс.</span></div></div><div class="sources"><div class="src"><div class="src-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16 19v-1a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v1"/><circle cx="9" cy="7" r="3.5"/><path d="M22 19v-1a4 4 0 0 0-3-3.9"/><path d="M16 3.3a3.5 3.5 0 0 1 0 6.9"/></svg></div><div><div class="src-name"><a href="https://chatgpt.com/admin/usage/users" target="_blank" rel="noopener">Пользователи</a></div><div class="src-path">chatgpt.com/admin/usage/users</div><div class="src-what">Сообщения, даты активности и встроенные инструменты каждого человека</div></div><span class="tip" tabindex="0" aria-label="Что внутри раздела Пользователи">i<span class="tip-body" role="tooltip"><span class="pl">Что внутри</span>Экспорт CSV за период до 12 месяцев. Поля: messages, tool_messages, gpt_messages, project_messages, department, groups, seat_type, last_day_active. Консоль сама отмечает «опытных пользователей» бейджем.</span></span></div><div class="src"><div class="src-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 21h8M12 17v4M7 4h10v5a5 5 0 0 1-10 0z"/><path d="M17 5h3v2a3 3 0 0 1-3 3M7 5H4v2a3 3 0 0 0 3 3"/></svg></div><div><div class="src-name"><a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a></div><div class="src-path">admin.openai.com → Аналитика → Таблица лидеров</div><div class="src-what">Траты, токены и строки кода по каждому человеку, отдельно для продуктов Chat, Work и Codex</div></div><span class="tip" tabindex="0" aria-label="Что внутри Таблицы лидеров">i<span class="tip-body" role="tooltip"><span class="pl">Что внутри</span>Кнопка экспорта рядом с заголовком → «Рейтинг пользователей», CSV или JSON. Поля: Name, Email, Credits, Estimated costs, Tokens, Lines of code. Фильтр «Продукт» меняет содержимое выгрузки. История — около 120 дней.</span></span></div><div class="src"><div class="src-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg></div><div><div class="src-name"><a href="https://chatgpt.com/admin/usage/projects" target="_blank" rel="noopener">Проекты</a></div><div class="src-path">chatgpt.com/admin/usage/projects</div><div class="src-what">Кто создал проект, сколько в нём сообщений и активен ли он</div></div><span class="tip" tabindex="0" aria-label="Что внутри раздела Проекты">i<span class="tip-body" role="tooltip"><span class="pl">Что внутри</span>Поля: project_name, project_creator_email, messages_workspace, unique_messagers_workspace, is_active. Часть названий приходит как [content redacted]: консоль скрывает их сама.</span></span></div><div class="src"><div class="src-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 2v5M15 2v5M6 7h12v4a6 6 0 0 1-12 0z"/><path d="M12 17v5"/></svg></div><div><div class="src-name"><a href="https://chatgpt.com/admin/usage" target="_blank" rel="noopener">Обзор: коннекторы и навыки</a></div><div class="src-path">chatgpt.com/admin/usage</div><div class="src-what">К каким приложениям подключают ассистента и какие навыки используют</div></div><span class="tip" tabindex="0" aria-label="Что внутри раздела Обзор">i<span class="tip-body" role="tooltip"><span class="pl">Что внутри</span>Блоки «Взаимодействия с приложениями» и «Навыки»: число обращений к каждому коннектору и навыку за выбранный период.</span></span></div><div class="src"><div class="src-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v18h18"/><path d="M7 15l4-4 3 3 5-6"/></svg></div><div><div class="src-name"><a href="https://admin.openai.com" target="_blank" rel="noopener">Аналитика: задачи</a></div><div class="src-path">admin.openai.com → Аналитика → Задачи</div><div class="src-what">Собственная классификация задач консоли: код или работа со знаниями</div></div><span class="tip" tabindex="0" aria-label="Что внутри вкладки Задачи">i<span class="tip-body" role="tooltip"><span class="pl">Что внутри</span>Доля кода и работы со знаниями, топ задач по кредитам. Задачи размечает модель OpenAI по выборке около 10% запросов за 30 дней.</span></span></div></div></section><section class="chapter" id="layer1"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg></span>Общая картина</h2><p>Дальше идут четыре раздела самого отчёта, у каждого указана его задача. <b>Задача:</b> показать, какие группы людей есть в компании и насколько они большие.</p><div class="block"><h3 id="depth">Глубина проникновения</h3><div class="dp"><svg class="dp-v" style="color:var(--d-rare)" viewBox="0 0 200 72" role="img" aria-label="Пользовались хоть раз: одна неделя из восьми" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="60" cy="18" r="6"/><path d="M50 38c0-7 4.5-11 10-11s10 4 10 11"/></g><path d="M80 24H120" stroke-dasharray="4 5"/><rect x="129" y="13" width="22" height="22" rx="6"/><path d="M140 13v-4"/><circle cx="136" cy="23" r="1.6" fill="currentColor"/><circle cx="144" cy="23" r="1.6" fill="currentColor"/><path d="M136 29h8"/><rect x="24" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="44" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="64" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="84" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="104" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="124" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="144" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="164" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/></svg><svg class="dp-v" style="color:var(--d-reg)" viewBox="0 0 200 72" role="img" aria-label="Регулярно: несколько недель из восьми" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="60" cy="18" r="6"/><path d="M50 38c0-7 4.5-11 10-11s10 4 10 11"/></g><path d="M80 24H120" stroke-dasharray="4 5"/><rect x="129" y="13" width="22" height="22" rx="6"/><path d="M140 13v-4"/><circle cx="136" cy="23" r="1.6" fill="currentColor"/><circle cx="144" cy="23" r="1.6" fill="currentColor"/><path d="M136 29h8"/><rect x="24" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="44" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="64" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="84" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="104" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/><rect x="124" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="144" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="164" y="52" width="14" height="14" rx="3" stroke-opacity=".35"/></svg><svg class="dp-v" style="color:var(--d-week)" viewBox="0 0 200 72" role="img" aria-label="Каждую неделю: все восемь недель" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="60" cy="18" r="6"/><path d="M50 38c0-7 4.5-11 10-11s10 4 10 11"/></g><path d="M80 24H120" /><rect x="129" y="13" width="22" height="22" rx="6"/><path d="M140 13v-4"/><circle cx="136" cy="23" r="1.6" fill="currentColor"/><circle cx="144" cy="23" r="1.6" fill="currentColor"/><path d="M136 29h8"/><rect x="24" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="44" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="64" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="84" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="104" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="124" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="144" y="52" width="14" height="14" rx="3" fill="currentColor"/><rect x="164" y="52" width="14" height="14" rx="3" fill="currentColor"/></svg></div><p class="why">Глубина проникновения показывает, насколько глубоко инструмент вошёл в работу компании: сколько людей пользуются хоть раз, регулярно и каждую неделю. Отдельно выделены те, кто не пишет в чат, а работает только через Codex. <b>Решение:</b> в какую группу вкладывать обучение и стоит ли сейчас покупать новые лицензии.</p><div class="stack"><div class="seg" style="width:20.9%;background:var(--d-week);color:var(--d-week-t)">71</div><div class="seg" style="width:25.9%;background:var(--d-reg);color:var(--d-reg-t)">88</div><div class="seg" style="width:28.5%;background:var(--d-rare);color:var(--d-rare-t)">97</div><div class="seg" style="width:6.8%;background:var(--d-api);color:var(--d-api-t)">23</div><div class="seg" style="width:17.9%;background:var(--d-none);color:var(--d-none-t)">61</div></div><div class="legend"><span><i style="background:var(--d-week)"></i>каждую неделю</span><span><i style="background:var(--d-reg)"></i>регулярно</span><span><i style="background:var(--d-rare)"></i>изредка</span><span><i style="background:var(--d-api)"></i>только Codex</span><span><i style="background:var(--d-none)"></i>полностью неактивны</span></div><p class="cap">340 человек</p><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage/users" target="_blank" rel="noopener">Пользователи</a> · <a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a> для тех, кто работает только через Codex</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Инструмент попробовали 82% людей, в работу он вошёл у 47%, привычкой каждую неделю стал у 21%. Резерв глубины — 97 человек в группе «изредка».</div><div class="fg"><span class="fk">В общем случае</span>Разрыв между «попробовали» и «пользуются каждую неделю» показывает, сколько людей остановились после первых попыток. Ориентир массового освоения — 50–70% сотрудников в ежедневной работе. Пока до этого ориентира далеко, новые лицензии рост не дадут: людям мешает что-то кроме доступа.</div><div class="fa"><span class="fk">Что сделать</span>Вкладывайте обучение в самую большую группу между «попробовали» и «каждую неделю»: она быстрее всего даёт рост регулярного использования. Пересчитывайте разбивку после обучения, чтобы видеть, куда сдвинулись люди.</div></div><div class="note"><span class="note-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4h11l-1.5 4L16 12H5"/></svg></span><div><b>Важно.</b> Выберите из группы «изредка» 5–10 человек, на интервью узнайте, как они сейчас решают свои задачи, и проведите для них разбор рабочих кейсов. После разбора пересчитайте долю «каждую неделю». Как спрашивать, не подсказывая ответ, — в статье <a href="/blog/ai-interviews-without-leading-questions/">«Как провести интервью о работе с AI»</a>.</div></div></div><div class="block"><h3 id="uniformity">Однородность</h3><div class="dp" style="grid-template-columns:1fr"><svg class="dp-v" style="color:var(--accent);max-height:120px" viewBox="0 0 310 72" role="img" aria-label="Команды делятся на три группы: сильные A и B, средняя C, отстающие D и E; сценарии идут от сильных к отстающим" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8"><rect x="6" y="8" width="94" height="38" rx="5" stroke="var(--line-2)"/><circle cx="15.0" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="23.4" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="31.8" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="40.2" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="48.6" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="57.0" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="65.4" cy="20" r="3" fill="var(--d-week)" stroke="none"/><circle cx="73.8" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="82.2" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="90.6" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="15.0" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="23.4" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="31.8" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="40.2" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="48.6" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="57.0" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="65.4" cy="34" r="3" fill="var(--d-week)" stroke="none"/><circle cx="73.8" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="82.2" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="90.6" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><rect x="108" y="8" width="94" height="24" rx="5" stroke="var(--line-2)"/><circle cx="117.0" cy="20" r="3" fill="var(--d-reg)" stroke="none"/><circle cx="125.4" cy="20" r="3" fill="var(--d-reg)" stroke="none"/><circle cx="133.8" cy="20" r="3" fill="var(--d-reg)" stroke="none"/><circle cx="142.2" cy="20" r="3" fill="var(--d-reg)" stroke="none"/><circle cx="150.6" cy="20" r="3" fill="var(--d-reg)" stroke="none"/><circle cx="159.0" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="167.4" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="175.8" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="184.2" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="192.6" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><rect x="210" y="8" width="94" height="38" rx="5" stroke="var(--line-2)"/><circle cx="219.0" cy="20" r="3" fill="var(--d-rare)" stroke="none"/><circle cx="227.4" cy="20" r="3" fill="var(--d-rare)" stroke="none"/><circle cx="235.8" cy="20" r="3" fill="var(--d-rare)" stroke="none"/><circle cx="244.2" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="252.6" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="261.0" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="269.4" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="277.8" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="286.2" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="294.6" cy="20" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="219.0" cy="34" r="3" fill="var(--d-rare)" stroke="none"/><circle cx="227.4" cy="34" r="3" fill="var(--d-rare)" stroke="none"/><circle cx="235.8" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="244.2" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="252.6" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="261.0" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="269.4" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="277.8" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="286.2" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><circle cx="294.6" cy="34" r="3" stroke="var(--line-2)" stroke-width="1.2"/><path d="M53 46C90 76 216 76 257 46" stroke="currentColor"/><path d="M251 44l6 2-2 6" stroke="currentColor"/></svg></div><p class="why">Однородность показывает, насколько равномерно инструмент вошёл в разные команды: какая доля каждой команды пользуется им регулярно и сколько в среднем пишет один человек. <b>Решение:</b> из какой команды брать работающие сценарии и в какую нести их в первую очередь.</p><div class="tbl"><table><thead><tr><th>Команда</th><th>Регулярно пользуются</th><th class="r">%</th><th class="r">Сообщ. на человека</th></tr></thead><tbody><tr class="grp"><td colspan="4"><i style="background:var(--d-week)"></i>Сильные · источник сценариев</td></tr><tr><td>Команда A</td><td><div class="dbar"><span style="width:74%"></span></div></td><td class="r">74%</td><td class="r">1 120</td></tr><tr><td>Команда B</td><td><div class="dbar"><span style="width:66%"></span></div></td><td class="r">66%</td><td class="r">870</td></tr><tr class="grp"><td colspan="4"><i style="background:var(--d-reg)"></i>Середина</td></tr><tr><td>Команда C</td><td><div class="dbar"><span style="width:51%"></span></div></td><td class="r">51%</td><td class="r">720</td></tr><tr class="grp"><td colspan="4"><i style="background:var(--d-rare)"></i>Отстающие · куда нести сценарии</td></tr><tr><td>Команда D</td><td><div class="dbar"><span style="width:34%"></span></div></td><td class="r">34%</td><td class="r">530</td></tr><tr><td>Команда E</td><td><div class="dbar"><span style="width:18%"></span></div></td><td class="r">18%</td><td class="r">290</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage/users" target="_blank" rel="noopener">Пользователи</a> · поля department и groups</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>В команде A регулярно пользуются 74% людей, в команде E — 18%: разброс 56 процентных пунктов.</div><div class="fg"><span class="fk">В общем случае</span>Большой разброс между командами значит, что работающие сценарии уже есть, но живут в одной-двух командах: их выгоднее перенести, чем покупать новое. Равномерно низкая доля по всем командам указывает на общий барьер: доступ, обучение или неподходящие задачи. Равномерно высокая — инструмент прижился, можно переходить к следующему шагу. Команде с барьерами новый инструмент покупать рано.</div><div class="fa"><span class="fk">Что сделать</span>При большом разбросе проведите митап: самая сильная команда показывает три своих сценария двум самым слабым. До митапа проведите в самой слабой команде 2–3 интервью о барьерах. После митапа пересчитайте разброс: он должен сократиться.</div></div></div><div class="block"><h3 id="main-tool">Основной инструмент</h3><p class="why">На какой из трёх инструментов у человека уходит больше половины трат за три месяца. Тип инструмента показывает, как человек работает с AI.</p><div class="tt"><div class="tt-c" style="--c:var(--c-chat)"><div class="tt-h"><span class="tt-n">1</span><a href="https://openai.com/chatgpt/enterprise/" target="_blank" rel="noopener">Chat</a></div><svg class="tt-v" viewBox="0 0 200 58" role="img" aria-label="Человек много раз переписывается с чатом, результат непонятный и может быть выдуман" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="16" cy="24" r="6"/><path d="M6 44c0-7 4.5-11 10-11s10 4 10 11"/></g><path d="M32 18H92M87 14l5 4-5 4"/><path d="M92 30H32M37 26l-5 4--5 4"/><path d="M32 42H92M87 38l5 4-5 4"/><rect x="101" y="21" width="22" height="22" rx="6"/><path d="M112 21v-4"/><circle cx="108" cy="31" r="1.6" fill="currentColor"/><circle cx="116" cy="31" r="1.6" fill="currentColor"/><path d="M108 37h8"/><path d="M128 32H146M141 28l5 4-5 4"/><g><path d="M154 42a8 8 0 0 1 1-16 11 11 0 0 1 21-3 8 8 0 0 1 4 19z"/><path d="M163.5 28a3.5 3.5 0 1 1 5 3.2c-1 .5-1.5 1.2-1.5 2.3M167 37.5h.01"/></g></svg><div class="tt-ps" role="list" aria-label="Проблемы"><span role="listitem" class="tt-pc on" title="много сообщений на одну задачу; «переспрашиваю по много раз»" aria-label="Промпт: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Промпт</span><span role="listitem" class="tt-pc on" title="подключений к приложениям мало; «всё приходится перепроверять»" aria-label="Галлюцинации: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Галлюцинации</span><span role="listitem" class="tt-pc on" title="одни и те же задачи без проектов и навыков; «каждый раз получается по-разному»" aria-label="Воспроизводимость: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Воспроизводимость</span><span role="listitem" class="tt-pc on" title="навыки собирают в одной команде; «у соседей так не получается»" aria-label="Масштаб: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Масштаб</span></div></div><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><div class="tt-c" style="--c:var(--c-work)"><div class="tt-h"><span class="tt-n">2</span><a href="https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex" target="_blank" rel="noopener">Work</a></div><svg class="tt-v" viewBox="0 0 200 58" role="img" aria-label="Человек ставит одну цель, агент берёт данные из приложений, но документы от раза к разу разные" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="14" cy="24" r="6"/><path d="M4 44c0-7 4.5-11 10-11s10 4 10 11"/></g><path d="M28 32H58M53 28l5 4-5 4"/><rect x="69" y="21" width="22" height="22" rx="6"/><path d="M80 21v-4"/><circle cx="76" cy="31" r="1.6" fill="currentColor"/><circle cx="84" cy="31" r="1.6" fill="currentColor"/><path d="M76 37h8"/><rect x="61" y="1" width="9" height="8" rx="2"/><rect x="75.5" y="1" width="9" height="8" rx="2"/><rect x="90" y="1" width="9" height="8" rx="2"/><path d="M65.5 9l8.5 12M80 9v12M94.5 9l-8.5 12" stroke-dasharray="2 3"/><path d="M96 32H116M111 28l5 4-5 4"/><path d="M120 16h14l6 6v24h-20z"/><path d="M134 16v6h6M124 30h12M124 35h12M124 40h8"/><path d="M146 29h8M146 35h8M152 25l-4 14"/><path d="M160 16h14l6 6v24h-20z"/><path d="M174 16v6h6M164 28h7M164 33h12M164 38h5M164 42h10"/></svg><div class="tt-ps" role="list" aria-label="Проблемы"><span role="listitem" class="tt-pc" title="много сообщений на одну задачу; «переспрашиваю по много раз»" aria-label="Промпт: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Промпт</span><span role="listitem" class="tt-pc" title="подключений к приложениям мало; «всё приходится перепроверять»" aria-label="Галлюцинации: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Галлюцинации</span><span role="listitem" class="tt-pc on" title="одни и те же задачи без проектов и навыков; «каждый раз получается по-разному»" aria-label="Воспроизводимость: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Воспроизводимость</span><span role="listitem" class="tt-pc on" title="навыки собирают в одной команде; «у соседей так не получается»" aria-label="Масштаб: есть"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M7 7l10 10M17 7L7 17"/></svg>Масштаб</span></div></div><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><div class="tt-c" style="--c:var(--c-code)"><div class="tt-h"><span class="tt-n">3</span><a href="https://openai.com/codex/" target="_blank" rel="noopener">Codex</a></div><svg class="tt-v" viewBox="0 0 200 58" role="img" aria-label="По спеке и правилам агент выдаёт одинаковый результат для нескольких команд" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="14" width="24" height="32" rx="3"/><path d="M8 22l2 2 3-3M17 23h7M8 30l2 2 3-3M17 31h7M8 38l2 2 3-3M17 39h7"/><path d="M32 32H52M47 28l5 4-5 4"/><rect x="59" y="21" width="22" height="22" rx="6"/><path d="M70 21v-4"/><circle cx="66" cy="31" r="1.6" fill="currentColor"/><circle cx="74" cy="31" r="1.6" fill="currentColor"/><path d="M66 37h8"/><path d="M86 32C108 32 116 12 144 12M86 32H144M86 32C108 32 116 52 144 52"/><rect x="148" y="6" width="30" height="12" rx="2"/><path d="M159 9l-3 3 3 3M167 9l3 3-3 3"/><rect x="148" y="26" width="30" height="12" rx="2"/><path d="M159 29l-3 3 3 3M167 29l3 3-3 3"/><rect x="148" y="46" width="30" height="12" rx="2"/><path d="M159 49l-3 3 3 3M167 49l3 3-3 3"/></svg><div class="tt-ps" role="list" aria-label="Проблемы"><span role="listitem" class="tt-pc" title="много сообщений на одну задачу; «переспрашиваю по много раз»" aria-label="Промпт: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Промпт</span><span role="listitem" class="tt-pc" title="подключений к приложениям мало; «всё приходится перепроверять»" aria-label="Галлюцинации: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Галлюцинации</span><span role="listitem" class="tt-pc" title="одни и те же задачи без проектов и навыков; «каждый раз получается по-разному»" aria-label="Воспроизводимость: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Воспроизводимость</span><span role="listitem" class="tt-pc" title="навыки собирают в одной команде; «у соседей так не получается»" aria-label="Масштаб: снята"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Масштаб</span></div></div></div><div class="stack"><div class="seg" style="width:48.2%;background:var(--c-chat)">164 · Chat</div><div class="seg" style="width:13.8%;background:var(--c-work)">47 · Work</div><div class="seg" style="width:11.2%;background:var(--c-code)">38 · Codex</div><div class="seg dark" style="width:26.8%;background:var(--c-none)">91 · без трат</div></div><p class="cap">340 человек, окно 3 месяца</p><p class="cap src-cap">Источник: <a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a> · три выгрузки: фильтр «Продукт» = Chat, Work, Codex</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Chat — основной продукт у 164 человек из 340, Codex — у 38, Work — у 47.</div><div class="fg"><span class="fk">В общем случае</span>Основной инструмент показывает тип работы: разговор, поручение агенту или код. От него зависит, что человеку нужно дальше и в какой пилот его брать. Размер группы задаёт размер пилота: для частого сценария пилот широкий, для редкого — узкий.</div><div class="fa"><span class="fk">Что сделать</span>Решение — переводить каждую группу на следующий шаг. Группе Chat — Work с коннекторами и MCP к рабочим данным: уходят промпты и галлюцинации. Группе Work — спеки, настройка харнесса и общие скиллы: результат становится воспроизводимым и переносится в другие команды.</div></div></div><div class="block"><h3 id="top-spend">Топ по расходам</h3><div class="dp"><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 200 72" role="img" aria-label="Основные траты приходятся на нескольких людей" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="22" y="12" width="10" height="52" rx="2" fill="currentColor"/><rect x="38" y="18" width="10" height="46" rx="2" fill="currentColor"/><rect x="54" y="50" width="10" height="14" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="70" y="53" width="10" height="11" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="86" y="55" width="10" height="9" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="102" y="56" width="10" height="8" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="118" y="57" width="10" height="7" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="134" y="58" width="10" height="6" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="150" y="59" width="10" height="5" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><rect x="166" y="60" width="10" height="4" rx="2" stroke="var(--line-2)" fill="var(--line-2)"/><path d="M16 64h170" stroke="var(--line-2)"/></svg><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 200 72" role="img" aria-label="Опытный пользователь делится сценариями с несколькими коллегами" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="currentColor"><circle cx="40" cy="24" r="8"/><path d="M27.2 49.6c0-8.8 6.0-14.4 12.8-14.4s12.8 5.6 12.8 14.4"/></g><path d="M40 8l2 4 4 .5-3 3 .8 4-3.8-2-3.8 2 .8-4-3-3 4-.5z" fill="currentColor" stroke="none" transform="translate(0,-6) scale(1)"/><path d="M62 36C92 36 100 14 128 14M62 36H128M62 36C92 36 100 58 128 58"/><g stroke="var(--ink-2)"><circle cx="150" cy="7" r="4"/><path d="M143.6 19.8c0-4.4 3.0-7.2 6.4-7.2s6.4 2.8 6.4 7.2"/></g><g stroke="var(--ink-2)"><circle cx="150" cy="29" r="4"/><path d="M143.6 41.8c0-4.4 3.0-7.2 6.4-7.2s6.4 2.8 6.4 7.2"/></g><g stroke="var(--ink-2)"><circle cx="150" cy="51" r="4"/><path d="M143.6 63.8c0-4.4 3.0-7.2 6.4-7.2s6.4 2.8 6.4 7.2"/></g></svg><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 200 72" role="img" aria-label="Эксперимент сократил время на задачу, практику переняли все" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="14" y="20" width="84" height="10" rx="3" fill="var(--line-2)" stroke="none"/><rect x="14" y="42" width="34" height="10" rx="3" fill="currentColor" stroke="none"/><path d="M108 36h20M123 31l5 5-5 5"/><g stroke="var(--ink-2)"><circle cx="146" cy="34" r="5"/><path d="M138.0 50.0c0-5.5 3.8-9.0 8.0-9.0s8.0 3.5 8.0 9.0"/></g><path d="M142 17l3 3 5-6"/><g stroke="var(--ink-2)"><circle cx="166" cy="34" r="5"/><path d="M158.0 50.0c0-5.5 3.8-9.0 8.0-9.0s8.0 3.5 8.0 9.0"/></g><path d="M162 17l3 3 5-6"/><g stroke="var(--ink-2)"><circle cx="186" cy="34" r="5"/><path d="M178.0 50.0c0-5.5 3.8-9.0 8.0-9.0s8.0 3.5 8.0 9.0"/></g><path d="M182 17l3 3 5-6"/></svg></div><p class="why">Топ ранжирует людей по сумме, потраченной на конкретный продукт, например на Codex. Так в топ попадает и тот, кто тратит на Codex много, хотя основная часть его трат уходит на Chat.</p><div class="tbl"><table><thead><tr><th>Человек</th><th>Команда</th><th class="r">$ на код / 3 мес</th><th class="r">Токены / 3 мес</th><th class="r">Токенов на $</th></tr></thead><tbody><tr><td>Hana Sato</td><td>Команда C</td><td class="r">438,20</td><td class="r">21,9 млн</td><td class="r">50 тыс.</td></tr><tr><td>Luis Moreno</td><td>Команда A</td><td class="r">395,60</td><td class="r">12,7 млн</td><td class="r">32 тыс.</td></tr><tr><td>Ada Kowalski</td><td>Команда D</td><td class="r">84,30</td><td class="r">4,3 млн</td><td class="r">51 тыс.</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a> · одна выгрузка на каждый продукт</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Hana Sato и Luis Moreno тратят на код примерно в пять раз больше третьего в списке. При близких тратах Hana получает на каждый доллар в полтора раза больше токенов, чем Luis.</div><div class="fg"><span class="fk">В общем случае</span>Люди из топа — агенты изменений: они первыми находят рабочие сценарии, и их опыт влияет на то, окупится ли специализированный инструмент. Рядом с ними есть более осторожные коллеги: им нужно больше времени и живой пример на своих задачах. Ранжирование по доле трат прячет агентов изменений, поэтому смотрите на абсолютную сумму.</div><div class="fa"><span class="fk">Что сделать</span>Вовлеките людей из топа как менторов: пусть покажут свои сценарии коллегам, которые только начинают, на задачах этих коллег. Осторожных приглашайте через примеры и результаты, без требований. Двум-трём первым из топа предложите эксперимент в специализированном инструменте с отчётом «до и после».</div></div><div class="note"><span class="note-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg></span><div>В таблице лидеров есть и траты, и токены. Сравнивайте соотношение токенов к тратам внутри одной группы: один продукт и похожие задачи. У кого на доллар приходится заметно больше токенов, тот обычно лучше подбирает модели и режимы работы. Это самые продвинутые и эффективные пользователи, их стоит звать менторами в первую очередь. Познакомьте их с коллегами из той же группы, у кого соотношение ниже: разбор одной задачи вдвоём часто даёт больше общего тренинга. Пары из разных команд дают кросс-опыление: удачные приёмы переходят между командами.</div></div><div class="note"><span class="note-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 8v.5"/></svg></span><div>На этапе внедрения люди из топа могут тратить на порядок больше остальных. Лимиты в это время лучше не вводить: так легко демотивировать тех, кто первым осваивает инструмент. Вместо лимитов договоритесь об экспериментах и отчёте с результатами. Лимиты уместны позже, когда практики проверены и понятна нормальная стоимость сценария.</div></div></div><div class="block"><h3 id="segments">Поведенческие сегменты</h3><div class="cf" role="img" aria-label="сегмент → кастдев → проблема → инструмент"><span class="cf-s"><svg viewBox="0 0 64 48" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="24" cy="24" r="16"/><circle cx="40" cy="24" r="16"/><circle cx="17" cy="22" r="2.5" fill="currentColor"/><circle cx="32" cy="18" r="2.5" fill="currentColor"/><circle cx="32" cy="30" r="2.5" fill="currentColor"/><circle cx="47" cy="24" r="2.5" fill="currentColor"/></svg><small>сегмент</small></span><span class="cf-a" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="cf-s"><svg viewBox="0 0 64 48" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><g stroke="var(--ink-2)"><circle cx="14" cy="24" r="5"/><path d="M6.0 40.0c0-5.5 3.8-9.0 8.0-9.0s8.0 3.5 8.0 9.0"/></g><g stroke="var(--ink-2)"><circle cx="50" cy="24" r="5"/><path d="M42.0 40.0c0-5.5 3.8-9.0 8.0-9.0s8.0 3.5 8.0 9.0"/></g><path d="M20 6h16v10h-9l-4 4v-4h-3z"/><path d="M44 12H30v9h3v4l4-4h7z" stroke-dasharray="0"/></svg><small>кастдев</small></span><span class="cf-a" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="cf-s"><svg viewBox="0 0 64 48" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><g stroke="var(--warn)"><path d="M32 8l20 34H12z"/><path d="M32 21v10M32 36h.01"/></g></svg><small>проблема</small></span><span class="cf-a" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="cf-s"><svg viewBox="0 0 64 48" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 12h14a4 4 0 1 1 8 0h14v12a4 4 0 1 0 0 8v10H10z" stroke="var(--line-2)" stroke-dasharray="3 3"/><path d="M14 16h10a4 4 0 1 1 8 0h10v9a4 4 0 1 0 0 8v5H14z" fill="color-mix(in srgb, currentColor 22%, transparent)"/></svg><small>инструмент</small></span></div><p class="why">Группы по силе поведения из нескольких выгрузок: сколько человек пишет, тратит и что делает.</p><div class="tbl"><table><thead><tr><th>Сегмент</th><th class="r">Людей</th><th>Детали</th></tr></thead><tbody><tr><td>Пишут код в любом продукте</td><td class="r">44</td><td>19 из них вне технических команд</td></tr><tr><td>Глубокий ресёрч в чате</td><td class="r">58</td><td>в среднем 1 900+ сообщений</td></tr><tr><td>Агентные задачи</td><td class="r">33</td><td>многошаговые сценарии, коннекторы</td></tr><tr><td>Генерация изображений</td><td class="r">21</td><td>две трети из одной команды</td></tr><tr><td>Полностью неактивные</td><td class="r">61</td><td>0 сообщений, 0 $ за весь период</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage/users" target="_blank" rel="noopener">Пользователи</a> · <a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Крупнейшие сегменты для кастдева — глубокий ресёрч (58) и код (44, из них 19 вне технических команд). У 61 неактивного вопрос другой: что мешает начать.</div><div class="fg"><span class="fk">В общем случае</span>Данные показывают, что люди делают, но не показывают, хватает ли им текущего инструмента. Поэтому сегмент — гипотеза: он подсказывает, кого звать на кастдев, какие вопросы задать и с какими проблемами люди могут сталкиваться. Кандидаты в инструменты появляются уже здесь, а выбирают из них после кастдева, под подтверждённую проблему.</div><div class="fa"><span class="fk">Что сделать</span>По каждому сегменту поговорите с 2–3 людьми: где текущий инструмент не справляется и что они до сих пор делают руками. Кандидатов под подтверждённую проблему собирайте из трёх источников: консультации с инноваторами внутри компании, внешние эксперты и бенчмарки рынка — чем пользуются похожие компании. Дальше — по <a href="#decision">процедуре решения</a>: анкета, сопоставление и проверка кандидатов на реальных задачах. Проблема не подтвердилась — отложите сегмент до следующего пересчёта.</div></div></div></section><section class="chapter" id="layer2"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="7" width="18" height="13" rx="2"/><path d="M9 7V5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2M3 13h18"/></svg></span>Природа работы</h2><p><b>Задача:</b> показать, какие задачи люди решают инструментом, какими встроенными функциями и через какие интеграции.</p><div class="block"><h3 id="connectors">Коннекторы</h3><div class="dp dp-seq"><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Без коннекторов модель отвечает догадками" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="29" y="21" width="22" height="22" rx="6"/><path d="M40 21v-4"/><circle cx="36" cy="31" r="1.6" fill="currentColor"/><circle cx="44" cy="31" r="1.6" fill="currentColor"/><path d="M36 37h8"/><path stroke="var(--warn)" d="M77 13a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M80 21h.01"/><path stroke="var(--warn)" d="M97 29a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M100 37h.01"/><path stroke="var(--warn)" d="M81 45a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M84 53h.01"/><path stroke="var(--warn)" d="M117 17a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M120 25h.01"/><path stroke="var(--warn)" d="M115 43a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M118 51h.01"/></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="С коннекторами модель опирается на рабочие данные" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="20" y="4" width="14" height="11" rx="2"/><rect x="40" y="4" width="14" height="11" rx="2"/><rect x="60" y="4" width="14" height="11" rx="2"/><path d="M27 15l13 8M47 15v6M67 15l-13 8"/><rect x="36" y="25" width="22" height="22" rx="6"/><path d="M47 25v-4"/><circle cx="43" cy="35" r="1.6" fill="currentColor"/><circle cx="51" cy="35" r="1.6" fill="currentColor"/><path d="M43 41h8"/><path d="M64 36H90M85 32l5 4-5 4"/><path d="M96 22h14l6 6v22h-20z"/><path d="M110 22v6h6"/><path d="M101 39l3 3 6-7"/></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Доля ответов с ошибкой до и после подключения" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="30" y="10" width="18" height="46" rx="3" fill="var(--warn)" stroke="none" opacity=".85"/><rect x="88" y="42" width="18" height="14" rx="3" fill="currentColor" stroke="none"/><path d="M22 58h94" stroke="var(--line-2)"/><path d="M56 32H80M75 28l5 4-5 4"/></svg></div><p class="why">Коннекторы подключают ассистента к рабочим данным: переписке, документам, коду, календарю. От них зависит объём галлюцинаций: без доступа к данным модель достраивает ответ сама. <b>Решение:</b> каким командам и к каким системам подключать коннекторы в первую очередь.</p><div class="bars"><div class="bar"><span class="l">Slack</span><span class="tr"><span class="f" style="display:block;width:100%;background:var(--c-work)"></span></span><span class="v">520</span></div><div class="bar"><span class="l">Notion</span><span class="tr"><span class="f" style="display:block;width:65%;background:var(--c-work)"></span></span><span class="v">340</span></div><div class="bar"><span class="l">GitHub</span><span class="tr"><span class="f" style="display:block;width:40%;background:var(--c-work)"></span></span><span class="v">210</span></div><div class="bar"><span class="l">Календарь</span><span class="tr"><span class="f" style="display:block;width:29%;background:var(--c-work)"></span></span><span class="v">150</span></div></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage" target="_blank" rel="noopener">Обзор</a> · блок «Взаимодействия с приложениями»</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Slack и Notion дают 70% всех подключений. Системы вне этого списка модель не видит: вопросы о них она закрывает догадкой.</div><div class="fg"><span class="fk">В общем случае</span>Объём галлюцинаций падает там, где у модели есть нужный контекст. Без него агент пытается сам заполнить пропуск. Команды с нулём подключений работают с моделью вслепую, и почти любой ответ про их процессы — догадка. Признак на кастдеве: «всё приходится перепроверять».</div><div class="fa"><span class="fk">Что сделать</span>Найдите команды с нулём подключений и на интервью спросите, где лежат их рабочие данные. Подключите один такой источник и на 10 одинаковых вопросах сравните до и после: сколько ответов с ошибкой и сколько опираются на рабочие данные.</div></div></div><div class="block"><h3 id="skills">Навыки</h3><div class="dp dp-seq"><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Разовые запросы: каждый раз другой результат" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="22" cy="20" r="6"/><path d="M12.4 39.2c0-6.6 4.5-10.8 9.6-10.8s9.6 4.2 9.6 10.8"/></g><path d="M40 32H78M73 28l5 4-5 4"/><g stroke="var(--warn)"><path d="M92 2h10l4 4v14h-14z"/><path d="M95 9h8"/><path d="M95 13h5"/></g><g stroke="var(--warn)"><path d="M106 22h10l4 4v14h-14z"/><path d="M109 29h5"/><path d="M109 33h8"/><path d="M109 37h3"/></g><g stroke="var(--warn)"><path d="M92 42h10l4 4v14h-14z"/><path d="M95 49h3"/></g></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Навык: одинаковый результат при каждом запуске" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><g stroke="var(--ink-2)"><circle cx="14" cy="20" r="6"/><path d="M4.4 39.2c0-6.6 4.5-10.8 9.6-10.8s9.6 4.2 9.6 10.8"/></g><path d="M30 32H46M41 28l5 4-5 4"/><rect x="50" y="16" width="24" height="32" rx="3"/><path d="M54 24l2 2 3-3M62 25h8"/><path d="M54 32l2 2 3-3M62 33h8"/><path d="M54 40l2 2 3-3M62 41h8"/><path d="M80 32H98M93 28l5 4-5 4"/><g><path d="M108 2h10l4 4v14h-14z"/><path d="M111 9h8"/><path d="M111 13h8"/><path d="M111 17h5"/></g><g><path d="M108 22h10l4 4v14h-14z"/><path d="M111 29h8"/><path d="M111 33h8"/><path d="M111 37h5"/></g><g><path d="M108 42h10l4 4v14h-14z"/><path d="M111 49h8"/><path d="M111 53h8"/><path d="M111 57h5"/></g></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Общий навык: одинаковый результат в нескольких командах" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="16" width="24" height="32" rx="3"/><path d="M10 24l2 2 3-3M18 25h8"/><path d="M10 32l2 2 3-3M18 33h8"/><path d="M10 40l2 2 3-3M18 41h8"/><path d="M32 32C48 32 52 11 68 11M32 32H68M32 32C48 32 52 53 68 53"/><g stroke="var(--ink-2)"><circle cx="80" cy="6" r="3.5"/><path d="M74.4 17.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g stroke="var(--ink-2)"><circle cx="94" cy="6" r="3.5"/><path d="M88.4 17.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g><path d="M110 2h10l4 4v14h-14z"/><path d="M113 9h8"/><path d="M113 13h8"/><path d="M113 17h5"/></g><g stroke="var(--ink-2)"><circle cx="80" cy="27" r="3.5"/><path d="M74.4 38.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g stroke="var(--ink-2)"><circle cx="94" cy="27" r="3.5"/><path d="M88.4 38.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g><path d="M110 23h10l4 4v14h-14z"/><path d="M113 30h8"/><path d="M113 34h8"/><path d="M113 38h5"/></g><g stroke="var(--ink-2)"><circle cx="80" cy="48" r="3.5"/><path d="M74.4 59.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g stroke="var(--ink-2)"><circle cx="94" cy="48" r="3.5"/><path d="M88.4 59.2c0-3.9 2.6-6.3 5.6-6.3s5.6 2.4 5.6 6.3"/></g><g><path d="M110 44h10l4 4v14h-14z"/><path d="M113 51h8"/><path d="M113 55h8"/><path d="M113 59h5"/></g></svg></div><p class="why">Навыки показывают зрелость процессов: сценарий, который однажды описали как навык, дальше повторяется одинаково у любого, кто его запускает. Статистика показывает, какие навыки используют и кто собирает свои. <b>Решение:</b> какие процессы уже можно тиражировать на другие команды, а какие пока держатся на отдельных людях.</p><div class="bars"><div class="bar"><span class="l">spreadsheets</span><span class="tr"><span class="f" style="display:block;width:100%;background:var(--c-code)"></span></span><span class="v">88</span></div><div class="bar"><span class="l">pdf</span><span class="tr"><span class="f" style="display:block;width:65%;background:var(--c-code)"></span></span><span class="v">57</span></div><div class="bar"><span class="l">skill-creator</span><span class="tr"><span class="f" style="display:block;width:33%;background:var(--c-code)"></span></span><span class="v">29</span></div></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage" target="_blank" rel="noopener">Обзор</a> · блок «Навыки»</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Навыки для таблиц и PDF — 88 и 57 обращений: эти процессы уже воспроизводимы. 29 обращений к skill-creator: часть людей превращает свои сценарии в навыки.</div><div class="fg"><span class="fk">В общем случае</span>Зрелость процесса растёт по ступеням: разовые запросы → личный навык → общий навык команды. На первой ступени результат зависит от того, кто и как спросил. С навыком он воспроизводим: одинаковый вход даёт одинаковый результат. Общий навык делает процесс переносимым в другие команды.</div><div class="fa"><span class="fk">Что сделать</span>Соберите навыки в общий список с авторами и отметьте ступень каждого процесса. Два самых используемых личных навыка сделайте общими: автор показывает их соседней команде, а команда проверяет, что на одинаковых входах результат одинаковый. Сценарии без навыка, которые повторяются каждую неделю, — первые кандидаты в новые навыки.</div></div></div><div class="block"><h3 id="projects">Темы проектов</h3><div class="dp dp-seq"><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Проект: файлы и инструкции, на которые модель опирается в ответах" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M14 16h14l4 5h22v28H14z"/><path d="M22 32h10M22 38h16M22 44h12"/><path d="M58 34H78M73 30l5 4-5 4"/><rect x="87" y="23" width="22" height="22" rx="6"/><path d="M98 23v-4"/><circle cx="94" cy="33" r="1.6" fill="currentColor"/><circle cx="102" cy="33" r="1.6" fill="currentColor"/><path d="M94 39h8"/><path d="M114 34H128M123 30l5 4-5 4"/><path d="M134 30l3 3 6-7"/></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Проекты по темам показывают конкретные задачи" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M14 12h14l4 5h22v28H14z"/><path d="M22 20h14l4 5h22v28H22z"/><path d="M30 28h14l4 5h22v28H30z"/><circle cx="104" cy="30" r="12"/><path d="M113 39l10 10"/><path d="M98 30h12M104 24v12"/><path d="M76 30H88M83 26l5 4-5 4"/></svg><span class="tt-ar" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><svg class="dp-v" style="color:var(--accent)" viewBox="0 0 150 64" role="img" aria-label="Автора проекта зовут на кастдев" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M10 16h14l4 5h22v28H10z"/><path d="M54 32H72M67 28l5 4-5 4"/><g stroke="var(--ink-2)"><circle cx="88" cy="22" r="6"/><path d="M78.4 41.2c0-6.6 4.5-10.8 9.6-10.8s9.6 4.2 9.6 10.8"/></g><path d="M104 10h32v18h-18l-7 6v-6h-7z"/><path d="M117 16a3 3 0 1 1 4 2.8c-.8.4-1 1-1 1.7M120 24.5h.01"/></svg></div><p class="why">Сводка группирует проекты по смыслу и показывает конкретные задачи, которые люди ведут в постоянных проектах. Для кастдева это готовый список: какие задачи обсуждать и с кем. <b>Решение:</b> какие задачи и чьи проекты разбирать на кастдеве первыми.</p><div class="tbl"><table><thead><tr><th>Тема</th><th class="r">Проектов</th><th>Задачи</th><th>Вопрос автору на кастдеве</th></tr></thead><tbody><tr><td>Продажи<small class="pt-s">Pitch library · Elif Demir</small></td><td class="r">11</td><td>питчи, ответы на возражения, коммерческие предложения</td><td class="pt-q">«Какую часть питча модель делает хорошо, а что вы переписываете?»</td></tr><tr><td>Онбординг<small class="pt-s">New hire guide · Rafael Costa</small></td><td class="r">8</td><td>гайды для новичков, ответы на типовые вопросы</td><td class="pt-q">«Какие вопросы новичков модель уже закрывает без вас?»</td></tr><tr><td>Исследования рынка<small class="pt-s">Competitor notes · Jonas Keller</small></td><td class="r">5</td><td>сводки по конкурентам, сравнение цен</td><td class="pt-q">«Откуда берёте данные и как часто они устаревают?»</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage/projects" target="_blank" rel="noopener">Проекты</a> · названия, сгруппированные по смыслу</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Больше всего постоянных проектов в продажах (11) и онбординге (8). Авторы крупнейших проектов — первые собеседники на кастдев.</div><div class="fg"><span class="fk">В общем случае</span>Проект — это база знаний: файлы и инструкции, на которые модель опирается в каждом ответе. Чем полнее база, тем точнее и стабильнее результат. Состав проекта подсказывает, что спрашивать на кастдеве: какие файлы добавили, чего не хватает и где ответы всё ещё приходится править.</div><div class="fa"><span class="fk">Что сделать</span>Откройте три самых активных проекта каждой темы и выпишите конкретные задачи. На кастдеве задайте автору вопрос из таблицы и спросите, какие файлы и инструкции сильнее всего изменили качество ответов. Удачный состав проекта оформите как шаблон для этой темы.</div></div></div></section><section class="chapter" id="layer3"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M8.5 12l2.5 2.5 4.5-5"/></svg></span>Проверка</h2><p><b>Задача:</b> сверить сводки с сырыми выгрузками — списком проектов и таблицей лидеров. Любую цифру отчёта можно проследить до исходной строки выгрузки.</p><div class="block"><h3>Полный список проектов</h3><p class="why">Все проекты с автором и статусом. По этому списку проверяют тематическую сводку и находят автора конкретного проекта.</p><div class="tbl"><table><thead><tr><th>Проект</th><th>Автор</th><th>Статус</th><th class="r">Сообщ.</th></tr></thead><tbody><tr><td>Pitch library</td><td>Elif Demir</td><td><span class="pill"><i style="background:var(--c-work)"></i>активен</span></td><td class="r">268</td></tr><tr><td>Прайс-лист 2026</td><td>Oskar Berg</td><td><span class="pill"><i style="background:var(--c-work)"></i>активен</span></td><td class="r">64</td></tr><tr><td>Личный черновик</td><td>Pavel Novak</td><td><span class="pill"><i style="background:var(--c-none)"></i>заброшен</span></td><td class="r">0</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://chatgpt.com/admin/usage/projects" target="_blank" rel="noopener">Проекты</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>У проекта «Личный черновик» ноль сообщений.</div><div class="fg"><span class="fk">В общем случае</span>Пустой проект — брошенная попытка: человек начал, но инструмент не вошёл в работу. Если такие проекты не убрать, сводка по темам завышает картину.</div><div class="fa"><span class="fk">Что сделать</span>Перед подсчётами отфильтруйте проекты с нулём сообщений и пригласите 2–3 их авторов: причина, по которой бросили, — ценный ответ.</div></div></div><div class="block"><h3>Таблица лидеров</h3><p class="why">Биллинговая выгрузка по каждому человеку и продукту. Из неё посчитаны основные инструменты и топы.</p><div class="tbl"><table><thead><tr><th>Имя</th><th>Email</th><th class="r">Кредиты</th><th class="r">$</th></tr></thead><tbody><tr><td>Hana Sato</td><td><!--email_off-->hana&#64;example.com<!--/email_off--></td><td class="r">10 955</td><td class="r">438,20</td></tr><tr><td>Mira Castellano</td><td><!--email_off-->mira&#64;example.com<!--/email_off--></td><td class="r">2 425</td><td class="r">97,00</td></tr><tr><td>Jonas Keller</td><td><!--email_off-->jonas&#64;example.com<!--/email_off--></td><td class="r">470</td><td class="r">18,80</td></tr></tbody></table></div><p class="cap src-cap">Источник: <a href="https://admin.openai.com" target="_blank" rel="noopener">Таблица лидеров</a> · три выгрузки с разным фильтром «Продукт»</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Три выгрузки по продуктам в сумме дают общую трату каждого человека из списка.</div><div class="fg"><span class="fk">В общем случае</span>Три выгрузки с разными фильтрами «Продукт» в сумме дают общую трату человека. Расхождение больше 2% значит, что выгрузка неполная или периоды не совпадают.</div><div class="fa"><span class="fk">Что сделать</span>Перед тем как показывать отчёт, сложите три выгрузки по каждому человеку и сравните с общей тратой. При расхождении перевыгрузите данные за один и тот же период.</div></div></div></section><section class="chapter" id="layer4"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg></span>Отбор людей</h2><p><b>Задача:</b> назвать конкретных людей под каждый способ решать задачи.</p><div class="block"><h3 id="candidates">Кандидаты на интервью</h3><p class="why">Короткий список людей по каждому найденному направлению. В примере итоговый список — 16 человек из 340, в таблице первые трое. В вашей компании размер списка будет своим. Отчёт по ChatGPT — один из источников выборки: пользователей других инструментов и тех, кто бросил, добирают по правилам из статьи <a href="/blog/who-to-interview-before-buying-ai-tools/#groups">«Кого звать на интервью»</a>, а проверку на всех сотрудниках делают <a href="/blog/ai-interviews-without-leading-questions/#form">анкетой</a>.</p><div class="tbl"><table><thead><tr><th>Человек</th><th>Направление</th><th class="r">Сигнал</th></tr></thead><tbody><tr><td>Hana Sato</td><td><span class="pill"><i style="background:var(--c-code)"></i>код</span></td><td class="r">$438 / 3 мес</td></tr><tr><td>Mira Castellano</td><td><span class="pill"><i style="background:var(--c-work)"></i>агентные задачи</span></td><td class="r">$97 / 3 мес</td></tr><tr><td>Jonas Keller</td><td><span class="pill"><i style="background:var(--c-chat)"></i>ресёрч</span></td><td class="r">3 200+ сообщ.</td></tr></tbody></table></div><p class="cap src-cap">Источник: выгрузки пользователей, таблицы лидеров и проектов, сведённые по почте</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Hana Sato, Mira Castellano и Jonas Keller представляют три разных способа работы: код, агентные задачи, ресёрч.</div><div class="fg"><span class="fk">В общем случае</span>В короткий список берут по одному человеку на направление: код, агентные задачи, ресёрч. Так каждый разговор показывает свой способ работы и не повторяет соседний.</div><div class="fa"><span class="fk">Что сделать</span>Назначьте три интервью, по одному на направление. По итогам решите, в каком направлении позвать ещё 2–3 человек.</div></div></div><div class="block"><h3 id="people">Таблица всех людей</h3><p class="why">Все люди с фильтрами по команде, активности, направлению и основному инструменту.</p><div class="chips"><span class="chip">Команда B</span><span class="chip">Активность: каждую неделю</span><span class="chip on">Инструмент: Work</span></div><div class="tbl"><table><thead><tr><th>Человек</th><th>Команда</th><th>Chat / Work</th><th class="r">$ / 3 мес</th></tr></thead><tbody><tr><td>Tomás Reid</td><td>Команда B</td><td><div class="mix"><span style="width:28%;background:var(--c-chat)"></span><span style="width:72%;background:var(--c-work)"></span></div></td><td class="r">112,00</td></tr><tr><td>Mira Castellano</td><td>Команда B</td><td><div class="mix"><span style="width:35%;background:var(--c-chat)"></span><span style="width:65%;background:var(--c-work)"></span></div></td><td class="r">97,00</td></tr></tbody></table></div><p class="cap src-cap">Источник: выгрузки пользователей, таблицы лидеров и проектов, сведённые по почте</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Фильтры «Команда B» и «Инструмент: Work» оставили двоих: Mira Castellano и Tomás Reid.</div><div class="fg"><span class="fk">В общем случае</span>Таблица всех людей с фильтрами по команде, активности и основному инструменту — основа любой следующей выборки: список под новый вопрос собирается без новой выгрузки.</div><div class="fa"><span class="fk">Что сделать</span>Сохраните каждый набор фильтров как отдельное представление таблицы, чтобы следующий список собирался в один клик.</div></div></div></section><section class="chapter" id="start"><h2>С чего начать сегодня</h2><p>Весь отчёт сразу не нужен: первый рабочий результат, список самых активных пользователей, появляется после второго пункта.</p><ul class="todo"><li><span class="box" aria-hidden="true"></span><div><b>Выгрузить пользователей и таблицу лидеров за три месяца</b><span class="d">Таблицу лидеров трижды, по разу на каждый продукт. Выгрузку можно поручить браузерному агенту</span><div class="step-l"><a href="https://claude.com/claude-in-chrome" target="_blank" rel="noopener">Claude in Chrome <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M8 7h9v9"/></svg></a><a href="https://support.google.com/gemini/answer/16821166" target="_blank" rel="noopener">Gemini in Chrome <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M8 7h9v9"/></svg></a><a href="https://www.perplexity.ai/comet" target="_blank" rel="noopener">Perplexity Comet <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M8 7h9v9"/></svg></a></div></div></li><li><span class="box" aria-hidden="true"></span><div><b>Посчитать основные инструменты и топ по сумме</b><span class="d">Первый список самых активных пользователей готов</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Посчитать глубину проникновения</b><span class="d">Хоть раз / регулярно / каждую неделю, отдельно тех, кто работает только через Codex</span></div></li><li><span class="box" aria-hidden="true"></span><div><b>Собрать список людей и назначить интервью</b><span class="d">Как выбрать этих людей — в статье «Кого звать на интервью»</span></div></li></ul><div class="sublabel" style="margin-top:22px">Частые вопросы</div><div class="qa"><div><h3>Что показывает консоль администратора ChatGPT Enterprise</h3><p>Пять разделов: пользователи, таблица лидеров, проекты, обзор и задачи. Из них строят глубину проникновения, однородность по командам, основной инструмент, природу задач и проверку по сырым данным.</p></div><div><h3>Как выгрузить данные из консоли</h3><p>API у консоли есть, но покрывает не всё: аналитика Codex, стоимость по кредитам и переписки для аудита. Выгрузки пользователей, проектов, навыков и таблицу лидеров проще собрать в интерфейсе, а экспорт можно поручить Claude in Chrome.</p></div><div><h3>Как понять, нужны ли новые лицензии</h3><p>Глубина проникновения показывает, сколько людей пользуются хоть раз, регулярно и каждую неделю. От неё зависит, в какую группу вкладывать обучение и стоит ли сейчас покупать новые лицензии.</p></div><div><h3>Как выбрать людей для интервью</h3><p>Берут людей под каждое найденное направление: в примере итоговый список 16 человек из 340. Пользователей других инструментов и тех, кто бросил, добирают по правилам из статьи <a href="/blog/who-to-interview-before-buying-ai-tools/">«Кого звать на интервью»</a>.</p></div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links"><a href="/blog/who-to-interview-before-buying-ai-tools/"><div class="k">Интервью</div><div class="t">Кого звать на интервью</div><div class="d">Как собрать выборку для интервью из таблицы людей</div></a><a href="/blog/ai-interviews-without-leading-questions/"><div class="k">Интервью</div><div class="t">Как провести интервью о работе с AI</div><div class="d">Звонок, анкета и одна таблица в Airtable</div></a></div></section><footer>Все имена, команды, адреса и цифры в примерах вымышлены.</footer></div>]]></content:encoded></item>
<item><title>Harness engineering на практике: как превращать ошибки ИИ-агента в правила окружения (HDD)</title><link>https://www.urvanov.com/blog/harness-driven-development/</link><guid>https://www.urvanov.com/blog/harness-driven-development/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Как превращать ошибки ИИ-агента (Claude Code, Codex) в правила его окружения: петля «ошибка → правило», направляющие и датчики, три слоя проверок, связь со спеками и пять первых шагов в своём проекте.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><strong>Harness engineering</strong> (харнесс-инжиниринг) — настройка среды вокруг ИИ-агента: инструкций, инструментов, прав и проверок. <strong>Harness-Driven Development (HDD)</strong> — рабочий метод на его основе: каждая ошибка агента становится правилом этой среды.</p>
<div class="s-rich s-rich-hdd-ru"><div class="ladder" role="img" aria-label="Три этапа работы с ИИ: промпт, контекст, харнесс"><div class="st s1"><span class="n">1</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/></svg><b>Промпт</b><small>слова запроса</small></div><div class="st s2"><span class="n">2</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg><b>Контекст</b><small>что знает модель</small></div><div class="st s3"><span class="n">3</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg><b>Харнесс</b><small><a class="st-l" href="/blog/ai-in-code-harness-and-tools/">среда</a> вокруг агента</small><em>HDD</em></div></div><p class="cap">Этапы по <a href="https://www.faros.ai/blog/harness-engineering" target="_blank" rel="noopener">Faros</a> и <a href="https://marmelab.com/blog/2026/09/24/the-state-of-ai-harness-engineering-2026.html" target="_blank" rel="noopener">marmelab</a></p><section class="chapter" id="stages"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 20h5v-5h5v-5h5V5h3"/></svg></span>Три этапа</h2><div class="cmp3"><div class="c3"><div class="c3-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/></svg>Промпт</div><div class="c3-v"><span class="chip">роль</span><span class="chip">формат</span><span class="chip">пример</span></div><div class="c3-s"><span class="k">чинят</span>один запрос</div></div><div class="c3"><div class="c3-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Контекст</div><div class="c3-v"><span class="chip">документы</span><span class="chip">проект</span><span class="chip">память</span></div><div class="c3-s"><span class="k">чинят</span>что модель знает</div></div><div class="c3 on"><div class="c3-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>Харнесс</div><div class="c3-v"><span class="chip">инструменты</span><span class="chip">тесты</span><span class="chip">правила</span><span class="chip">права</span></div><div class="c3-s"><span class="k">чинят</span>все следующие запуски</div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Промпт исправляет один ответ, контекст — знания модели, харнесс — каждый следующий запуск агента.</div><div class="fg"><span class="fk">В общем случае</span>Harness-Driven Development — работа на третьем этапе: разработчик меньше пишет код и больше настраивает среду, в которой агент его пишет, проверяет и исправляет.</div><div class="fa"><span class="fk">Что сделать</span>Выпишите три последние ошибки агента и отметьте, на каком этапе каждую можно было исправить раз и навсегда.</div></div></section><section class="chapter" id="loop"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span>Петля HDD</h2><div class="loopwrap"><svg class="lp" viewBox="0 0 900 400" role="img" aria-label="Петля: задача, агент, результат, датчики; если найдена ошибка — новое правило в харнессе, и следующая задача идёт уже с ним"><title>Задача → агент → результат → датчики → ошибка → правило в харнессе → следующая задача</title><defs><marker id="lp-ar" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="lp-arh"/></marker></defs><rect class="lp-h" x="250" y="20" width="400" height="360" rx="28"/><text class="lp-ht" x="450" y="52" text-anchor="middle">харнесс</text><rect class="lp-n" x="30" y="165" width="150" height="60" rx="8"/><text class="lp-t" x="105" y="201" text-anchor="middle">Задача</text><rect class="lp-n key" x="300" y="80" width="150" height="60" rx="8"/><text class="lp-t" x="375" y="116" text-anchor="middle">Агент</text><rect class="lp-n" x="720" y="80" width="150" height="60" rx="8"/><text class="lp-t" x="795" y="116" text-anchor="middle">Результат</text><rect class="lp-n sen" x="520" y="165" width="150" height="60" rx="8"/><text class="lp-t" x="595" y="201" text-anchor="middle">Датчики</text><rect class="lp-n rule" x="300" y="280" width="200" height="64" rx="8"/><text class="lp-t" x="400" y="310" text-anchor="middle">Новое правило</text><text class="lp-s" x="400" y="331" text-anchor="middle">инструкция · тест · хук</text><circle class="lp-ok" cx="795" cy="290" r="26"/><path class="lp-okm" d="M783,290 l8,8 l16,-17"/><path class="lp-e" d="M180,195 C 230,195 250,110 298,110" marker-end="url(#lp-ar)"/><path class="lp-e" d="M450,110 L718,110" marker-end="url(#lp-ar)"/><text class="lp-el" x="585" y="100" text-anchor="middle">делает</text><path class="lp-e" d="M760,140 C 740,170 700,190 672,195" marker-end="url(#lp-ar)"/><text class="lp-el" x="742" y="180" text-anchor="start">проверить</text><path class="lp-e ok" d="M670,210 C 720,250 750,270 767,282" marker-end="url(#lp-ar)"/><text class="lp-el ok" x="712" y="262" text-anchor="end">прошло</text><path class="lp-e bad" d="M560,225 C 540,270 520,300 502,308" marker-end="url(#lp-ar)"/><text class="lp-el bad" x="555" y="270" text-anchor="start">ошибка</text><path class="lp-e bad" d="M340,280 C 330,230 350,170 370,142" marker-end="url(#lp-ar)"/><text class="lp-el bad" x="372" y="236" text-anchor="start">больше не повторится</text></svg></div><p class="cap">Принцип Митчелла Хашимото: если агент ошибся, харнесс меняют так, чтобы эта ошибка не повторилась <a href="https://www.faros.ai/blog/harness-engineering" target="_blank" rel="noopener">Faros</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Ошибка, которую поймали датчики, уходит в харнесс новым правилом, и агент получает его на каждом следующем запуске.</div><div class="fg"><span class="fk">В общем случае</span>Исправленный вручную результат помогает один раз. Правило в харнессе — инструкция, тест или хук — действует для всех будущих задач, поэтому харнесс со временем становится точнее без смены модели.</div><div class="fa"><span class="fk">Что сделать</span>Заведите правило: каждую ошибку агента, которую пришлось исправлять руками, в тот же день превращать в строку инструкции или в тест.</div></div></section><section class="chapter" id="canons"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg></span>Устройство харнесса: 3 × 3</h2><p class="why">Три домена контура и три контекста в каждом — девять канонов. У каждого канона ровно один домен и один контекст.</p><div class="cn" role="img" aria-label="Устройство харнесса: 3 × 3"><div class="cn-c"></div><div class="cn-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg><b>Спека</b><small>что должно быть верно</small></div><div class="cn-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg><b>Скилл</b><small>как действовать</small></div><div class="cn-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="8" ry="3"/><path d="M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/></svg><b>Память</b><small>на что опереться</small></div><div class="cn-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg><b>Ожидание</b><small>что должно быть</small></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg>Спека</em><span class="chip">жанры, схемы</span><span class="chip">уровни требований</span><span class="chip">паспорт числа</span></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>Скилл</em><span class="chip">предсказание до действия</span></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="8" ry="3"/><path d="M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/></svg>Память</em><span class="chip">роли актуатора</span><span class="chip">live · MCP</span></div><div class="cn-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg><b>Наблюдение</b><small>что измерено</small></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg>Спека</em><span class="chip">ранг доказательства</span><span class="chip">формат находки</span><span class="chip">шкала</span></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>Скилл</em><span class="chip">сенсор записывает факт</span></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="8" ry="3"/><path d="M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/></svg>Память</em><span class="chip">только live</span></div><div class="cn-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg><b>Луп</b><small>сравнить и решить</small></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg>Спека</em><span class="chip">критерии полноты правила</span><span class="chip">реестр находок</span></div><div class="cn-x"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>Скилл</em><span class="chip">сравнить</span><span class="chip">посчитать повтор</span><span class="chip">патч или пересмотр</span></div><div class="cn-x empty"><em class="cn-k"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="8" ry="3"/><path d="M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/></svg>Память</em><small>пока пусто</small></div></div><div class="cf" role="img" aria-label="Ожидание + Наблюдение → Луп → патч / пересмотр правил"><div class="cf-l"><span class="cf-n a"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg>Ожидание</span><span class="cf-n b"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>Наблюдение</span></div><div class="cf-ar"><svg viewBox="0 0 80 120" aria-hidden="true"><path d="M4,26 C 40,26 40,60 74,60" class="cf-e"/><path d="M4,94 C 40,94 40,60 74,60" class="cf-e"/><path d="M66,54 L76,60 L66,66" class="cf-e"/></svg></div><div class="cf-m"><span class="cf-n c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg>Луп</span><span class="cf-no">✕ обратной ссылки нет</span></div><div class="cf-ar"><svg viewBox="0 0 80 120" aria-hidden="true"><path d="M4,60 C 40,60 40,26 72,26" class="cf-e"/><path d="M4,60 C 40,60 40,94 72,94" class="cf-e"/><path d="M64,21 L74,26 L64,31 M64,89 L74,94 L64,99" class="cf-e"/></svg></div><div class="cf-r"><span class="cf-o">патч</span><span class="cf-o rev">пересмотр правил</span></div></div><div class="cf-note"><span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>→<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg></span>скилл → спека своего домена<i>·</i>направление проверяет скрипт на коммит</div><div class="mm"><div class="mm-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg><b>snapshot</b><small>таблица, обновляется по факту нового измерения</small></div><div class="mm-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12a7 7 0 0 1 14 0M8.5 12a3.5 3.5 0 0 1 7 0"/><circle cx="12" cy="12" r="1.2"/><path d="M12 13v7"/></svg><b>live</b><small>протокол, каждый раз заново, без хранения</small></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Контур раскладывается на Ожидание, Наблюдение и Луп, у каждого свои спека, скилл и память. Луп читает два других домена, они Луп не читают.</div><div class="fg"><span class="fk">В общем случае</span>Это контур отрицательной обратной связи: заданное значение сравнивается с измеренным, и меняется что-то только при расхождении. Жёсткое направление ссылок не даёт доменам запутаться друг в друге, а повтор одного понятия в двух доменах дефектом не считается.</div><div class="fa"><span class="fk">Что сделать</span>Разложите файлы своего харнесса по девяти клеткам и проверьте, что ни один файл Ожидания или Наблюдения не ссылается на Луп.</div></div></section><section class="chapter" id="double"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12a5 5 0 0 1 9-3"/><path d="M13 5v4h-4"/><path d="M20 12a8 8 0 1 1-4-6.9"/><path d="M20 3v5h-5"/></svg></span>Двойная петля</h2><div class="dl"><div class="dl-a"><svg viewBox="0 0 120 120" aria-hidden="true"><circle cx="60" cy="60" r="34" class="dl-c1"/><path d="M88,40 l6,-10 l4,11" class="dl-c1"/></svg><b>одинарная петля</b><small>исправить действие по тем же правилам</small></div><div class="dl-a on"><svg viewBox="0 0 120 120" aria-hidden="true"><circle cx="60" cy="60" r="24" class="dl-c1"/><circle cx="60" cy="60" r="46" class="dl-c2"/><path d="M100,34 l6,-10 l4,11" class="dl-c2"/></svg><b>двойная петля</b><small>изменить сами правила</small></div></div><div class="pr4"><div class="pr4-c"><span class="pr4-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 17c3-6 5 2 8-4s5 2 8-4"/><path d="M4 20h16"/></svg></span><b>Подгонки без нового предсказания</b><small>чинить правилом</small></div><div class="pr4-c"><span class="pr4-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3h6M10 3v6l-5 9a2 2 0 0 0 1.7 3h10.6a2 2 0 0 0 1.7-3l-5-9V3"/></svg></span><b>Несколько жалоб</b><small>сначала тест на общую причину</small></div><div class="pr4-c"><span class="pr4-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 3-6.7"/><path d="M3 3v6h6"/><path d="M12 8v4l3 2"/></svg></span><b>Новое правило</b><small>принимается, если старые случаи выводятся</small></div><div class="pr4-c"><span class="pr4-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6z"/><path d="M9 12l2 2 4-4"/></svg></span><b>Без внешней проверки</b><small>отбросить с записью</small></div></div><p class="cap">Луп применяется и к себе: каждый прогон заканчивается остаточным риском, статус «готово» он не ставит.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Серия подгонок, жалобы, новое правило и внешняя проверка — четыре проверяемых принципа, по которым Луп решает, чинить действие или менять правила.</div><div class="fg"><span class="fk">В общем случае</span>Одинарная петля исправляет результат в рамках старых правил. Двойная меняет сами правила, и делает это по проверяемым принципам: так харнесс учится, но не расползается от случайных правок.</div><div class="fa"><span class="fk">Что сделать</span>Когда одна и та же правка повторяется третий раз, остановитесь и спросите, какое правило её вызывает. Меняйте правило, только если оно объясняет и старые случаи.</div></div></section><section class="chapter" id="controls"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg></span>Направляющие и датчики</h2><div class="gs" role="img" aria-label="Матрица: направляющие до действия агента и датчики после; вычислимые и через ИИ"><div class="gs-c"></div><div class="gs-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg><b>Направляющие</b><small>до действия</small></div><div class="gs-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg><b>Датчики</b><small>после действия</small></div><div class="gs-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6" y="6" width="12" height="12" rx="2"/><path d="M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4"/></svg><b>Вычислимые</b><small>быстро · надёжно</small><span class="spd"><i class="on"></i><i class="on"></i><i class="on"></i></span></div><div class="gs-x"><span class="chip">типы</span><span class="chip">шаблоны кода</span><span class="chip">генераторы</span></div><div class="gs-x"><span class="chip">тесты</span><span class="chip">линтер</span><span class="chip">проверка типов</span></div><div class="gs-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z"/></svg><b>Через ИИ</b><small>гибко · дороже</small><span class="spd"><i class="on"></i><i></i><i></i></span></div><div class="gs-x"><span class="chip">AGENTS.md · CLAUDE.md</span><span class="chip">скиллы</span><span class="chip">спеки</span></div><div class="gs-x"><span class="chip">ИИ-ревью</span><span class="chip">модель-судья</span></div></div><p class="cap">Деление по <a href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener">Martin Fowler: Harness engineering</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Четыре клетки: направляющие задают курс до работы агента, датчики ловят отклонения после, и каждая бывает вычислимой или через ИИ.</div><div class="fg"><span class="fk">В общем случае</span>Вычислимые проверки срабатывают за секунды и не ошибаются, поэтому их ставят везде, где правило можно записать формально. Проверки через ИИ оставляют для смысла: стиль, понятность, соответствие замыслу.</div><div class="fa"><span class="fk">Что сделать</span>Для каждого правила из инструкции агента спросите, можно ли проверить его тестом или линтером. Если можно — перенесите.</div></div></section><section class="chapter" id="layers"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l9 5-9 5-9-5 9-5z"/><path d="M3 13l9 5 9-5"/></svg></span>Три слоя проверок</h2><div class="ly" role="img" aria-label="Три слоя: качество кода — самый зрелый, архитектура — средний, поведение — наименее зрелый"><div class="ly-r"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4l6 6M4 20c2-6 6-10 10-10l2 2c0 4-4 8-10 10z"/></svg></span><b>Качество кода</b><div class="ly-bar"><i style="width:88%"></i></div><span class="ly-m">зрелый</span></div><div class="ly-r"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="6" rx="1"/><rect x="14" y="15" width="7" height="6" rx="1"/><rect x="14" y="3" width="7" height="6" rx="1"/><path d="M10 6h4M17.5 9v6"/></svg></span><b>Архитектура</b><div class="ly-bar"><i style="width:55%"></i></div><span class="ly-m">растёт</span></div><div class="ly-r"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-6 8-6s8 2 8 6"/></svg></span><b>Поведение</b><div class="ly-bar"><i style="width:25%"></i></div><span class="ly-m">сложнее всего</span></div></div><p class="cap">Зрелость слоёв по <a href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener">Martin Fowler</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Качество кода проверять научились лучше всего, поведение продукта — хуже всего.</div><div class="fg"><span class="fk">В общем случае</span>Линтеры и форматтеры закрывают первый слой почти сразу. Архитектуру проверяют правилами зависимостей и требованиями к скорости. Поведение по-прежнему требует хороших тестов на сценарии и взгляда человека.</div><div class="fa"><span class="fk">Что сделать</span>Начните с первого слоя: подключите линтер и форматтер к каждому запуску агента, затем добавьте одно правило на границы модулей.</div></div></section><section class="chapter" id="shift"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg></span>Раньше — дешевле</h2><div class="sh" role="img" aria-label="Чем раньше срабатывает проверка, тем дешевле ошибка: до работы агента, при записи, в CI, на ревью"><div class="sh-s"><span class="sh-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><b>До работы</b><small>инструкции · спеки</small><span class="usd">$</span></div><div class="sh-s"><span class="sh-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6" y="6" width="12" height="12" rx="2"/><path d="M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4"/></svg></span><b>При записи</b><small>хуки · линтер</small><span class="usd">$$</span></div><div class="sh-s"><span class="sh-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg></span><b>В CI</b><small>тесты · сборка</small><span class="usd">$$$</span></div><div class="sh-s"><span class="sh-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-6 8-6s8 2 8 6"/></svg></span><b>На ревью</b><small>человек</small><span class="usd">$$$$</span></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Одна и та же ошибка стоит дешевле всего до начала работы агента и дороже всего на ревью человеком.</div><div class="fg"><span class="fk">В общем случае</span>Быстрые проверки ставят как можно раньше: агент исправляется сам, пока контекст задачи у него перед глазами, и до человека доходят только спорные места.</div><div class="fa"><span class="fk">Что сделать</span>Подключите тесты и линтер как хук, который агент запускает после каждой правки, а не только в CI.</div></div></section><section class="chapter" id="human"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-6 8-6s8 2 8 6"/></svg></span>Где нужен человек</h2><div class="hm" role="img" aria-label="Рутинные проверки выполняет харнесс, человек решает архитектурные и продуктовые вопросы и улучшает сам харнесс"><div class="hm-a"><div class="hm-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg>Харнесс</div><div class="dots"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><small>стиль · типы · тесты · границы</small></div><div class="hm-b"><div class="hm-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-6 8-6s8 2 8 6"/></svg>Человек</div><div class="dots"><i></i><i></i><i></i><i></i><i></i><i></i></div><small>архитектура · продукт · новые правила</small></div></div><p class="cap">«Хороший харнесс оставляет человека в контуре и направляет его внимание туда, где оно важнее всего» — пересказ <a href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener">Martin Fowler</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Большую часть проверок берёт харнесс, человеку остаются решения и улучшение самого харнесса.</div><div class="fg"><span class="fk">В общем случае</span>Опытный разработчик держит в голове неявный харнесс: знание архитектуры, привычки команды, чутьё на риск. HDD переносит это знание в явные правила, и его получает каждый запуск агента.</div><div class="fa"><span class="fk">Что сделать</span>После каждого ревью кода агента выпишите одно замечание, которое повторялось, и оформите его правилом.</div></div></section><section class="chapter" id="spec"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg></span>HDD и спеки</h2><div class="sp" role="img" aria-label="Спека задаёт цель, харнесс проверяет, что агент к ней пришёл"><div class="sp-a"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg><b>Спека</b><small>какой результат нужен</small></div><div class="sp-x"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></div><div class="sp-b"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/></svg><b>Харнесс</b><small>как проверить, что он получен</small></div><div class="sp-x"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></div><div class="sp-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M8 12.5l3 3 5-6"/></svg><b>Принятый код</b><small>без ручного контроля каждой строки</small></div></div><p class="cap">«Спеки задают целевое состояние, харнесс — систему контроля» — <a href="https://loiane.com/2026/04/harness-engineering-missing-layer-specs-driven-ai-development/" target="_blank" rel="noopener">Loiane Groner</a>. Про спеки — доклад <a href="/talk/spec-driven-development/">Spec-Driven Development на практике</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Спека отвечает на вопрос «что строим», харнесс — «как убедиться, что построили».</div><div class="fg"><span class="fk">В общем случае</span>Без спеки харнессу нечего проверять, без харнесса спека остаётся документом. Вместе они позволяют принимать код агента по проверкам, а не по чтению каждой строки.</div><div class="fa"><span class="fk">Что сделать</span>Для каждого требования из спеки запишите, какой тест или проверка подтвердит его выполнение.</div></div></section><section class="chapter" id="start"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg></span>С чего начать</h2><ol class="steps"><li><span class="step-n">1</span><div><div class="step-t">Файл инструкций для агента</div><div class="step-d">AGENTS.md или CLAUDE.md в корне проекта: как собирать, как тестировать, что нельзя</div></div></li><li><span class="step-n">2</span><div><div class="step-t">Линтер и тесты после каждой правки</div><div class="step-d">хук, который агент запускает сам, до того как отдать результат</div></div></li><li><span class="step-n">3</span><div><div class="step-t">Журнал ошибок агента</div><div class="step-d">каждая исправленная вручную ошибка — строка с причиной</div></div></li><li><span class="step-n">4</span><div><div class="step-t">Ошибка → правило</div><div class="step-d">раз в неделю перенести записи журнала в инструкции, тесты или хуки</div></div></li><li><span class="step-n">5</span><div><div class="step-t">Файл прогресса для долгих задач</div><div class="step-d">список фич со статусом и история коммитов, чтобы новая сессия продолжила с того же места <a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents" target="_blank" rel="noopener">Anthropic</a></div></div></li></ol><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Пять шагов: два настраивают харнесс сразу, три запускают петлю «ошибка → правило».</div><div class="fg"><span class="fk">В общем случае</span>Харнесс не проектируют целиком заранее. Он растёт из реальных ошибок агента в вашем проекте, и через несколько недель агент перестаёт повторять самые частые из них.</div><div class="fa"><span class="fk">Что сделать</span>Сегодня создайте файл инструкций и журнал ошибок. Через неделю перенесите первые записи журнала в правила.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/work-prompts-examples/"><div class="k">Этап 1–2</div><div class="t">Промпты для рабочих задач</div><div class="d">как составить один запрос и подать данные</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Этап 3</div><div class="t">Сравнение харнессов</div><div class="d">Claude Code, Codex, Cursor, Hermes и чат</div></a></div><p class="cap">Ещё почитать: <a href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener">Martin Fowler</a> · <a href="https://www.anthropic.com/engineering/harness-design-long-running-apps" target="_blank" rel="noopener">Anthropic: Harness design</a> · <a href="https://leanpub.com/becoming-a-harness-driven-developer" target="_blank" rel="noopener">Becoming a Harness-Driven Developer</a> · <a href="https://github.com/ai-boost/awesome-harness-engineering" target="_blank" rel="noopener">awesome-harness-engineering</a></p></section><footer>Термины и деление на слои — по источникам, ссылки на них стоят в подписях под схемами.</footer></div>]]></content:encoded></item>
<item><title>Подходы к работе с харнессом: цикл ответа и ревью с правкой исходного запроса</title><link>https://www.urvanov.com/blog/harness-work-approaches/</link><guid>https://www.urvanov.com/blog/harness-work-approaches/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Что делать, когда ответ не подошёл: три пути и повтор цикла. Как ревью находит пропуски, почему их записывают в исходный запрос и прогоняют пайплайн заново. По руководствам Anthropic, OpenAI и Google.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-prompts-ru"><div class="flow lead" aria-label="Два подхода: цикл ответа и ревью с правкой запроса"><div class="lane"><div class="lane-h" style="color:var(--warn)"><span class="dot" style="background:var(--warn)"></span>Ответ не подошёл</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg><b>Ответ</b><small>мимо задачи</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg><b>Один из трёх путей</b><small>уточнить, переделать, спросить</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="3"/><path d="M12 8.5l1.2 2.3 2.3 1.2-2.3 1.2-1.2 2.3-1.2-2.3-2.3-1.2 2.3-1.2z"/></svg><b>Новый ответ</b><small>и снова проверка</small></span></div></div><div class="lane"><div class="lane-h" style="color:var(--accent)"><span class="dot" style="background:var(--accent)"></span>Ревью нашло пропуск</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><b>Запрос v1</b><small>исходное задание</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="6"/><path d="M20 20l-4.3-4.3"/></svg><b>Ревью</b><small>два пропуска</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12l5 5 9-10"/></svg><b>Запрос v2</b><small>и весь пайплайн заново</small></span></div></div></div><p class="cap">Оба подхода работают в любом харнессе: в чате, Claude Code, Codex или Cursor.</p><section class="chapter" id="iterate"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.9-3.5M4 4v4h4"/><path d="M4 13a8 8 0 0 0 14.9 3.5M20 20v-4h-4"/></svg></span>Если ответ не подошёл</h2><div class="rv-wrap"><svg class="rv" viewBox="0 0 930 390" role="img" aria-label="Если ответ не подошёл, есть три пути: модель поняла задачу — уточнить в том же чате; поняла неверно или выдумала факты — переделать запрос с недостающими данными и разрешением ответить «не знаю» и отправить в новый чат; неясно, что нужно — сначала попросить три вопроса и собрать из ответов промпт из шести частей. Каждый путь даёт новый ответ; если он снова не подошёл, цикл повторяется"><title>Если ответ не подошёл, есть три пути: модель поняла задачу — уточнить в том же чате; поняла неверно или выдумала факты — переделать запрос с недостающими данными и разрешением ответить «не знаю» и отправить в новый чат; неясно, что нужно — сначала попросить три вопроса и собрать из ответов промпт из шести частей. Каждый путь даёт новый ответ; если он снова не подошёл, цикл повторяется</title><defs><marker id="it-ar" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="rv-arh"/></marker><marker id="it-arb" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" style="fill:var(--c-team)"/></marker></defs><rect class="rv-n bad" x="10" y="20" width="140" height="290" rx="7"/><path class="rv-x" d="M69,140 l22,22 M91,140 l-22,22"/><text class="rv-t" x="80" y="190" text-anchor="middle">Ответ</text><text class="rv-t" x="80" y="210" text-anchor="middle">не подошёл</text><path class="rv-e " d="M150,65 L288,65" marker-end="url(#it-ar)"/><text class="rv-el" x="219" y="57" text-anchor="middle">понял задачу</text><rect x="290" y="30" width="6" height="70" rx="2" style="fill:var(--c-chat)"/><rect class="rv-n req" x="290" y="30" width="230" height="70" rx="7"/><text class="rv-t" x="308" y="60" text-anchor="start">Уточнить в том же чате</text><text class="rv-q" x="308" y="82" text-anchor="start">«короче», «мягче тон»</text><path class="rv-e " d="M520,65 L710,65" marker-end="url(#it-ar)"/><text class="rv-el" x="615" y="57" text-anchor="middle">тот же контекст</text><path class="rv-e " d="M150,165 L288,165" marker-end="url(#it-ar)"/><text class="rv-el" x="219" y="157" text-anchor="middle">понял неверно</text><text class="rv-el" x="219" y="183" text-anchor="middle">или выдумал факты</text><rect x="290" y="130" width="6" height="70" rx="2" style="fill:var(--c-proj)"/><rect class="rv-n req" x="290" y="130" width="230" height="70" rx="7"/><text class="rv-t" x="308" y="160" text-anchor="start">Переделать запрос</text><text class="rv-q" x="308" y="182" text-anchor="start">+ данные, «не знаю» можно</text><path class="rv-e " d="M520,165 L544,165" marker-end="url(#it-ar)"/><rect class="rv-n key" x="546" y="136" width="150" height="58" rx="7"/><text class="rv-t sm" x="621" y="170" text-anchor="middle">Новый чат</text><path class="rv-e " d="M696,165 L710,165" marker-end="url(#it-ar)"/><path class="rv-e " d="M150,265 L288,265" marker-end="url(#it-ar)"/><text class="rv-el" x="219" y="257" text-anchor="middle">неясно, что нужно</text><rect x="290" y="230" width="6" height="70" rx="2" style="fill:var(--c-code)"/><rect class="rv-n req" x="290" y="230" width="230" height="70" rx="7"/><text class="rv-t" x="308" y="260" text-anchor="start">Сначала 3 вопроса</text><text class="rv-q" x="308" y="282" text-anchor="start">вопросы → ваши ответы</text><path class="rv-e " d="M520,265 L544,265" marker-end="url(#it-ar)"/><rect class="rv-n key" x="546" y="236" width="150" height="58" rx="7"/><text class="rv-t sm" x="621" y="270" text-anchor="middle">Промпт · 6 частей</text><path class="rv-e " d="M696,265 L710,265" marker-end="url(#it-ar)"/><rect class="rv-n" x="712" y="20" width="88" height="290" rx="7"/><text class="rv-t" x="756" y="160" text-anchor="middle">Новый</text><text class="rv-t" x="756" y="180" text-anchor="middle">ответ</text><path class="rv-e " d="M800,165 L818,165" marker-end="url(#it-ar)"/><rect class="rv-n good" x="820" y="130" width="100" height="70" rx="7"/><path class="rv-ok big" d="M858,150 l7,7 l14,-15"/><text class="rv-t sm" x="870" y="186" text-anchor="middle">Подошёл</text><path class="rv-e back" d="M756,310 L756,350 L80,350 L80,314" marker-end="url(#it-arb)"/><text class="rv-bl" x="416" y="374" text-anchor="middle">↺ не подошёл — новый круг</text></svg><svg class="rv rv-v" viewBox="0 0 360 738" role="img" aria-label="Если ответ не подошёл, есть три пути: модель поняла задачу — уточнить в том же чате; поняла неверно или выдумала факты — переделать запрос с недостающими данными и разрешением ответить «не знаю» и отправить в новый чат; неясно, что нужно — сначала попросить три вопроса и собрать из ответов промпт из шести частей. Каждый путь даёт новый ответ; если он снова не подошёл, цикл повторяется"><defs><marker id="it-arv" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="rv-arh"/></marker><marker id="it-arvb" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" style="fill:var(--c-team)"/></marker></defs><rect class="rv-n bad" x="24" y="10" width="326" height="50" rx="7"/><path class="rv-x" d="M40,27 l16,16 M56,27 l-16,16"/><text class="rv-t" x="187" y="41" text-anchor="middle">Ответ не подошёл</text><text class="rv-run" x="24" y="86" text-anchor="start">1 · понял задачу</text><rect x="24" y="94" width="6" height="56" rx="2" style="fill:var(--c-chat)"/><rect class="rv-n req" x="24" y="94" width="326" height="56" rx="7"/><text class="rv-t" x="40" y="118" text-anchor="start">Уточнить в том же чате</text><text class="rv-q sm" x="40" y="138" text-anchor="start">«короче», «мягче тон»</text><path class="rv-e " d="M187,150 L187,166" marker-end="url(#it-arv)"/><rect class="rv-n" x="24" y="168" width="326" height="40" rx="7"/><text class="rv-t sm" x="187" y="194" text-anchor="middle">Новый ответ</text><text class="rv-run" x="24" y="236" text-anchor="start">2 · понял неверно или выдумал</text><rect x="24" y="244" width="6" height="56" rx="2" style="fill:var(--c-proj)"/><rect class="rv-n req" x="24" y="244" width="326" height="56" rx="7"/><text class="rv-t" x="40" y="268" text-anchor="start">Переделать запрос</text><text class="rv-q sm" x="40" y="288" text-anchor="start">+ данные, «не знаю» можно</text><path class="rv-e " d="M187,300 L187,316" marker-end="url(#it-arv)"/><rect class="rv-n key" x="24" y="318" width="326" height="40" rx="7"/><text class="rv-t sm" x="187" y="344" text-anchor="middle">Новый чат</text><path class="rv-e " d="M187,358 L187,374" marker-end="url(#it-arv)"/><rect class="rv-n" x="24" y="376" width="326" height="40" rx="7"/><text class="rv-t sm" x="187" y="402" text-anchor="middle">Новый ответ</text><text class="rv-run" x="24" y="444" text-anchor="start">3 · неясно, что нужно</text><rect x="24" y="452" width="6" height="56" rx="2" style="fill:var(--c-code)"/><rect class="rv-n req" x="24" y="452" width="326" height="56" rx="7"/><text class="rv-t" x="40" y="476" text-anchor="start">Сначала 3 вопроса</text><text class="rv-q sm" x="40" y="496" text-anchor="start">вопросы → ваши ответы</text><path class="rv-e " d="M187,508 L187,524" marker-end="url(#it-arv)"/><rect class="rv-n key" x="24" y="526" width="326" height="40" rx="7"/><text class="rv-t sm" x="187" y="552" text-anchor="middle">Промпт · 6 частей</text><path class="rv-e " d="M187,566 L187,582" marker-end="url(#it-arv)"/><rect class="rv-n" x="24" y="584" width="326" height="40" rx="7"/><text class="rv-t sm" x="187" y="610" text-anchor="middle">Новый ответ</text><path class="rv-e " d="M187,624 L187,642" marker-end="url(#it-arv)"/><rect class="rv-n good" x="24" y="644" width="326" height="40" rx="7"/><path class="rv-ok big" d="M40,664 l7,7 l14,-15"/><text class="rv-t sm" x="187" y="670" text-anchor="middle">Подошёл</text><text class="rv-bl" x="187" y="710" text-anchor="middle">↺ не подошёл — новый круг</text><path class="rv-e back" d="M84,716 L84,728 L8,728 L8,35 L22,35" marker-end="url(#it-arvb)"/></svg></div><div class="sublabel" style="margin-top:22px">Путь 3: три вопроса и новый запрос</div><div class="sublabel" style="margin-top:16px">Шаг 1</div><pre class="prompt">[описание задачи]&#10;Прежде чем выполнять задачу, задай мне 3 вопроса, ответы на которые сильнее всего улучшат результат. Не начинай работу, пока я не отвечу.</pre><div class="sublabel" style="margin-top:12px">Шаг 3</div><pre class="prompt">Собери из задачи и моих ответов итоговый промпт: роль, кому и зачем, данные, пример, формат, вопрос в конце. Выведи только текст промпта.</pre><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Три ситуации и одно действие в каждой: уточнить в том же диалоге, переделать запрос или сначала получить вопросы от модели.</div><div class="fg"><span class="fk">В общем случае</span>Уточнение сохраняет поданный контекст и подходит, когда задача понята верно. Если задача понята неверно, быстрее переделать запрос. Если модель выдумала факты, дайте в новом запросе нужные данные и разрешите ответить «не знаю»<a class="proof" href="https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations" target="_blank" rel="noopener" data-quote="Anthropic: «Explicitly give Claude permission to admit uncertainty. This simple technique can drastically reduce false information» — platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Новый ответ проверяется так же, и цикл повторяется, пока ответ не подойдёт. Вопросы от модели полезны, когда неясно, какой контекст нужен: неясность в запросе даёт модели простор для неверного толкования<a class="proof" href="https://claude.com/blog/best-practices-for-prompt-engineering" target="_blank" rel="noopener" data-quote="Anthropic: «Don&#39;t assume the AI reads minds: Be specific about what you want. Leaving things ambiguous gives the AI room to misinterpret» — claude.com/blog/best-practices-for-prompt-engineering" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>, а при неясном намерении модели сами чаще просят уточнений<a class="proof" href="https://developers.openai.com/api/docs/guides/prompt-guidance" target="_blank" rel="noopener" data-quote="OpenAI: «When the user&#39;s intent is unclear, the model is more likely to ask the user for clarification to proceed»; при этом «Before asking the user clarifying questions, you should complete the work that is already authorized from context» — developers.openai.com/api/docs/guides/prompt-guidance" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Для новой задачи, в контексте которой вы не уверены, начните с просьбы задать три вопроса. Итоговый промпт из ответов отправьте новым запросом в новый чат.</div></div></section><section class="chapter" id="review"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="6"/><path d="M20 20l-4.3-4.3"/></svg></span>Ревью ответа: правим исходный запрос</h2><p class="why">Путь «переделать запрос» на примере: ревью нашло пропуски, в исходном запросе убрали лишнее и дописали недостающее, затем прогнали всё заново.</p><div class="rv-wrap"><svg class="rv" viewBox="0 0 930 360" role="img" aria-label="Первый прогон: в запросе ограничение «только номера РФ», агент, тесты прошли, ревью нашло два пропуска. В исходном запросе ограничение убирают, два случая дописывают, и весь пайплайн запускают заново: агент, тесты и ревью, всё покрыто."><title>Первый прогон: в запросе ограничение «только номера РФ», агент, тесты прошли, ревью нашло два пропуска. В исходном запросе ограничение убирают, два случая дописывают, и весь пайплайн запускают заново: агент, тесты и ревью, всё покрыто.</title><defs><marker id="rv-ar" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="rv-arh"/></marker></defs><text class="rv-run" x="10" y="22" text-anchor="start">прогон 1</text><rect class="rv-n req" x="10" y="32" width="230" height="76" rx="7"/><text class="rv-k" x="26" y="54" text-anchor="start">Запрос v1</text><text class="rv-q" x="26" y="76" text-anchor="start">«Нормализуй телефоны»</text><text class="rv-q rv-lim" x="26" y="96" text-anchor="start">только номера РФ</text><path class="rv-e " d="M240,61 L278,61" marker-end="url(#rv-ar)"/><rect class="rv-n key" x="280" y="32" width="110" height="58" rx="7"/><text class="rv-t" x="335" y="67" text-anchor="middle">Агент</text><path class="rv-e " d="M390,61 L428,61" marker-end="url(#rv-ar)"/><rect class="rv-n " x="430" y="32" width="120" height="58" rx="7"/><text class="rv-t" x="478" y="67" text-anchor="middle">Тесты</text><path class="rv-ok" d="M516,61 l6,6 l12,-13"/><path class="rv-e " d="M550,61 L588,61" marker-end="url(#rv-ar)"/><rect class="rv-n sen" x="590" y="32" width="110" height="58" rx="7"/><text class="rv-t" x="645" y="67" text-anchor="middle">Ревью</text><path class="rv-e " d="M700,61 L738,61" marker-end="url(#rv-ar)"/><rect class="rv-n bad" x="740" y="32" width="180" height="58" rx="7"/><path class="rv-x" d="M760,51 l18,18 M778,51 l-18,18"/><text class="rv-t" x="850" y="67" text-anchor="middle">2 пропуска</text><text class="rv-run" x="10" y="226" text-anchor="start">прогон 2 · весь пайплайн заново</text><rect class="rv-n req v2" x="10" y="236" width="230" height="114" rx="7"/><text class="rv-k" x="26" y="258" text-anchor="start">Запрос v2</text><text class="rv-q" x="26" y="280" text-anchor="start">«Нормализуй телефоны»</text><text class="rv-del" x="26" y="300" text-anchor="start">− только номера РФ</text><text class="rv-add" x="26" y="320" text-anchor="start">+ префикс без «+»</text><text class="rv-add" x="26" y="338" text-anchor="start">+ пустая строка</text><path class="rv-e " d="M240,265 L278,265" marker-end="url(#rv-ar)"/><rect class="rv-n key" x="280" y="236" width="110" height="58" rx="7"/><text class="rv-t" x="335" y="271" text-anchor="middle">Агент</text><path class="rv-e " d="M390,265 L428,265" marker-end="url(#rv-ar)"/><rect class="rv-n " x="430" y="236" width="120" height="58" rx="7"/><text class="rv-t" x="478" y="271" text-anchor="middle">Тесты</text><path class="rv-ok" d="M516,265 l6,6 l12,-13"/><path class="rv-e " d="M550,265 L588,265" marker-end="url(#rv-ar)"/><rect class="rv-n sen" x="590" y="236" width="110" height="58" rx="7"/><text class="rv-t" x="645" y="271" text-anchor="middle">Ревью</text><path class="rv-e " d="M700,265 L738,265" marker-end="url(#rv-ar)"/><rect class="rv-n good" x="740" y="236" width="180" height="58" rx="7"/><path class="rv-ok big" d="M760,265 l8,8 l16,-17"/><text class="rv-t" x="850" y="271" text-anchor="middle">всё покрыто</text><path class="rv-e back" d="M830,90 C 830,185 420,170 244,254" marker-end="url(#rv-ar)"/><text class="rv-bl" x="560" y="162" text-anchor="middle">правим исходный запрос</text></svg><svg class="rv rv-v" viewBox="0 0 360 454" role="img" aria-label="Первый прогон: в запросе ограничение «только номера РФ», агент, тесты прошли, ревью нашло два пропуска. В исходном запросе ограничение убирают, два случая дописывают, и весь пайплайн запускают заново: агент, тесты и ревью, всё покрыто."><defs><marker id="rv-arv" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="rv-arh"/></marker></defs><text class="rv-run" x="10" y="24" text-anchor="start">прогон 1</text><text class="rv-run" x="190" y="24" text-anchor="start">прогон 2</text><rect class="rv-n req" x="10" y="40" width="160" height="68" rx="7"/><text class="rv-k" x="20" y="57" text-anchor="start">Запрос v1</text><text class="rv-q sm" x="20" y="76" text-anchor="start">«Нормализуй телефоны»</text><text class="rv-q sm rv-lim" x="20" y="96" text-anchor="start">только номера РФ</text><path class="rv-e " d="M90,108 L90,128" marker-end="url(#rv-arv)"/><rect class="rv-n key" x="10" y="130" width="160" height="44" rx="7"/><text class="rv-t" x="90" y="158" text-anchor="middle">Агент</text><path class="rv-e " d="M90,174 L90,194" marker-end="url(#rv-arv)"/><rect class="rv-n " x="10" y="196" width="160" height="44" rx="7"/><text class="rv-t" x="90" y="224" text-anchor="middle">Тесты</text><path class="rv-ok" d="M136,218 l5,5 l10,-11"/><path class="rv-e " d="M90,240 L90,260" marker-end="url(#rv-arv)"/><rect class="rv-n sen" x="10" y="262" width="160" height="44" rx="7"/><text class="rv-t" x="90" y="290" text-anchor="middle">Ревью</text><path class="rv-e " d="M90,306 L90,326" marker-end="url(#rv-arv)"/><rect class="rv-n bad" x="10" y="328" width="160" height="50" rx="7"/><path class="rv-x" d="M24,344 l16,16 M40,344 l-16,16"/><text class="rv-t" x="104" y="359" text-anchor="middle">2 пропуска</text><rect class="rv-n req v2" x="190" y="40" width="160" height="104" rx="7"/><text class="rv-k" x="200" y="57" text-anchor="start">Запрос v2</text><text class="rv-q sm" x="200" y="76" text-anchor="start">«Нормализуй телефоны»</text><text class="rv-del sm" x="200" y="96" text-anchor="start">− только номера РФ</text><text class="rv-add sm" x="200" y="114" text-anchor="start">+ префикс без «+»</text><text class="rv-add sm" x="200" y="132" text-anchor="start">+ пустая строка</text><path class="rv-e " d="M270,144 L270,164" marker-end="url(#rv-arv)"/><rect class="rv-n key" x="190" y="166" width="160" height="44" rx="7"/><text class="rv-t" x="270" y="194" text-anchor="middle">Агент</text><path class="rv-e " d="M270,210 L270,230" marker-end="url(#rv-arv)"/><rect class="rv-n " x="190" y="232" width="160" height="44" rx="7"/><text class="rv-t" x="270" y="260" text-anchor="middle">Тесты</text><path class="rv-ok" d="M316,254 l5,5 l10,-11"/><path class="rv-e " d="M270,276 L270,296" marker-end="url(#rv-arv)"/><rect class="rv-n sen" x="190" y="298" width="160" height="44" rx="7"/><text class="rv-t" x="270" y="326" text-anchor="middle">Ревью</text><path class="rv-e " d="M270,342 L270,362" marker-end="url(#rv-arv)"/><rect class="rv-n good" x="190" y="364" width="160" height="50" rx="7"/><path class="rv-ok big" d="M204,389 l7,7 l14,-15"/><text class="rv-t" x="284" y="395" text-anchor="middle">всё покрыто</text><path class="rv-e back" d="M90,378 C 90,402 180,402 180,130 C 180,90 185,80 188,72" marker-end="url(#rv-arv)"/><text class="rv-bl sm" x="10" y="444" text-anchor="start">↺ правим исходный запрос</text></svg></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Ревью нашло два случая, которых не было в задании: международный префикс без плюса и пустую строку. Из исходного запроса убрали лишнее ограничение «только номера РФ», дописали два случая и прогнали весь пайплайн заново.</div><div class="fg"><span class="fk">В общем случае</span>Найденный пропуск записывают в исходный запрос и запускают цикл с начала: агент заново пишет код, тесты и ревью проверяют уже с новыми случаями, а уточнение остаётся в задании для следующих запусков. Отдельный проход ревью со своей инструкцией описан в руководстве Google по промптингу<a class="proof" href="https://www.kaggle.com/whitepaper-prompt-engineering" target="_blank" rel="noopener" data-quote="Google, Prompt Engineering whitepaper: раздел про работу с кодом, включая ревью и дебаг отдельным запросом — kaggle.com/whitepaper-prompt-engineering" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Когда ревью что-то нашло, допишите это в исходный запрос и перезапустите весь цикл: правка, тесты, ревью.</div></div><a class="hdd-cta" href="/blog/harness-driven-development/"><span class="hdd-k">Следующий шаг · HDD</span><b>Harness-Driven Development</b><span>Как пропуск, который повторяется от задачи к задаче, перенести из запроса в правила харнесса</span></a></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/specs-rules-skills/"><div class="k">Контекст</div><div class="t">Спеки, библия, правила и скиллы</div><div class="d">Что агент должен знать о проекте</div></a><a href="/blog/harness-driven-development/"><div class="k">Метод</div><div class="t">Harness-Driven Development</div><div class="d">Ошибка агента → правило окружения</div></a><a href="/blog/work-prompts-examples/"><div class="k">Практика</div><div class="t">Промпты для рабочих задач</div><div class="d">Пять частей и шесть примеров</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Сравнение</div><div class="t">Сравнение харнессов</div><div class="d">Claude Code, Codex, Cursor, Hermes и чат</div></a></div></section><footer>Приёмы — по официальным руководствам Anthropic, OpenAI и Google, источник у значка рядом с утверждением. Цитаты из руководства Google даны пересказом.</footer></div>]]></content:encoded></item>
<item><title>Петля сверки для спек: как в Kubernetes, только желаемое — спека, а фактическое — код</title><link>https://www.urvanov.com/blog/spec-reconcile-loop/</link><guid>https://www.urvanov.com/blog/spec-reconcile-loop/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Spec-driven development с петлёй сверки: кто меняет желаемое, а кто приводит к нему код, почему зелёные тесты ещё не значат «верно» и какие шесть возможностей среды нужны агенту, чтобы петля замкнулась.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-rec-ru"><div class="hc" role="img" aria-label="Цепочка петли сверки: желаемое — спека, исполнитель — агент, фактическое — код, замер — тесты"><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg><b>Желаемое</b><code>спека</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="8" width="14" height="11" rx="3"/><path d="M12 4v4M9 13h.01M15 13h.01M9 16h6"/></svg><b>Исполнитель</b><code>агент</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 7l-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"/></svg><b>Фактическое</b><code>код</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 16a8 8 0 1 1 16 0"/><path d="M12 16l4-5"/><path d="M4 20h16"/></svg><b>Замер</b><code>тесты</code></div></div><section class="chapter" id="k8s"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2.5"/><path d="M12 4v5.5M12 14.5V20M4 12h5.5M14.5 12H20M6.3 6.3l3.9 3.9M13.8 13.8l3.9 3.9M17.7 6.3l-3.9 3.9M10.2 13.8l-3.9 3.9"/></svg></span>Та же петля, что в Kubernetes</h2><p class="why">Желаемое здесь — <a href="/blog/specs-by-aggregates/">словарь агрегатов</a>: одна запись на понятие, требования со словами MUST и SHOULD.</p><div class="kl" role="img" aria-label="Kubernetes: чарт, контроллер, ноды, пробы. Спеки: словарь, агент, код, тесты. Человек меняет только желаемое, исполнитель сверяет замер с желаемым по кругу."><div class="kl-hu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg>человек меняет желаемое <span aria-hidden="true">↓</span></div><div class="kl-g"><div class="kl-c"></div><div class="kl-h">желаемое</div><div class="kl-h">исполнитель</div><div class="kl-h">фактическое</div><div class="kl-h">замер</div><div class="kl-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2.5"/><path d="M12 4v5.5M12 14.5V20M4 12h5.5M14.5 12H20M6.3 6.3l3.9 3.9M13.8 13.8l3.9 3.9M17.7 6.3l-3.9 3.9M10.2 13.8l-3.9 3.9"/></svg><b>Kubernetes</b></div><div class="kl-x on"><small class="kl-m">желаемое</small>чарт · манифест</div><div class="kl-x"><small class="kl-m">исполнитель</small>контроллер</div><div class="kl-x"><small class="kl-m">фактическое</small>ноды · поды</div><div class="kl-x"><small class="kl-m">замер</small>пробы · метрики</div><div class="kl-r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg><b>Спеки</b></div><div class="kl-x on"><small class="kl-m">желаемое</small>словарь · MUST</div><div class="kl-x"><small class="kl-m">исполнитель</small>агент</div><div class="kl-x"><small class="kl-m">фактическое</small>код</div><div class="kl-x"><small class="kl-m">замер</small>тесты · качество</div></div><div class="kl-bk"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 0 1-15.5 6.3"/><path d="M3 12a9 9 0 0 1 15.5-6.3"/><path d="M18 2v4h-4M6 22v-4h4"/></svg>замер → исполнитель, по кругу</div></div><p class="cap">Петля сверки — по <a href="https://kubernetes.io/docs/concepts/architecture/controller/" target="_blank" rel="noopener">документации Kubernetes о контроллерах</a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>В Kubernetes человек правит чарт, а контроллер приводит ноды к нему. Здесь человек правит словарь, а агент приводит к нему код и проверяет тестами.</div><div class="fg"><span class="fk">В общем случае</span>Обе системы держат желаемое состояние отдельно от фактического и сверяют их по кругу. Человек в петле меняет только желаемое, поэтому любая его правка сразу превращается в работу исполнителя.</div><div class="fa"><span class="fk">Что сделать</span>Правьте требование в словаре, а не код руками, и запускайте агента с задачей привести код к словарю.</div></div></section><section class="chapter" id="sensors"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 16a8 8 0 1 1 16 0"/><path d="M12 16l4-5"/><path d="M4 20h16"/></svg></span>Замер видит только то, что в него заложено</h2><p class="why">Пример — бронь переговорной из статьи <a href="/blog/specs-by-aggregates/">Спеки по агрегатам</a>: три требования MUST и одно SHOULD.</p><div class="sn"><div class="sn-p"><div class="sn-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2.5"/><path d="M12 4v5.5M12 14.5V20M4 12h5.5M14.5 12H20M6.3 6.3l3.9 3.9M13.8 13.8l3.9 3.9M17.7 6.3l-3.9 3.9M10.2 13.8l-3.9 3.9"/></svg><b>Kubernetes</b></div><div class="sn-i ok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12l5 5 9-10"/></svg><code>/healthz → 200</code></div><div class="sn-i no"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg><code>очередь заказов стоит</code></div><div class="sn-v">проба зелёная, сервис не работает</div></div><div class="sn-p"><div class="sn-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z"/><path d="M4 19V5"/></svg><b>Спеки</b></div><div class="sn-i ok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12l5 5 9-10"/></svg><code>MUST · не пересекаются</code><span>тест</span></div><div class="sn-i ok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12l5 5 9-10"/></svg><code>MUST · только вперёд</code><span>тест</span></div><div class="sn-i no"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg><code>MUST · 15 мин → closed</code><span>нет проверки</span></div><div class="sn-i eye"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg><code>SHOULD · канал</code><span>ревью</span></div><div class="sn-cov"><span>MUST покрыто</span><span class="sn-bar"><i style="width:67%"></i></span><b>2 / 3</b></div><div class="sn-v">тесты зелёные, одно MUST не проверено</div></div></div><div class="sn-rules"><span class="chip">каждое MUST → своя проверка</span><span class="chip">MUST без проверки = находка</span><span class="chip">зелёный ≠ верный</span></div><p class="cap">Какие пробы бывают и что они проверяют — <a href="https://kubernetes.io/docs/concepts/configuration/liveness-readiness-startup-probes/" target="_blank" rel="noopener">Kubernetes: probes</a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Проба отвечает «200», хотя заказы стоят, а тесты брони зелёные, хотя правило про 15 минут никто не проверяет.</div><div class="fg"><span class="fk">В общем случае</span>Замер подтверждает только то, что в нём записано, и ничего не говорит об остальном. Поэтому карточку агрегата сверяют с проверками: MUST без проверки — это пробел, а не выполненное требование.</div><div class="fa"><span class="fk">Что сделать</span>Пройдите по MUST своего словаря и пометьте, где нет теста. Каждую такую строку заведите задачей или понизьте до SHOULD осознанно.</div></div></section><section class="chapter" id="env"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/><path d="M8 21h8"/></svg></span>Среда решает, замкнётся ли петля</h2><div class="ev-pair"><div class="ev-pp"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2.5"/><path d="M12 4v5.5M12 14.5V20M4 12h5.5M14.5 12H20M6.3 6.3l3.9 3.9M13.8 13.8l3.9 3.9M17.7 6.3l-3.9 3.9M10.2 13.8l-3.9 3.9"/></svg><b>кластер</b><small>среда контроллера</small></div><span class="ev-eq">≈</span><div class="ev-pp"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/><path d="M8 21h8"/></svg><b>харнесс</b><small>среда агента</small></div></div><div class="ev"><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4l12 8-12 8z"/></svg></span><b>Запуск кода</b><small><span>без этого →</span> догадки вместо фактов</small></div><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3h6M10 3v6l-5 9a2 2 0 0 0 1.7 3h10.6a2 2 0 0 0 1.7-3l-5-9V3"/></svg></span><b>Тесты</b><small><span>без этого →</span> MUST не проверить</small></div><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5h16M4 10h16M4 15h10M4 20h7"/></svg></span><b>Логи</b><small><span>без этого →</span> не видно, что сломалось</small></div><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="8" ry="3"/><path d="M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/></svg></span><b>Тестовые данные</b><small><span>без этого →</span> проверка на пустом</small></div><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3v5M15 3v5M6 8h12v3a6 6 0 0 1-12 0z"/><path d="M12 17v4"/></svg></span><b>Сервисы через MCP</b><small><span>без этого →</span> интеграции вслепую</small></div><div class="ev-c"><span class="ev-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6z"/><path d="M9 12l2 2 4-4"/></svg></span><b>Песочница и права</b><small><span>без этого →</span> страшно дать действовать</small></div></div><a class="ev-cta" href="/blog/ai-in-code-harness-and-tools/"><span class="ev-ci"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/><path d="M8 21h8"/></svg></span><span class="ev-ct"><small>Отдельная статья</small><b>Как выбрать среду: сравнение харнессов</b><span>Claude Code, Codex, Cursor, Hermes и чат на одной карте</span></span><span class="ev-ca"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span></a><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Контроллер Kubernetes работает, потому что кластер даёт ему API, ноды и пробы. Агенту для той же петли нужны запуск кода, тесты, логи, данные, сервисы и песочница.</div><div class="fg"><span class="fk">В общем случае</span>Словарь задаёт желаемое, но сверить с ним код может только тот, кто умеет код запускать и измерять. Чего нет в среде, того агент не проверит, и петля в этом месте разомкнута.</div><div class="fa"><span class="fk">Что сделать</span>Отметьте, какие из шести возможностей есть у вашего агента. Для каждой отсутствующей решите: добавить её в харнесс или сменить харнесс.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links three"><a href="/blog/specs-by-aggregates/"><div class="k">Желаемое</div><div class="t">Спеки по агрегатам</div><div class="d">словарь, RFC-требования и контексты</div></a><a href="/blog/harness-driven-development/"><div class="k">Петля ошибок</div><div class="t">Harness-Driven Development</div><div class="d">как ошибки агента становятся правилами</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Среда</div><div class="t">Сравнение харнессов</div><div class="d">где работает агент и что он видит</div></a></div></section><footer>Пример с бронированием выдуман. Термины и подходы — по источникам в подписях под схемами.</footer></div>]]></content:encoded></item>
<item><title>Спеки по агрегатам: RFC-требования и ограниченные контексты вместо спеки на каждую фичу</title><link>https://www.urvanov.com/blog/specs-by-aggregates/</link><guid>https://www.urvanov.com/blog/specs-by-aggregates/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Spec-driven development без разрастания спек: как держать их в одном словаре агрегатов, чтобы их не становилось больше с каждой фичей: уровни требований, карточка агрегата и границы контекстов.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-agg-ru"><div class="hc" role="img" aria-label="Цепочка: ограниченный контекст, агрегат, инвариант уровня MUST, проверка"><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="8" height="8" rx="1.5"/><rect x="13" y="13" width="8" height="8" rx="1.5"/><path d="M11 7h4a2 2 0 0 1 2 2v4"/></svg><b>Контекст</b><code>booking</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 4.5v9L12 21l-8-4.5v-9z"/><path d="M12 12l8-4.5M12 12v9M12 12L4 7.5"/></svg><b>Агрегат</b><code>Reservation</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h6"/><path d="M17 15l2 2 3-4"/></svg><b>Инвариант</b><code>MUST</code></div><span class="hc-a" aria-hidden="true">→</span><div class="hc-s"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3h6M10 3v6l-5 9a2 2 0 0 0 1.7 3h10.6a2 2 0 0 0 1.7-3l-5-9V3"/></svg><b>Проверка</b><code>тест</code></div></div><section class="chapter" id="growth"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 20h18"/><path d="M6 16v-3M10 16V9M14 16v-6M18 16V5"/></svg></span>Почему спек становится много</h2><div class="gw"><div class="gw-p"><div class="gw-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><b>Спека на фичу</b><small>понятие описано в каждой фиче</small></div><div class="gw-files"><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class="on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i><i class=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg></i></div><div class="gw-n"><b>12 файлов</b><span class="warn">«Бронь» — в 7</span></div><span class="gw-c bad">растёт с фичами</span></div><div class="gw-p on"><div class="gw-h"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 4.5v9L12 21l-8-4.5v-9z"/><path d="M12 12l8-4.5M12 12v9M12 12L4 7.5"/></svg><b>Словарь агрегатов</b><small>понятие описано один раз</small></div><div class="gw-aggs"><div class="gw-ag"><code>Reservation</code><span class="gw-d"><i></i><i></i><i></i><i></i><i></i></span></div><div class="gw-ag"><code>Room</code><span class="gw-d"><i></i><i></i><i></i></span></div><div class="gw-ag"><code>TimeSlot</code><span class="gw-d"><i></i><i></i></span></div><div class="gw-ag"><code>Member</code><span class="gw-d"><i></i><i></i></span></div></div><div class="gw-n"><b>4 записи</b><span class="good">«Бронь» — в 1</span></div><span class="gw-c good">растёт с доменом</span></div></div><div class="gw-flow"><span class="gw-fs"><code>Фича 13</code></span><span class="gw-ar">→</span><span class="gw-fs"><code>[booking::Reservation]</code><em>+1 MUST</em></span><span class="gw-ar">→</span><span class="gw-fs"><code>тест</code><em>+1</em></span></div><p class="cap">Числа условные. Как спеки и изменения раскладывает <a href="https://github.com/Fission-AI/OpenSpec" target="_blank" rel="noopener">OpenSpec</a>: папки specs/ и changes/, изменения уходят в архив.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Двенадцать фич дали двенадцать спек, и бронь описана в семи из них по-разному. В словаре те же фичи дописали строки в четыре записи агрегатов.</div><div class="fg"><span class="fk">В общем случае</span>Если спека привязана к изменению или фиче, файлов становится больше с каждой задачей, а одно понятие расходится по нескольким местам. Если единица — агрегат, число записей ограничено самим доменом, а фича только добавляет в запись требования.</div><div class="fa"><span class="fk">Что сделать</span>Выпишите понятия, которые встречаются в трёх и больше спеках, и заведите каждому одну запись в словаре. Спеки фич пусть ссылаются на запись, а не пересказывают её.</div></div></section><section class="chapter" id="rfc"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h6"/><path d="M17 15l2 2 3-4"/></svg></span>Уровни требований RFC 2119</h2><div class="rl"><div class="rl-r rl-th"><span>Слово</span><span>Значение</span><span>Сила</span><span>Проверка</span></div><div class="rl-r s5"><code class="rl-k">MUST</code><span class="rl-m">обязательно</span><span class="rl-b"><i style="width:100%"></i></span><span class="rl-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3h6M10 3v6l-5 9a2 2 0 0 0 1.7 3h10.6a2 2 0 0 0 1.7-3l-5-9V3"/></svg>автотест<small>блокирует</small></span></div><div class="rl-r s5"><code class="rl-k">MUST NOT</code><span class="rl-m">запрещено</span><span class="rl-b"><i style="width:100%"></i></span><span class="rl-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3h6M10 3v6l-5 9a2 2 0 0 0 1.7 3h10.6a2 2 0 0 0 1.7-3l-5-9V3"/></svg>автотест<small>блокирует</small></span></div><div class="rl-r s3"><code class="rl-k">SHOULD</code><span class="rl-m">по умолчанию, отступ с причиной</span><span class="rl-b"><i style="width:60%"></i></span><span class="rl-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>ревью<small>предупреждает</small></span></div><div class="rl-r s1"><code class="rl-k">MAY</code><span class="rl-m">допустимо</span><span class="rl-b"><i style="width:20%"></i></span><span class="rl-c"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>нет<small>не проверяется</small></span></div></div><div class="rl-syn"><span class="chip">MUST = SHALL</span></div><p class="cap">Слова и их смысл — по <a href="https://www.rfc-editor.org/rfc/rfc2119" target="_blank" rel="noopener">RFC 2119</a>. Каждому слову соответствует своя проверка.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>В записи брони правило «интервалы не пересекаются» стоит как MUST и проверяется тестом, а «подтверждение в тот же канал» — как SHOULD и смотрится на ревью.</div><div class="fg"><span class="fk">В общем случае</span>Слово требования сразу говорит, чем его проверять и что делать при нарушении. Агент читает MUST как границу, а SHOULD как умолчание, и не путает одно с другим.</div><div class="fa"><span class="fk">Что сделать</span>Перепишите требования своей спеки с этими четырьмя словами и рядом с каждым MUST укажите тест, который его проверяет.</div></div></section><section class="chapter" id="card"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9h10M7 13h6M7 17h8"/></svg></span>Карточка агрегата</h2><div class="ag" role="img" aria-label="Пример записи агрегата Reservation из контекста booking: адрес, инварианты, команды, доступ, связи и ссылка на спеку фичи"><div class="ag-r"><pre class="ag-c">## [booking::Reservation]&#10;Class: aggregate&#10;Description: Бронь переговорной на интервал.</pre><div class="ag-n"><span class="nb">1</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M7 10h4M7 14h6M16 10v4"/></svg><span>адрес: контекст::имя</span></div></div><div class="ag-r"><pre class="ag-c">Invariants:&#10;  - MUST: active-брони одной комнаты не пересекаются&#10;  - MUST: held → confirmed → closed, только вперёд&#10;  - MUST: held без подтверждения 15 мин → closed&#10;  - SHOULD: подтверждение в канал создания</pre><div class="ag-n"><span class="nb">2</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h6"/><path d="M17 15l2 2 3-4"/></svg><span>требования → проверки</span></div></div><div class="ag-r"><pre class="ag-c">Commands: HoldRoom, ConfirmReservation,&#10;          CancelReservation</pre><div class="ag-n"><span class="nb">3</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4l12 8-12 8z"/></svg><span>единственный способ изменить</span></div></div><div class="ag-r"><pre class="ag-c">Access:&#10;  CanHoldRoom: [booking::Role::Member]&#10;  CanCancelReservation: Member (своя), Admin</pre><div class="ag-n"><span class="nb">4</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg><span>кто может</span></div></div><div class="ag-r"><pre class="ag-c">Depends on: [[booking::Room]], [[booking::TimeSlot]]</pre><div class="ag-n"><span class="nb">5</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1"/></svg><span>связи по id</span></div></div><div class="ag-r"><pre class="ag-c">Spec: [[room-booking]]</pre><div class="ag-n"><span class="nb">6</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><span>из какой фичи пришло</span></div></div></div><p class="cap">Пример выдуман. Термины — по <a href="https://martinfowler.com/bliki/DDD_Aggregate.html" target="_blank" rel="noopener">Martin Fowler: DDD Aggregate</a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Вся бронь — одна карточка: адрес, четыре требования, три команды, права, связи и ссылка на фичу, из которой она появилась.</div><div class="fg"><span class="fk">В общем случае</span>Агрегат — граница, внутри которой требования всегда соблюдаются, а менять его можно только его командами. Поэтому в карточке рядом стоят и правила, и единственные способы их нарушить.</div><div class="fa"><span class="fk">Что сделать</span>Для каждого агрегата заведите карточку из шести полей. Если требование нельзя приписать ни одному агрегату, скорее всего, агрегат ещё не назван.</div></div></section><section class="chapter" id="contexts"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="8" height="8" rx="1.5"/><rect x="13" y="13" width="8" height="8" rx="1.5"/><path d="M11 7h4a2 2 0 0 1 2 2v4"/></svg></span>Ограниченные контексты</h2><div class="cx"><div class="cx-b"><div class="cx-t"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="8" height="8" rx="1.5"/><rect x="13" y="13" width="8" height="8" rx="1.5"/><path d="M11 7h4a2 2 0 0 1 2 2v4"/></svg><code>booking</code></div><div class="cx-a"><span class="chip">Reservation</span><span class="chip">Room</span><span class="chip">TimeSlot</span></div></div><div class="cx-b"><div class="cx-t"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="8" height="8" rx="1.5"/><rect x="13" y="13" width="8" height="8" rx="1.5"/><path d="M11 7h4a2 2 0 0 1 2 2v4"/></svg><code>billing</code></div><div class="cx-a"><span class="chip">Invoice</span><span class="chip">Tariff</span></div></div><div class="cx-b"><div class="cx-t"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="8" height="8" rx="1.5"/><rect x="13" y="13" width="8" height="8" rx="1.5"/><path d="M11 7h4a2 2 0 0 1 2 2v4"/></svg><code>access</code></div><div class="cx-a"><span class="chip">Pass</span><span class="chip">Level</span></div></div></div><div class="cx-ls"><small><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1"/></svg>связи между контекстами — только по id</small><span class="cx-l"><code>billing::Invoice</code><span class="cx-ar">→ id →</span><code>booking::Reservation</code></span><span class="cx-l"><code>access::Pass</code><span class="cx-ar">→ id →</span><code>booking::Reservation</code></span></div><div class="cx-w"><div class="cx-wq">«Уровень»</div><div class="cx-ws"><div><code>booking::Room.floor</code><span class="chip">Этаж</span></div><div><code>access::Level</code><span class="chip">Допуск</span></div></div><small>одно слово — два термина, разные подписи</small></div><div class="cx-rules"><span class="cx-rl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M7 10h4M7 14h6M16 10v4"/></svg>термин = одна запись</span><span class="cx-rl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1"/></svg>ссылка [[ctx::Name]]</span><span class="cx-rl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v6M12 9l-6 6v6M12 9l6 6v6"/></svg>совпало слово — разные записи</span><span class="cx-rl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 0 1-15.5 6.3"/><path d="M3 12a9 9 0 0 1 15.5-6.3"/><path d="M18 2v4h-4M6 22v-4h4"/></svg>словарь меняется вместе со спекой</span></div><p class="cap">Подход — <a href="https://martinfowler.com/bliki/BoundedContext.html" target="_blank" rel="noopener">Bounded Context</a> и <a href="https://martinfowler.com/bliki/UbiquitousLanguage.html" target="_blank" rel="noopener">Ubiquitous Language</a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Счёт и пропуск ссылаются на бронь по id и не знают её устройства. Слово «уровень» в бронях значит этаж, а в доступе — допуск, и это две разные записи.</div><div class="fg"><span class="fk">В общем случае</span>Контекст — область, внутри которой у каждого слова один смысл. Когда слово совпало в двух контекстах, заводят два термина с разными подписями, иначе агент перенесёт правило из одного в другой.</div><div class="fa"><span class="fk">Что сделать</span>Разложите агрегаты по контекстам и найдите слова, которые встречаются в двух. Для каждого такого слова заведите отдельные записи и разные подписи в интерфейсе.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><a class="ev-cta" href="/blog/spec-reconcile-loop/"><span class="ev-ci"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2.5"/><path d="M12 4v5.5M12 14.5V20M4 12h5.5M14.5 12H20M6.3 6.3l3.9 3.9M13.8 13.8l3.9 3.9M17.7 6.3l-3.9 3.9M10.2 13.8l-3.9 3.9"/></svg></span><span class="ev-ct"><small>Продолжение</small><b>Петля сверки для спек</b><span>как в Kubernetes: желаемое, замер и среда агента</span></span><span class="ev-ca"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span></a><div class="links three"><a href="/blog/harness-driven-development/"><div class="k">Петля ошибок</div><div class="t">Harness-Driven Development</div><div class="d">как ошибки агента становятся правилами</div></a><a href="/blog/specs-rules-skills/"><div class="k">Контекст</div><div class="t">Спеки, библия, правила и скиллы</div><div class="d">что агент знает о проекте и где это лежит</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Среда</div><div class="t">Сравнение харнессов</div><div class="d">где работает агент и что он видит</div></a></div></section><footer>Пример с бронированием выдуман. Термины — по источникам в подписях под схемами.</footer></div>]]></content:encoded></item>
<item><title>AGENTS.md и CLAUDE.md, спеки, правила и скиллы: что агент должен знать о проекте и где это хранить</title><link>https://www.urvanov.com/blog/specs-rules-skills/</link><guid>https://www.urvanov.com/blog/specs-rules-skills/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Четыре вида постоянного контекста для ИИ: спека задачи, библия проекта (CLAUDE.md, AGENTS.md), правила и скиллы Claude Code. Что в каждом, когда он попадает в контекст и что из этого есть в ChatGPT и Claude. По документации Anthropic, OpenAI, GitHub, Cursor и Cline.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-prompts-ru"><div class="ly"><div class="ly-c" style="--c:var(--c-code)"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h4"/></svg></span><b>Спека</b><small>что сделать в одной задаче</small><span class="ly-w">на время задачи</span></div><div class="ly-c" style="--c:var(--c-proj)"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z"/><path d="M5 17a3 3 0 0 1 3-3h11M12 7v4M10 9h4"/></svg></span><b>Библия</b><small>что это за продукт</small><span class="ly-w">в начале задачи</span></div><div class="ly-c" style="--c:var(--c-chat)"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/><path d="M18 16l2 2-2 2"/></svg></span><b>Правила</b><small>как работать в проекте</small><span class="ly-w">в каждой сессии</span></div><div class="ly-c" style="--c:var(--c-work)"><span class="ly-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 2L4 14h7l-1 8 9-12h-7z"/></svg></span><b>Скилл</b><small>как выполнить процедуру</small><span class="ly-w">по вызову</span></div></div><p class="cap">Модель не помнит проект между сессиями<a class="proof" href="https://cursor.com/docs/context/rules" target="_blank" rel="noopener" data-quote="Cursor: «Large language models don&#x27;t retain memory between completions. Rules provide persistent, reusable context at the prompt level» — cursor.com/docs/context/rules" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Четыре вида файлов возвращают ей этот контекст.</p><section class="chapter" id="map"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M9 9v11"/></svg></span>Четыре слоя контекста</h2><div class="tbl l4"><table><thead><tr><th>Слой</th><th>Что внутри</th><th>Когда в контексте</th><th>Файлы</th></tr></thead><tbody><tr><td><span class="ly-t" style="--c:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h4"/></svg>Спека</span></td><td>требования, план, шаги одной задачи</td><td>на время задачи</td><td><code>spec.md · plan.md · tasks.md</code></td></tr><tr><td><span class="ly-t" style="--c:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z"/><path d="M5 17a3 3 0 0 1 3-3h11M12 7v4M10 9h4"/></svg>Библия</span></td><td>цель продукта, пользователи, решения</td><td>в начале задачи</td><td><code>projectbrief.md · productContext.md</code></td></tr><tr><td><span class="ly-t" style="--c:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/><path d="M18 16l2 2-2 2"/></svg>Правила</span></td><td>команды, стиль, запреты</td><td>в каждой сессии</td><td><code>CLAUDE.md · AGENTS.md · .cursor/rules</code></td></tr><tr><td><span class="ly-t" style="--c:var(--c-work)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 2L4 14h7l-1 8 9-12h-7z"/></svg>Скилл</span></td><td>процедура с примерами и скриптами</td><td>описание всегда, тело по вызову</td><td><code>SKILL.md</code></td></tr></tbody></table></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Слои различаются сроком жизни и моментом, когда попадают в контекст.</div><div class="fg"><span class="fk">В общем случае</span>Правила загружаются в каждую сессию, поэтому их держат короткими: Anthropic рекомендует до 200 строк на файл<a class="proof" href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener" data-quote="Anthropic: «Size: target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence» — code.claude.com/docs/en/memory" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Длинное и редкое переносят в скиллы, тело которых загружается только при вызове<a class="proof" href="https://code.claude.com/docs/en/skills" target="_blank" rel="noopener" data-quote="Anthropic: «skill descriptions are loaded into context so Claude knows what&#x27;s available, but full skill content only loads when invoked» — code.claude.com/docs/en/skills" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Разберите свой файл инструкций: факты оставьте в правилах, процедуры перенесите в скиллы, описание продукта — в библию.</div></div></section><section class="chapter" id="spec"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h4"/></svg></span>Спека: одна задача до кода</h2><p class="why">Спека описывает задачу до начала работы: сначала что и зачем, затем как<a class="proof" href="https://github.com/github/spec-kit" target="_blank" rel="noopener" data-quote="GitHub Spec Kit: «Define what and why before deciding how to build it. SDD turns your requirements into a specification, a technical plan, and actionable tasks, then guides implementation against those artifacts» — github.com/github/spec-kit" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="seq"><div class="sq"><span class="sq-n">1</span><b>Принципы</b><small>один раз на проект</small></div><span class="sq-a">→</span><div class="sq"><span class="sq-n">2</span><b>Спека</b><small>что и зачем</small></div><span class="sq-a">→</span><div class="sq"><span class="sq-n">3</span><b>План</b><small>как</small></div><span class="sq-a">→</span><div class="sq"><span class="sq-n">4</span><b>Задачи</b><small>шаги</small></div><span class="sq-a">→</span><div class="sq"><span class="sq-n">5</span><b>Реализация</b><small>код по шагам</small></div></div><p class="cap">Основные шаги GitHub Spec Kit<a class="proof" href="https://github.com/github/spec-kit" target="_blank" rel="noopener" data-quote="GitHub Spec Kit: constitution создаётся один раз на проект — «Create principles focused on code quality, testing, and maintainability». Пересказ — github.com/github/spec-kit" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Как делить большую спеку на части — в статье <a href="/blog/specs-by-aggregates/">Спеки по агрегатам</a></p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Spec Kit ведёт задачу от принципов проекта через спеку и план к шагам и коду.</div><div class="fg"><span class="fk">В общем случае</span>Требования записаны до кода, и ревью сверяет результат с этим текстом. Как спека встраивается в харнесс, описано в статье <a href="/blog/harness-driven-development/#spec">HDD и спеки</a>.</div><div class="fa"><span class="fk">Что сделать</span>Для задачи дольше одного дня напишите спеку: что, зачем и по каким признакам задача готова.</div></div></section><section class="chapter" id="bible"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z"/><path d="M5 17a3 3 0 0 1 3-3h11M12 7v4M10 9h4"/></svg></span>Библия проекта: что это за продукт</h2><p class="why">Библия — постоянное описание продукта: зачем он, для кого, как устроен и что уже решено. Термин из практики; ближайший документированный аналог — Memory Bank в Cline<a class="proof" href="https://docs.cline.bot/prompting/cline-memory-bank" target="_blank" rel="noopener" data-quote="Cline: Memory Bank — «a documentation methodology that transforms Cline from a stateless assistant into a persistent development partner. Through structured markdown files, Cline can &#x27;remember&#x27; your project details across sessions» — docs.cline.bot/prompting/cline-memory-bank" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="fls"><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>projectbrief.md</code><small>цели и требования</small></div><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>productContext.md</code><small>зачем продукт, какие проблемы решает</small></div><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>systemPatterns.md</code><small>архитектура и паттерны</small></div><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>techContext.md</code><small>стек и ограничения</small></div><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>activeContext.md</code><small>текущий фокус и следующие шаги</small></div><div class="fl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg><code>progress.md</code><small>что готово, что осталось</small></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Шесть файлов Memory Bank: от цели продукта до текущего прогресса.</div><div class="fg"><span class="fk">В общем случае</span>Библия отвечает на вопросы, которые иначе задают в каждом новом чате: что за продукт, какие решения приняты, что сейчас в работе. Файл текущего контекста обновляется чаще остальных<a class="proof" href="https://docs.cline.bot/prompting/cline-memory-bank" target="_blank" rel="noopener" data-quote="Cline: activeContext.md — текущий фокус, последние изменения и следующие шаги, обновляется чаще остальных. Пересказ — docs.cline.bot/prompting/cline-memory-bank" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Начните с одного файла: цель продукта, пользователи, ключевые термины и последние решения с датами.</div></div></section><section class="chapter" id="rules"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/><path d="M18 16l2 2-2 2"/></svg></span>Правила: в каждой сессии</h2><p class="why">Правила — инструкции, которые харнесс подставляет в начало каждой сессии<a class="proof" href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener" data-quote="Anthropic: «CLAUDE.md files are loaded into the context window at the start of every session» — code.claude.com/docs/en/memory" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="io"><div><div class="k fn">CLAUDE.md</div><div class="v">Claude Code, правила по путям в <code>.claude/rules/</code><a class="proof" href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener" data-quote="Anthropic: «Rules can also be scoped to specific file paths, so they only load into context when Claude works with matching files» — code.claude.com/docs/en/memory" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div><div class="k fn">AGENTS.md</div><div class="v">«README для агентов»: Codex, Cursor, Gemini CLI, Copilot и другие<a class="proof" href="https://agents.md/" target="_blank" rel="noopener" data-quote="agents.md: «Think of AGENTS.md as a README for agents: a dedicated, predictable place to provide the context and instructions to help AI coding agents work on your project» — agents.md" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div><div class="k fn">.cursor/rules</div><div class="v">Cursor, четыре режима подключения<a class="proof" href="https://cursor.com/docs/context/rules" target="_blank" rel="noopener" data-quote="Cursor: четыре режима — Always Apply, Apply Intelligently, Apply to Specific Files, Apply Manually — cursor.com/docs/context/rules" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div></div><div class="sublabel" style="margin-top:18px">Когда правило попадает в контекст · Cursor</div><div class="mds"><div class="md"><b>Всегда</b><small>каждый чат</small></div><div class="md"><b>По описанию</b><small>агент решает сам</small></div><div class="md"><b>По файлам</b><small>совпал шаблон пути</small></div><div class="md"><b>Вручную</b><small>@rule</small></div></div><div class="mt"><b>≤ 200</b><span>строк на файл CLAUDE.md<a class="proof" href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener" data-quote="Anthropic: «Size: target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence» — code.claude.com/docs/en/memory" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Три формата одной идеи: файл с инструкциями, который харнесс читает в начале работы.</div><div class="fg"><span class="fk">В общем случае</span>Правила остаются контекстом, модель может их нарушить; действие, которое нужно запретить наверняка, блокируют хуком. Чем конкретнее и короче правило, тем стабильнее его выполняют<a class="proof" href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener" data-quote="Anthropic: «Claude treats them as context, not enforced configuration. To block an action regardless of what Claude decides, use a PreToolUse hook instead. The more specific and concise your instructions, the more consistently Claude follows them» — code.claude.com/docs/en/memory" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Заведите AGENTS.md или CLAUDE.md: команды сборки и тестов, стиль кода, запреты. Правила для отдельных папок вынесите в правила по путям.</div></div></section><section class="chapter" id="skills"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 2L4 14h7l-1 8 9-12h-7z"/></svg></span>Скиллы: процедура по вызову</h2><p class="why">Скилл — папка с инструкцией SKILL.md, примерами и скриптами для повторяющейся процедуры<a class="proof" href="https://learn.chatgpt.com/docs/build-skills" target="_blank" rel="noopener" data-quote="OpenAI: «ChatGPT and Codex start with each skill&#x27;s name and description, then load the full SKILL.md instructions when they decide to use that skill» — learn.chatgpt.com/docs/build-skills" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="pl"><div class="pl-r"><span class="pl-k">Старт сессии</span><div class="pl-cs"><span class="pl-c">отчёт</span><span class="pl-c on">ревью PR</span><span class="pl-c">релиз</span><span class="pl-c">письмо клиенту</span></div><span class="pl-s">имя + описание</span></div><div class="pl-d">↓ агент выбрал «ревью PR»</div><div class="pl-r"><span class="pl-k">Вызов</span><div class="pl-x"><code>SKILL.md</code><span>инструкция, примеры, скрипты</span></div><span class="pl-s">тело целиком</span></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Описания всех скиллов лежат в контексте всегда, тело загружается после выбора.</div><div class="fg"><span class="fk">В общем случае</span>Поэтому длинный справочник в скилле почти ничего не стоит до использования. Скилл заводят, когда одну и ту же инструкцию или чек-лист вставляют в чат снова и снова, или когда раздел правил превратился в процедуру<a class="proof" href="https://code.claude.com/docs/en/skills" target="_blank" rel="noopener" data-quote="Anthropic: «Create a skill when you keep pasting the same instructions, checklist, or multi-step procedure into chat, or when a section of CLAUDE.md has grown into a procedure rather than a fact. Unlike CLAUDE.md content, a skill&#x27;s body loads only when it&#x27;s used» — code.claude.com/docs/en/skills" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Найдите в правилах раздел, который описывает процедуру, и перенесите его в скилл с точным описанием, когда его применять.</div></div></section><section class="chapter" id="chat"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"/></svg></span>То же в чате: проекты и скиллы</h2><div class="io"><div><div class="k">Инструкции проекта <span class="k-eq">≈ правила</span></div><div class="v">Роль и формат один раз — для всех чатов проекта<a class="proof" href="https://help.openai.com/en/articles/10169521-projects-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: проект держит вместе чаты, файлы и инструкции; инструкции проекта действуют только внутри него, проектом можно поделиться с коллегами. Пересказ справки OpenAI — help.openai.com/en/articles/10169521" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://support.claude.com/en/articles/9517075-what-are-projects" target="_blank" rel="noopener" data-quote="Claude: «You can define project instructions for each project to further tailor Claude&#39;s responses. For example, instructing Claude to use a more formal tone or answer questions from the perspective of a specific role» — support.claude.com/en/articles/9517075" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div><div class="k">Файлы проекта <span class="k-eq">≈ библия</span></div><div class="v">Примеры ответов, регламенты, шаблоны лежат в проекте<a class="proof" href="https://support.claude.com/en/articles/9517075-what-are-projects" target="_blank" rel="noopener" data-quote="Claude: «You can upload relevant documents, text, code, or other files to a project&#39;s knowledge base, which Claude will use to better understand the context» — support.claude.com/en/articles/9517075" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div><div><div class="k">Скиллы <span class="k-eq">= скиллы</span></div><div class="v">Повторяющийся сценарий с инструкциями и примерами<a class="proof" href="https://support.claude.com/en/articles/12512180-use-skills-in-claude" target="_blank" rel="noopener" data-quote="Claude: «Skills extend Claude&#39;s capabilities by giving it access to specialized knowledge and workflows» — support.claude.com/en/articles/12512180" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://help.openai.com/en/articles/20001066-skills-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: скиллы — переиспользуемые сценарии с инструкциями, примерами и кодом, на планах Business, Enterprise и Edu. Пересказ справки OpenAI — help.openai.com/en/articles/20001066" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Три места, где промпт живёт дольше одного чата: инструкции, файлы и скиллы.</div><div class="fg"><span class="fk">В общем случае</span>Роль, пример и формат, вынесенные в проект, работают в каждом новом чате без копирования. Общим проектом можно поделиться с командой, и все будут работать с одним набором примеров.</div><div class="fa"><span class="fk">Что сделать</span>Заведите проект под самую частую задачу недели и перенесите в его инструкции роль и формат из своего лучшего промпта.</div></div></section><section class="chapter" id="pick"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v6M12 15v6M5 12H3M21 12h-2"/><circle cx="12" cy="12" r="3"/></svg></span>Что куда положить</h2><div class="tbl pk"><table><thead><tr><th>Если это…</th><th>Куда</th></tr></thead><tbody><tr><td>команда, стиль или запрет, нужные в каждой задаче</td><td><span class="ly-t" style="--c:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/><path d="M18 16l2 2-2 2"/></svg>Правила</span></td></tr><tr><td>процедура из нескольких шагов, нужная иногда</td><td><span class="ly-t" style="--c:var(--c-work)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 2L4 14h7l-1 8 9-12h-7z"/></svg>Скилл</span></td></tr><tr><td>требования к одной задаче</td><td><span class="ly-t" style="--c:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h4"/></svg>Спека</span></td></tr><tr><td>знание о продукте и принятые решения</td><td><span class="ly-t" style="--c:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z"/><path d="M5 17a3 3 0 0 1 3-3h11M12 7v4M10 9h4"/></svg>Библия</span></td></tr><tr><td>ошибка агента, которая повторяется</td><td><a href="/blog/harness-driven-development/#loop">правило или проверка · HDD</a></td></tr></tbody></table></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Пять ситуаций и пять мест.</div><div class="fg"><span class="fk">В общем случае</span>Место определяют частота и срок жизни. То, что нужно всегда, держат коротким; то, что нужно редко, можно держать подробным.</div><div class="fa"><span class="fk">Что сделать</span>Раз в неделю просматривайте правила: процедуры переносите в скиллы, решения — в библию с датой.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/harness-driven-development/"><div class="k">Метод</div><div class="t">Harness-Driven Development</div><div class="d">Ошибка агента → правило окружения</div></a><a href="/blog/harness-work-approaches/"><div class="k">Подходы</div><div class="t">Подходы к работе с харнессом</div><div class="d">Цикл ответа и ревью</div></a><a href="/blog/work-prompts-examples/"><div class="k">Практика</div><div class="t">Промпты для рабочих задач</div><div class="d">Пять частей и шесть примеров</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Сравнение</div><div class="t">Сравнение харнессов</div><div class="d">Claude Code, Codex, Cursor, Hermes</div></a></div></section><footer>По документации Anthropic, OpenAI, GitHub, Cursor и Cline, источник у значка рядом с утверждением. «Библия проекта» — термин из практики; пересказы помечены в подсказке источника.</footer></div>]]></content:encoded></item>
<item><title>Кого звать на интервью перед покупкой AI-инструментов: восемь полярных групп</title><link>https://www.urvanov.com/blog/who-to-interview-before-buying-ai-tools/</link><guid>https://www.urvanov.com/blog/who-to-interview-before-buying-ai-tools/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Как отобрать 16 человек по отчёту, анкете и спискам лицензий, проверить покрытие команд и замены и понять, что у них узнать.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-gruppy-ru"><p class="credit">Дизайн выборки для интервью — по рекомендациям <a href="https://t.me/Kseniya_Vasil" target="_blank" rel="noopener">@Kseniya_Vasil</a></p><div class="chain" aria-label="От отчёта к списку интервью"><div class="st"><div class="viz"><div class="dots" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-code)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-code)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-work)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-work)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-chat)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-chat)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-silent)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-silent)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-none)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-none)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-light)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-light)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-proj)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-proj)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-team)"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class="on" style="background:var(--c-team)"></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div><div class="big">340<small>Человек в отчёте</small></div></div><div class="arr" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></div><div class="st"><div class="viz"><div class="six" aria-hidden="true"><i style="background:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 8l-4 4 4 4M16 8l4 4-4 4"/></svg></i><i style="background:var(--c-work)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 3L5 14h6l-1 7 8-11h-6z"/></svg></i><i style="background:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="11" cy="11" r="6"/><path d="M20 20l-4.5-4.5"/></svg></i><i style="background:var(--c-silent)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="18" height="13" rx="2"/><path d="M3 10h18M16 15h2"/></svg></i><i style="background:var(--c-none)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="12" cy="12" r="8"/><path d="M6.5 17.5l11-11"/></svg></i><i style="background:var(--c-light)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 4H5v16h5"/><path d="M14 8l4 4-4 4M18 12H9"/></svg></i><i style="background:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round"><path d="M3 7h7l2 2h9v10H3z"/></svg></i><i style="background:var(--c-team)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="6" height="6" rx="1"/><rect x="14" y="4" width="6" height="6" rx="1"/><rect x="4" y="14" width="6" height="6" rx="1"/><rect x="14" y="14" width="6" height="6" rx="1"/></svg></i></div></div><div class="big">8<small>Полярных групп</small></div></div><div class="arr" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg></div><div class="st"><div class="viz"><div class="thirteen" aria-hidden="true"><i style="background:var(--c-code)"></i><i style="background:var(--c-code)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-none)"></i><i style="background:var(--c-none)"></i><i style="background:var(--c-light)"></i><i style="background:var(--c-light)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-team)"></i><i style="background:var(--c-team)"></i></div></div><div class="big">16<small>Интервью</small></div></div></div><p class="cap">Все цифры и имена — пример</p><section class="chapter" id="why"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg></span>Какое решение поможет принять</h2><p><b>Бизнес-задача</b> — из <a href="/blog/chatgpt-enterprise-usage-report/#why">отчёта</a>: для каких рабочих задач текущего набора AI-инструментов недостаточно и что проверить перед закупкой. Там же — кто принимает решение и по каким признакам. Выборка решает, чьи задачи мы увидим на интервью.</p><p>Сначала определяют, какие способы решать задачи нужно увидеть: через корпоративный AI-инструмент, через другие AI-инструменты, вручную или через коллег — и у тех, кто попробовал инструмент и бросил. <a href="/blog/chatgpt-enterprise-usage-report/">Отчёт по ChatGPT Enterprise</a> — один из источников: он находит первых и бросивших. Пользователей других инструментов находят по <a href="/blog/ai-interviews-without-leading-questions/#form">анкете</a> на всю компанию и по спискам лицензий и закупок.</p><div class="io"><div><div class="k">Вход</div><div class="v">Таблица людей из отчёта, анкета на всю компанию, списки лицензий и закупок</div></div><div><div class="k">Что делает метод</div><div class="v">Отбирает по 2 человека на каждый способ решать задачи</div></div><div><div class="k">Решение на выходе</div><div class="v">С кем говорить перед покупкой и что проверять — вплоть до вывода, что новый инструмент не нужен</div></div></div></section><section class="chapter" id="top"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg></span>Почему одного топа по активности мало</h2><p class="why">Три способа набрать 16 человек. Цвет точки — сценарий использования. Самые активные и добровольцы — хорошие респонденты, их берут в любую выборку, но одних их мало.</p><div class="cmp"><div class="bad"><div class="h"><span class="s">мало</span>Топ по сообщениям</div><div class="row" aria-hidden="true"><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i></div><div class="m">сценариев: <b>2 из 8</b></div></div><div class="bad"><div class="h"><span class="s">мало</span>Добровольцы</div><div class="row" aria-hidden="true"><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-code)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-code)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-code)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i></div><div class="m">сценариев: <b>3 из 8</b></div></div><div class="good"><div class="h"><span class="s">полно</span>Полярные группы</div><div class="row" aria-hidden="true"><i style="background:var(--c-code)"></i><i style="background:var(--c-code)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-none)"></i><i style="background:var(--c-none)"></i><i style="background:var(--c-light)"></i><i style="background:var(--c-light)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-team)"></i><i style="background:var(--c-team)"></i></div><div class="m">сценариев: <b>8 из 8</b></div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Топ по сообщениям покрывает 2 сценария из 8, добровольцы — 3, полярные группы — все 8.</div><div class="fg"><span class="fk">В общем случае</span>Самые активные и отзывчивые люди лучше всех знают инструмент, и их стоит звать. Они похожи друг на друга и вместе описывают один-два сценария. Чтобы услышать остальные, выборку добирают людьми с крайними значениями других признаков.</div><div class="fa"><span class="fk">Что сделать</span>Возьмите 2–3 человек из топа по сообщениям. Остальные места отдайте людям с другими сценариями: тем, кто работает только через Codex, бросил инструмент, пользуется другими или ведёт много проектов.</div></div></section><section class="chapter" id="groups"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg></span>Восемь групп</h2><p class="why">Шесть групп находятся по порогам из отчёта, «бросили» — по дате последней активности, «другие инструменты» — по анкете. У каждой группы вопрос, который она помогает проверить. Ответ может быть любым, в том числе «новый инструмент не нужен». Пороги в примере — ориентир: подбирайте их так, чтобы в группу попадали 2–5 человек.</p><div class="groups"><div class="g"><span class="g-ico" style="background:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 8l-4 4 4 4M16 8l4 4-4 4"/></svg></span><div><div class="g-t">Самые активные в коде</div><span class="g-c">код &gt; $200 / 3 мес</span><div class="g-q">чего не хватает в разработке: инструмента, доступа к репозиториям — или ничего</div><div class="g-p">Hana Sato, Luis Moreno</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-work)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 3L5 14h6l-1 7 8-11h-6z"/></svg></span><div><div class="g-t">Агентные задачи</div><span class="g-c">агент &gt; $60 / 3 мес</span><div class="g-q">где агент не справляется и почему: данные, задача или сам агент</div><div class="g-p">Mira Castellano, Tomás Reid</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="11" cy="11" r="6"/><path d="M20 20l-4.5-4.5"/></svg></span><div><div class="g-t">Глубокий ресёрч</div><span class="g-c">&gt; 3 000 сообщ., чат главный</span><div class="g-q">как проверяют ответы и хватает ли текущего поиска</div><div class="g-p">Jonas Keller, Aiko Lind</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-silent)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="18" height="13" rx="2"/><path d="M3 10h18M16 15h2"/></svg></span><div><div class="g-t">Только Codex</div><span class="g-c">0 сообщ. и &gt; $20 / 3 мес</span><div class="g-q">какие задачи решают без чата и нужно ли им что-то ещё</div><div class="g-p">Ben Ortiz, Lena Moss</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-none)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="12" cy="12" r="8"/><path d="M6.5 17.5l11-11"/></svg></span><div><div class="g-t">Неактивные</div><span class="g-c">0 сообщ. и $0 за период</span><div class="g-q">как решают свои задачи и какие варианты рассматривали</div><div class="g-p">Pavel Novak, Sara Quinn</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-light)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 4H5v16h5"/><path d="M14 8l4 4-4 4M18 12H9"/></svg></span><div><div class="g-t">Попробовали и бросили</div><span class="g-c">были сообщения, 0 за последние 60 дней</span><div class="g-q">почему перестали: результат, время, безопасность или задача ушла</div><div class="g-p">Farah Nasser, Yara Selim</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round"><path d="M3 7h7l2 2h9v10H3z"/></svg></span><div><div class="g-t">Проектные организаторы</div><span class="g-c">≥ 6 активных проектов</span><div class="g-q">что дают проекты и чего в них не хватает</div><div class="g-p">Elif Demir, Rafael Costa</div></div></div><div class="g"><span class="g-ico" style="background:var(--c-team)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="6" height="6" rx="1"/><rect x="14" y="4" width="6" height="6" rx="1"/><rect x="4" y="14" width="6" height="6" rx="1"/><rect x="14" y="14" width="6" height="6" rx="1"/></svg></span><div><div class="g-t">Другие инструменты</div><span class="g-c">по анкете: основной AI-инструмент не корпоративный</span><div class="g-q">что в другом инструменте лучше и можно ли получить это в текущем</div><div class="g-p">Nadia Rahimi, Oskar Berg</div></div></div></div><div class="stack" aria-label="Распределение 16 интервью по группам"><div class="seg" style="flex:2;background:var(--c-code)">2</div><div class="seg" style="flex:2;background:var(--c-work)">2</div><div class="seg" style="flex:2;background:var(--c-chat)">2</div><div class="seg" style="flex:2;background:var(--c-silent)">2</div><div class="seg" style="flex:2;background:var(--c-none);color:var(--ink)">2</div><div class="seg" style="flex:2;background:var(--c-light);color:var(--ink)">2</div><div class="seg" style="flex:2;background:var(--c-proj)">2</div><div class="seg" style="flex:2;background:var(--c-team)">2</div></div><div class="legend"><span><i style="background:var(--c-code)"></i>код</span><span><i style="background:var(--c-work)"></i>агент</span><span><i style="background:var(--c-chat)"></i>ресёрч</span><span><i style="background:var(--c-silent)"></i>только Codex</span><span><i style="background:var(--c-none)"></i>неактивные</span><span><i style="background:var(--c-light)"></i>бросили</span><span><i style="background:var(--c-proj)"></i>проекты</span><span><i style="background:var(--c-team)"></i>другие инструменты</span></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>16 разговоров: по двое в каждой из восьми групп.</div><div class="fg"><span class="fk">В общем случае</span>Двое-трое в группе показывают, повторяется ли проблема: если одно и то же говорят двое из трёх, это сигнал. Людей со средними значениями не берут: их ответы похожи на ответы соседних групп, и на 16 разговорах они не добавляют новых сценариев.</div><div class="fa"><span class="fk">Что сделать</span>В каждой группе отсортируйте кандидатов по её порогу и возьмите двух с самыми крайними значениями, по возможности из разных команд. Если человек попал в две группы, оставьте его в той, где его значение крайнее, а во второй возьмите следующего кандидата.</div></div></section><section class="chapter" id="teams"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16.5v.5"/></svg></span>Покрытие команд и замены</h2><p class="why">Отдельный шаг после набора, группы он не меняет: сколько отобранных людей пришлось на каждую команду и кем заменить отказавшихся.</p><div class="tbl"><table><thead><tr><th>Команда</th><th>Регулярно пользуются</th><th>Отобрано</th><th>Статус</th></tr></thead><tbody><tr><td>Команда A</td><td><div class="dbar"><span style="width:74%"></span></div></td><td><div class="cov"><i style="background:var(--c-code)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-proj)"></i><i style="background:var(--c-light)"></i></div></td><td><span class="tag ok">покрыта</span></td></tr><tr><td>Команда B</td><td><div class="dbar"><span style="width:66%"></span></div></td><td><div class="cov"><i style="background:var(--c-work)"></i><i style="background:var(--c-work)"></i><i style="background:var(--c-chat)"></i><i style="background:var(--c-none)"></i></div></td><td><span class="tag ok">покрыта</span></td></tr><tr><td>Команда C</td><td><div class="dbar"><span style="width:51%"></span></div></td><td><div class="cov"><i style="background:var(--c-code)"></i><i style="background:var(--c-silent)"></i><i style="background:var(--c-none)"></i><i style="background:var(--c-proj)"></i></div></td><td><span class="tag ok">покрыта</span></td></tr><tr><td>Команда D</td><td><div class="dbar"><span style="width:34%"></span></div></td><td><div class="cov"><i style="background:var(--c-team)"></i></div></td><td><span class="tag ok">после замены</span></td></tr><tr><td>Команда E</td><td><div class="dbar"><span style="width:18%"></span></div></td><td><div class="cov"><i style="background:var(--c-light)"></i><i style="background:var(--c-team)"></i></div></td><td><span class="tag ok">после замены</span></td></tr></tbody></table></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>После набора по группам в командах D и E никого не было. Трёх кандидатов заменили на людей из D и E с тем же поведением, теперь покрыты все пять команд.</div><div class="fg"><span class="fk">В общем случае</span>Пороги по тратам и сообщениям ловят крайних пользователей. Команда, где все пользуются понемногу, под пороги не попадает, и её задачи выпадают из исследования. Поэтому команды проверяют отдельным шагом.</div><div class="fa"><span class="fk">Что сделать</span>Разложите отобранных по командам. Если в команде никого нет, замените в подходящей группе одного кандидата на человека из этой команды с тем же поведением. Отказавшегося замените следующим кандидатом той же группы по её порогу.</div></div></section><section class="chapter" id="ask"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"/></svg></span>Что узнать на интервью</h2><p class="why">Разговор идёт от последней рабочей задачи, а не от инструмента: что нужно было получить, чем человек располагал, что выбрал и как дошёл до результата. Полный сценарий — в <a href="/blog/ai-interviews-without-leading-questions/#script">статье про интервью</a>.</p><div class="tl"><div class="ph"><div class="ph-h" style="background:var(--c-chat)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="12" cy="12" r="8"/><path d="M12 8v4l3 2"/></svg>Задача</div><ul><li><b>Последняя рабочая задача</b><span>Что нужно было получить и для кого</span></li><li><b>Средства и выбор</b><span>Чем располагали, что выбрали и почему</span></li></ul></div><div class="ph"><div class="ph-h" style="background:var(--c-proj)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>Путь</div><ul><li><b>Как дошли до результата</b><span>Что взяли как есть, что доделали сами</span></li><li><b>Затраты и ограничения</b><span>Время, данные, доступ, безопасность</span></li></ul></div><div class="ph"><div class="ph-h" style="background:var(--c-work)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>Удачный случай</div><ul><li><b>Когда получилось хорошо</b><span>Что тогда было иначе</span></li></ul></div><div class="ph"><div class="ph-h" style="background:var(--c-code)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19h16M7 15l4-4 3 3 5-6"/></svg>Отказ и переключение</div><ul><li><b>Бросали или меняли инструмент</b><span>На что перешли и почему</span></li></ul></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Шесть пунктов: четыре по одной задаче, удачный случай и отказ или переключение.</div><div class="fg"><span class="fk">В общем случае</span>Рассказ о прошлой задаче даёт факты: видно, где человек выбрал AI, где другой способ и почему. Удачный случай показывает, что уже работает, отказ и переключение — почему инструменты меняют. Прогноз о будущем проверить нельзя.</div><div class="fa"><span class="fk">Что сделать</span>Попросите в первые минуты назвать последнюю рабочую задачу и ведите весь разговор по ней. Если человек не упоминает AI, спросите, какие варианты он рассматривал, а не почему он им не пользуется.</div></div></section><section class="chapter" id="order"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M9 6h11M9 12h11M9 18h11M4 6h.01M4 12h.01M4 18h.01"/></svg></span>Порядок работы</h2><ol class="steps"><li><span class="step-n">1</span><div><div class="step-t">Собрать кандидатов в восемь групп</div><div class="step-d">Шесть групп — по порогам из отчёта, «бросили» — по дате последней активности, «другие инструменты» — по анкете</div></div></li><li><span class="step-n">2</span><div><div class="step-t">Оставить по 2 человека в группе</div><div class="step-d">Из разных команд, если есть выбор; один человек — только в одной группе</div></div></li><li><span class="step-n">3</span><div><div class="step-t">Проверить покрытие команд</div><div class="step-d">Если в команде никого нет, заменить одного кандидата на человека из неё с тем же поведением</div></div></li><li><span class="step-n">4</span><div><div class="step-t">Назначить интервью по 30 минут</div><div class="step-d">Разговор идёт от последней рабочей задачи: что нужно было получить, чем располагали, что выбрали и как дошли до результата. С бросившими отдельно обсуждают, почему перестали</div></div></li></ol><div class="limit"><span class="i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M12 7v6M12 17v.5"/></svg></span><div><b>Ограничение.</b> 16 интервью показывают, какие проблемы встречаются и как они выглядят в работе. Сколько людей в компании сталкивается с каждой из них, по 16 разговорам не посчитать. Чтобы узнать масштаб, отправьте всей компании короткую <a href="/blog/ai-interviews-without-leading-questions/#form">анкету</a>, которую составляют после интервью. Если проблемы не подтвердились, это тоже результат: новый инструмент не нужен.</div></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links"><a href="/blog/chatgpt-enterprise-usage-report/"><div class="k">Отчёт</div><div class="t">Отчёт по ChatGPT Enterprise</div><div class="d">Как собрать отчёт об использовании, из которого берётся таблица людей</div></a><a href="/blog/ai-interviews-without-leading-questions/"><div class="k">Интервью</div><div class="t">Как провести интервью о работе с AI</div><div class="d">Как провести разговор голосом или анкетой и собрать ответы в Airtable</div></a></div></section><footer>Дизайн выборки для интервью — по рекомендациям <a href="https://t.me/Kseniya_Vasil" target="_blank" rel="noopener">@Kseniya_Vasil</a>. Все имена, команды и цифры в примерах вымышлены.</footer></div>]]></content:encoded></item>
<item><title>Промпты для рабочих задач: пять частей и шесть примеров для ChatGPT и Claude</title><link>https://www.urvanov.com/blog/work-prompts-examples/</link><guid>https://www.urvanov.com/blog/work-prompts-examples/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>Промпты для работы с нейросетью: из каких частей собран хороший рабочий промпт, как выглядят слабый и сильный запрос, шесть готовых шаблонов под частые задачи и как сохранить их в проекте — по руководствам Anthropic, OpenAI и Google.</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="s-rich s-rich-prompts-ru"><div class="flow lead" aria-label="Один запрос, два результата"><div class="lane"><div class="lane-h" style="color:var(--warn)"><span class="dot" style="background:var(--warn)"></span>Одна фраза</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"/></svg><b>Запрос</b><small>«напиши ответ клиенту»</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="3"/><path d="M12 8.5l1.2 2.3 2.3 1.2-2.3 1.2-1.2 2.3-1.2-2.3-2.3-1.2 2.3-1.2z"/></svg><b>Модель</b><small>угадывает контекст</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9.5 12.5l5 5M14.5 12.5l-5 5"/></svg><b>Общий ответ</b><small>переписывать вручную</small></span></div></div><div class="lane"><div class="lane-h" style="color:var(--accent)"><span class="dot" style="background:var(--accent)"></span>Шесть частей</div><div class="chainrow"><span class="nd"><svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="3.0" width="16" height="2.2" rx="1" style="fill:var(--c-chat)"/><rect x="4" y="6.2" width="16" height="2.2" rx="1" style="fill:var(--c-proj)"/><rect x="4" y="9.4" width="16" height="2.2" rx="1" style="fill:var(--c-work)"/><rect x="4" y="12.600000000000001" width="16" height="2.2" rx="1" style="fill:var(--c-code)"/><rect x="4" y="15.8" width="16" height="2.2" rx="1" style="fill:var(--c-silent)"/><rect x="4" y="19.0" width="16" height="2.2" rx="1" style="fill:var(--c-team)"/></svg><b>Промпт</b><small>роль, данные, пример, формат</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="3"/><path d="M12 8.5l1.2 2.3 2.3 1.2-2.3 1.2-1.2 2.3-1.2-2.3-2.3-1.2 2.3-1.2z"/></svg><b>Модель</b><small>видит всё нужное</small></span><span class="ar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></span><span class="nd"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 14l2 2 4-4"/></svg><b>Черновик</b><small>правки по мелочи</small></span></div></div></div><p class="cap">Модель в обоих случаях одна и та же. Результат определяет то, что написано в запросе: шесть частей, которые повторяются в руководствах Anthropic, OpenAI и Google.</p><section class="chapter" id="model"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="5" cy="12" r="2.5"/><circle cx="19" cy="5" r="2.5"/><circle cx="19" cy="19" r="2.5"/><path d="M7.3 11l9.4-4.6M7.3 13l9.4 4.6"/></svg></span>Human-in-the-loop: путь одного запроса</h2><div class="dm-wrap"><svg class="dm" viewBox="0 0 980 410" role="img" aria-label="Схема: задача описывается промптом из шести частей, данные из источников попадают в него целиком, модель даёт ответ, получатель принимает по нему решение, проверка возвращает к уточнению промпта, удачный промпт сохраняется шаблоном в проекте и используется для следующей задачи"><title>Схема: задача описывается промптом из шести частей, данные из источников попадают в него целиком, модель даёт ответ, получатель принимает по нему решение, проверка возвращает к уточнению промпта, удачный промпт сохраняется шаблоном в проекте и используется для следующей задачи</title><defs><marker id="dm-ar" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="dm-arh"/></marker></defs><rect class="dm-box" x="200" y="16" width="300" height="286" rx="8"/><text class="dm-bt" x="220" y="44">Промпт</text><rect class="dm-p" x="218" y="58" width="264" height="30" rx="4"/><rect x="218" y="58" width="6" height="30" rx="2" style="fill:var(--c-chat)"/><text class="dm-pt" x="236" y="78">Роль</text><rect class="dm-p" x="218" y="96" width="264" height="30" rx="4"/><rect x="218" y="96" width="6" height="30" rx="2" style="fill:var(--c-proj)"/><text class="dm-pt" x="236" y="116">Кому и зачем</text><rect class="dm-p" x="218" y="134" width="264" height="30" rx="4"/><rect x="218" y="134" width="6" height="30" rx="2" style="fill:var(--c-work)"/><text class="dm-pt" x="236" y="154">Данные целиком</text><rect class="dm-p" x="218" y="172" width="264" height="30" rx="4"/><rect x="218" y="172" width="6" height="30" rx="2" style="fill:var(--c-code)"/><text class="dm-pt" x="236" y="192">Пример · 1–3</text><rect class="dm-p" x="218" y="210" width="264" height="30" rx="4"/><rect x="218" y="210" width="6" height="30" rx="2" style="fill:var(--c-silent)"/><text class="dm-pt" x="236" y="230">Формат</text><rect class="dm-p" x="218" y="248" width="264" height="30" rx="4"/><rect x="218" y="248" width="6" height="30" rx="2" style="fill:var(--c-team)"/><text class="dm-pt" x="236" y="268">Вопрос в конце</text><rect class="dm-n key" x="20" y="70" width="140" height="52" rx="6"/><text class="dm-t" x="90.0" y="101.0" text-anchor="middle">Задача</text><rect class="dm-n" x="12" y="336" width="176" height="52" rx="6"/><text class="dm-t" x="100.0" y="367.0" text-anchor="middle">Шаблон в проекте</text><rect class="dm-n key" x="560" y="70" width="120" height="52" rx="6"/><text class="dm-t" x="620.0" y="101.0" text-anchor="middle">Модель</text><rect class="dm-n" x="720" y="70" width="110" height="52" rx="6"/><text class="dm-t" x="775.0" y="101.0" text-anchor="middle">Ответ</text><rect class="dm-n" x="860" y="70" width="110" height="52" rx="6"/><text class="dm-t" x="915.0" y="101.0" text-anchor="middle">Получатель</text><rect class="dm-n" x="860" y="172" width="110" height="46" rx="6"/><text class="dm-t" x="915.0" y="200.0" text-anchor="middle">Решение</text><rect class="dm-n" x="720" y="172" width="110" height="46" rx="6"/><text class="dm-t" x="775.0" y="200.0" text-anchor="middle">Проверка</text><rect class="dm-n" x="220" y="336" width="260" height="52" rx="6"/><text class="dm-t" x="350.0" y="360.0" text-anchor="middle">Источники</text><text class="dm-s" x="350.0" y="377.0" text-anchor="middle">переписка · документ · таблица</text><path class="dm-e" d="M160,96 L198,96" marker-end="url(#dm-ar)"/><text class="dm-el" x="194" y="62" text-anchor="end">описывает</text><path class="dm-e" d="M500,96 L558,96" marker-end="url(#dm-ar)"/><text class="dm-el" x="508" y="62" text-anchor="start">отправить</text><path class="dm-e" d="M680,96 L718,96" marker-end="url(#dm-ar)"/><text class="dm-el" x="699" y="62" text-anchor="middle">отвечает</text><path class="dm-e" d="M830,96 L858,96" marker-end="url(#dm-ar)"/><path class="dm-e" d="M915,122 L915,170" marker-end="url(#dm-ar)"/><text class="dm-el" x="922" y="150" text-anchor="start">принимает</text><path class="dm-e" d="M775,122 L775,170" marker-end="url(#dm-ar)"/><text class="dm-el" x="782" y="150" text-anchor="start">сверить</text><path class="dm-e dash" d="M720,206 C 640,206 600,250 502,250" marker-end="url(#dm-ar)"/><text class="dm-el" x="610" y="268" text-anchor="middle">не подошло — уточнить</text><path class="dm-e" d="M350,336 L350,304" marker-end="url(#dm-ar)"/><text class="dm-el" x="358" y="324" text-anchor="start">целиком</text><path class="dm-e" d="M200,280 C 140,300 110,310 100,334" marker-end="url(#dm-ar)"/><text class="dm-el" x="150" y="314" text-anchor="end">сохранить</text><path class="dm-e dash" d="M36,336 C 10,260 10,180 40,124" marker-end="url(#dm-ar)"/><text class="dm-el" x="34" y="236" text-anchor="start">следующая задача</text><text class="dm-el" x="845" y="62" text-anchor="middle">читает</text></svg></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Человек стоит на всех ключевых точках: ставит задачу, собирает промпт, сверяет ответ, возвращает его на уточнение и принимает решение. Модель только отвечает на то, что попало в запрос.</div><div class="fg"><span class="fk">В общем случае</span>У каждой стрелки своя точка контроля: данные передают целиком, ответ сверяют с тем, кому он нужен, а удачный запрос сохраняют шаблоном, и следующая задача того же типа начинается с него.</div><div class="fa"><span class="fk">Что сделать</span>Перед запросом назовите получателя и решение, которое он примет по ответу: от этого зависят роль и формат.</div></div><a class="hdd-cta" href="/blog/harness-driven-development/"><span class="hdd-k">Следующий шаг · HDD</span><b>Harness-Driven Development</b><span>Как проверку из этой схемы превратить в правило, которое работает для всех следующих задач</span></a></section><section class="chapter" id="parts"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg></span>Пять частей промпта</h2><div class="pa" role="img" aria-label="Устройство промпта: роль, кому и зачем, данные целиком в тегах, пример, формат, вопрос в конце"><div class="pa-win"><div class="pa-bar"><i></i><i></i><i></i></div><div class="pa-b pa-role" title="Роль: «Ты — сотрудник поддержки». Одна фраза задаёт тон и уровень ответа" aria-label="Роль: «Ты — сотрудник поддержки». Одна фраза задаёт тон и уровень ответа"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-6 8-6s8 2 8 6"/></svg></span><b>Роль</b><div class="pa-v"><span class="pa-l"><i style="width:55%"></i></span></div><span class="pa-p"><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Setting a role in the system prompt focuses Claude&#39;s behavior and tone for your use case. Even a single sentence makes a difference» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="pa-b pa-who" title="Кому и зачем: Кто прочитает результат и какое решение по нему примут" aria-label="Кому и зачем: Кто прочитает результат и какое решение по нему примут"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.5"/></svg></span><b>Кому и зачем</b><div class="pa-v"><span class="pa-flow"><span class="pa-doc"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg></span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg><span class="pa-ppl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="3"/><circle cx="17" cy="9" r="2.5"/><path d="M3 20c0-3 3-5 6-5s6 2 6 5M15 20c0-2 1.5-3.5 3.5-3.5S22 18 22 20"/></svg></span></span></div><span class="pa-p"><a class="proof" href="https://academy.openai.com/public/clubs/work-users-ynjqu/resources/prompting" target="_blank" rel="noopener" data-quote="OpenAI Academy: «Be clear about what you need ChatGPT to do. Outline what you want, who it&#39;s for, and why it matters» — academy.openai.com, Prompting" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Providing context or motivation behind your instructions, such as explaining to Claude why such behavior is important, can help Claude better understand your goals and deliver more targeted responses» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="pa-b pa-data" title="Данные целиком: Переписку, документ, таблицу — целиком. Длинное наверх, вопрос в конце" aria-label="Данные целиком: Переписку, документ, таблицу — целиком. Длинное наверх, вопрос в конце"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg></span><b>Данные целиком</b><div class="pa-v"><span class="pa-tag">&lt;данные&gt;</span><span class="pa-l tall"><i style="width:92%"></i><i style="width:78%"></i><i style="width:88%"></i><i style="width:64%"></i><i style="width:84%"></i><i style="width:70%"></i><i style="width:90%"></i><i style="width:58%"></i><i style="width:80%"></i></span><span class="pa-tag">&lt;/данные&gt;</span></div><span class="pa-p"><a class="proof" href="https://academy.openai.com/public/clubs/work-users-ynjqu/resources/prompting" target="_blank" rel="noopener" data-quote="OpenAI Academy: «Add any background (or documentation) that will help» — academy.openai.com, Prompting" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Place your long documents and inputs near the top of your prompt, above your query, instructions, and examples»; «Queries at the end can improve response quality by up to 30 percent in tests» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="pa-b pa-ex" title="Пример: Один-три образца нужного тона или формата" aria-label="Пример: Один-три образца нужного тона или формата"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M7 10h6M7 14h10"/></svg></span><b>Пример</b><div class="pa-v"><span class="pa-tag">&lt;пример&gt;</span><span class="pa-cards"><i></i><i></i><i class="opt"></i></span><span class="pa-tag">&lt;/пример&gt;</span><small>1–3</small></div><span class="pa-p"><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Include 3–5 examples for best results» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://www.kaggle.com/whitepaper-prompt-engineering" target="_blank" rel="noopener" data-quote="Google, Prompt Engineering: среди лучших практик — давать примеры, быть конкретным про формат ответа и формулировать инструкции вместо запретов. Пересказ — kaggle.com/whitepaper-prompt-engineering" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="pa-b pa-fmt" title="Формат: «5 пунктов, каждый в строку». Что сделать, вместо списка запретов" aria-label="Формат: «5 пунктов, каждый в строку». Что сделать, вместо списка запретов"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 6h11M9 12h11M9 18h11"/><circle cx="4.5" cy="6" r="1"/><circle cx="4.5" cy="12" r="1"/><circle cx="4.5" cy="18" r="1"/></svg></span><b>Формат</b><div class="pa-v"><span class="pa-list"><i></i><i></i><i></i><i></i><i></i></span><small>5 пунктов</small></div><span class="pa-p"><a class="proof" href="https://academy.openai.com/public/clubs/work-users-ynjqu/resources/prompting" target="_blank" rel="noopener" data-quote="OpenAI Academy: «Tell ChatGPT how you&#39;d like the response» — academy.openai.com, Prompting" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Tell Claude what to do instead of what not to do» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div><div class="pa-b pa-q" title="Переписку, документ, таблицу — целиком. Длинное наверх, вопрос в конце" aria-label="Переписку, документ, таблицу — целиком. Длинное наверх, вопрос в конце"><span class="pa-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.7.3-1 .9-1 1.7M12 17h.01"/></svg></span><b>Вопрос в конце</b><div class="pa-v"><span class="pa-l"><i style="width:40%"></i></span><span class="pa-qm">?</span></div><span class="pa-p"></span></div></div><div class="pa-rail"><span class="pa-down"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v16M6 14l6 6 6-6"/></svg></span><small>порядок</small><div class="pa-side" title="Теги для частей: &lt;переписка&gt;…&lt;/переписка&gt; — модель не путает данные с инструкцией" aria-label="Теги для частей: &lt;переписка&gt;…&lt;/переписка&gt; — модель не путает данные с инструкцией"><span class="pa-tag big">&lt;…&gt;</span><small>теги</small><span class="pa-p"><a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Wrapping each type of content in its own tag (for example, &lt;instructions&gt;, &lt;context&gt;, &lt;input&gt;) reduces misinterpretation» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a></span></div></div></div><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Пять частей и теги, у каждой — источник в официальном руководстве.</div><div class="fg"><span class="fk">В общем случае</span>Модель знает о задаче только то, что написано в запросе. Anthropic предлагает проверку: покажите промпт коллеге без контекста — если он запутается, модель запутается тоже<a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Show your prompt to a colleague with minimal context on the task and ask them to follow it. If they&#39;d be confused, Claude will be too» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Откройте свой последний запрос и отметьте, каких из пяти частей в нём нет. Допишите роль и формат — это две фразы.</div></div></section><section class="chapter" id="examples"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="15" rx="2"/><path d="M3 9h18M8 5v4"/></svg></span>Шесть примеров</h2><div class="tabs"><input type="radio" name="ex-ru" id="ex-ru-client" checked><input type="radio" name="ex-ru" id="ex-ru-meeting"><input type="radio" name="ex-ru" id="ex-ru-summary"><input type="radio" name="ex-ru" id="ex-ru-table"><input type="radio" name="ex-ru" id="ex-ru-style"><input type="radio" name="ex-ru" id="ex-ru-research"><nav class="tb"><label for="ex-ru-client"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"/></svg></span>Ответ клиенту</label><label for="ex-ru-meeting"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M8 3v4M16 3v4M3 10h18"/></svg></span>Подготовка к встрече</label><label for="ex-ru-summary"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5h16M4 10h16M4 15h10M4 20h6"/></svg></span>Сводка треда</label><label for="ex-ru-table"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M9 10v10"/></svg></span>Разбор таблицы</label><label for="ex-ru-style"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20l4-1 11-11-3-3L5 16z"/><path d="M14 6l3 3"/></svg></span>Текст в стиле компании</label><label for="ex-ru-research"><span class="tb-i" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="6"/><path d="M20 20l-4.3-4.3"/></svg></span>Исследование</label></nav><div class="tp" id="client"><h3 class="tp-h">Ответ клиенту по переписке</h3><p class="why">Клиент пишет в третий раз, тон нужен спокойный, обещать можно только то, что уже есть в переписке.</p><div class="parts"><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">Ты — сотрудник поддержки [компании].&#10;Ниже вся переписка с клиентом.&#10;&lt;переписка&gt;&#10;[вставить целиком]&#10;&lt;/переписка&gt;&#10;Напиши следующий ответ клиенту. Тон — спокойный и дружелюбный, как в этом примере:&#10;&lt;пример&gt;&#10;[один удачный прошлый ответ]&#10;&lt;/пример&gt;&#10;Не больше 5 предложений. Сроки называй, только если они есть в переписке.</pre><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Роль, переписка в тегах, пример тона и два правила формата.</div><div class="fg"><span class="fk">В общем случае</span>Пример прошлого ответа задаёт тон точнее любых прилагательных. Правило про сроки сформулировано как разрешение с условием, и модель следует ему буквально.</div><div class="fa"><span class="fk">Что сделать</span>Сохраните два-три лучших ответа команды и подставляйте один из них в блок примера.</div></div></div><div class="tp" id="meeting"><h3 class="tp-h">Подготовка к встрече</h3><p class="why">Завтра встреча на 30 минут, материалы разбросаны по переписке и документам.</p><div class="parts"><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">Завтра встреча с [кем] по [теме], 30 минут. Моя цель — [решение, которое нужно получить].&#10;&lt;материалы&gt;&#10;[переписка и документы по теме]&#10;&lt;/материалы&gt;&#10;Подготовь:&#10;1. Три вопроса, которые стоит решить на встрече.&#10;2. По каждому — что уже известно из материалов, с короткой цитатой.&#10;3. Что мне нужно выяснить до встречи.&#10;Формат — таблица из трёх колонок.</pre><p class="cap">Шаблон повестки с разбивкой по времени есть в OpenAI Academy<a class="proof" href="https://academy.openai.com/public/resources/chatgpt-for-any-role" target="_blank" rel="noopener" data-quote="OpenAI Academy, ChatGPT for any role: «Create a structured agenda for a meeting about [topic]. Break the agenda into sections with time estimates and goals for each section» — academy.openai.com" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Цель встречи, материалы в тегах и нумерованный список того, что вернуть.</div><div class="fg"><span class="fk">В общем случае</span>Цель встречи отсекает лишнее из материалов. Нумерованные шаги нужны, когда важны порядок и полнота ответа<a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Show your prompt to a colleague with minimal context on the task and ask them to follow it. If they&#39;d be confused, Claude will be too» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</div><div class="fa"><span class="fk">Что сделать</span>Перед каждой встречей на 30 минут и больше отдавайте материалы этим промптом и открывайте встречу с его таблицей.</div></div></div><div class="tp" id="summary"><h3 class="tp-h">Сводка длинного треда</h3><p class="why">В чате 200 сообщений, нужно понять, что решили и кто что делает.</p><div class="parts"><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">&lt;тред&gt;&#10;[вставить целиком]&#10;&lt;/тред&gt;&#10;Сначала выпиши дословные цитаты, где принимаются решения или назначаются задачи.&#10;Потом по этим цитатам составь сводку:&#10;— решения;&#10;— задачи с ответственными и сроками;&#10;— открытые вопросы.&#10;Каждый пункт — одна строка. Если ответственного нет в цитатах, напиши «не назначен».</pre><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Длинный тред стоит вверху, задача в конце, сначала цитаты, потом сводка.</div><div class="fg"><span class="fk">В общем случае</span>Anthropic советует для длинных документов сначала просить цитаты<a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «For long document tasks, ask Claude to quote relevant parts of the documents first before carrying out its task» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a> и ставить вопрос после данных: в тестах это давало до 30% прироста качества<a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Place your long documents and inputs near the top of your prompt, above your query, instructions, and examples»; «Queries at the end can improve response quality by up to 30 percent in tests» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Правило «не назначен» не даёт модели додумать ответственного.</div><div class="fa"><span class="fk">Что сделать</span>Для любого треда длиннее одного экрана начинайте с просьбы выписать цитаты.</div></div></div><div class="tp" id="table"><h3 class="tp-h">Разбор таблицы</h3><p class="why">Выгрузка обращений за месяц в CSV, нужно найти, что изменилось.</p><div class="parts"><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">Во вложении выгрузка [обращений] за [период], CSV.&#10;Посчитай [число обращений] по [теме обращения] и покажи 5 самых больших изменений по сравнению с прошлым месяцем.&#10;Для каждого — число и одна строка, чем это может объясняться.&#10;Покажи код, которым считал, чтобы я мог проверить.</pre><p class="cap">Файл обрабатывается в изолированной песочнице — и в ChatGPT, и в Claude<a class="proof" href="https://help.openai.com/en/articles/8437071-data-analysis-with-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: для анализа данных пишет и запускает Python в изолированной среде; код, результат и допущения стоит проверить, прежде чем опираться на вывод. Пересказ справки OpenAI — help.openai.com/en/articles/8437071" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude" target="_blank" rel="noopener" data-quote="Claude: «When Claude executes code or creates files, it operates within an isolated, sandboxed container» — support.claude.com/en/articles/12111783" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Файл целиком, точная метрика и разрез, ограничение «5 изменений» и просьба показать код.</div><div class="fg"><span class="fk">В общем случае</span>Модель считает кодом в песочнице, а код можно перечитать. OpenAI прямо советует проверять код, результат и допущения, прежде чем опираться на вывод.</div><div class="fa"><span class="fk">Что сделать</span>Проверьте одно число из ответа вручную. Если совпало, остальным можно доверять больше.</div></div></div><div class="tp" id="style"><h3 class="tp-h">Текст в стиле компании</h3><p class="why">Нужен пост или письмо, которое звучит как свои, без канцелярита.</p><div class="parts"><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">Вот три наших поста, которые хорошо зашли:&#10;&lt;пример&gt;[пост 1]&lt;/пример&gt;&#10;&lt;пример&gt;[пост 2]&lt;/пример&gt;&#10;&lt;пример&gt;[пост 3]&lt;/пример&gt;&#10;Напиши пост о [теме] в том же стиле: длина, тон и структура как в примерах.&#10;Для кого: [аудитория]. Зачем: [чего хотим от читателя].</pre><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Три примера в тегах и одна фраза о том, кому и зачем пишем.</div><div class="fg"><span class="fk">В общем случае</span>Anthropic рекомендует 3–5 примеров<a class="proof" href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener" data-quote="Anthropic: «Include 3–5 examples for best results» — platform.claude.com, Prompting best practices" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>; руководство Google тоже ставит примеры первой практикой<a class="proof" href="https://www.kaggle.com/whitepaper-prompt-engineering" target="_blank" rel="noopener" data-quote="Google, Prompt Engineering: среди лучших практик — давать примеры, быть конкретным про формат ответа и формулировать инструкции вместо запретов. Пересказ — kaggle.com/whitepaper-prompt-engineering" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>. Стиль, показанный на примерах, модель копирует точнее, чем описанный словами.</div><div class="fa"><span class="fk">Что сделать</span>Сложите удачные тексты в проект и возьмите их примерами — тогда их не нужно вставлять каждый раз.</div></div></div><div class="tp" id="research"><h3 class="tp-h">Исследование темы</h3><p class="why">Нужен обзор рынка или практик с источниками, на что уйдёт полдня поиска.</p><div class="parts"><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="3.5"/><path d="M5 20a7 7 0 0 1 14 0"/></svg>Роль</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/></svg>Кому и зачем</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 12h6M9 16h6"/></svg>Данные целиком</span><span class="pt off"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 9h8M8 13h5"/><path d="M15 15l2 2 3-3"/></svg>Пример</span><span class="pt"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h13"/></svg>Формат</span></div><pre class="prompt">Исследуй: [вопрос].&#10;Для кого: [аудитория]. Зачем: [решение, которое нужно принять].&#10;Нужны данные не старше [года].&#10;Итог: таблица [колонки] и вывод в 5 пунктах.&#10;К каждому факту — ссылка на источник. Если данных нет, так и напиши.</pre><p class="cap">Режим глубокого исследования есть в обоих чатах: deep research в ChatGPT и Research в Claude<a class="proof" href="https://help.openai.com/en/articles/10500283-deep-research-in-chatgpt" target="_blank" rel="noopener" data-quote="ChatGPT: deep research собирает и сводит информацию из интернета в отчёт, работает от 5 до 30 минут, в ответе — ссылки на источники. Пересказ справки OpenAI — help.openai.com/en/articles/10500283" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a><a class="proof" href="https://support.claude.com/en/articles/11088861-use-research-on-claude" target="_blank" rel="noopener" data-quote="Claude: Research — «conducting multiple searches that build on each other», ответ «complete with easy-to-check citations»; «available for users with paid Claude plans (Pro, Max, Team, or Enterprise)» — support.claude.com/en/articles/11088861" aria-label="Источник"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/></svg></a>.</p><div class="finding"><b>Вывод</b><div class="fc"><span class="fk">В этом примере</span>Цель, ограничение по свежести данных и формат итога со ссылками.</div><div class="fg"><span class="fk">В общем случае</span>В режиме исследования модель делает серию поисков и возвращает отчёт со ссылками. Ссылки позволяют проверить каждый факт, а фраза «если данных нет» не даёт заполнить пробел выдумкой.</div><div class="fa"><span class="fk">Что сделать</span>Открывайте две-три ссылки из отчёта и сверяйте факт с источником, прежде чем нести вывод дальше.</div></div></div></div></section><section class="chapter" id="learn"><h2><span class="ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4h11l-2 4 2 4H5"/></svg></span>Что изучить</h2><p class="why">Начните с туториала на 7 минут: он объясняет, почему приёмы из этой статьи работают. Дальше — руководства по промптингу, курсы — когда будет время.</p><div class="sublabel" style="margin-top:22px">Основы: как устроен ИИ</div><div class="links two"><a href="https://academy.claude.com/tutorials/the-4-properties-of-ai" target="_blank" rel="noopener"><div class="k">Claude Academy · туториал, 7 минут</div><div class="t">The 4 properties of AI</div><div class="d">Предсказание следующего токена, знания, рабочая память, управляемость — откуда берутся сильные и слабые стороны модели</div></a><a href="https://academy.claude.com/courses/ai-capabilities-and-limitations" target="_blank" rel="noopener"><div class="k">Claude Academy · курс, 13 уроков, 3,5 часа</div><div class="t">AI Capabilities and Limitations</div><div class="d">Почему модель уверенно выдумывает, где границы контекста и какие инструкции надёжны</div></a><a href="https://academy.claude.com/courses/ai-fluency-framework-foundations" target="_blank" rel="noopener"><div class="k">Claude Academy · курс, 14 уроков, 4 часа</div><div class="t">AI Fluency: Framework & Foundations</div><div class="d">Четыре навыка: что поручать ИИ, как описать задачу, как проверить результат и кто за него отвечает</div></a></div><div class="sublabel" style="margin-top:22px">Промптинг</div><div class="links two"><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" target="_blank" rel="noopener"><div class="k">Anthropic · документация</div><div class="t">Prompting best practices</div><div class="d">Основной справочник: ясность, примеры, роль, XML-теги, длинные документы</div></a><a href="https://claude.com/blog/best-practices-for-prompt-engineering" target="_blank" rel="noopener"><div class="k">Anthropic · блог</div><div class="t">Best practices for prompt engineering</div><div class="d">Общие приёмы промптинга вне конкретной модели</div></a><a href="https://github.com/anthropics/prompt-eng-interactive-tutorial" target="_blank" rel="noopener"><div class="k">Anthropic · туториал</div><div class="t">Интерактивный туториал</div><div class="d">9 глав с упражнениями — от структуры промпта до XML-тегов и примеров</div></a><a href="https://www.kaggle.com/whitepaper-prompt-engineering" target="_blank" rel="noopener"><div class="k">Google · whitepaper</div><div class="t">Prompt Engineering</div><div class="d">Техники и лучшие практики: примеры, формат ответа, инструкции вместо запретов</div></a><a href="https://academy.openai.com/public/clubs/work-users-ynjqu/resources/prompting" target="_blank" rel="noopener"><div class="k">OpenAI Academy</div><div class="t">Prompting</div><div class="d">Что, для кого и зачем, контекст, формат ответа, итерации</div></a><a href="https://academy.openai.com/public/resources/chatgpt-for-any-role" target="_blank" rel="noopener"><div class="k">OpenAI Academy</div><div class="t">ChatGPT for any role</div><div class="d">Готовые шаблоны рабочих промптов по задачам и ролям</div></a></div><div class="sublabel" style="margin-top:22px">Для команды и администраторов</div><div class="links two"><a href="https://support.claude.com/en/articles/14782391-claude-enterprise-consumption-guide" target="_blank" rel="noopener"><div class="k">Claude · справка</div><div class="t">Claude Enterprise consumption guide</div><div class="d">Как расходуются токены: Claude Code и Cowork тратят заметно больше обычного чата; лимиты по группам и выбор модели по умолчанию</div></a></div></section><section class="chapter" id="next"><h2>Дальше по теме</h2><div class="links two"><a href="/blog/harness-work-approaches/"><div class="k">Подходы</div><div class="t">Если ответ не подошёл</div><div class="d">Цикл ответа и ревью с правкой запроса</div></a><a href="/blog/specs-rules-skills/"><div class="k">Контекст</div><div class="t">Спеки, библия, правила и скиллы</div><div class="d">Где хранить промпт дольше одного чата</div></a><a href="/blog/ai-in-code-harness-and-tools/"><div class="k">Разработка</div><div class="t">ИИ в коде</div><div class="d">Харнесс и три группы инструментов</div></a><a href="/blog/chatgpt-enterprise-usage-report/"><div class="k">Отчёт</div><div class="t">Отчёт по ChatGPT Enterprise</div><div class="d">Кто в компании чем пользуется</div></a></div></section><footer>Промпты — шаблоны: в квадратных скобках то, что нужно подставить. Приёмы — по официальным руководствам Anthropic, OpenAI и Google, источник у значка рядом с утверждением. Цитаты из справки OpenAI и руководства Google даны пересказом.</footer></div>]]></content:encoded></item>
</channel></rss>
