Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when setting up Traefik as a local reverse proxy — real domains on 127.0.0.1, trusted HTTPS via mkcert, automatic service discovery, and multi-project routing.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use this skill when:
Before changing any routing configuration:
docker ps | grep traefik.docker-compose.yml for existing labels and network config./etc/hosts or dnsmasq for existing domain mappings.Traefik acts as a local reverse proxy that:
local.example.dev, app.test) to 127.0.0.1Browser → https://app.example.com
→ DNS resolves to 127.0.0.1 (via /etc/hosts or dnsmasq)
→ Traefik (port 443) picks up the request
→ Routes to app container (based on Docker labels)
Option A: /etc/hosts (simple, per-domain)
127.0.0.1 local.example.dev
127.0.0.1 grafana.local.example.dev
Option B: dnsmasq (wildcard, all subdomains — preferred)
brew install dnsmasq
echo 'address=/.local.example.dev/127.0.0.1' >> /opt/homebrew/etc/dnsmasq.conf
sudo brew services restart dnsmasq
sudo mkdir -p /etc/resolver
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/local.example.dev
Choose based on project needs:
| Strategy | Tool | Trust | Use when |
|---|---|---|---|
| Self-signed | openssl | Manual trust via keychain | Quick local dev, no external deps |
| mkcert | mkcert | Auto-trusted local CA | Local dev, easiest setup |
| ACME (Namecheap) | lego + DNS-01 | Real CA (Let's Encrypt) | Real domain, Namecheap DNS |
| ACME (AWS Route53) | lego + DNS-01 | Real CA (Let's Encrypt) | Real domain, AWS DNS |
mkdir -p traefik/certificates
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout traefik/certificates/_.${CERT_DOMAIN}.key \
-out traefik/certificates/_.${CERT_DOMAIN}.crt \
-subj "/CN=*.${CERT_DOMAIN}" \
-addext "subjectAltName=DNS:*.${CERT_DOMAIN},DNS:${CERT_DOMAIN}"
# Trust on macOS
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain traefik/certificates/tls.crt
brew install mkcert && mkcert -install
mkcert "local.example.dev" "*.local.example.dev"
# docker-compose.yml
lego:
image: goacme/lego:latest
profiles: [manual] # Only run on demand
volumes:
- ./traefik/certificates:/etc/lego
# Namecheap DNS-01
docker compose run --rm \
-e NAMECHEAP_API_USER -e NAMECHEAP_API_KEY \
lego --dns namecheap \
--domains "*.${CERT_DOMAIN}" --email "admin@${CERT_DOMAIN}" \
--path /etc/lego run
# AWS Route53 DNS-01
docker compose run --rm \
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_REGION \
lego --dns route53 \
--domains "*.${CERT_DOMAIN}" --email "admin@${CERT_DOMAIN}" \
--path /etc/lego run
# certificates/generate.yml (included in main Taskfile)
tasks:
selfsigned:
desc: Generate self-signed certificate for ${CERT_DOMAIN}
cmds: [...]
namecheap:
desc: Generate ACME certificate via Namecheap DNS-01
cmds: [...]
aws:
desc: Generate ACME certificate via AWS Route53 DNS-01
cmds: [...]
# Main Taskfile
trust:
desc: Add cert to macOS keychain
cmds:
- sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain traefik/certificates/tls.crt
untrust:
desc: Remove cert from macOS keychain
cmds:
- sudo security delete-certificate -c "*.${CERT_DOMAIN}" \
/Library/Keychains/System.keychain
cert:setup:
desc: Generate and trust self-signed certificate
deps: [generate:selfsigned, trust]
traefik:
image: traefik:v3.2 # or v2.11 for older setups
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.file.directory=/etc/traefik/dynamic
- --providers.file.watch=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
ports:
- "${TRAEFIK_HTTP_PORT:-80}:80"
- "${TRAEFIK_HTTPS_PORT:-443}:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/dynamic:/etc/traefik/dynamic:ro
- ./traefik/certificates:/certs:ro
# traefik/dynamic/tls.yml
tls:
certificates:
- certFile: /certs/tls.crt
keyFile: /certs/tls.key
my-service:
labels:
- "traefik.enable=true"
# HTTP router (redirect to HTTPS)
- "traefik.http.routers.myapp.rule=Host(`${CERT_HOST}`)"
- "traefik.http.routers.myapp.entrypoints=web"
- "traefik.http.routers.myapp.middlewares=myapp-https-redirect"
- "traefik.http.middlewares.myapp-https-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.myapp-https-redirect.redirectscheme.port=${TRAEFIK_HTTPS_PORT}"
# HTTPS router
- "traefik.http.routers.myapp-secure.rule=Host(`${CERT_HOST}`)"
- "traefik.http.routers.myapp-secure.entrypoints=websecure"
- "traefik.http.routers.myapp-secure.tls=true"
- "traefik.http.services.myapp.loadbalancer.server.port=80"
grafana:
labels:
- "traefik.enable=true"
- "traefik.http.routers.grafana-secure.rule=Host(`grafana.${CERT_HOST}`)"
- "traefik.http.routers.grafana-secure.entrypoints=websecure"
- "traefik.http.routers.grafana-secure.tls=true"
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
horizon:
labels:
- "traefik.http.routers.horizon-secure.rule=Host(`${CERT_HOST}`) && PathPrefix(`/horizon`)"
Traefik sits in front of NGINX — does NOT replace it:
Traefik (443) → NGINX (80 internal) → PHP-FPM
NGINX keeps: PHP-FPM routing, Xdebug header detection, static files. Traefik adds: real domains, HTTPS, multi-service routing.
Traefik routes directly to the app container:
Traefik (443) → App container (80 internal)
One Traefik instance routes to multiple projects via shared network:
networks:
traefik-public:
external: true # docker network create traefik-public
traefik
├── local.example.dev → api-service
├── grafana.local.example.dev → grafana
├── other.local.example.dev → other-service
└── app.test → frontend
# Rate limiting
- "traefik.http.middlewares.rate-limit.ratelimit.average=100"
# Basic auth
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$..."
# CORS
- "traefik.http.middlewares.cors.headers.accesscontrolalloworiginlist=*"
docker — Docker setup, compose services, container architecturedevcontainer — DevContainer and Codespaces setupgrafana — Grafana dashboards (benefits from HTTPS for embedding)dashboard-design — Grafana embedding requires same-origin/HTTPSdocker-commands.md — all commands run inside Docker containerscurl -I https://your-domain.localhost should return 200.mkcert -install is a one-time setup step.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。