Marko is a modular PHP 8.5+ framework combining Magento's extensibility with Laravel's developer experience.
- Loud errors - No silent failures, helpful messages
- Explicit over implicit - No magic, everything discoverable
- Pragmatically opinionated - Guide toward better patterns, grounded in real-world needs
- True modularity - Interface/implementation split, clean boundaries
- No pseudo-functionality - Don't build fake features to demonstrate concepts; only build real functionality when core supports it. If there's nothing meaningful to build, build nothing.
# Run tests
./vendor/bin/pest --parallel
# Run with coverage
./vendor/bin/pest --parallel --coverage --min=80
# Lint (check)
./vendor/bin/phpcs
# Lint (fix)
./vendor/bin/php-cs-fixer fix- No hardcoded versions in composer.json - never add
"version"to package composer.json files; let Composer infer from the branch - Constructor property promotion - always use it
- Strict types - every file needs
declare(strict_types=1) - No magic methods - be explicit
- No final classes - blocks Preferences (extensibility)
- readonly - use when appropriate for immutability, not as blanket rule
- Type declarations - required on all parameters, returns, properties
For simple fixes and quick changes, use TDD (when at all possible).
For any feature or request beyond simple ones, use the hcf:plan-create skill to trigger the autonomous development workflow. NEVER use Claude Code's built-in plan mode. After writing a plan, ask user if they would like to execute it. Also provide the command to run it later with the hcf:plan-orchestrate skill.
Use this workflow for new features, multi-file changes, or anything requiring multiple steps or tests.
@.claude/project-overview.md @.claude/architecture.mdProject configuration files are in .claude/:
project-overview.md— Project identity and tech stackarchitecture.md— Technical patterns and directory structuretesting.md— Test configuration, TDD workflow, and patternscode-standards.md— Coding conventions and style rules