.codex/skills/livewire-development/SKILL.md
Develops reactive Livewire 3 components. Activates when creating, updating, or modifying Livewire components; working with wire:model, wire:click, wire:loading, or any wire: directives; adding real-time updates, loading states, or reactivity; debugging component behavior; writing Livewire tests; or when the user mentions Livewire, component, counter, or reactive UI.
npx skillsauth add aboustayyef/infraread livewire-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Activate this skill when:
Use search-docs for detailed Livewire 3 patterns and documentation.
Use the php artisan make:livewire [Posts\CreatePost] Artisan command to create new components.
These things changed in Livewire 3, but may not have been updated in this application. Verify this application's setup to ensure you follow existing conventions.
wire:model.live for real-time updates, wire:model is now deferred by default.App\Livewire namespace (not App\Http\Livewire).$this->dispatch() to dispatch events (not emit or dispatchBrowserEvent).components.layouts.app view as the typical layout path (not layouts.app).wire:show, wire:transition, wire:cloak, wire:offline, wire:target are available for use.wire:loading and wire:dirty for delightful loading states.@foreach ($items as $item) <div wire:key="item-{{ $item->id }}"> {{ $item->name }} </div> @endforeach
</code-snippet>Prefer lifecycle hooks like mount(), updatedFoo() for initialization and reactive side effects:
public function mount(User $user) { $this->user = $user; } public function updatedSearch() { $this->resetPage(); }
</code-snippet>You can listen for livewire:init to hook into Livewire initialization:
document.addEventListener('livewire:init', function () { Livewire.hook('request', ({ fail }) => { if (fail && fail.status === 419) { alert('Your session expired'); } });
Livewire.hook('message.failed', (message, component) => {
console.error(message);
});
});
</code-snippet>Livewire::test(Counter::class) ->assertSet('count', 0) ->call('increment') ->assertSet('count', 1) ->assertSee(1) ->assertStatus(200);
</code-snippet> <code-snippet name="Testing Livewire Component Exists on Page" lang="php">$this->get('/posts/create') ->assertSeeLivewire(CreatePost::class);
</code-snippet>wire:key in loops causes unexpected behavior when items changewire:model expecting real-time updates (use wire:model.live instead in v3)tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.