🔍 Проблема не в модели
GPT-4, Claude 3.5, Gemini 1.5: все они умеют писать хороший код. Но по умолчанию ни один из них не знает ваших стандартов. 🤷♂️
Что получает модель без системного промпта:
-
Никаких ограничений на архитектуру 🏗️
-
Никаких предпочтений по тестированию 🧪
-
Никаких правил по визуальному качеству 🎨
-
Никаких требований к безопасности 🔒
Результат предсказуем. Компонент работает. Стили: дефолтный 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.gitcd 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.gitcd proagents./proagents search security # найдите нужные файлы./proagents install owasp-threat-modeling --stdout # просмотрите содержимое
Репозиторий: github.com/Arlandaren/proagents ⭐
Если библиотека упростила вашу работу, поддержите проект звездой на GitHub и лайком на Хабре. Если у вас есть свои проверенные промпты, пулреквесты приветствуются. 🤝
ссылка на оригинал статьи https://habr.com/ru/articles/1042444/