Introduces a .core/ folder structure that provides: - workspace.yaml for active package configuration - Claude Code plugin with skills for multi-repo navigation - Hook script suggesting core CLI over raw commands - Full .core/ folder specification for other packages Also restructures README.md and CLAUDE.md for better fresh developer experience with clear "what happens" and "what's next" sections. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.7 KiB
.core/ Folder Specification
This document defines the .core/ folder structure used across Host UK packages for configuration, tooling integration, and development environment setup.
Overview
The .core/ folder provides a standardised location for:
- Build and development configuration
- Claude Code plugin integration
- VM/container definitions
- Development environment settings
Directory Structure
package/.core/
├── config.yaml # Build targets, test commands, deploy config
├── workspace.yaml # Workspace-level config (devops repo only)
├── plugin/ # Claude Code integration
│ ├── plugin.json # Plugin manifest
│ ├── skills/ # Context-aware skills
│ └── hooks/ # Pre/post command hooks
├── linuxkit/ # VM/container definitions (if applicable)
│ ├── kernel.yaml
│ └── image.yaml
└── run.yaml # Development environment config
Configuration Files
config.yaml
Package-level build and runtime configuration.
version: 1
# Build configuration
build:
targets:
- name: default
command: composer build
- name: production
command: composer build:prod
env:
APP_ENV: production
# Test configuration
test:
command: composer test
coverage: true
parallel: true
# Lint configuration
lint:
command: ./vendor/bin/pint
fix_command: ./vendor/bin/pint --dirty
# Deploy configuration (if applicable)
deploy:
staging:
command: ./deploy.sh staging
production:
command: ./deploy.sh production
requires_approval: true
workspace.yaml
Workspace-level configuration (only in core-devops).
version: 1
# Active package for unified commands
active: core-php
# Default package types for setup
default_only:
- foundation
- module
# Paths
packages_dir: ./packages
# Workspace settings
settings:
suggest_core_commands: true
show_active_in_prompt: true
run.yaml
Development environment configuration.
version: 1
# Services required for development
services:
- name: database
image: postgres:16
port: 5432
env:
POSTGRES_DB: core_dev
POSTGRES_USER: core
POSTGRES_PASSWORD: secret
- name: redis
image: redis:7
port: 6379
- name: mailpit
image: axllent/mailpit
port: 8025
# Development server
dev:
command: php artisan serve
port: 8000
watch:
- app/
- resources/
# Environment variables
env:
APP_ENV: local
APP_DEBUG: true
DB_CONNECTION: pgsql
Claude Code Plugin
plugin.json
The plugin manifest defines skills, hooks, and commands for Claude Code integration.
{
"$schema": "https://claude.ai/code/plugin-schema.json",
"name": "package-name",
"version": "1.0.0",
"description": "Claude Code integration for this package",
"skills": [
{
"name": "skill-name",
"file": "skills/skill-name.md",
"description": "What this skill provides"
}
],
"hooks": {
"pre_command": [
{
"pattern": "^command-pattern$",
"script": "hooks/script.sh",
"description": "What this hook does"
}
]
},
"commands": {
"command-name": {
"description": "What this command does",
"run": "actual-command"
}
}
}
Skills (skills/*.md)
Markdown files providing context-aware guidance for Claude Code. Skills are loaded when relevant to the user's query.
# Skill Name
Describe what this skill provides.
## Context
When to use this skill.
## Commands
Relevant commands and examples.
## Tips
Best practices and gotchas.
Hooks (hooks/*.sh)
Shell scripts executed before or after commands. Hooks should:
- Be executable (
chmod +x) - Exit 0 for informational hooks (don't block)
- Exit non-zero to block the command (with reason)
#!/bin/bash
set -euo pipefail
# Hook logic here
exit 0 # Don't block
LinuxKit (linuxkit/)
For packages that deploy as VMs or containers.
kernel.yaml
kernel:
image: linuxkit/kernel:6.6
cmdline: "console=tty0"
image.yaml
image:
- linuxkit/init:v1.0.1
- linuxkit/runc:v1.0.0
- linuxkit/containerd:v1.0.0
Package-Type Specific Patterns
Foundation (core-php)
core-php/.core/
├── config.yaml # Build targets for framework
├── plugin/
│ └── skills/
│ ├── events.md # Event system guidance
│ ├── modules.md # Module loading patterns
│ └── lifecycle.md # Lifecycle events
└── run.yaml # Test environment setup
Module (core-tenant, core-admin, etc.)
core-tenant/.core/
├── config.yaml # Module-specific build
├── plugin/
│ └── skills/
│ └── tenancy.md # Multi-tenancy patterns
└── run.yaml # Required services (database)
Product (core-bio, core-social, etc.)
core-bio/.core/
├── config.yaml # Build and deploy targets
├── plugin/
│ └── skills/
│ └── bio.md # Product-specific guidance
├── linuxkit/ # VM definitions for deployment
│ ├── kernel.yaml
│ └── image.yaml
└── run.yaml # Full dev environment
Workspace (core-devops)
core-devops/.core/
├── workspace.yaml # Active package, paths
├── plugin/
│ ├── plugin.json
│ └── skills/
│ ├── workspace.md # Multi-repo navigation
│ ├── switch-package.md # Package switching
│ └── package-status.md # Status checking
└── docs/
└── core-folder-spec.md # This file
Core CLI Integration
The core CLI reads configuration from .core/:
| File | CLI Command | Purpose |
|---|---|---|
workspace.yaml |
core workspace |
Active package, paths |
config.yaml |
core build, core test |
Build/test commands |
run.yaml |
core run |
Dev environment |
Best Practices
- Always include
version: 1in YAML files for future compatibility - Keep skills focused - one concept per skill file
- Hooks should be fast - don't slow down commands
- Use relative paths - avoid hardcoded absolute paths
- Document non-obvious settings with inline comments
Migration Guide
To add .core/ to an existing package:
-
Create the directory structure:
mkdir -p .core/plugin/skills .core/plugin/hooks -
Add
config.yamlwith build/test commands -
Add
plugin.jsonwith package-specific skills -
Add relevant skills in
skills/ -
Update
.gitignoreif needed (don't ignore.core/)