---
title: "Свои скрипты"
id: "2098"
type: "page"
slug: "scripts"
published_at: "2026-09-30T03:30:03+00:00"
modified_at: "2026-10-19T18:55:42+00:00"
url: "https://pastukhov.com/agents/news/docs/scripts/"
markdown_url: "https://pastukhov.com/agents/news/docs/scripts.md"
excerpt: "Скрипты — это запасной выход продукта. Пока встроенных возможностей хватает, о них можно не думать.…"
---

# Свои скрипты

[https://pastukhov.com/agents/news/docs/scripts/.md](https://pastukhov.com/agents/news/docs/scripts/.md)

Скрипты — это запасной выход продукта. Пока встроенных возможностей хватает, о них можно не думать. Но если чего-то не хватает — источник отдаёт данные необычным способом, нужное значение не достаётся обычным разбором, нужной службы нет среди готовых каналов — соответствующий шаг описывается своим кодом на Python. Писать код самому не придётся: вы объясняете задачу словами, а пишет, проверяет и запускает его ваш агент.

## Зачем это нужно

Готовые возможности закрывают большинство задач, но не все. Свой код нужен, когда:

- **Источник устроен нестандартно** — данные отдаёт отдельная программная служба, а не страница или лента.
- **Значение не достаётся обычным способом** — подставляется уже на странице или лежит в непривычном месте.
- **Нужной службы нет среди каналов и целей публикации** — например, корпоративный мессенджер или своя система управления сайтом.
- **Условие не выразить готовыми полями** — нужен свой признак, посчитанный по своим правилам.
- **Обработку хочется считать самому** — без обращения во внешнюю модель.

## Какой шаг можно заменить

Свой код можно подключить почти к любому месту пути одной новости. Смысл везде один: продукт делает свою работу, а на выбранном шаге спрашивает ваш код.

- **При сборе** — быть источником целиком; почистить страницу сразу после скачивания; разобрать письмо необычного формата; дополнить материал на входе.
- **При наблюдении** — почистить страницу перед сравнением; достать значения своим кодом (см. [Мониторы](/agents/news/docs/monitors) ).
- **При обработке** — быть поставщиком ИИ вместо внешней модели; добавить свою обработку всех материалов и событий (см. [ИИ-обработка](/agents/news/docs/ai) ).
- **При принятии решений** — посчитать свой признак для условия и выполнить своё действие по правилу (см. [Правила](/agents/news/docs/rules) ).
- **При доставке** — поправить вид сообщения; быть каналом целиком (см. [Каналы доставки](/agents/news/docs/channels) ).
- **При публикации** — поправить текст черновика; быть целью публикации (см. [Публикация](/agents/news/docs/publishing) ).

## Как устроен скрипт

Скрипт — обычный текстовый файл в разделе **Скрипты** рядом с остальными настройками. Он лежит под контролем версий вместе с ними и перечитывается на лету: правка применяется со следующего запуска, перезапуск не нужен.

- **Код можно хранить двумя способами** — прямо в файле настроек или рядом отдельным файлом, который удобнее править в своём редакторе. Один скрипт — один из двух способов, не оба сразу.
- **Задание и ответ — обычные данные** — скрипт получает, что именно нужно сделать, для какого источника и с какими настройками, и возвращает результат тоже данными. Печатать по ходу можно что угодно: значимым считается последний ответ.
- **Секреты хранятся вместе со скриптом** — токены и пароли указываются в нём же и при чтении настроек маскируются, как везде в продукте.
- **Своё постоянное место для данных** — у каждого скрипта есть своя папка: удобно запомнить, до чего дочитал сборщик, и продолжить с того же места.
- **Общие библиотеки ставятся сами** — если скрипту нужны дополнительные библиотеки, они перечисляются один раз, и продукт устанавливает их сам.

## Проверка и журнал запусков

Скрипт может ошибаться так же, как любая настройка, поэтому его всегда видно насквозь.

- **Тестовый запуск** — с экрана «Скрипты» можно попросить агента выполнить скрипт сейчас и показать, что тот вернул, не дожидаясь расписания.
- **Журнал запусков** — у каждого скрипта своя история: на каком шаге вызывался, что было поводом, что было предметом, чем закончилось, сколько заняло и что ответило (или на чём споткнулось). Видно и успешные запуски, и ошибку с её причиной.
- **Видно подключения** — рядом со скриптом показано, какие настройки на него ссылаются. Сразу понятно, что сломается, если его удалить, — поэтому продукт не даст удалить скрипт, пока на него ссылаются. Неподключённый скрипт отмечен отдельно.
- **Свои записи на экране «Скрипты»** — что скрипт делает, к какому шагу подключён и как отработали последние запуски: [Экраны наблюдения](/agents/news/docs/views) .

## Ограничители

Свой код — самая свободная часть продукта, поэтому на неё есть понятная упряжь. Всё настраивается, значения ниже — по умолчанию.

- **Общий выключатель** — одним движением можно остановить все скрипты сразу. Каждый пропущенный запуск честно записывается в журнал с причиной.
- **Срок на один запуск** — минута, при необходимости до десяти. Зависший скрипт снимается вместе со всеми запущенными им процессами.
- **Не больше двух запусков одновременно** — скрипты не съедают весь сервер, пока идёт сбор и обработка новостей.
- **Ограничение на объём данных** — до одного мегабайта в каждую сторону. Лишнее лучше складывать в свою папку, чем гнать через ответ.
- **Журнал запусков хранится 30 дней** — и убирается вместе с остальным архивом по срокам хранения.
- **Поломка видна сразу** — если на сервере нет Python или библиотеки ещё ставятся, на экране «Скрипты» появляется предупреждение с подсказкой, что проверить, а не тишина.

## Честные ограничения

- **Скрипты работают без изоляции.** Это доверенный код владельца: он получает те же доступы к файлам и сети, что и сам продукт. Ограничения здесь не технические, а дисциплинарные — поэтому писать и проверять скрипты стоит вместе с агентом.
- **Ключ управления скрипту не выдаётся.** Он не может менять настройки продукта за вас.
- **Скрипт расширяет шаг, но не меняет продукт.** Если нужна другая логика самого продукта, это уже вопрос лицензии на исходный код, а не скриптов.

Лицензия входит в подписку [«Фабрика агентов»](/agents/factory)
.

Дальше → [Оглавление документации](/agents/news/docs)

[← Оглавление документации](/agents/news/docs)
