Best for
- Use this skill when the user asks to create a database migration, add a column, create a table, or modify the schema.
event4u-app/agent-config/src/skills/laravel-migration/SKILL.md
Use when creating a Laravel migration — table prefixes, column naming, multi-tenant awareness, php artisan make:migration. Other stacks: use stack-native migration tooling.
Decision brief
Other stacks: use stack-native migration tooling.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/laravel-migration"Inspect the Agent Skill "laravel-migration" from https://github.com/event4u-app/agent-config/blob/6a5670b7881a676c0da90d2afb950298087c4ccb/src/skills/laravel-migration/SKILL.md at commit 6a5670b7881a676c0da90d2afb950298087c4ccb. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Read conventions — Check ./agents/ and AGENTS.md for table prefixes, column naming, multi-tenant setup. 2. Generate migration — php artisan make:migration createxyztable (or addcolumn, etc.). 3. Write schema — Follow naming conventions, add indexes for WHERE/JOIN columns, use…
Before finalizing a migration, run the adversarial-review skill. Focus on the "Database migrations" attack questions: Can this destroy data? Is rollback possible?
Use this skill when the user asks to create a database migration, add a column, create a table, or modify the schema.
Use decimal for money — never float.
Some projects use multiple database connections. Check config/database.php for connections.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 9 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Use this skill when the user asks to create a database migration, add a column, create a table, or modify the schema.
./agents/ and AGENTS.md for table prefixes, column naming, multi-tenant setup.php artisan make:migration create_xyz_table (or add_column, etc.).decimal for money.php artisan migrate), then rollback (php artisan migrate:rollback) to confirm reversibility.decimal for money — never float.down(), or a roll-forward plan in the file
(see § The recovery contract below). Silence is the violation.Some projects use multiple database connections. Check config/database.php for connections.
| Check | How |
|---|---|
| Available connections | config/database.php → 'connections' array |
| Migration directories | database/migrations/ (default), check for additional directories |
| Custom migrate commands | php artisan list migrate — look for project-specific commands |
Always determine which database the table belongs to before creating a migration.
php artisan make:migration create_example_table
return new class extends Migration {
public function up(): void
{
Schema::connection('api_database')->create('example_table', function (Blueprint $table): void {
$table->id();
$table->unsignedBigInteger('customer_id');
$table->string('name');
$table->boolean('is_active')->default(true);
$table->timestamps();
$table->softDeletes();
$table->foreign('customer_id')
->references('id')
->on('customers')
// Choose the referential action; never inherit it from a
// template. See "Referential action is a decision" below.
->onDelete('cascade'); // cascade: rows here are expendable
// WITHOUT their customer
$table->index('is_active');
});
}
public function down(): void
{
Schema::connection('api_database')->dropIfExists('example_table');
}
};
php artisan make:migration:customer AddWeatherColumn --table=cl_lv_weather
Customer database tables use the cl_ prefix (e.g. cl_user, cl_lv_weather).
return new class extends Migration {
public function up(): void
{
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
$table->unsignedInteger('new_column')->after('existing_column');
});
}
public function down(): void
{
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
$table->dropColumn('new_column');
});
}
};
# Default connection
php artisan migrate # development
php artisan migrate --env=testing # testing
# Multi-tenant / custom — check AGENTS.md or module docs for project-specific commands
# Example: php artisan migrate:tenants, php artisan migrate --database=tenant
core/migrations/).{entity}_id (e.g. customer_id, user_id)is_ prefix (e.g. is_active, is_default)upload_date, deleted_at)unsignedBigInteger for foreign keys referencing id() columns->after('column') to place new columns logicallyEvery migration declares one of these, and silence is the violation:
down() that restores the prior state; orThe second branch is not a lighter obligation. A migration taking it records, in its own file comments, all three of:
Vague intent or missing detail is the violation. The plan lives in the migration file and lands in the same diff, because a plan documented "later" somewhere else is a plan nobody can review at the moment it matters.
The template above labels its onDelete('cascade') as one branch, not a
default. Copying it unchanged is how a delete of one customer silently removes
records that had independent value.
| The child row, without its parent, is | Action | What happens |
|---|---|---|
| expendable — it only means something as part of the parent | cascade | deleted with the parent |
| self-valued — it is a record in its own right (an invoice, an audit row, a payment) | restrict (or no action) | the parent delete FAILS until the child is dealt with |
| survivable — it outlives the parent with the link removed | set null | the column is nulled; requires a nullable column |
Two consequences worth stating because they are the ones missed:
restrict is the safe default for anything a finance, audit, or legal reader
would expect to still exist. A failed delete is a conversation; a cascaded
delete is a recovery.set null needs the foreign-key column to be nullable, and it needs the
application to handle the orphan state. Choosing it without both is choosing a
constraint error later.Soft deletes do not interact with this: onDelete fires on a real DELETE,
so a soft-deleting parent never triggers it. If the model soft-deletes, the
referential action describes what happens on a force-delete or a purge, and that
is the case to decide against.
->after('column') for column ordering — MariaDB respects it, and it matters for readability.down() that restores the prior
state, or the three-part roll-forward plan in the migration file. Neither is
optional; choosing between them is.float for money — use decimal.Before finalizing a migration, run the adversarial-review skill.
Focus on the "Database migrations" attack questions: Can this destroy data? Is rollback possible?
Frequently asked questions
Other stacks: use stack-native migration tooling.
The source record exposes this install command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/laravel-migration". Inspect the command and pinned source before running it.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing