By mackee
Integrate a Docker Compose app with duckeighty's local HTTPS ingress (<project>-<service>.duckeighty.test).
Diagnose whether the duckeighty local HTTPS ingress is correctly set up on this host. Checks the shared_ingress Docker network, traefik and dnsmasq containers, the macOS /etc/resolver entry, local CA trust, DNS resolution for *.duckeighty.test, and HTTPS reachability of traefik. Produces a checklist and the one command needed to fix whatever failed. Does not mutate any state. TRIGGER: the user reports that a *.duckeighty.test URL returns 404, NXDOMAIN, a TLS error, or connection refused; asks to check whether duckeighty is running; asks to debug the ingress; or is about to use the duckeighty-integrate skill and wants to confirm the stack is up first. SKIP: issues unrelated to the ingress path (e.g. the user is debugging application logic, not routing / DNS / TLS).
Bootstrap a host for duckeighty: clone the duckeighty repository locally if it is missing, trust the mkcert local CA, install the macOS /etc/resolver entry for *.duckeighty.test, and bring up the shared traefik + dnsmasq ingress stack. After one invocation per host, every app repo only needs the duckeighty-integrate skill to generate its docker-compose.local.yaml. TRIGGER: the user is new to duckeighty, has never run ./duckeighty.sh up, asks to "set up duckeighty" / "install the local HTTPS ingress", or the duckeighty-doctor skill reported several failing checks at once. SKIP: the user already has a working duckeighty checkout and a running ingress (run the duckeighty-doctor skill first if unsure).
Generate a docker-compose.local.yaml override that wires an existing Docker Compose project into duckeighty's shared local HTTPS ingress, so each exposed service becomes reachable at https://<project>-<service>.duckeighty.test with a locally trusted certificate. TRIGGER: the project already has a compose.yaml / docker-compose.yml and the user asks to expose it over duckeighty, add a local override, route via traefik / shared_ingress, or set up *.duckeighty.test URLs. Also fires when the user says "duckeighty" and refers to a Compose app in the current working directory. SKIP: projects without Docker Compose, or projects whose existing docker-compose.local.yaml already attaches the target service(s) to shared_ingress with correct traefik labels.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Duckeighty is a local HTTPS ingress layer for running multiple Docker Compose applications, and multiple worktrees of the same application, on a single machine without forcing the applications themselves to become multi-environment aware.
Duckeighty gives each exposed service a stable local URL in this form:
https://{project_name}-{service_name}.duckeighty.test
Examples:
https://blog-main-web.duckeighty.testhttps://blog-feature-foo-web.duckeighty.testhttps://blog-feature-foo-admin.duckeighty.testThe intended outcome is simple:
8080 inside its containerThis document is written so that both humans and coding agents can implement and validate the system.
Duckeighty provides:
*.duckeighty.testdocker-compose.local.yaml override patternDuckeighty does not require applications to know about branches, worktrees, or multi-tenant routing. Applications only need to expose an HTTP service inside the container.
At a high level, duckeighty works like this:
Browser
-> https://<project>-<service>.duckeighty.test
-> local DNS resolves *.duckeighty.test to 127.0.0.1
-> Traefik on the host-facing ingress stack
-> shared Docker network (shared_ingress)
-> target service on port 8080 inside a Compose project
The architecture has three parts:
Ingress stack
Application stack
Host setup
mkcertduckeighty.test DNS queries to the local DNS serviceDuckeighty routes services by project name and service name.
Public hostname format:
{project_name}-{service_name}.duckeighty.test
The Compose project name is the environment boundary. In practice this comes from COMPOSE_PROJECT_NAME or docker compose -p ....
Each worktree should use a distinct project name.
Examples:
mainfeature-foofeature-login-redesignThe service name is the key under services: in the Compose file.
Examples:
webadminapiProject names should be normalized before being used in hostnames.
Normalization rules:
/ with -. with --Examples:
feature/foo -> feature-foofeature.foo -> feature-fooFeature/Foo.Bar -> feature-foo-barA practical implementation should pass a normalized value separately, for example as DUCKEIGHTY_PROJECT_NAME.
.
├── README.md
├── duckeighty.sh # single CLI entry point (setup-ca / setup-resolver / up / check)
├── infra/
│ ├── compose.yaml # traefik + dnsmasq, compose project name `duckeighty`
│ ├── traefik/
│ │ ├── traefik.yaml # static config, HTTP→HTTPS redirect
│ │ └── dynamic/tls.yaml # wildcard cert via file provider
│ ├── dns/dnsmasq.conf # address=/duckeighty.test/127.0.0.1
│ └── certs/ # mkcert output, gitignored
├── templates/
│ └── docker-compose.local.yaml # per-app override template
├── skills/ # agent skills (open SKILL.md spec)
│ ├── duckeighty-init/SKILL.md
│ ├── duckeighty-doctor/SKILL.md
│ └── duckeighty-integrate/
│ ├── SKILL.md
│ └── references/
├── examples/
│ └── simple-app/ # nginx:alpine + envsubst, no Dockerfile
│ ├── compose.yaml
│ ├── docker-compose.local.yaml
│ └── default.conf.template
└── .claude-plugin/
├── plugin.json # Claude Code plugin manifest
└── marketplace.json # self-listing single-plugin marketplace
The implementation includes:
infra/)templates/)duckeighty.sh)examples/simple-app/)skills/duckeighty-{init,doctor,integrate}/)npx claudepluginhub mackee/duckeighty --plugin duckeightyComprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Tools to maintain and improve CLAUDE.md files - audit quality, capture session learnings, and keep project memory current.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.
Create new skills, improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, or benchmark skill performance with variance analysis.
Unity Development Toolkit - Expert agents for scripting/refactoring/optimization, script templates, and Agent Skills for Unity C# development