acc-create-command
Generates CQRS Commands and Handlers for PHP 8.5. Creates immutable command DTOs with handlers that modify state. Includes unit tests.
Best use case
acc-create-command is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generates CQRS Commands and Handlers for PHP 8.5. Creates immutable command DTOs with handlers that modify state. Includes unit tests.
Teams using acc-create-command should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/acc-create-command/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How acc-create-command Compares
| Feature / Agent | acc-create-command | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generates CQRS Commands and Handlers for PHP 8.5. Creates immutable command DTOs with handlers that modify state. Includes unit tests.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Command Generator
Generate CQRS-compliant Commands and Command Handlers with tests.
## Command Characteristics
- **Immutable**: `final readonly class`
- **Imperative naming**: Verb + noun (CreateOrder, ConfirmPayment)
- **Self-validating**: Validates invariants in constructor
- **Intent-revealing**: Name describes what should happen
- **Returns void or ID**: Never returns data
---
## Generation Process
### Step 1: Generate Command
**Path:** `src/Application/{BoundedContext}/Command/`
1. `{Name}Command.php` — Immutable command DTO
### Step 2: Generate Handler
**Path:** `src/Application/{BoundedContext}/Handler/`
1. `{Name}Handler.php` — Command processor
### Step 3: Generate Tests
**Path:** `tests/Unit/Application/{BoundedContext}/`
---
## File Placement
| Component | Path |
|-----------|------|
| Command | `src/Application/{BoundedContext}/Command/` |
| Handler | `src/Application/{BoundedContext}/Handler/` |
| Unit Tests | `tests/Unit/Application/{BoundedContext}/` |
---
## Command Naming Conventions
| Action | Command Name | Returns |
|--------|--------------|---------|
| Create new | `CreateOrderCommand` | ID |
| Confirm/Approve | `ConfirmOrderCommand` | void |
| Cancel/Reject | `CancelOrderCommand` | void |
| Update property | `UpdateShippingAddressCommand` | void |
| Add child | `AddOrderLineCommand` | void |
| Remove child | `RemoveOrderLineCommand` | void |
---
## Quick Template Reference
### Command
```php
final readonly class {Name}Command
{
public function __construct(
public {ValueObject} $id,
public string $data
) {
if (empty($data)) {
throw new \InvalidArgumentException('Data is required');
}
}
public static function fromArray(array $data): self
{
return new self(
id: new {ValueObject}($data['id']),
data: $data['data']
);
}
}
```
### Handler (Update Flow)
```php
final readonly class {Name}Handler
{
public function __construct(
private {Repository}Interface $repository,
private EventDispatcherInterface $events
) {}
public function __invoke({Name}Command $command): void
{
$aggregate = $this->repository->findById($command->id);
if ($aggregate === null) {
throw new NotFoundException($command->id);
}
$aggregate->doSomething($command->data);
$this->repository->save($aggregate);
foreach ($aggregate->releaseEvents() as $event) {
$this->events->dispatch($event);
}
}
}
```
### Handler (Create Flow)
```php
public function __invoke(CreateCommand $command): AggregateId
{
$aggregate = Aggregate::create(
id: $this->repository->nextIdentity(),
...
);
$this->repository->save($aggregate);
foreach ($aggregate->releaseEvents() as $event) {
$this->events->dispatch($event);
}
return $aggregate->id();
}
```
---
## Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| Returning Data | Query through command | Use Query for reads |
| No Validation | Invalid commands | Validate in constructor |
| Business Logic | Handler has decisions | Delegate to aggregate |
| Missing Events | Events not dispatched | Always dispatch after save |
| Direct Persistence | Bypassing aggregate | Always use aggregate methods |
---
## References
For complete PHP templates and examples, see:
- `references/templates.md` — Command, Handler, Test templates with patterns
- `references/examples.md` — CreateOrder, ConfirmOrder, CancelOrder examples and testsRelated Skills
acc-create-value-object
Generates DDD Value Objects for PHP 8.5. Creates immutable, self-validating objects with equality comparison. Includes unit tests.
acc-create-use-case
Generates Application Use Cases for PHP 8.5. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.
acc-create-unit-test
Generates PHPUnit unit tests for PHP 8.5. Creates isolated tests with AAA pattern, proper naming, attributes, and one behavior per test. Supports Value Objects, Entities, Services.
acc-create-test-double
Generates test doubles (Mocks, Stubs, Fakes, Spies) for PHP 8.5. Creates appropriate double type based on testing needs with PHPUnit MockBuilder patterns.
acc-create-test-builder
Generates Test Data Builder and Object Mother patterns for PHP 8.5. Creates fluent builders with sensible defaults and factory methods for test data creation.
acc-create-strategy
Generates Strategy pattern for PHP 8.5. Creates interchangeable algorithm families with context class, strategy interface, and concrete implementations. Includes unit tests.
acc-create-state
Generates State pattern for PHP 8.5. Creates state machines with context, state interface, and concrete states for behavior changes. Includes unit tests.
acc-create-specification
Generates DDD Specification for PHP 8.5. Creates reusable business rule objects for validation, filtering, and querying with composite pattern support. Includes unit tests.
acc-create-saga-pattern
Generates Saga pattern components for PHP 8.5. Creates Saga interfaces, steps, orchestrator, state management, and compensation logic with unit tests.
acc-create-retry-pattern
Generates Retry pattern for PHP 8.5. Creates resilience component with exponential backoff, jitter, and configurable retry strategies. Includes unit tests.
acc-create-responder
Generates ADR Responder classes for PHP 8.5. Creates HTTP response builders with PSR-7/PSR-17 support. Includes unit tests.
acc-create-repository
Generates DDD Repository interfaces and implementation stubs for PHP 8.5. Creates domain interfaces in Domain layer, implementation in Infrastructure.