safe-action-hooks — скилл для Claude Code: хуки next-safe-action
Скилл подсказывает агенту, какой хук next-safe-action взять для формы или оптимистичного UI и как связать его с серверным действием.
npx skills add next-safe-action/skills --skill safe-action-hooks -a claude-codeЧто делает safe-action-hooks
Скилл описывает четыре хука из next-safe-action/hooks: useAction, useOptimisticAction, useStateAction и useOptimisticStateAction. Выбор идёт по виду действия: .action() работает с первыми двумя, .stateAction() — с двумя другими. Для каждого хука в скилле есть готовый пример клиентского компонента с "use client", обработчиками onSuccess и onError и проверкой isPending.
Отдельный слой — очередь записей. useOptimisticStateAction берёт currentState и updateFn, а отправки выстраивает так, что каждая ждёт завершения предыдущей. Сервер получает последнее подтверждённое состояние в prevResult. Это пригодится для перетаскивания списка, канбан-доски или накопления правок, когда пользователь меняет порядок второй раз до того, как сохранился первый.
Есть условия, на которых скилл сломается. currentState должен быть стабильной ссылкой — сравнение идёт по идентичности. Для <form action={formAction}> серверное действие обязано быть .stateAction(), а схема входа должна разбирать FormData, например через zod-form-data. Само действие должно ревалидировать состояние страницы, иначе оптимистичный результат разойдётся с тем, что рендерит страница.
Установка идёт через npx skills add с флагом под вашу платформу.
Какие задачи решает
- выбрать хук под вид серверного действия
- сделать мгновенный отклик на переключение чекбокса
- поставить в очередь повторные перетаскивания элемента
- собрать форму на
<form action={formAction}>с разборомFormData - показать ошибку валидации рядом с полем
Примеры запросов агенту
- Помоги выбрать хук next-safe-action для формы обратной связи
- Сделай оптимистичный список с перетаскиванием через useOptimisticStateAction
- Почему мой useOptimisticStateAction не видит предыдущее состояние?
Как установить safe-action-hooks
1Через Skills CLI (Vercel)
npx skills add next-safe-action/skills --skill safe-action-hooks -a claude-code2Вручную: положить файлы
~/.claude/skills/safe-action-hooks/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/safe-action-hooks/
1Через Skills CLI (Vercel)
npx skills add next-safe-action/skills --skill safe-action-hooks -a codex2Вручную: положить файлы
.agents/skills/safe-action-hooks/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add next-safe-action/skills --skill safe-action-hooks -a cursor2Вручную: положить файлы
.cursor/skills/safe-action-hooks/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install next-safe-action/skills safe-action-hooks2Вручную: положить файлы
.github/skills/safe-action-hooks/SKILL.md1Через Skills CLI (Vercel)
npx skills add next-safe-action/skills --skill safe-action-hooks -a gemini-cli2Командой платформы
gemini skills install https://github.com/next-safe-action/skills --path skills/safe-action-hooksВручную: положить файлы
.devin/skills/safe-action-hooks/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add next-safe-action/skills --skill safe-action-hooks -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о safe-action-hooks
Как установить safe-action-hooks в Claude?
Выполните npx skills add next-safe-action/skills --skill safe-action-hooks -a claude-code. Скилл появится в ~/.claude/skills/safe-action-hooks/SKILL.md.
Что делает safe-action-hooks?
Подсказывает агенту, какой из хуков next-safe-action использовать и как связать его с серверным действием. Внутри разобраны useAction, useOptimisticAction, useStateAction и useOptimisticStateAction.
Чем useOptimisticAction отличается от useOptimisticStateAction?
Первый подходит для изменений, которые заменяют состояние целиком. Второй нужен там, где правки накапливаются: перетаскивания встают в очередь и каждое следующее считается от подтверждённого состояния.