@mmerterden/multi-agent-pipeline 20.2.1 → 20.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +919 -1
- package/README.md +104 -81
- package/README.tr.md +103 -62
- package/docs/FIGMA_PIPELINE.md +35 -35
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
- package/docs/architecture.md +50 -14
- package/docs/best-practices.md +1 -1
- package/docs/ecosystem.md +56 -32
- package/docs/facts.json +10 -10
- package/docs/features.md +97 -5
- package/docs/recovery-guide.md +7 -14
- package/docs/server-readiness.md +31 -24
- package/index.js +1 -1
- package/install/_common.mjs +3 -5
- package/install/_platform-filter.mjs +23 -1
- package/install/_unattended-profile.mjs +321 -75
- package/install/claude.mjs +51 -10
- package/install/codex.mjs +2 -0
- package/install/copilot.mjs +2 -0
- package/install/index.mjs +30 -17
- package/install/templates/claude-hooks.json +16 -5
- package/install/templates/copilot-instructions.md +1 -1
- package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
- package/install/templates/multi-agent-autopilot.plist.template +12 -5
- package/install/unattended-profile-legacy.json +80 -0
- package/manifest.json +617 -483
- package/package.json +8 -3
- package/pipeline/agents/code-reviewer.md +10 -0
- package/pipeline/agents/plan-critic.md +98 -0
- package/pipeline/agents/security-auditor.md +10 -0
- package/pipeline/agents/task-clarifier.md +10 -0
- package/pipeline/commands/multi-agent/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
- package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
- package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
- package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
- package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
- package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
- package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
- package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
- package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
- package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
- package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
- package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
- package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
- package/pipeline/contract/CHANGELOG.md +74 -0
- package/pipeline/contract/README.md +126 -0
- package/pipeline/contract/build.mjs +427 -0
- package/pipeline/contract/fixtures/answer-result.json +11 -0
- package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
- package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
- package/pipeline/contract/fixtures/error-unsigned.json +5 -0
- package/pipeline/contract/fixtures/issues-empty.json +18 -0
- package/pipeline/contract/fixtures/launch-plan.json +31 -0
- package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
- package/pipeline/contract/fixtures/runs-empty.json +6 -0
- package/pipeline/contract/fixtures/runs-failed.json +84 -0
- package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
- package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
- package/pipeline/contract/fixtures/runs-running.json +84 -0
- package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
- package/pipeline/contract/frozen/toolbox.json +107 -0
- package/pipeline/contract/manifest.json +263 -0
- package/pipeline/contract/types/index.d.ts +343 -0
- package/pipeline/lib/_jira-auth.sh +6 -2
- package/pipeline/lib/account-resolver.sh +1 -1
- package/pipeline/lib/autopilot-state.sh +19 -0
- package/pipeline/lib/context-link-extractor.sh +12 -5
- package/pipeline/lib/credential-inventory.sh +12 -5
- package/pipeline/lib/credential-store.sh +116 -185
- package/pipeline/lib/fetch-confluence.sh +44 -3
- package/pipeline/lib/fetch-document.sh +3 -4
- package/pipeline/lib/fetch-fortify.sh +1 -1
- package/pipeline/lib/figma-mcp-refresh.sh +2 -2
- package/pipeline/lib/figma-token.sh +5 -1
- package/pipeline/lib/issue-fetcher.sh +233 -16
- package/pipeline/lib/json-file-lock.mjs +172 -0
- package/pipeline/lib/model-dispatch.sh +21 -12
- package/pipeline/lib/model-rung.sh +6 -1
- package/pipeline/lib/multi-repo-pipeline.sh +1 -1
- package/pipeline/lib/outbound-gate.mjs +46 -16
- package/pipeline/lib/parse-complaints.sh +14 -7
- package/pipeline/lib/plan-todos.sh +3 -3
- package/pipeline/lib/post-pr-review.sh +9 -9
- package/pipeline/lib/pr-request-location.mjs +85 -0
- package/pipeline/lib/regular-file.mjs +153 -0
- package/pipeline/lib/repo-hygiene.sh +17 -0
- package/pipeline/lib/route-state.sh +5 -1
- package/pipeline/lib/run-paths.sh +3 -2
- package/pipeline/lib/stack-detect.sh +19 -1
- package/pipeline/lib/unattended-profile-check.mjs +178 -0
- package/pipeline/lib/unattended-settings-location.mjs +28 -0
- package/pipeline/lib/unattended.mjs +76 -0
- package/pipeline/lib/unattended.sh +32 -0
- package/pipeline/lib/untrusted.mjs +76 -0
- package/pipeline/lib/usage-endpoint.mjs +33 -0
- package/pipeline/lib/user-facing.mjs +82 -0
- package/pipeline/lib/user-facing.sh +58 -0
- package/pipeline/multi-agent-refs/_dev-context.md +1 -1
- package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
- package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
- package/pipeline/multi-agent-refs/analysis/render.md +4 -3
- package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
- package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
- package/pipeline/multi-agent-refs/analysis-template.md +10 -17
- package/pipeline/multi-agent-refs/channels/jira.md +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
- package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
- package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
- package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
- package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
- package/pipeline/multi-agent-refs/features/constitution.md +196 -0
- package/pipeline/multi-agent-refs/features/doctor.md +6 -3
- package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
- package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
- package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
- package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
- package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
- package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
- package/pipeline/multi-agent-refs/features/research.md +150 -0
- package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
- package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
- package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
- package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
- package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
- package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
- package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
- package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
- package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -35
- package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
- package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
- package/pipeline/multi-agent-refs/keychain.md +6 -11
- package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
- package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
- package/pipeline/multi-agent-refs/phases/modes.md +10 -12
- package/pipeline/multi-agent-refs/phases/operations.md +11 -5
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
- package/pipeline/multi-agent-refs/phases.md +1 -1
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/progress-contract.md +13 -16
- package/pipeline/multi-agent-refs/readiness-review.md +1 -1
- package/pipeline/multi-agent-refs/research/engine.md +91 -0
- package/pipeline/multi-agent-refs/rules.md +6 -4
- package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
- package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
- package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
- package/pipeline/rules/figma-pipeline.md +12 -12
- package/pipeline/schemas/agent-state.schema.json +480 -18
- package/pipeline/schemas/analysis-spec.schema.json +4 -4
- package/pipeline/schemas/answer-request.schema.json +24 -0
- package/pipeline/schemas/answer-result.schema.json +28 -0
- package/pipeline/schemas/autopilot-config.schema.json +111 -13
- package/pipeline/schemas/command-parameters.schema.json +99 -0
- package/pipeline/schemas/constitution.schema.json +56 -0
- package/pipeline/schemas/contract-error.schema.json +52 -0
- package/pipeline/schemas/design-check-config.schema.json +5 -1
- package/pipeline/schemas/issues.schema.json +61 -0
- package/pipeline/schemas/launch-plan.schema.json +46 -0
- package/pipeline/schemas/launch-request.schema.json +45 -0
- package/pipeline/schemas/launch.json +61 -0
- package/pipeline/schemas/launch.schema.json +84 -0
- package/pipeline/schemas/phases.json +2 -2
- package/pipeline/schemas/phases.schema.json +68 -0
- package/pipeline/schemas/phone-devices.schema.json +61 -0
- package/pipeline/schemas/phone-signed-request.schema.json +67 -0
- package/pipeline/schemas/plan-critique.schema.json +99 -0
- package/pipeline/schemas/plan-todos.schema.json +7 -7
- package/pipeline/schemas/planning-output.schema.json +5 -0
- package/pipeline/schemas/pr-request.schema.json +46 -0
- package/pipeline/schemas/prefs.schema.json +79 -8
- package/pipeline/schemas/research-output.schema.json +118 -0
- package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
- package/pipeline/schemas/reviewer-output.schema.json +40 -4
- package/pipeline/schemas/run-questions.json +392 -0
- package/pipeline/schemas/run-questions.schema.json +118 -0
- package/pipeline/schemas/runs-index.schema.json +189 -0
- package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
- package/pipeline/schemas/secret-patterns.schema.json +28 -0
- package/pipeline/schemas/stack-adapters.json +527 -0
- package/pipeline/schemas/stack-adapters.schema.json +184 -0
- package/pipeline/schemas/token-budget.json +1 -1
- package/pipeline/schemas/token-budget.schema.json +26 -0
- package/pipeline/schemas/triage-output.schema.json +64 -3
- package/pipeline/schemas/unattended-policy.json +139 -0
- package/pipeline/schemas/unattended-policy.schema.json +73 -0
- package/pipeline/schemas/unattended-profile.json +248 -0
- package/pipeline/schemas/unattended-profile.schema.json +198 -0
- package/pipeline/schemas/worktrees.schema.json +51 -0
- package/pipeline/scripts/README.md +1 -0
- package/pipeline/scripts/_autopilot-config.mjs +130 -0
- package/pipeline/scripts/_autopilot-ops.mjs +567 -0
- package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
- package/pipeline/scripts/_command-contract.mjs +384 -0
- package/pipeline/scripts/_cost.mjs +40 -0
- package/pipeline/scripts/_notices.mjs +160 -0
- package/pipeline/scripts/_phone-auth.mjs +485 -0
- package/pipeline/scripts/_pre-existing.mjs +294 -0
- package/pipeline/scripts/_redact.mjs +77 -0
- package/pipeline/scripts/_run-paths.mjs +4 -2
- package/pipeline/scripts/_stack-adapter.mjs +678 -0
- package/pipeline/scripts/_stack-routing.mjs +1 -1
- package/pipeline/scripts/agent-guard.py +348 -37
- package/pipeline/scripts/agent-guard.sh +41 -13
- package/pipeline/scripts/analysis-story-tree.mjs +79 -3
- package/pipeline/scripts/answer-question.mjs +181 -0
- package/pipeline/scripts/audit-log-rotate.sh +1 -4
- package/pipeline/scripts/audit-log.sh +4 -4
- package/pipeline/scripts/autopilot-arming.mjs +389 -21
- package/pipeline/scripts/autopilot-awake.mjs +255 -0
- package/pipeline/scripts/autopilot-intake.mjs +137 -36
- package/pipeline/scripts/autopilot-menubar.swift +156 -44
- package/pipeline/scripts/autopilot-publish.mjs +1625 -0
- package/pipeline/scripts/autopilot-runner.mjs +1678 -222
- package/pipeline/scripts/autopilot-status.sh +198 -33
- package/pipeline/scripts/build-lock.sh +120 -0
- package/pipeline/scripts/build-references.mjs +4 -1
- package/pipeline/scripts/build-stack-plugins.mjs +59 -22
- package/pipeline/scripts/capture-flush.sh +1 -1
- package/pipeline/scripts/capture-resume.sh +13 -9
- package/pipeline/scripts/check-derived-drift.mjs +52 -11
- package/pipeline/scripts/commands.mjs +88 -0
- package/pipeline/scripts/constitution.mjs +362 -0
- package/pipeline/scripts/contract-server.mjs +776 -0
- package/pipeline/scripts/cost-analyze.mjs +89 -39
- package/pipeline/scripts/diff-explain.mjs +12 -1
- package/pipeline/scripts/doctor.mjs +77 -28
- package/pipeline/scripts/evidence-gate.mjs +192 -12
- package/pipeline/scripts/feedback-send.mjs +4 -2
- package/pipeline/scripts/gate-ledger.mjs +449 -0
- package/pipeline/scripts/gc-abandoned.sh +132 -13
- package/pipeline/scripts/gen-facts.mjs +31 -15
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/github-ssh-setup.sh +140 -29
- package/pipeline/scripts/graph-mermaid.mjs +4 -1
- package/pipeline/scripts/issues.mjs +236 -0
- package/pipeline/scripts/jira-attach.sh +6 -2
- package/pipeline/scripts/jira-search.sh +4 -3
- package/pipeline/scripts/keychain-save.sh +125 -24
- package/pipeline/scripts/keychain.py +63 -93
- package/pipeline/scripts/launch-request.mjs +747 -0
- package/pipeline/scripts/localize-commands.mjs +4 -10
- package/pipeline/scripts/log-metric.sh +6 -5
- package/pipeline/scripts/maturity-followup.mjs +13 -4
- package/pipeline/scripts/memory-save.sh +25 -0
- package/pipeline/scripts/migrate-prefs.mjs +4 -3
- package/pipeline/scripts/open-questions-gate.mjs +276 -0
- package/pipeline/scripts/phase-tracker.sh +41 -27
- package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
- package/pipeline/scripts/phone-devices.mjs +224 -0
- package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
- package/pipeline/scripts/plan-critique-gate.mjs +591 -0
- package/pipeline/scripts/pr-request.mjs +188 -0
- package/pipeline/scripts/pre-commit-check.sh +115 -4
- package/pipeline/scripts/probe-evidence-capability.sh +44 -5
- package/pipeline/scripts/record-phase.mjs +71 -0
- package/pipeline/scripts/render-agent-log-cost.sh +17 -2
- package/pipeline/scripts/render-cost-summary.sh +1 -1
- package/pipeline/scripts/render-work-summary.sh +1 -1
- package/pipeline/scripts/require-supported-version.sh +4 -1
- package/pipeline/scripts/research-gate.mjs +704 -0
- package/pipeline/scripts/review-decision-gate.mjs +403 -0
- package/pipeline/scripts/routine-registry.mjs +5 -2
- package/pipeline/scripts/runs-index.mjs +135 -27
- package/pipeline/scripts/scaffold-gate.mjs +393 -0
- package/pipeline/scripts/skill-conformance.mjs +25 -8
- package/pipeline/scripts/skill-siblings.mjs +2 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
- package/pipeline/scripts/smoke-schema-validation.sh +6 -2
- package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
- package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
- package/pipeline/scripts/test-gap-scan.mjs +40 -2
- package/pipeline/scripts/test-integrity-gate.mjs +20 -4
- package/pipeline/scripts/test-strength.mjs +484 -0
- package/pipeline/scripts/test-summary.mjs +651 -0
- package/pipeline/scripts/triage-memory.mjs +49 -9
- package/pipeline/scripts/unattended_policy.py +2786 -0
- package/pipeline/scripts/uninstall.mjs +10 -10
- package/pipeline/scripts/update-issue-progress.sh +1 -1
- package/pipeline/scripts/usage-identity.mjs +288 -0
- package/pipeline/scripts/usage-register.mjs +187 -67
- package/pipeline/scripts/usage-report.mjs +232 -67
- package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
- package/pipeline/scripts/validate-planning.mjs +6 -0
- package/pipeline/scripts/verify-citations.mjs +151 -38
- package/pipeline/scripts/verify.mjs +58 -18
- package/pipeline/scripts/worktree-prepare.sh +126 -0
- package/pipeline/scripts/worktrees.mjs +124 -0
- package/pipeline/scripts/write-state.mjs +48 -17
- package/pipeline/skills/.skill-manifest.json +222 -226
- package/pipeline/skills/.skills-index.json +77 -88
- package/pipeline/skills/shared/README.md +44 -45
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
- package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
- package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
- package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
- package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
- package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
- package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
- package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
- package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
- package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
- package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
- package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
- package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
- package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
- package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
- package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
- package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
- package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
- package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
- package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
- package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
- package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
- package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
- package/pipeline/skills/shared/external/council/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
- package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
- package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
- package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
- package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
- package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
- package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
- package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
- package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
- package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
- package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
- package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
- package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
- package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
- package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
- package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
- package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
- package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
- package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
- package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
- package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
- package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
- package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
- package/pipeline/skills/skills-index.md +40 -41
- package/docs/token-budget-history.md +0 -24
- package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
- package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
- package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
- package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
- package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
|
@@ -1,413 +1,169 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docker-expert
|
|
3
|
-
description: "
|
|
4
|
-
|
|
5
|
-
risk:
|
|
6
|
-
source:
|
|
7
|
-
date_added: "2026-
|
|
3
|
+
description: "Dockerfiles and images: multi-stage builds, BuildKit cache and secret mounts, slim or distroless bases, non-root, healthchecks, scanning, multi-arch, Compose for dev. Use when writing, shrinking or hardening a container build."
|
|
4
|
+
metadata:
|
|
5
|
+
risk: safe
|
|
6
|
+
source: multi-agent-pipeline
|
|
7
|
+
date_added: "2026-09-25"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Docker
|
|
11
|
-
|
|
12
|
-
You are an advanced Docker containerization expert with comprehensive, practical knowledge of container optimization, security hardening, multi-stage builds, orchestration patterns, and production deployment strategies based on current industry best practices.
|
|
13
|
-
|
|
14
|
-
## When invoked:
|
|
15
|
-
|
|
16
|
-
0. If the issue requires ultra-specific expertise outside Docker, recommend switching and stop:
|
|
17
|
-
- Kubernetes orchestration, pods, services, ingress → kubernetes-expert (future)
|
|
18
|
-
- GitHub Actions CI/CD with containers → github-actions-expert
|
|
19
|
-
- AWS ECS/Fargate or cloud-specific container services → devops-expert
|
|
20
|
-
- Database containerization with complex persistence → database-expert
|
|
21
|
-
|
|
22
|
-
Example to output:
|
|
23
|
-
"This requires Kubernetes orchestration expertise. Please invoke: 'Use the kubernetes-expert subagent.' Stopping here."
|
|
24
|
-
|
|
25
|
-
1. Analyze container setup comprehensively:
|
|
26
|
-
|
|
27
|
-
**Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.**
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
# Docker environment detection
|
|
31
|
-
docker --version 2>/dev/null || echo "No Docker installed"
|
|
32
|
-
docker info | grep -E "Server Version|Storage Driver|Container Runtime" 2>/dev/null
|
|
33
|
-
docker context ls 2>/dev/null | head -3
|
|
34
|
-
|
|
35
|
-
# Project structure analysis
|
|
36
|
-
find . -name "Dockerfile*" -type f | head -10
|
|
37
|
-
find . -name "*compose*.yml" -o -name "*compose*.yaml" -type f | head -5
|
|
38
|
-
find . -name ".dockerignore" -type f | head -3
|
|
39
|
-
|
|
40
|
-
# Container status if running
|
|
41
|
-
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>/dev/null | head -10
|
|
42
|
-
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>/dev/null | head -10
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**After detection, adapt approach:**
|
|
46
|
-
- Match existing Dockerfile patterns and base images
|
|
47
|
-
- Respect multi-stage build conventions
|
|
48
|
-
- Consider development vs production environments
|
|
49
|
-
- Account for existing orchestration setup (Compose/Swarm)
|
|
50
|
-
|
|
51
|
-
2. Identify the specific problem category and complexity level
|
|
52
|
-
|
|
53
|
-
3. Apply the appropriate solution strategy from my expertise
|
|
54
|
-
|
|
55
|
-
4. Validate thoroughly:
|
|
56
|
-
```bash
|
|
57
|
-
# Build and security validation
|
|
58
|
-
docker build --no-cache -t test-build . 2>/dev/null && echo "Build successful"
|
|
59
|
-
docker history test-build --no-trunc 2>/dev/null | head -5
|
|
60
|
-
docker scout quickview test-build 2>/dev/null || echo "No Docker Scout"
|
|
61
|
-
|
|
62
|
-
# Runtime validation
|
|
63
|
-
docker run --rm -d --name validation-test test-build 2>/dev/null
|
|
64
|
-
docker exec validation-test ps aux 2>/dev/null | head -3
|
|
65
|
-
docker stop validation-test 2>/dev/null
|
|
66
|
-
|
|
67
|
-
# Compose validation
|
|
68
|
-
docker-compose config 2>/dev/null && echo "Compose config valid"
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Core Expertise Areas
|
|
72
|
-
|
|
73
|
-
### 1. Dockerfile Optimization & Multi-Stage Builds
|
|
74
|
-
|
|
75
|
-
**High-priority patterns I address:**
|
|
76
|
-
- **Layer caching optimization**: Separate dependency installation from source code copying
|
|
77
|
-
- **Multi-stage builds**: Minimize production image size while keeping build flexibility
|
|
78
|
-
- **Build context efficiency**: Comprehensive .dockerignore and build context management
|
|
79
|
-
- **Base image selection**: Alpine vs distroless vs scratch image strategies
|
|
80
|
-
|
|
81
|
-
**Key techniques:**
|
|
82
|
-
```dockerfile
|
|
83
|
-
# Optimized multi-stage pattern
|
|
84
|
-
FROM node:18-alpine AS deps
|
|
85
|
-
WORKDIR /app
|
|
86
|
-
COPY package*.json ./
|
|
87
|
-
RUN npm ci --only=production && npm cache clean --force
|
|
10
|
+
# Docker Images and Compose
|
|
88
11
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
COPY . .
|
|
94
|
-
RUN npm run build && npm prune --production
|
|
12
|
+
An image is a deployable artifact. It should be small enough to pull quickly,
|
|
13
|
+
reproducible enough that the same commit gives the same result, and boring
|
|
14
|
+
enough at runtime that nothing in it surprises an operator. This skill is the
|
|
15
|
+
checklist for getting there, ordered by how much each item usually buys.
|
|
95
16
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
WORKDIR /app
|
|
99
|
-
COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
|
|
100
|
-
COPY --from=build --chown=nextjs:nodejs /app/dist ./dist
|
|
101
|
-
COPY --from=build --chown=nextjs:nodejs /app/package*.json ./
|
|
102
|
-
USER nextjs
|
|
103
|
-
EXPOSE 3000
|
|
104
|
-
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
105
|
-
CMD curl -f http://localhost:3000/health || exit 1
|
|
106
|
-
CMD ["node", "dist/index.js"]
|
|
107
|
-
```
|
|
17
|
+
Pipeline wiring (where the image is built, pushed and promoted) belongs to
|
|
18
|
+
`ci-cd-pipelines`; workflow YAML belongs to `github-actions-templates`.
|
|
108
19
|
|
|
109
|
-
|
|
20
|
+
## Review order
|
|
110
21
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
22
|
+
1. Does the build context contain only what the build needs?
|
|
23
|
+
2. Is the layer order stable-first, volatile-last, so the cache survives edits?
|
|
24
|
+
3. Does the final stage carry only runtime files?
|
|
25
|
+
4. Does the process run as a non-root user with a read-only-friendly layout?
|
|
26
|
+
5. Are secrets kept out of every layer and of the build history?
|
|
27
|
+
6. Can an orchestrator tell whether the container is healthy and stop it cleanly?
|
|
28
|
+
7. Are base images pinned and scanned?
|
|
116
29
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
RUN addgroup -g 1001 -S appgroup && \
|
|
122
|
-
adduser -S appuser -u 1001 -G appgroup
|
|
123
|
-
WORKDIR /app
|
|
124
|
-
COPY --chown=appuser:appgroup package*.json ./
|
|
125
|
-
RUN npm ci --only=production
|
|
126
|
-
COPY --chown=appuser:appgroup . .
|
|
127
|
-
USER 1001
|
|
128
|
-
# Drop capabilities, set read-only root filesystem
|
|
129
|
-
```
|
|
30
|
+
## 1. Build context
|
|
31
|
+
|
|
32
|
+
Everything in the context is sent to the builder and can invalidate `COPY . .`.
|
|
33
|
+
Start `.dockerignore` from a deny list and widen only when a build fails:
|
|
130
34
|
|
|
131
|
-
### 3. Docker Compose Orchestration
|
|
132
|
-
|
|
133
|
-
**Orchestration expertise:**
|
|
134
|
-
- **Service dependency management**: Health checks, startup ordering
|
|
135
|
-
- **Network configuration**: Custom networks, service discovery
|
|
136
|
-
- **Environment management**: Dev/staging/prod configurations
|
|
137
|
-
- **Volume strategies**: Named volumes, bind mounts, data persistence
|
|
138
|
-
|
|
139
|
-
**Production-ready compose pattern:**
|
|
140
|
-
```yaml
|
|
141
|
-
version: '3.8'
|
|
142
|
-
services:
|
|
143
|
-
app:
|
|
144
|
-
build:
|
|
145
|
-
context: .
|
|
146
|
-
target: production
|
|
147
|
-
depends_on:
|
|
148
|
-
db:
|
|
149
|
-
condition: service_healthy
|
|
150
|
-
networks:
|
|
151
|
-
- frontend
|
|
152
|
-
- backend
|
|
153
|
-
healthcheck:
|
|
154
|
-
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
155
|
-
interval: 30s
|
|
156
|
-
timeout: 10s
|
|
157
|
-
retries: 3
|
|
158
|
-
start_period: 40s
|
|
159
|
-
deploy:
|
|
160
|
-
resources:
|
|
161
|
-
limits:
|
|
162
|
-
cpus: '0.5'
|
|
163
|
-
memory: 512M
|
|
164
|
-
reservations:
|
|
165
|
-
cpus: '0.25'
|
|
166
|
-
memory: 256M
|
|
167
|
-
|
|
168
|
-
db:
|
|
169
|
-
image: postgres:15-alpine
|
|
170
|
-
environment:
|
|
171
|
-
POSTGRES_DB_FILE: /run/secrets/db_name
|
|
172
|
-
POSTGRES_USER_FILE: /run/secrets/db_user
|
|
173
|
-
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
|
|
174
|
-
secrets:
|
|
175
|
-
- db_name
|
|
176
|
-
- db_user
|
|
177
|
-
- db_password
|
|
178
|
-
volumes:
|
|
179
|
-
- postgres_data:/var/lib/postgresql/data
|
|
180
|
-
networks:
|
|
181
|
-
- backend
|
|
182
|
-
healthcheck:
|
|
183
|
-
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
184
|
-
interval: 10s
|
|
185
|
-
timeout: 5s
|
|
186
|
-
retries: 5
|
|
187
|
-
|
|
188
|
-
networks:
|
|
189
|
-
frontend:
|
|
190
|
-
driver: bridge
|
|
191
|
-
backend:
|
|
192
|
-
driver: bridge
|
|
193
|
-
internal: true
|
|
194
|
-
|
|
195
|
-
volumes:
|
|
196
|
-
postgres_data:
|
|
197
|
-
|
|
198
|
-
secrets:
|
|
199
|
-
db_name:
|
|
200
|
-
external: true
|
|
201
|
-
db_user:
|
|
202
|
-
external: true
|
|
203
|
-
db_password:
|
|
204
|
-
external: true
|
|
205
35
|
```
|
|
36
|
+
.git
|
|
37
|
+
**/node_modules
|
|
38
|
+
**/__pycache__
|
|
39
|
+
**/.venv
|
|
40
|
+
dist
|
|
41
|
+
coverage
|
|
42
|
+
*.log
|
|
43
|
+
.env*
|
|
44
|
+
Dockerfile*
|
|
45
|
+
compose*.yaml
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A `.env` file that reaches the context ends up in a layer the moment someone
|
|
49
|
+
writes `COPY . .`. Ignoring it is cheaper than remembering.
|
|
206
50
|
|
|
207
|
-
|
|
51
|
+
## 2. Layer order and caching
|
|
208
52
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
- **Build artifact optimization**: Remove build tools and cache
|
|
212
|
-
- **Layer consolidation**: Combine RUN commands strategically
|
|
213
|
-
- **Multi-stage artifact copying**: Only copy necessary files
|
|
53
|
+
Copy dependency manifests, install, then copy source. Source changes daily;
|
|
54
|
+
the lockfile changes weekly.
|
|
214
55
|
|
|
215
|
-
**Optimization techniques:**
|
|
216
56
|
```dockerfile
|
|
217
|
-
#
|
|
218
|
-
FROM
|
|
219
|
-
COPY --from=build /app/dist /app
|
|
220
|
-
COPY --from=build /app/node_modules /app/node_modules
|
|
57
|
+
# syntax=docker/dockerfile:1.7
|
|
58
|
+
FROM node:22-bookworm-slim AS deps
|
|
221
59
|
WORKDIR /app
|
|
222
|
-
|
|
223
|
-
|
|
60
|
+
COPY package.json package-lock.json ./
|
|
61
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
62
|
+
npm ci --omit=dev
|
|
224
63
|
```
|
|
225
64
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
**Development patterns:**
|
|
229
|
-
- **Hot reloading setup**: Volume mounting and file watching
|
|
230
|
-
- **Debug configuration**: Port exposure and debugging tools
|
|
231
|
-
- **Testing integration**: Test-specific containers and environments
|
|
232
|
-
- **Development containers**: Remote development container support via CLI tools
|
|
233
|
-
|
|
234
|
-
**Development workflow:**
|
|
235
|
-
```yaml
|
|
236
|
-
# Development override
|
|
237
|
-
services:
|
|
238
|
-
app:
|
|
239
|
-
build:
|
|
240
|
-
context: .
|
|
241
|
-
target: development
|
|
242
|
-
volumes:
|
|
243
|
-
- .:/app
|
|
244
|
-
- /app/node_modules
|
|
245
|
-
- /app/dist
|
|
246
|
-
environment:
|
|
247
|
-
- NODE_ENV=development
|
|
248
|
-
- DEBUG=app:*
|
|
249
|
-
ports:
|
|
250
|
-
- "9229:9229" # Debug port
|
|
251
|
-
command: npm run dev
|
|
252
|
-
```
|
|
65
|
+
BuildKit cache mounts keep the package manager cache between builds without
|
|
66
|
+
putting it in the image. Equivalents:
|
|
253
67
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
**Resource management:**
|
|
263
|
-
```yaml
|
|
264
|
-
services:
|
|
265
|
-
app:
|
|
266
|
-
deploy:
|
|
267
|
-
resources:
|
|
268
|
-
limits:
|
|
269
|
-
cpus: '1.0'
|
|
270
|
-
memory: 1G
|
|
271
|
-
reservations:
|
|
272
|
-
cpus: '0.5'
|
|
273
|
-
memory: 512M
|
|
274
|
-
restart_policy:
|
|
275
|
-
condition: on-failure
|
|
276
|
-
delay: 5s
|
|
277
|
-
max_attempts: 3
|
|
278
|
-
window: 120s
|
|
279
|
-
```
|
|
68
|
+
| Tool | Mount target |
|
|
69
|
+
|------|--------------|
|
|
70
|
+
| npm | `/root/.npm` |
|
|
71
|
+
| pnpm | `/root/.local/share/pnpm/store` |
|
|
72
|
+
| pip / uv | `/root/.cache/pip`, `/root/.cache/uv` |
|
|
73
|
+
| Go | `/go/pkg/mod` and `/root/.cache/go-build` |
|
|
74
|
+
| apt | `/var/cache/apt` and `/var/lib/apt` with `sharing=locked` |
|
|
280
75
|
|
|
281
|
-
|
|
76
|
+
For apt, remove the image's `docker-clean` hook or the cache mount stays empty,
|
|
77
|
+
and always pair `update` and `install` in one `RUN`.
|
|
282
78
|
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
# Multi-architecture builds
|
|
286
|
-
docker buildx create --name multiarch-builder --use
|
|
287
|
-
docker buildx build --platform linux/amd64,linux/arm64 \
|
|
288
|
-
-t myapp:latest --push .
|
|
289
|
-
```
|
|
79
|
+
## 4. Runtime user and filesystem
|
|
290
80
|
|
|
291
|
-
### Build Cache Optimization
|
|
292
81
|
```dockerfile
|
|
293
|
-
|
|
294
|
-
|
|
82
|
+
FROM python:3.13-slim
|
|
83
|
+
RUN groupadd --system app && useradd --system --gid app --home /app app
|
|
295
84
|
WORKDIR /app
|
|
296
|
-
COPY
|
|
297
|
-
|
|
298
|
-
|
|
85
|
+
COPY --from=build --chown=app:app /app/.venv /app/.venv
|
|
86
|
+
COPY --chown=app:app src/ ./src/
|
|
87
|
+
USER app
|
|
88
|
+
ENV PATH="/app/.venv/bin:$PATH" PYTHONUNBUFFERED=1
|
|
89
|
+
CMD ["python", "-m", "src.products_api"]
|
|
299
90
|
```
|
|
300
91
|
|
|
301
|
-
|
|
92
|
+
- Numeric `USER 10001` works with Kubernetes `runAsNonRoot` checks, which cannot
|
|
93
|
+
resolve names.
|
|
94
|
+
- Write only to declared volumes or `/tmp`, so the container can run with
|
|
95
|
+
`read_only: true`.
|
|
96
|
+
- Listen on a port above 1024; a non-root process cannot bind lower ones
|
|
97
|
+
without extra capabilities.
|
|
98
|
+
|
|
99
|
+
## 5. Secrets
|
|
100
|
+
|
|
101
|
+
Never `ARG` or `ENV` a token: both are visible in `docker history` and in the
|
|
102
|
+
image config. Use a secret mount, which exists only for that `RUN`:
|
|
103
|
+
|
|
302
104
|
```dockerfile
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
RUN --mount=type=secret,id=api_key \
|
|
306
|
-
API_KEY=$(cat /run/secrets/api_key) && \
|
|
307
|
-
# Use API_KEY for build process
|
|
105
|
+
RUN --mount=type=secret,id=npm_token,env=NPM_TOKEN \
|
|
106
|
+
npm ci
|
|
308
107
|
```
|
|
309
108
|
|
|
310
|
-
|
|
109
|
+
```bash
|
|
110
|
+
docker buildx build --secret id=npm_token,env=NPM_TOKEN .
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
For private Git dependencies use `--mount=type=ssh` with `--ssh default`.
|
|
114
|
+
Runtime secrets come from the orchestrator (mounted files or env injected at
|
|
115
|
+
start), never from the image.
|
|
116
|
+
|
|
117
|
+
## 6. Process behaviour
|
|
118
|
+
|
|
119
|
+
- Exec form (`CMD ["bin", "arg"]`) so the app is PID 1 and receives `SIGTERM`.
|
|
120
|
+
Shell form wraps it in `/bin/sh -c`, which does not forward signals.
|
|
121
|
+
- Handle `SIGTERM`: stop accepting work, finish requests already running, exit within
|
|
122
|
+
the orchestrator's grace period. Add `--init` or `tini` when the app spawns
|
|
123
|
+
children it does not reap.
|
|
124
|
+
- Log to stdout and stderr; let the platform collect them.
|
|
125
|
+
- `HEALTHCHECK` is honoured by Docker and Compose but ignored by Kubernetes,
|
|
126
|
+
which uses its own probes. Keep the health endpoint cheap and dependency-free
|
|
127
|
+
for liveness; check dependencies only in readiness.
|
|
128
|
+
|
|
311
129
|
```dockerfile
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
RUN chmod +x /usr/local/bin/health-check.sh
|
|
315
|
-
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
316
|
-
CMD ["/usr/local/bin/health-check.sh"]
|
|
130
|
+
HEALTHCHECK --interval=15s --timeout=3s --start-period=20s --retries=3 \
|
|
131
|
+
CMD ["/app/.venv/bin/python", "-c", "import urllib.request,sys; urllib.request.urlopen('http://127.0.0.1:8080/healthz', timeout=2)"]
|
|
317
132
|
```
|
|
318
133
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
-
|
|
325
|
-
|
|
326
|
-
-
|
|
327
|
-
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
-
|
|
349
|
-
-
|
|
350
|
-
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
- [ ] Development targets separate from production
|
|
356
|
-
- [ ] Hot reloading configured properly with volume mounts
|
|
357
|
-
- [ ] Debug ports exposed when needed
|
|
358
|
-
- [ ] Environment variables properly configured for different stages
|
|
359
|
-
- [ ] Testing containers isolated from production builds
|
|
360
|
-
|
|
361
|
-
### Networking & Service Discovery
|
|
362
|
-
- [ ] Port exposure limited to necessary services
|
|
363
|
-
- [ ] Service naming follows conventions for discovery
|
|
364
|
-
- [ ] Network security implemented (internal networks for backend)
|
|
365
|
-
- [ ] Load balancing considerations addressed
|
|
366
|
-
- [ ] Health check endpoints implemented and tested
|
|
367
|
-
|
|
368
|
-
## Common Issue Diagnostics
|
|
369
|
-
|
|
370
|
-
### Build Performance Issues
|
|
371
|
-
**Symptoms**: Slow builds (10+ minutes), frequent cache invalidation
|
|
372
|
-
**Root causes**: Poor layer ordering, large build context, no caching strategy
|
|
373
|
-
**Solutions**: Multi-stage builds, .dockerignore optimization, dependency caching
|
|
374
|
-
|
|
375
|
-
### Security Vulnerabilities
|
|
376
|
-
**Symptoms**: Security scan failures, exposed secrets, root execution
|
|
377
|
-
**Root causes**: Outdated base images, hardcoded secrets, default user
|
|
378
|
-
**Solutions**: Regular base updates, secrets management, non-root configuration
|
|
379
|
-
|
|
380
|
-
### Image Size Problems
|
|
381
|
-
**Symptoms**: Images over 1GB, deployment slowness
|
|
382
|
-
**Root causes**: Unnecessary files, build tools in production, poor base selection
|
|
383
|
-
**Solutions**: Distroless images, multi-stage optimization, artifact selection
|
|
384
|
-
|
|
385
|
-
### Networking Issues
|
|
386
|
-
**Symptoms**: Service communication failures, DNS resolution errors
|
|
387
|
-
**Root causes**: Missing networks, port conflicts, service naming
|
|
388
|
-
**Solutions**: Custom networks, health checks, proper service discovery
|
|
389
|
-
|
|
390
|
-
### Development Workflow Problems
|
|
391
|
-
**Symptoms**: Hot reload failures, debugging difficulties, slow iteration
|
|
392
|
-
**Root causes**: Volume mounting issues, port configuration, environment mismatch
|
|
393
|
-
**Solutions**: Development-specific targets, proper volume strategy, debug configuration
|
|
394
|
-
|
|
395
|
-
## Integration & Handoff Guidelines
|
|
396
|
-
|
|
397
|
-
**When to recommend other experts:**
|
|
398
|
-
- **Kubernetes orchestration** → kubernetes-expert: Pod management, services, ingress
|
|
399
|
-
- **CI/CD pipeline issues** → github-actions-expert: Build automation, deployment workflows
|
|
400
|
-
- **Database containerization** → database-expert: Complex persistence, backup strategies
|
|
401
|
-
- **Application-specific optimization** → Language experts: Code-level performance issues
|
|
402
|
-
- **Infrastructure automation** → devops-expert: Terraform, cloud-specific deployments
|
|
403
|
-
|
|
404
|
-
**Collaboration patterns:**
|
|
405
|
-
- Provide Docker foundation for DevOps deployment automation
|
|
406
|
-
- Create optimized base images for language-specific experts
|
|
407
|
-
- Establish container standards for CI/CD integration
|
|
408
|
-
- Define security baselines for production orchestration
|
|
409
|
-
|
|
410
|
-
I provide comprehensive Docker containerization expertise with focus on practical optimization, security hardening, and production-ready patterns. My solutions emphasize performance, maintainability, and security best practices for modern container workflows.
|
|
411
|
-
|
|
412
|
-
## When to Use
|
|
413
|
-
This skill is applicable to execute the workflow or actions described in the overview.
|
|
134
|
+
Distroless images have no `curl`; ship a tiny health binary or rely on the
|
|
135
|
+
orchestrator's probe.
|
|
136
|
+
|
|
137
|
+
## 7. Pinning, scanning, provenance
|
|
138
|
+
|
|
139
|
+
- Pin bases by digest in release images (`FROM node:22-bookworm-slim@sha256:...`)
|
|
140
|
+
and let Renovate or Dependabot bump the digest.
|
|
141
|
+
- Scan in CI and fail on fixable critical findings: `docker scout cves`,
|
|
142
|
+
`trivy image`, or `grype`.
|
|
143
|
+
- Emit an SBOM and provenance attestation with
|
|
144
|
+
`docker buildx build --sbom=true --provenance=mode=max`.
|
|
145
|
+
- Add OCI labels (`org.opencontainers.image.source`, `.revision`, `.version`)
|
|
146
|
+
so a running image leads back to its commit.
|
|
147
|
+
|
|
148
|
+
## Diagnosing a build
|
|
149
|
+
|
|
150
|
+
| Symptom | First check |
|
|
151
|
+
|---------|-------------|
|
|
152
|
+
| Every build reinstalls dependencies | a `COPY . .` before the install step, or a missing lockfile copy |
|
|
153
|
+
| Context upload is large | `.dockerignore`; run `docker buildx build --progress=plain` and read the context size |
|
|
154
|
+
| Image is hundreds of MB | `docker history --no-trunc` or `dive` to find the heavy layer |
|
|
155
|
+
| Works locally, fails on arm64 | a prebuilt native binary for one architecture only |
|
|
156
|
+
| Container ignores stop and is killed after 10s | shell-form `CMD`, or no `SIGTERM` handler |
|
|
157
|
+
| `permission denied` after adding `USER` | files copied without `--chown`, or writes outside a writable path |
|
|
158
|
+
|
|
159
|
+
## Done means
|
|
160
|
+
|
|
161
|
+
- `docker buildx build` succeeds from a clean cache and from a warm one.
|
|
162
|
+
- Final image runs as non-root, has no compilers or package manager caches.
|
|
163
|
+
- No secret appears in `docker history` or `docker inspect`.
|
|
164
|
+
- Scanner reports no fixable critical vulnerability.
|
|
165
|
+
- The container stops within its grace period on `SIGTERM`.
|
|
166
|
+
|
|
167
|
+
## References
|
|
168
|
+
|
|
169
|
+
- `references/patterns.md`: multi-stage Dockerfiles and choosing a runtime base, buildx multi-arch builds, and Compose v2 for local development. Load it when the task reaches those topics.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Docker build patterns
|
|
2
|
+
|
|
3
|
+
Loaded on demand from `../SKILL.md`.
|
|
4
|
+
|
|
5
|
+
## 3. Multi-stage builds
|
|
6
|
+
|
|
7
|
+
Build tools, compilers and dev dependencies stay in earlier stages. The last
|
|
8
|
+
stage copies artifacts only.
|
|
9
|
+
|
|
10
|
+
```dockerfile
|
|
11
|
+
# syntax=docker/dockerfile:1.7
|
|
12
|
+
FROM golang:1.23 AS build
|
|
13
|
+
WORKDIR /src
|
|
14
|
+
COPY go.mod go.sum ./
|
|
15
|
+
RUN --mount=type=cache,target=/go/pkg/mod go mod download
|
|
16
|
+
COPY . .
|
|
17
|
+
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
18
|
+
--mount=type=cache,target=/root/.cache/go-build \
|
|
19
|
+
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/orders-api ./cmd/orders-api
|
|
20
|
+
|
|
21
|
+
FROM gcr.io/distroless/static-debian12:nonroot
|
|
22
|
+
COPY --from=build /out/orders-api /orders-api
|
|
23
|
+
EXPOSE 8080
|
|
24
|
+
ENTRYPOINT ["/orders-api"]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Useful stage tricks:
|
|
28
|
+
|
|
29
|
+
- A `test` stage that runs the suite, built with `--target test` in CI, keeps
|
|
30
|
+
test tooling out of the release image.
|
|
31
|
+
- A `dev` stage with hot reload tools, selected in Compose with `target: dev`.
|
|
32
|
+
- `COPY --link` lets BuildKit reuse a layer even when an earlier layer changed.
|
|
33
|
+
|
|
34
|
+
### Choosing the runtime base
|
|
35
|
+
|
|
36
|
+
| Base | Size | Shell | Fits |
|
|
37
|
+
|------|------|-------|------|
|
|
38
|
+
| `scratch` | none | no | static binaries that need no CA bundle or tzdata |
|
|
39
|
+
| `distroless/static` / `distroless/base` | very small | no | Go, Rust, JVM (`distroless/java21`) |
|
|
40
|
+
| `*-slim` (Debian) | small | yes | Python, Node, anything needing glibc and debugging |
|
|
41
|
+
| `alpine` | small | yes | when musl is known to be fine for every native dependency |
|
|
42
|
+
|
|
43
|
+
Alpine's musl changes DNS behaviour and breaks some prebuilt wheels and native
|
|
44
|
+
modules. Pick it on evidence, not by default.
|
|
45
|
+
|
|
46
|
+
## Multi-architecture builds
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
docker buildx create --use --name multi
|
|
50
|
+
docker buildx build \
|
|
51
|
+
--platform linux/amd64,linux/arm64 \
|
|
52
|
+
--cache-from type=registry,ref=registry.example.com/orders-api:buildcache \
|
|
53
|
+
--cache-to type=registry,ref=registry.example.com/orders-api:buildcache,mode=max \
|
|
54
|
+
-t registry.example.com/orders-api:1.4.0 --push .
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
QEMU emulation works but is slow for compiled languages. Prefer cross
|
|
58
|
+
compilation in the build stage using `--platform=$BUILDPLATFORM` plus the
|
|
59
|
+
`TARGETOS` / `TARGETARCH` build args, or native runners per architecture.
|
|
60
|
+
|
|
61
|
+
## Compose v2 for local development
|
|
62
|
+
|
|
63
|
+
Use `compose.yaml` and `docker compose` (the v1 `docker-compose` binary and the
|
|
64
|
+
top-level `version:` key are obsolete).
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
services:
|
|
68
|
+
api:
|
|
69
|
+
build: { context: ., target: dev }
|
|
70
|
+
ports: ["8080:8080"]
|
|
71
|
+
env_file: .env.local
|
|
72
|
+
depends_on:
|
|
73
|
+
db: { condition: service_healthy }
|
|
74
|
+
develop:
|
|
75
|
+
watch:
|
|
76
|
+
- action: sync
|
|
77
|
+
path: ./src
|
|
78
|
+
target: /app/src
|
|
79
|
+
- action: rebuild
|
|
80
|
+
path: package-lock.json
|
|
81
|
+
db:
|
|
82
|
+
image: postgres:17
|
|
83
|
+
environment:
|
|
84
|
+
POSTGRES_PASSWORD: devonly
|
|
85
|
+
volumes: [pgdata:/var/lib/postgresql/data]
|
|
86
|
+
healthcheck:
|
|
87
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
88
|
+
interval: 5s
|
|
89
|
+
retries: 10
|
|
90
|
+
volumes:
|
|
91
|
+
pgdata:
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- `depends_on` with `service_healthy` replaces sleep-and-retry wrappers.
|
|
95
|
+
- `docker compose watch` syncs files or rebuilds on change.
|
|
96
|
+
- Profiles (`profiles: [tools]`) keep optional services off by default.
|
|
97
|
+
- Compose is for development and small single-host deployments; production
|
|
98
|
+
orchestration settings (replicas, rollout) belong to the platform.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: energykit
|
|
3
3
|
description: "Query grid electricity forecasts and submit load events using EnergyKit to help users optimize home electricity usage. Use when building smart home apps, EV charger controls, HVAC scheduling, or energy management dashboards that guide users to use power during cleaner or cheaper grid periods."
|
|
4
|
+
metadata:
|
|
5
|
+
source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
|
|
4
6
|
---
|
|
5
|
-
|
|
6
7
|
# EnergyKit
|
|
7
8
|
|
|
8
9
|
Provide grid electricity forecasts to help users choose when to use electricity.
|