- BrainTools - https://www.braintools.ru -
GPT-codex, Claude 4.8, Gemini 3.5 flash: все они умеют писать хороший код. Но по умолчанию ни один из них не знает ваших стандартов. 🤷♂️
Что получает модель без системного промпта:
Никаких ограничений на архитектуру 🏗️
Никаких предпочтений по тестированию 🧪
Никаких правил по визуальному качеству 🎨
Никаких требований к безопасности 🔒
Результат предсказуем. Компонент работает. Стили: дефолтный Tailwind. Тесты не написаны. any везде, где TypeScript сопротивлялся. Магические числа без объяснений. 😅
Это не модель плохая. Это пустое поле вместо технического задания. 📝
Стандартные советы про системные промпты обычно заканчиваются на «скажи модели, что она опытный разработчик». Это примерно как нанять специалиста и описать его роль словом «хороший». 🧐
Настоящий системный промпт для инженерных задач выглядит иначе. Вот что в реальности содержит хорошо написанная персона для senior fullstack инженера:
Конкретные архитектурные принципы (когда поднимать стейт, когда нет) 📐
Жесткие правила по именованию и структуре 🗂️
Обязательные паттерны для конкретных сценариев (data fetching, error boundaries, loading states) 🔄
Явные запреты на действия без согласования 🛑
Стандарты code review и критерии готовности к PR 🤝
Разница между шаблонным «act as senior developer» и детальной инструкцией сравнима с разницей между джуниором и техлидом. 👨💻
github.com/Arlandaren/proagents [1]: открытая библиотека, собранная из шести ведущих репозиториев с агентными конфигурациями. 📁
Структура проекта:
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/, пожалуй, самая недооцененная часть репозитория. Она не описывает роль. Она описывает эстетику. ✨
Запрещает CSS transition и animation в пользу spring physics. Вместо transition: all 0.3s ease используется useSpring из framer-motion с конкретными значениями stiffness и damping. В результате анимации ощущаются физически правдоподобными, а не просто «плавными».
Настройка эффекта Glassmorphism. Никаких backdrop-filter: blur(10px) наугад, только проверенные комбинации blur, saturation и overlay-цветов, которые работают на разных фонах. Дополнительно описаны правила, когда этот эффект уместен, а когда создает проблемы с доступностью интерфейса.
Типографика без компромиссов. Иерархия контраста, правила для font-weight, запрет на использование color: #888888 в качестве нейтрального цвета. Текст либо читается, либо его нет.
Используется, когда нужен максимальный премиальный вид. Высокая визуальная плотность при сохранении читаемости. Этот файл стоит применять точечно, так как он делает 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 |
Команда |
|---|---|
|
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 [1] ⭐
Если библиотека упростила вашу работу, поддержите проект звездой на GitHub и лайком на Хабре. Если у вас есть свои проверенные промпты, пулреквесты приветствуются. 🤝
Автор: alrn
Источник [2]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/31121
URLs in this post:
[1] github.com/Arlandaren/proagents: https://github.com/Arlandaren/proagents
[2] Источник: https://habr.com/ru/articles/1042444/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1042444
Нажмите здесь для печати.