astro-actions
SkillAI & modelsUse when handling form submissions, mutations, or server-side logic with type safety in Astro via defineAction / astro:actions.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the astro-actions skill
What this skill tells your AI
The instructions your AI receives, as published by fusengine/agents in plugins/astro-expert/skills/astro-actions/SKILL.md and read by ahel’s review.
Covers the full action lifecycle from src/actions/index.ts structure through error handling and redirect patterns. Does not cover Astro DB integration in depth (astro-db handles the database layer) or Content Layer schemas (astro-content) — this skill focuses on the request/validation/response boundary.
Astro Actions Expert
Type-safe server functions with automatic validation, standardized errors, and progressive enhancement.
Agent Workflow (MANDATORY)
Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:
- fuse-ai-pilot:explore-codebase - Check existing actions in
src/actions/ - fuse-ai-pilot:research-expert - Verify latest Actions docs via Context7/Exa
- mcp__context7__query-docs - Get defineAction and ActionError examples
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
When to Use
- Handling form submissions with server-side validation
- Creating type-safe backend mutations without API boilerplate
- Building progressive enhancement (works without JS)
- Replacing API endpoints for client-server communication
Why Astro Actions
| Feature | Benefit |
|---|---|
defineAction() | Type-safe server function definition |
| Zod validation | Automatic JSON and FormData parsing |
ActionError | Standardized error codes and messages |
accept: 'form' | Direct HTML form submission support |
| Progressive enhancement | Works without JavaScript enabled |
astro:actions | Client import for type-safe calls |
Core Concepts
Action Structure
All actions live in src/actions/index.ts and export a server object:
// src/actions/index.ts
import { defineAction } from 'astro:actions';
import { z } from 'astro/zod';
export const server = {
myAction: defineAction({ /* ... */ })
}
Accept Modes
| Mode | Description |
|---|---|
accept: 'json' (default) | Parses JSON request body |
accept: 'form' | Parses HTML FormData directly |
Error Codes
Standard HTTP-aligned codes: UNAUTHORIZED, FORBIDDEN, NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR, CONFLICT, TOO_MANY_REQUESTS.
Reference Guide
| Need | Reference |
|---|---|
| Concepts & architecture | overview.md |
| defineAction patterns | defining-actions.md |
| ActionError handling | error-handling.md |
| HTML form integration | forms.md |
| Progressive enhancement | progressive-enhancement.md |
| Contact form template | templates/contact-form.md |
| JSON action template | templates/json-action.md |
Best Practices
- Always define
inputschema — Never skip Zod validation - Use
ActionErrorfor known errors — Standardized codes for client handling accept: 'form'for HTML forms — Native form submission support- Progressive enhancement — Form works without JS, enhanced with it
- Check
ctx.cookiesfor auth — ThrowUNAUTHORIZEDwhen not logged in
Signals
- GitHub stars
- 25
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
astro-actions- Source
- github.com/fusengine/agents