Файл .workaignore
Файл .workaignore в корне проекта убирает папки и файлы из индексации кода WorkAI: синтаксис правил, встроенные исключения и когда изменения вступят в силу.
.workaignore — это текстовый файл в корне проекта, которым вы говорите WorkAI, какие пути не включать в индекс кодовой базы. Всё, что попало под правило, не сканируется, не разбивается на фрагменты и не уходит в индекс, а значит не появляется в результатах семантического поиска агента. Файл необязательный: без него работают только встроенные правила.
Где лежит файл
Ровно один файл, ровно в корне проекта — рядом с package.json или .git. Вложенные .workaignore во внутренних папках не читаются: правила для подпапок пишите в корневом файле путями от корня.
Файл — часть проекта, поэтому его можно коммитить в репозиторий: тогда правила будут одинаковыми у всей команды.
Почему не .gitignore
.gitignore для индексации не используется, и это осознанное решение, а не недоработка. Эти два файла решают разные задачи: .gitignore отвечает на вопрос «что не коммитить», а индексу нужен исходный код вместе с документацией и конфигами — то есть частично как раз то, что многие проекты из Git исключают. Если бы WorkAI читал .gitignore, из поиска молча выпадали бы нужные файлы.
Поэтому правила для WorkAI задаются отдельно. Дублировать в .workaignore типовые каталоги сборки не нужно — они уже исключены (см. ниже).
Синтаксис правил
Формат близок к .gitignore, но проще:
# комментарии начинаются с решётки, пустые строки игнорируются
legacy/ # каталог целиком
docs/internal/notes.md # конкретный файл от корня проекта
*.sample.json # маска по имени
**/migrations/** # каталог с таким именем на любом уровне вложенности
Что важно знать про сопоставление:
- правило проверяется и по пути от корня проекта, и по имени файла. Строка
notes.mdисключит файл с таким именем в любой папке, а не только в корне; - каталог на произвольной глубине надёжнее задавать маской
**/имя/**. Записьlegacy/закрывает толькоlegacyв корне; - ведущий слэш просто отбрасывается:
/legacyиlegacyработают одинаково; - отрицающие правила вида
!keep-this.tsне поддерживаются — исключений из исключений нет, пишите правила так, чтобы они сразу описывали только то, что нужно скрыть.
Что исключено и без вашего участия
Даже с пустым или отсутствующим .workaignore в индекс не попадают:
- файлы с секретами:
.envи его варианты,*.key,*.pem, сертификаты и хранилища ключей, SSH-ключи,credentials.json,secrets.json, файлы учётных данных облачных провайдеров. Это правило приоритетнее пользовательских: разрешить такой файл через.workaignoreнельзя; - типовые каталоги зависимостей и сборки:
node_modules,dist,build,out,.next,venv,__pycache__,target,vendor,coverage,.git,.cacheи подобные; - бинарные файлы, архивы, изображения, видео, шрифты, базы данных, логи, бэкапы, временные файлы;
- тесты и фикстуры: каталоги
test,tests,spec,specs,e2e,fixtures,__tests__,__mocks__и файлы вида*.test.ts,*.spec.ts,*.e2e.ts; - сгенерированное и служебное:
*.generated.*,*.gen.*,*.min.*,*.bundle.*,*.d.ts,*.stories.*, protobuf-генерация, снапшоты.snap, source maps.map,package-lock.json,yarn.lock,pnpm-lock.yaml.
Про тесты стоит помнить отдельно: они не попадают в семантический поиск, и добавить их туда через .workaignore нельзя — правило умеет только исключать.
Кроме того, индексируются только файлы из фиксированного списка расширений — около трёх десятков: .ts, .tsx, .js, .jsx, .py, .go, .rs, .java, .c, .cpp, .cs, .php, .rb, .swift, .kt, .md, .json, .yaml, .yml, .toml, .xml и ещё несколько. Всё остальное — например .css, .html, .sql, .sh — в индекс не попадёт и без правила.
На что правила влияют, а на что нет
.workaignore управляет индексом кодовой базы. Исключённый путь не будет найден семантическим поиском агента (vector_search) — подробнее про инструменты поиска на странице Поиск по коду.
Он не запрещает агенту работать с файлом другими способами: если вы сами назовёте путь, приложите файл к сообщению или агент найдёт его текстовым поиском по содержимому либо по имени, файл будет прочитан. .workaignore — это про то, что уезжает в индекс, а не про запрет доступа к диску.
Отдельно работает защита секретов при вложениях: файл, который выглядит как хранилище учётных данных, не будет приложен к сообщению, даже если вы выбрали его вручную.
Когда изменения вступят в силу
Правила читаются один раз при запуске работы с проектом. Если вы отредактировали .workaignore в уже открытом проекте, надёжный способ применить новые правила — переоткрыть проект или перезапустить WorkAI. После этого индекс пересобирается с учётом изменившегося набора правил: ранее сохранённые результаты сканирования считаются устаревшими и не переиспользуются.
Обратный случай тоже стоит держать в голове: если вы убрали правило и вернули папку в индекс, её содержимое появится в поиске не мгновенно, а после того как пройдёт очередная индексация.

С чего начать
Разумный минимум для типового проекта — исключить то, что не помогает агенту понимать код, но занимает место в поиске: большие снимки данных, сгенерированные клиенты API, локализационные словари, папки с чужим кодом, который вы не правите.
# крупные сгенерированные артефакты
src/api/generated/**
**/locales/**
# данные и дампы
data/dumps/**
*.sample.json
Начинать с длинного списка не нужно: встроенные правила уже закрывают большую часть шума, а .workaignore стоит добавлять точечно — когда в ответах агента всплывает то, что вы не считаете частью своей кодовой базы.