? Проблема не в модели
GPT-codex, Claude 4.8, Gemini 3.5 flash: все они умеют писать хороший код. Но по умолчанию ни один из них не знает ваших стандартов. ?♂️
Что получает модель без системного промпта:
Никаких ограничений на архитектуру ?️
Никаких предпочтений по тестированию ?
Никаких правил по визуальному качеству ?
Никаких требований к безопасности ?
Результат предсказуем. Компонент работает. Стили: дефолтный Tailwind. Тесты не написаны. any везде, где TypeScript сопротивлялся. Магические числа без объяснений. ?
Это не модель плохая. Это пустое поле вместо технического задания. ?
? Системный промпт: почему не работает «act as a senior dev»
Стандартные советы про системные промпты обычно заканчиваются на «скажи модели, что она опытный разработчик». Это примерно как нанять специалиста и описать его роль словом «хороший». ?
Настоящий системный промпт для инженерных задач выглядит иначе. Вот что в реальности содержит хорошо написанная персона для senior fullstack инженера:
Конкретные архитектурные принципы (когда поднимать стейт, когда нет) ?
Жесткие правила по именованию и структуре ?️
Обязательные паттерны для конкретных сценариев (data fetching, error boundaries, loading states) ?
Явные запреты на действия без согласования ?
Стандарты code review и критерии готовности к PR ?
Разница между шаблонным «act as senior developer» и детальной инструкцией сравнима с разницей между джуниором и техлидом. ??
? proagents: 794 таких промпта, ноль зависимостей
github.com/Arlandaren/proagents: открытая библиотека, собранная из шести ведущих репозиториев с агентными конфигурациями. ?
Структура проекта:
proagents/ ├── personas/ # 232 агента-специалиста │ ├── engineering/ # 126 инженерных ролей │ ├── design/ # 15 дизайн-персон │ ├── operations/ # 33 операционных роли │ └── ... ├── workflows/ # 521 исполняемый чеклист │ ├── development/ # 363 воркфлоу разработки │ ├── security/ # 64 чеклиста безопасности │ └── ... └── rules/ # 41 правило генерации ├── taste/ # Визуальные стандарты └── core/ # Гигиена кода
Установка в IDE выполняется одной командой: ⚡
git clone https://github.com/Arlandaren/proagents.git cd proagents ./proagents install react-patterns --cursor
Настройка завершена. Редактор Cursor теперь знает ваши стандарты. ?
? Разбор: что меняется с rules/taste/
Папка rules/taste/, пожалуй, самая недооцененная часть репозитория. Она не описывает роль. Она описывает эстетику. ✨
animate.md ?♂️
Запрещает CSS transition и animation в пользу spring physics. Вместо transition: all 0.3s ease используется useSpring из framer-motion с конкретными значениями stiffness и damping. В результате анимации ощущаются физически правдоподобными, а не просто «плавными».
liquid-glass.md ?
Настройка эффекта Glassmorphism. Никаких backdrop-filter: blur(10px) наугад, только проверенные комбинации blur, saturation и overlay-цветов, которые работают на разных фонах. Дополнительно описаны правила, когда этот эффект уместен, а когда создает проблемы с доступностью интерфейса.
bolder.md ✍️
Типографика без компромиссов. Иерархия контраста, правила для font-weight, запрет на использование color: #888888 в качестве нейтрального цвета. Текст либо читается, либо его нет.
overdrive.md ?
Используется, когда нужен максимальный премиальный вид. Высокая визуальная плотность при сохранении читаемости. Этот файл стоит применять точечно, так как он делает UI агрессивно выразительным.
? Конкретный пример: до и после
Задача: написать карточку продукта в React.
Без системного промпта: ❌
function ProductCard({ product }) { return ( <div style={{ border: '1px solid #ccc', padding: '16px', borderRadius: '8px' }}> <img src={product.image} alt={product.name} /> <h3>{product.name}</h3> <p>{product.price}</p> <button onClick={() => addToCart(product.id)}>Add to Cart</button> </div> ); }
Код работает, но выглядит слабо. Атрибут alt не несет смысла. Нет состояния загрузки, отсутствует обработка ошибок. Переменная addToCart берется из ниоткуда. ?
С react-patterns + animate из proagents: ✅
interface ProductCardProps { product: Product; onAddToCart: (productId: string) => void; } function ProductCard({ product, onAddToCart }: ProductCardProps) { const [isAdding, setIsAdding] = useState(false); const cardSpring = useSpring({ scale: 1, config: { stiffness: 300, damping: 20 } }); const handleAddToCart = async () => { setIsAdding(true); await onAddToCart(product.id); setIsAdding(false); }; return ( <animated.article style={cardSpring} onMouseEnter={() => cardSpring.scale.set(1.02)} onMouseLeave={() => cardSpring.scale.set(1)} aria-label={`${product.name}, ${formatPrice(product.price)}`} > <img src={product.imageUrl} alt={product.name} loading="lazy" /> <h3>{product.name}</h3> <p>{formatPrice(product.price)}</p> <button onClick={handleAddToCart} disabled={isAdding} aria-busy={isAdding} > {isAdding ? 'Добавляем...' : 'В корзину'} </button> </animated.article> ); }
Код полностью типизирован. Функция onAddToCart корректно передается через props. Добавлено состояние загрузки и поддержка доступности. Реализована spring-анимация с конкретными значениями. Форматирование цены вынесено в formatPrice. ?
Модель не стала умнее. Просто получила правильное ТЗ. ?
? Какие IDE поддерживаются
IDE |
Команда |
|---|---|
Cursor ? |
|
Claude Code ? |
|
Windsurf ? |
|
Gemini CLI ♊ |
|
OpenCode ? |
|
Любой ?️ |
|
⚡ Попробуйте прямо сейчас
git clone https://github.com/Arlandaren/proagents.git cd proagents ./proagents search security # найдите нужные файлы ./proagents install owasp-threat-modeling --stdout # просмотрите содержимое
Репозиторий: github.com/Arlandaren/proagents ⭐
Если библиотека упростила вашу работу, поддержите проект звездой на GitHub и лайком на Хабре. Если у вас есть свои проверенные промпты, пулреквесты приветствуются. ?
Комментарии (5)

iBear
02.06.2026 05:05GPT-4, Claude 3.5, Gemini 1.5
Это что за археологические раскопки? Какая модель статью писала?

CryptoPirate
02.06.2026 05:05Не, это прям полное безобразие. Статью полностью модель писала судя по количеству эмодзи, опечатка прямо в названии статьи. Автор, вы её хоть сами то читали?
CitizenOfDreams
Как средневековые алхимики, блин. Вот сейчас мы смешаем львиную гриву с закатным светом в нужных пропорциях, нагреем до правильной температуры, и тогда у нас совершенно точно получится золото.