Skill

laravel-api-tool-kit

Build production-grade Laravel REST APIs. Covers general best practices (code quality, DI, events, auth, exceptions, testing, database) AND essa/api-tool-kit specific patterns (ApiResponse, QueryFilters, dynamicPaginate, EnumHelpers). Use when creating or reviewing any Laravel API code in a project that has essa/api-tool-kit installed.

From laravel-api-tool-kit
Install
1
Run in your terminal
$
npx claudepluginhub ahmedesa/laravel-api-tool-kit
Tool Access

This skill uses the workspace's default tool permissions.

Supporting Assets
View in Repository
knowledge/_TEMPLATE.md
rules/actions.md
rules/anti-patterns.md
rules/authorization.md
rules/code-quality.md
rules/controllers.md
rules/database.md
rules/ddd.md
rules/dependency-injection.md
rules/dtos.md
rules/enums.md
rules/events.md
rules/exceptions.md
rules/filters.md
rules/jobs.md
rules/models.md
rules/pagination.md
rules/repositories.md
rules/requests.md
rules/resources.md
Skill Content

Laravel API Tool Kit Skill

This project uses the essa/api-tool-kit package. All API code MUST follow the standards in this skill — both the general Laravel best practices and the package-specific patterns.

Assumed Setup

  • essa/api-tool-kit is installed via Composer
  • Base Controller already uses the ApiResponse trait
  • The dateTimeFormat() global helper is available
  • dynamicPaginate() macro is registered on the query builder

Project Defaults

Fill these in when installing the skill. The AI reads this section to match existing project conventions.

  • Primary key type: ulid ← change to id if this project uses auto-increment
  • Auth guard: sanctum ← change if different (e.g. api)
  • Test class: Tests\TestCase ← change if the project uses a custom base

Structure Mapping & Customization

The rules in the rules/ directory are pattern-based. While examples use standard Laravel paths (e.g., app/Models), they are designed to be mapped to any structure.

DDD / Domain-Driven Design

If the project uses a DDD structure, the rules apply to the corresponding domain folders. Folder naming may vary by project (e.g., Repository vs Repositories). Examples include:

  • Models: app/Domain/{Domain}/Models/
  • Actions: app/Domain/{Domain}/Actions/
  • Repositories: app/Domain/{Domain}/Repository/ (or Repositories/)
  • DTOs: app/Domain/{Domain}/DTO/ (or DTOs/)
  • Filters: app/Domain/{Domain}/Filters/

Note for AI: Always run ls app/Domain/ to identify the project's specific naming conventions before creating new files. Priority is always: Project Patterns > Global Rules.

Project-Specific Rules

If a specific project requires overrides (e.g., "We use id instead of ulid" or "We return raw arrays instead of DTOs"), do not modify these global rules. Instead:

  1. Add the override to your project's AI instructions file (e.g. AGENTS.md, CLAUDE.md, or .claude/rules/ for Claude Code).
  2. The AI will prioritize project-level instructions over these global patterns.

Baseline — Applies to Every File

Before reading anything else, these rules apply universally:

  • Every PHP file MUST start with declare(strict_types=1);
  • Every method MUST have parameter types and a return type
  • Constructor dependencies MUST use private readonly promotion
  • User-facing strings MUST use trans() — never hardcoded

See rules/code-quality.md for the full baseline.

Component Map

When working on a specific concern, read the corresponding rule file:

General Standards (applies everywhere)

TaskRead
Code style, types, naming, constantsrules/code-quality.md
Injecting dependenciesrules/dependency-injection.md
Events and listenersrules/events.md
Standalone queued jobsrules/jobs.md
Authorization and policiesrules/authorization.md
Error and exception handlingrules/exceptions.md
Writing feature testsrules/testing.md
Database patterns, ULIDs, transactions, bulk opsrules/database.md
External 3rd-party integrationsrules/services.md
DDD structure, domain boundaries, cross-domain rulesrules/ddd.md

Package-Specific Patterns

TaskRead
Return a JSON responserules/responses.md
Add filtering / sorting / search to an endpointrules/filters.md
Create a new Action classrules/actions.md
Create a DTO for an Action or Servicerules/dtos.md
Write or review a Controllerrules/controllers.md
Write a FormRequestrules/requests.md
Write an API Resourcerules/resources.md
Create or update a Modelrules/models.md
Create or update a Repositoryrules/repositories.md
Create an Enumrules/enums.md
Add paginationrules/pagination.md

Always Check First

TaskRead
Before writing any coderules/anti-patterns.md

Building a New Endpoint

Follow workflows/new-endpoint.md for the full step-by-step process.

The order is always: Model → Migration → Filter → Enum → Requests → Resource → Policy → Action (if needed) → Controller → Language file → Route → Test

Available Workflows

Building

  • workflows/new-endpoint.md — add a complete CRUD resource from scratch
  • workflows/add-filter.md — add filtering to an existing model

Reviewing

  • workflows/code-review.md — multi-phase code review (structural + defense + scope discipline)

Debugging

  • workflows/investigate.md — structured debugging (data-first, multi-source, 15-min checkpoint)
  • workflows/curl-test.md — test an endpoint with curl and cross-reference response vs DB

Knowledge Management

  • workflows/update-knowledge.md — save learnings into rules or knowledge files
  • workflows/organize-knowledge.md — consolidate scattered docs into one-file-per-feature
  • workflows/create-workflow.md — capture a discovered process as a reusable workflow

Knowledge Base

Per-feature accumulated knowledge lives in a knowledge/ directory. The exact location depends on your AI tool:

  • Claude Code: .claude/knowledge/[feature].md
  • Antigravity: .agent/knowledge/[feature].md
  • Cursor / Copilot: knowledge/[feature].md (project root)

Each file contains:

  • Past issues and their confirmed root causes
  • Reusable diagnostic queries (with placeholder variables)
  • DB/data gotchas specific to this project
  • Lessons that don't fit into general rules

When investigating a bug, check knowledge/ first. When confirming a root cause, update knowledge/ before closing the session.

Stats
Stars525
Forks54
Last CommitMar 20, 2026