@devo-bmad-custom/agent-orchestration 1.0.2 → 1.0.4
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/lib/installer.js +33 -0
- package/package.json +1 -1
- package/src/.agents/skills/audit-website/README.md +20 -20
- package/src/.agents/skills/audit-website/SKILL.md +470 -470
- package/src/.agents/skills/audit-website/agents/openai.yaml +6 -6
- package/src/.agents/skills/audit-website/assets/icon-small.svg +41 -41
- package/src/.agents/skills/audit-website/references/OUTPUT-FORMAT.md +250 -250
- package/src/.agents/skills/clean-code-standards/SKILL.md +104 -104
- package/src/.agents/skills/excalidraw-dark-standard/SKILL.md +281 -281
- package/src/.agents/skills/frontend-responsive-design-standards/SKILL.md +434 -434
- package/src/.agents/skills/java-fundamentals/SKILL.md +116 -116
- package/src/.agents/skills/java-performance/SKILL.md +119 -119
- package/src/.agents/skills/next-best-practices/SKILL.md +153 -153
- package/src/.agents/skills/next-best-practices/async-patterns.md +87 -87
- package/src/.agents/skills/next-best-practices/bundling.md +180 -180
- package/src/.agents/skills/next-best-practices/data-patterns.md +297 -297
- package/src/.agents/skills/next-best-practices/debug-tricks.md +105 -105
- package/src/.agents/skills/next-best-practices/directives.md +73 -73
- package/src/.agents/skills/next-best-practices/error-handling.md +227 -227
- package/src/.agents/skills/next-best-practices/file-conventions.md +140 -140
- package/src/.agents/skills/next-best-practices/font.md +245 -245
- package/src/.agents/skills/next-best-practices/functions.md +108 -108
- package/src/.agents/skills/next-best-practices/hydration-error.md +91 -91
- package/src/.agents/skills/next-best-practices/image.md +173 -173
- package/src/.agents/skills/next-best-practices/metadata.md +301 -301
- package/src/.agents/skills/next-best-practices/parallel-routes.md +287 -287
- package/src/.agents/skills/next-best-practices/route-handlers.md +146 -146
- package/src/.agents/skills/next-best-practices/rsc-boundaries.md +159 -159
- package/src/.agents/skills/next-best-practices/runtime-selection.md +39 -39
- package/src/.agents/skills/next-best-practices/scripts.md +141 -141
- package/src/.agents/skills/next-best-practices/self-hosting.md +371 -371
- package/src/.agents/skills/next-best-practices/suspense-boundaries.md +67 -67
- package/src/.agents/skills/nextjs-app-router-patterns/SKILL.md +537 -537
- package/src/.agents/skills/postgresql-optimization/SKILL.md +404 -404
- package/src/.agents/skills/python-backend/SKILL.md +153 -153
- package/src/.agents/skills/python-fundamentals/SKILL.md +234 -234
- package/src/.agents/skills/python-performance/SKILL.md +404 -404
- package/src/.agents/skills/react-expert/SKILL.md +335 -335
- package/src/.agents/skills/redis-best-practices/SKILL.md +438 -438
- package/src/.agents/skills/security-best-practices/SKILL.md +288 -288
- package/src/.agents/skills/security-review/LICENSE +22 -22
- package/src/.agents/skills/security-review/SKILL.md +312 -312
- package/src/.agents/skills/security-review/infrastructure/docker.md +432 -432
- package/src/.agents/skills/security-review/languages/javascript.md +388 -388
- package/src/.agents/skills/security-review/languages/python.md +363 -363
- package/src/.agents/skills/security-review/references/api-security.md +519 -519
- package/src/.agents/skills/security-review/references/authentication.md +353 -353
- package/src/.agents/skills/security-review/references/authorization.md +372 -372
- package/src/.agents/skills/security-review/references/business-logic.md +443 -443
- package/src/.agents/skills/security-review/references/cryptography.md +329 -329
- package/src/.agents/skills/security-review/references/csrf.md +398 -398
- package/src/.agents/skills/security-review/references/data-protection.md +378 -378
- package/src/.agents/skills/security-review/references/deserialization.md +410 -410
- package/src/.agents/skills/security-review/references/error-handling.md +436 -436
- package/src/.agents/skills/security-review/references/file-security.md +457 -457
- package/src/.agents/skills/security-review/references/injection.md +259 -259
- package/src/.agents/skills/security-review/references/logging.md +433 -433
- package/src/.agents/skills/security-review/references/misconfiguration.md +435 -435
- package/src/.agents/skills/security-review/references/modern-threats.md +475 -475
- package/src/.agents/skills/security-review/references/ssrf.md +415 -415
- package/src/.agents/skills/security-review/references/supply-chain.md +405 -405
- package/src/.agents/skills/security-review/references/xss.md +336 -336
- package/src/.agents/skills/subagent-driven-development/SKILL.md +275 -275
- package/src/.agents/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -26
- package/src/.agents/skills/subagent-driven-development/implementer-prompt.md +113 -113
- package/src/.agents/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -61
- package/src/.agents/skills/systematic-debugging/CREATION-LOG.md +119 -119
- package/src/.agents/skills/systematic-debugging/SKILL.md +296 -296
- package/src/.agents/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/src/.agents/skills/systematic-debugging/condition-based-waiting.md +115 -115
- package/src/.agents/skills/systematic-debugging/defense-in-depth.md +122 -122
- package/src/.agents/skills/systematic-debugging/root-cause-tracing.md +169 -169
- package/src/.agents/skills/systematic-debugging/test-academic.md +14 -14
- package/src/.agents/skills/systematic-debugging/test-pressure-1.md +58 -58
- package/src/.agents/skills/systematic-debugging/test-pressure-2.md +68 -68
- package/src/.agents/skills/systematic-debugging/test-pressure-3.md +69 -69
- package/src/.agents/skills/typescript-best-practices/SKILL.md +373 -373
- package/src/.agents/skills/ui-ux-pro-custom/SKILL.md +348 -348
- package/src/.agents/skills/ui-ux-pro-custom/data/charts.csv +26 -26
- package/src/.agents/skills/ui-ux-pro-custom/data/colors.csv +97 -97
- package/src/.agents/skills/ui-ux-pro-custom/data/icons.csv +101 -101
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/SKILL.md +106 -106
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/accessibility.md +475 -475
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/animation.md +466 -466
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/composition-locals.md +231 -231
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/deprecated-patterns.md +323 -323
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/lists-scrolling.md +400 -400
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/modifiers.md +331 -331
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/navigation.md +416 -416
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/performance.md +446 -446
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/side-effects.md +516 -516
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/foundation-source.md +13327 -13327
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/material3-source.md +19097 -19097
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/navigation-source.md +2947 -2947
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/runtime-source.md +11316 -11316
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/ui-source.md +7896 -7896
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/state-management.md +377 -377
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/styles-experimental.md +470 -470
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/theming-material3.md +349 -349
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/view-composition.md +595 -595
- package/src/.agents/skills/ui-ux-pro-custom/data/landing.csv +31 -31
- package/src/.agents/skills/ui-ux-pro-custom/data/mobile-ui-layout.md +654 -654
- package/src/.agents/skills/ui-ux-pro-custom/data/products.csv +96 -96
- package/src/.agents/skills/ui-ux-pro-custom/data/react-performance.csv +45 -45
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/astro.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/flutter.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/html-tailwind.csv +56 -56
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/jetpack-compose.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nextjs.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxt-ui.csv +51 -51
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxtjs.csv +59 -59
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react-native.csv +56 -56
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/shadcn.csv +61 -61
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/svelte.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/swiftui.csv +51 -51
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/vue.csv +50 -50
- package/src/.agents/skills/ui-ux-pro-custom/data/styles.csv +68 -68
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/SKILL.md +438 -438
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/references/alarmkit-patterns.md +584 -584
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-clips/SKILL.md +436 -436
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/SKILL.md +489 -489
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/references/appintents-advanced.md +1076 -1076
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/SKILL.md +340 -340
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/privacy-manifest.md +90 -90
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/review-checklists.md +106 -106
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-conversion.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-optimization.md +344 -344
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/foundation-models.md +508 -508
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/mlx-swift.md +285 -285
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/references/keychain-biometric.md +211 -211
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/SKILL.md +499 -499
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/references/background-task-patterns.md +390 -390
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/SKILL.md +461 -461
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/references/callkit-patterns.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/SKILL.md +492 -492
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/references/cloudkit-patterns.md +461 -461
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/codable-patterns/SKILL.md +467 -467
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/SKILL.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/references/contacts-patterns.md +409 -409
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/SKILL.md +491 -491
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/references/ble-patterns.md +435 -435
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/SKILL.md +388 -388
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/references/motion-patterns.md +405 -405
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/SKILL.md +495 -495
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/references/nfc-patterns.md +420 -420
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/SKILL.md +459 -459
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/references/coreml-swift-integration.md +765 -765
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/SKILL.md +422 -422
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/instruments-guide.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/lldb-patterns.md +298 -298
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/device-integrity/SKILL.md +477 -477
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/SKILL.md +460 -460
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/references/energykit-patterns.md +541 -541
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/SKILL.md +483 -483
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/references/eventkit-patterns.md +326 -326
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/SKILL.md +498 -498
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/references/healthkit-patterns.md +602 -602
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/references/matter-commissioning.md +455 -455
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/SKILL.md +301 -301
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/references/a11y-patterns.md +140 -140
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/SKILL.md +418 -418
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/formatstyle-locale.md +627 -627
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/string-catalogs.md +462 -462
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/SKILL.md +441 -441
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/background-websocket.md +862 -862
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/lightweight-clients.md +93 -93
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/network-framework.md +563 -563
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/urlsession-patterns.md +1116 -1116
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/app-review-guidelines.md +174 -174
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/cryptokit-advanced.md +296 -296
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/file-storage-patterns.md +354 -354
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/privacy-manifest.md +117 -117
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/references/live-activity-patterns.md +868 -868
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/SKILL.md +485 -485
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/corelocation-patterns.md +730 -730
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/mapkit-patterns.md +748 -748
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/metrickit-diagnostics/SKILL.md +479 -479
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/SKILL.md +395 -395
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/references/musickit-patterns.md +363 -363
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/SKILL.md +412 -412
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/references/translation-patterns.md +311 -311
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/SKILL.md +398 -398
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/references/wallet-passes.md +254 -254
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/SKILL.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/paperkit-integration.md +376 -376
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/pencilkit-patterns.md +302 -302
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/SKILL.md +446 -446
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/references/permissionkit-patterns.md +435 -435
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/av-playback.md +701 -701
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/camera-capture.md +774 -774
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/image-loading-caching.md +869 -869
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/photospicker-patterns.md +597 -597
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/notification-patterns.md +677 -677
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/rich-notifications.md +745 -745
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/SKILL.md +479 -479
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/references/realitykit-patterns.md +480 -480
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/SKILL.md +483 -483
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/references/shareplay-patterns.md +544 -544
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/speech-recognition/SKILL.md +485 -485
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/SKILL.md +478 -478
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/app-review-guidelines.md +58 -58
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/storekit-advanced.md +755 -755
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/SKILL.md +487 -487
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/references/charts-patterns.md +895 -895
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/SKILL.md +408 -408
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/approachable-concurrency.md +80 -80
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swift-6-2-concurrency.md +233 -233
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swiftui-concurrency.md +187 -187
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/synchronization-primitives.md +341 -341
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/SKILL.md +498 -498
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/references/swift-patterns-extended.md +505 -505
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/SKILL.md +467 -467
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/references/testing-patterns.md +504 -504
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/SKILL.md +334 -334
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/core-data-coexistence.md +504 -504
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-advanced.md +975 -975
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-queries.md +675 -675
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/SKILL.md +481 -481
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/animation-advanced.md +804 -804
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/core-animation-bridge.md +553 -553
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/SKILL.md +450 -450
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/references/gesture-patterns.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/SKILL.md +336 -336
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/form.md +97 -97
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/grids.md +69 -69
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/list.md +99 -99
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/scrollview.md +147 -147
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/SKILL.md +325 -325
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/references/liquid-glass.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/SKILL.md +262 -262
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/deeplinks.md +207 -207
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/navigationstack.md +177 -177
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/sheets.md +169 -169
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/tabview.md +178 -178
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/SKILL.md +381 -381
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/architecture-patterns.md +486 -486
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/deprecated-migration.md +1097 -1097
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/design-polish.md +780 -780
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/platform-and-sharing.md +696 -696
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/SKILL.md +491 -491
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -46
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -29
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -33
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -52
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/SKILL.md +428 -428
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/hosting-migration.md +534 -534
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/representable-recipes.md +1133 -1133
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/SKILL.md +494 -494
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/references/tipkit-patterns.md +782 -782
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/SKILL.md +475 -475
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/vision-requests.md +736 -736
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/visionkit-scanner.md +738 -738
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/SKILL.md +410 -410
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/references/weatherkit-patterns.md +567 -567
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/SKILL.md +497 -497
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/references/widgetkit-advanced.md +871 -871
- package/src/.agents/skills/ui-ux-pro-custom/data/typography.csv +57 -57
- package/src/.agents/skills/ui-ux-pro-custom/data/ui-reasoning.csv +101 -101
- package/src/.agents/skills/ui-ux-pro-custom/data/ux-guidelines.csv +99 -99
- package/src/.agents/skills/ui-ux-pro-custom/data/web-interface.csv +31 -31
- package/src/.agents/skills/ui-ux-pro-custom/scripts/core.py +253 -253
- package/src/.agents/skills/ui-ux-pro-custom/scripts/design_system.py +1067 -1067
- package/src/.agents/skills/ui-ux-pro-custom/scripts/search.py +114 -114
- package/src/.agents/skills/ux-audit/SKILL.md +150 -150
- package/src/.agents/skills/websocket-engineer/SKILL.md +168 -168
- package/src/.agents/skills/websocket-engineer/references/alternatives.md +391 -391
- package/src/.agents/skills/websocket-engineer/references/patterns.md +400 -400
- package/src/.agents/skills/websocket-engineer/references/protocol.md +195 -195
- package/src/.agents/skills/websocket-engineer/references/scaling.md +333 -333
- package/src/.agents/skills/websocket-engineer/references/security.md +474 -474
- package/src/.agents/skills/writing-skills/SKILL.md +655 -655
- package/src/.agents/skills/writing-skills/anthropic-best-practices.md +1150 -1150
- package/src/.agents/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/src/.agents/skills/writing-skills/graphviz-conventions.dot +171 -171
- package/src/.agents/skills/writing-skills/persuasion-principles.md +187 -187
- package/src/.agents/skills/writing-skills/render-graphs.js +168 -168
- package/src/.agents/skills/writing-skills/testing-skills-with-subagents.md +384 -384
- package/src/.claude/commands/master-orchestrator.md +15 -0
- package/src/_memory/config.yaml +11 -11
- package/src/_memory/master-orchestrator-sidecar/instructions.md +97 -47
- package/src/_memory/skills/nimbalyst-tracking/SKILL.md +103 -103
- package/src/_memory/skills/writing-skills/SKILL.md +655 -655
- package/src/bmb/agents/agent-builder.md +59 -59
- package/src/bmb/agents/module-builder.md +60 -60
- package/src/bmb/agents/workflow-builder.md +61 -61
- package/src/bmb/config.yaml +12 -12
- package/src/bmb/module-help.csv +13 -13
- package/src/bmb/workflows/agent/data/agent-architecture.md +258 -258
- package/src/bmb/workflows/agent/data/agent-compilation.md +185 -185
- package/src/bmb/workflows/agent/data/agent-menu-patterns.md +189 -189
- package/src/bmb/workflows/agent/data/agent-metadata.md +133 -133
- package/src/bmb/workflows/agent/data/agent-validation.md +111 -111
- package/src/bmb/workflows/agent/data/brainstorm-context.md +96 -96
- package/src/bmb/workflows/agent/data/communication-presets.csv +61 -61
- package/src/bmb/workflows/agent/data/critical-actions.md +75 -75
- package/src/bmb/workflows/agent/data/persona-properties.md +252 -252
- package/src/bmb/workflows/agent/data/principles-crafting.md +142 -142
- package/src/bmb/workflows/agent/data/reference/module-examples/architect.md +68 -68
- package/src/bmb/workflows/agent/data/reference/with-sidecar/journal-keeper/journal-keeper-sidecar/entries/yy-mm-dd-entry-template.md +16 -16
- package/src/bmb/workflows/agent/data/understanding-agent-types.md +126 -126
- package/src/bmb/workflows/agent/steps-c/step-01-brainstorm.md +129 -129
- package/src/bmb/workflows/agent/steps-c/step-02-discovery.md +170 -170
- package/src/bmb/workflows/agent/steps-c/step-03-sidecar-metadata.md +309 -309
- package/src/bmb/workflows/agent/steps-c/step-04-persona.md +213 -213
- package/src/bmb/workflows/agent/steps-c/step-05-commands-menu.md +179 -179
- package/src/bmb/workflows/agent/steps-c/step-06-activation.md +278 -278
- package/src/bmb/workflows/agent/steps-c/step-07-build-agent.md +316 -316
- package/src/bmb/workflows/agent/steps-c/step-08-celebrate.md +247 -247
- package/src/bmb/workflows/agent/steps-e/e-01-load-existing.md +221 -221
- package/src/bmb/workflows/agent/steps-e/e-02-discover-edits.md +195 -195
- package/src/bmb/workflows/agent/steps-e/e-04-sidecar-metadata.md +126 -126
- package/src/bmb/workflows/agent/steps-e/e-05-persona.md +135 -135
- package/src/bmb/workflows/agent/steps-e/e-06-commands-menu.md +123 -123
- package/src/bmb/workflows/agent/steps-e/e-07-activation.md +124 -124
- package/src/bmb/workflows/agent/steps-e/e-08-edit-agent.md +197 -197
- package/src/bmb/workflows/agent/steps-e/e-09-celebrate.md +155 -155
- package/src/bmb/workflows/agent/steps-v/v-01-load-review.md +137 -137
- package/src/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +116 -116
- package/src/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +124 -124
- package/src/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +127 -127
- package/src/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +134 -134
- package/src/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +134 -134
- package/src/bmb/workflows/agent/steps-v/v-03-summary.md +104 -104
- package/src/bmb/workflows/agent/templates/agent-plan.template.md +5 -5
- package/src/bmb/workflows/agent/templates/agent-template.md +89 -89
- package/src/bmb/workflows/agent/workflow-create-agent.md +72 -72
- package/src/bmb/workflows/agent/workflow-edit-agent.md +75 -75
- package/src/bmb/workflows/agent/workflow-validate-agent.md +73 -73
- package/src/bmb/workflows/module/data/agent-architecture.md +179 -179
- package/src/bmb/workflows/module/data/agent-spec-template.md +79 -79
- package/src/bmb/workflows/module/data/module-standards.md +263 -263
- package/src/bmb/workflows/module/data/module-yaml-conventions.md +392 -392
- package/src/bmb/workflows/module/module-help-generate.md +254 -254
- package/src/bmb/workflows/module/steps-b/step-01-welcome.md +148 -148
- package/src/bmb/workflows/module/steps-b/step-02-spark.md +141 -141
- package/src/bmb/workflows/module/steps-b/step-03-module-type.md +149 -149
- package/src/bmb/workflows/module/steps-b/step-04-vision.md +83 -83
- package/src/bmb/workflows/module/steps-b/step-05-identity.md +97 -97
- package/src/bmb/workflows/module/steps-b/step-06-users.md +86 -86
- package/src/bmb/workflows/module/steps-b/step-07-value.md +76 -76
- package/src/bmb/workflows/module/steps-b/step-08-agents.md +97 -97
- package/src/bmb/workflows/module/steps-b/step-09-workflows.md +83 -83
- package/src/bmb/workflows/module/steps-b/step-10-tools.md +91 -91
- package/src/bmb/workflows/module/steps-b/step-11-scenarios.md +84 -84
- package/src/bmb/workflows/module/steps-b/step-12-creative.md +95 -95
- package/src/bmb/workflows/module/steps-b/step-13-review.md +105 -105
- package/src/bmb/workflows/module/steps-b/step-14-finalize.md +117 -117
- package/src/bmb/workflows/module/steps-c/step-01-load-brief.md +179 -179
- package/src/bmb/workflows/module/steps-c/step-01b-continue.md +82 -82
- package/src/bmb/workflows/module/steps-c/step-02-structure.md +105 -105
- package/src/bmb/workflows/module/steps-c/step-03-config.md +119 -119
- package/src/bmb/workflows/module/steps-c/step-04-agents.md +168 -168
- package/src/bmb/workflows/module/steps-c/step-05-workflows.md +184 -184
- package/src/bmb/workflows/module/steps-c/step-06-docs.md +401 -401
- package/src/bmb/workflows/module/steps-c/step-07-complete.md +152 -152
- package/src/bmb/workflows/module/steps-e/step-01-load-target.md +81 -81
- package/src/bmb/workflows/module/steps-e/step-02-select-edit.md +77 -77
- package/src/bmb/workflows/module/steps-e/step-03-apply-edit.md +77 -77
- package/src/bmb/workflows/module/steps-e/step-04-review.md +80 -80
- package/src/bmb/workflows/module/steps-e/step-05-confirm.md +75 -75
- package/src/bmb/workflows/module/steps-v/step-01-load-target.md +96 -96
- package/src/bmb/workflows/module/steps-v/step-02-file-structure.md +93 -93
- package/src/bmb/workflows/module/steps-v/step-03-module-yaml.md +99 -99
- package/src/bmb/workflows/module/steps-v/step-04-agent-specs.md +152 -152
- package/src/bmb/workflows/module/steps-v/step-05-workflow-specs.md +152 -152
- package/src/bmb/workflows/module/steps-v/step-06-documentation.md +143 -143
- package/src/bmb/workflows/module/steps-v/step-07-installation.md +102 -102
- package/src/bmb/workflows/module/steps-v/step-08-report.md +197 -197
- package/src/bmb/workflows/module/templates/brief-template.md +154 -154
- package/src/bmb/workflows/module/templates/workflow-spec-template.md +96 -96
- package/src/bmb/workflows/module/workflow-create-module-brief.md +71 -71
- package/src/bmb/workflows/module/workflow-create-module.md +86 -86
- package/src/bmb/workflows/module/workflow-edit-module.md +66 -66
- package/src/bmb/workflows/module/workflow-validate-module.md +66 -66
- package/src/bmb/workflows/workflow/data/architecture.md +150 -150
- package/src/bmb/workflows/workflow/data/common-workflow-tools.csv +19 -19
- package/src/bmb/workflows/workflow/data/csv-data-file-standards.md +53 -53
- package/src/bmb/workflows/workflow/data/frontmatter-standards.md +184 -184
- package/src/bmb/workflows/workflow/data/input-discovery-standards.md +191 -191
- package/src/bmb/workflows/workflow/data/intent-vs-prescriptive-spectrum.md +44 -44
- package/src/bmb/workflows/workflow/data/menu-handling-standards.md +133 -133
- package/src/bmb/workflows/workflow/data/output-format-standards.md +135 -135
- package/src/bmb/workflows/workflow/data/step-file-rules.md +235 -235
- package/src/bmb/workflows/workflow/data/step-type-patterns.md +257 -257
- package/src/bmb/workflows/workflow/data/subprocess-optimization-patterns.md +188 -188
- package/src/bmb/workflows/workflow/data/trimodal-workflow-structure.md +164 -164
- package/src/bmb/workflows/workflow/data/workflow-chaining-standards.md +222 -222
- package/src/bmb/workflows/workflow/data/workflow-examples.md +232 -232
- package/src/bmb/workflows/workflow/data/workflow-type-criteria.md +134 -134
- package/src/bmb/workflows/workflow/steps-c/step-00-conversion.md +263 -263
- package/src/bmb/workflows/workflow/steps-c/step-01-discovery.md +194 -194
- package/src/bmb/workflows/workflow/steps-c/step-01b-continuation.md +3 -3
- package/src/bmb/workflows/workflow/steps-c/step-02-classification.md +270 -270
- package/src/bmb/workflows/workflow/steps-c/step-03-requirements.md +283 -283
- package/src/bmb/workflows/workflow/steps-c/step-04-tools.md +282 -282
- package/src/bmb/workflows/workflow/steps-c/step-05-plan-review.md +243 -243
- package/src/bmb/workflows/workflow/steps-c/step-06-design.md +330 -330
- package/src/bmb/workflows/workflow/steps-c/step-07-foundation.md +239 -239
- package/src/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +379 -379
- package/src/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +350 -350
- package/src/bmb/workflows/workflow/steps-c/step-10-confirmation.md +322 -322
- package/src/bmb/workflows/workflow/steps-c/step-11-completion.md +191 -191
- package/src/bmb/workflows/workflow/steps-e/step-e-01-assess-workflow.md +237 -237
- package/src/bmb/workflows/workflow/steps-e/step-e-02-discover-edits.md +251 -251
- package/src/bmb/workflows/workflow/steps-e/step-e-03-fix-validation.md +254 -254
- package/src/bmb/workflows/workflow/steps-e/step-e-04-direct-edit.md +277 -277
- package/src/bmb/workflows/workflow/steps-e/step-e-05-apply-edit.md +154 -154
- package/src/bmb/workflows/workflow/steps-e/step-e-06-validate-after.md +190 -190
- package/src/bmb/workflows/workflow/steps-e/step-e-07-complete.md +206 -206
- package/src/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md +109 -109
- package/src/bmb/workflows/workflow/steps-v/step-01-validate.md +221 -221
- package/src/bmb/workflows/workflow/steps-v/step-01b-structure.md +152 -152
- package/src/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +199 -199
- package/src/bmb/workflows/workflow/steps-v/step-02b-path-violations.md +265 -265
- package/src/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +164 -164
- package/src/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +211 -211
- package/src/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +200 -200
- package/src/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +195 -195
- package/src/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +209 -209
- package/src/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +199 -199
- package/src/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md +179 -179
- package/src/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +186 -186
- package/src/bmb/workflows/workflow/steps-v/step-10-report-complete.md +154 -154
- package/src/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +237 -237
- package/src/bmb/workflows/workflow/templates/minimal-output-template.md +11 -11
- package/src/bmb/workflows/workflow/templates/step-01-init-continuable-template.md +241 -241
- package/src/bmb/workflows/workflow/templates/step-1b-template.md +224 -224
- package/src/bmb/workflows/workflow/templates/step-template.md +294 -294
- package/src/bmb/workflows/workflow/templates/workflow-template.md +102 -102
- package/src/bmb/workflows/workflow/workflow-create-workflow.md +79 -79
- package/src/bmb/workflows/workflow/workflow-edit-workflow.md +65 -65
- package/src/bmb/workflows/workflow/workflow-rework-workflow.md +65 -65
- package/src/bmb/workflows/workflow/workflow-validate-max-parallel-workflow.md +66 -66
- package/src/bmb/workflows/workflow/workflow-validate-workflow.md +65 -65
- package/src/bmm/agents/analyst.md +104 -104
- package/src/bmm/agents/dev.md +100 -100
- package/src/bmm/agents/qa.md +100 -90
- package/src/bmm/agents/tech-writer/tech-writer.md +94 -94
- package/src/bmm/module-help.csv +31 -31
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +115 -115
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +107 -107
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +141 -141
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +144 -144
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +147 -147
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +161 -161
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +99 -99
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -57
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +87 -87
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +156 -156
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +165 -165
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +140 -140
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +152 -152
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +345 -345
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +92 -92
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +164 -164
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +174 -174
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +184 -184
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +105 -105
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +360 -360
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +87 -87
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +165 -165
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +174 -174
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +141 -141
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +159 -159
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +387 -387
- package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -54
- package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -54
- package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -54
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +100 -100
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +160 -160
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +88 -88
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +99 -99
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +169 -169
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +156 -156
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +136 -136
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +176 -176
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +184 -184
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +174 -174
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +175 -175
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +189 -189
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +162 -162
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +79 -79
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +183 -183
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +149 -149
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +187 -187
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +192 -192
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +108 -108
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +166 -166
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +131 -131
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +150 -150
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +118 -118
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +155 -155
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +170 -170
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +158 -158
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +147 -147
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +182 -182
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +202 -202
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +148 -148
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +201 -201
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +179 -179
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +164 -164
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +65 -65
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -65
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -63
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +63 -63
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +106 -106
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +111 -111
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +115 -115
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +127 -127
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +167 -167
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +143 -143
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +118 -118
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +154 -154
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +136 -136
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +165 -165
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +135 -135
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +192 -192
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +101 -101
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +45 -45
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +185 -185
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +129 -129
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +130 -130
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +93 -93
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +196 -196
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -129
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -54
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +82 -82
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +106 -106
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +138 -138
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +129 -129
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +166 -166
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +186 -186
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +163 -163
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +38 -38
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -49
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +124 -124
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +122 -122
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +84 -84
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -58
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -43
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -53
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +159 -159
- package/src/bmm/workflows/4-implementation/create-story/template.md +79 -79
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -20
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -25
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +158 -158
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +122 -122
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +93 -93
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +93 -93
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +87 -87
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -146
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -50
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +152 -152
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +123 -123
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -201
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -79
- package/src/bmm/workflows/document-project/workflow.yaml +22 -22
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -184
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +322 -322
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +235 -235
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -49
- package/src/bmm/workflows/qa/automate/workflow.yaml +233 -233
- package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -42
- package/src/core/config.yaml +9 -9
- package/src/core/module-help.csv +10 -10
- package/src/core/scripts/generate-loop-report.py +72 -72
- package/src/core/tasks/editorial-review-prose.xml +101 -101
- package/src/core/tasks/editorial-review-structure.xml +207 -207
- package/src/core/tasks/help.md +86 -86
- package/src/core/tasks/index-docs.xml +64 -64
- package/src/core/tasks/review-adversarial-general.xml +66 -66
- package/src/core/tasks/review-adversarial-loop.xml +46 -46
- package/src/core/tasks/review-edge-case-hunter.xml +63 -63
- package/src/core/tasks/review-party-loop.xml +46 -46
- package/src/core/tasks/shard-doc.xml +107 -107
- package/src/core/tasks/workflow.xml +235 -235
- package/src/core/templates/review-loop-report.html +88 -88
- package/src/core/templates/review-loop-report.md +5 -5
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -117
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +212 -212
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
- package/src/core/workflows/brainstorming/steps/step-02e-deep-dive.md +68 -68
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +403 -403
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
- package/src/core/workflows/brainstorming/workflow.md +60 -60
- package/src/core/workflows/extract-trackers/workflow.md +45 -45
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +142 -142
- package/src/core/workflows/party-mode/workflow.md +194 -194
- package/src/docs/dev/tmux/actions_popup.py +291 -291
- package/src/docs/dev/tmux/tmux-setup.md +62 -1
|
@@ -1,432 +1,432 @@
|
|
|
1
|
-
# Docker Security Reference
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Container security involves the Dockerfile, image composition, runtime configuration, and orchestration. Misconfigurations can lead to container escapes, privilege escalation, or exposure of sensitive data.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Dockerfile Security
|
|
10
|
-
|
|
11
|
-
### Running as Root
|
|
12
|
-
|
|
13
|
-
```dockerfile
|
|
14
|
-
# VULNERABLE: Running as root (default)
|
|
15
|
-
FROM node:18
|
|
16
|
-
COPY . /app
|
|
17
|
-
CMD ["node", "app.js"] # Runs as root
|
|
18
|
-
|
|
19
|
-
# SAFE: Non-root user
|
|
20
|
-
FROM node:18
|
|
21
|
-
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
|
|
22
|
-
WORKDIR /app
|
|
23
|
-
COPY --chown=appuser:appgroup . .
|
|
24
|
-
USER appuser
|
|
25
|
-
CMD ["node", "app.js"]
|
|
26
|
-
|
|
27
|
-
# SAFE: Using numeric UID (more portable)
|
|
28
|
-
USER 1000:1000
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Base Image Issues
|
|
32
|
-
|
|
33
|
-
```dockerfile
|
|
34
|
-
# VULNERABLE: Using latest tag (unpredictable)
|
|
35
|
-
FROM node:latest
|
|
36
|
-
FROM ubuntu:latest
|
|
37
|
-
|
|
38
|
-
# VULNERABLE: Using untrusted/unverified base image
|
|
39
|
-
FROM randomuser/myimage
|
|
40
|
-
|
|
41
|
-
# SAFE: Pinned versions with digest
|
|
42
|
-
FROM node:18.19.0-alpine@sha256:abc123...
|
|
43
|
-
FROM python:3.11.7-slim-bookworm
|
|
44
|
-
|
|
45
|
-
# SAFE: Official images from verified publishers
|
|
46
|
-
FROM docker.io/library/node:18.19.0-alpine
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Sensitive Data in Images
|
|
50
|
-
|
|
51
|
-
```dockerfile
|
|
52
|
-
# VULNERABLE: Secrets in build args visible in history
|
|
53
|
-
ARG DB_PASSWORD
|
|
54
|
-
RUN echo $DB_PASSWORD > /config
|
|
55
|
-
|
|
56
|
-
# VULNERABLE: Copying secrets into image
|
|
57
|
-
COPY .env /app/.env
|
|
58
|
-
COPY secrets.json /app/
|
|
59
|
-
COPY id_rsa /root/.ssh/
|
|
60
|
-
|
|
61
|
-
# VULNERABLE: Secrets in environment variables
|
|
62
|
-
ENV API_KEY=sk-12345
|
|
63
|
-
ENV DB_PASSWORD=mysecret
|
|
64
|
-
|
|
65
|
-
# SAFE: Mount secrets at runtime
|
|
66
|
-
# docker run -v /secrets:/secrets:ro myimage
|
|
67
|
-
# Or use Docker secrets in Swarm/K8s
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Build-Time Secrets
|
|
71
|
-
|
|
72
|
-
```dockerfile
|
|
73
|
-
# SAFE: Multi-stage build to exclude secrets
|
|
74
|
-
FROM node:18 AS builder
|
|
75
|
-
# Use build-time secret (Docker BuildKit)
|
|
76
|
-
RUN --mount=type=secret,id=npm_token \
|
|
77
|
-
NPM_TOKEN=$(cat /run/secrets/npm_token) npm install
|
|
78
|
-
|
|
79
|
-
FROM node:18-alpine
|
|
80
|
-
COPY --from=builder /app/node_modules /app/node_modules
|
|
81
|
-
# Secret not in final image
|
|
82
|
-
|
|
83
|
-
# Build with: docker build --secret id=npm_token,src=.npmrc .
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Package Installation
|
|
87
|
-
|
|
88
|
-
```dockerfile
|
|
89
|
-
# VULNERABLE: Not cleaning up package manager cache
|
|
90
|
-
RUN apt-get update && apt-get install -y curl wget
|
|
91
|
-
# Leaves cache, increases image size and attack surface
|
|
92
|
-
|
|
93
|
-
# VULNERABLE: Installing unnecessary packages
|
|
94
|
-
RUN apt-get install -y vim nano curl wget git ssh
|
|
95
|
-
|
|
96
|
-
# SAFE: Minimal installation with cleanup
|
|
97
|
-
RUN apt-get update && \
|
|
98
|
-
apt-get install -y --no-install-recommends curl && \
|
|
99
|
-
rm -rf /var/lib/apt/lists/*
|
|
100
|
-
|
|
101
|
-
# SAFE: Using minimal base images
|
|
102
|
-
FROM alpine:3.19
|
|
103
|
-
FROM gcr.io/distroless/nodejs18
|
|
104
|
-
FROM scratch # Empty base image
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### COPY vs ADD
|
|
108
|
-
|
|
109
|
-
```dockerfile
|
|
110
|
-
# VULNERABLE: ADD can auto-extract and fetch URLs
|
|
111
|
-
ADD https://example.com/file.tar.gz /app/ # Downloads from URL
|
|
112
|
-
ADD archive.tar.gz /app/ # Auto-extracts
|
|
113
|
-
|
|
114
|
-
# SAFE: COPY is more explicit
|
|
115
|
-
COPY archive.tar.gz /app/
|
|
116
|
-
RUN tar -xzf /app/archive.tar.gz && rm /app/archive.tar.gz
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Exposed Ports
|
|
120
|
-
|
|
121
|
-
```dockerfile
|
|
122
|
-
# CHECK: Are all exposed ports necessary?
|
|
123
|
-
EXPOSE 22 # FLAG: SSH in container usually unnecessary
|
|
124
|
-
EXPOSE 3306 # FLAG: Database port exposed
|
|
125
|
-
EXPOSE 80 443 8080 9090 5000 # CHECK: Multiple ports
|
|
126
|
-
|
|
127
|
-
# SAFE: Only expose what's needed
|
|
128
|
-
EXPOSE 8080
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Image Scanning
|
|
134
|
-
|
|
135
|
-
### Vulnerability Patterns
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
# Scan for vulnerabilities
|
|
139
|
-
docker scan myimage
|
|
140
|
-
trivy image myimage
|
|
141
|
-
grype myimage
|
|
142
|
-
|
|
143
|
-
# Check for secrets in image
|
|
144
|
-
trufflehog docker --image myimage
|
|
145
|
-
# Or manually inspect layers
|
|
146
|
-
docker history --no-trunc myimage
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### High-Risk Packages
|
|
150
|
-
|
|
151
|
-
```dockerfile
|
|
152
|
-
# FLAG: Packages that increase attack surface
|
|
153
|
-
RUN apt-get install -y \
|
|
154
|
-
openssh-server \ # SSH access
|
|
155
|
-
sudo \ # Privilege escalation
|
|
156
|
-
netcat \ # Network tools
|
|
157
|
-
nmap \ # Network scanning
|
|
158
|
-
gcc make \ # Compilers (should be in build stage only)
|
|
159
|
-
python3-pip # Package managers (install deps, then remove)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Runtime Security
|
|
165
|
-
|
|
166
|
-
### Privileged Mode
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
# VULNERABLE: Running privileged (full host access)
|
|
170
|
-
docker run --privileged myimage
|
|
171
|
-
|
|
172
|
-
# VULNERABLE: Dangerous capabilities
|
|
173
|
-
docker run --cap-add=ALL myimage
|
|
174
|
-
docker run --cap-add=SYS_ADMIN myimage
|
|
175
|
-
docker run --cap-add=NET_ADMIN myimage
|
|
176
|
-
|
|
177
|
-
# SAFE: Drop all capabilities, add only needed
|
|
178
|
-
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myimage
|
|
179
|
-
|
|
180
|
-
# SAFE: Read-only root filesystem
|
|
181
|
-
docker run --read-only myimage
|
|
182
|
-
|
|
183
|
-
# SAFE: No new privileges
|
|
184
|
-
docker run --security-opt=no-new-privileges myimage
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Volume Mounts
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
# VULNERABLE: Mounting sensitive host paths
|
|
191
|
-
docker run -v /:/host myimage # Entire host filesystem
|
|
192
|
-
docker run -v /etc:/etc myimage # Host config files
|
|
193
|
-
docker run -v /var/run/docker.sock:/var/run/docker.sock # Docker socket
|
|
194
|
-
|
|
195
|
-
# VULNERABLE: Writable mounts of sensitive paths
|
|
196
|
-
docker run -v /etc/passwd:/etc/passwd myimage
|
|
197
|
-
|
|
198
|
-
# SAFE: Specific paths, read-only where possible
|
|
199
|
-
docker run -v /app/data:/data:ro myimage
|
|
200
|
-
docker run -v myvolume:/app/data myimage # Named volume
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Docker Socket Access
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
# CRITICAL: Docker socket mount = root on host
|
|
207
|
-
docker run -v /var/run/docker.sock:/var/run/docker.sock myimage
|
|
208
|
-
# Container can create privileged containers, access host
|
|
209
|
-
|
|
210
|
-
# If required, use read-only and restrict with authz plugin
|
|
211
|
-
# Or use Docker API proxy with limited permissions
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Network Security
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
# VULNERABLE: Host network mode
|
|
218
|
-
docker run --network=host myimage # No network isolation
|
|
219
|
-
|
|
220
|
-
# SAFE: User-defined networks with isolation
|
|
221
|
-
docker network create --internal internal-net # No external access
|
|
222
|
-
docker run --network=internal-net myimage
|
|
223
|
-
|
|
224
|
-
# SAFE: Restrict inter-container communication
|
|
225
|
-
docker network create --driver=bridge --opt com.docker.network.bridge.enable_icc=false isolated
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### Resource Limits
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
# VULNERABLE: No resource limits (DoS risk)
|
|
232
|
-
docker run myimage
|
|
233
|
-
|
|
234
|
-
# SAFE: Set memory and CPU limits
|
|
235
|
-
docker run --memory=512m --cpus=1 myimage
|
|
236
|
-
|
|
237
|
-
# SAFE: Limit processes
|
|
238
|
-
docker run --pids-limit=100 myimage
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## Docker Compose Security
|
|
244
|
-
|
|
245
|
-
### Secrets Management
|
|
246
|
-
|
|
247
|
-
```yaml
|
|
248
|
-
# VULNERABLE: Secrets in environment
|
|
249
|
-
services:
|
|
250
|
-
app:
|
|
251
|
-
environment:
|
|
252
|
-
- DB_PASSWORD=mysecret
|
|
253
|
-
- API_KEY=sk-12345
|
|
254
|
-
|
|
255
|
-
# SAFE: Use secrets
|
|
256
|
-
services:
|
|
257
|
-
app:
|
|
258
|
-
secrets:
|
|
259
|
-
- db_password
|
|
260
|
-
environment:
|
|
261
|
-
- DB_PASSWORD_FILE=/run/secrets/db_password
|
|
262
|
-
|
|
263
|
-
secrets:
|
|
264
|
-
db_password:
|
|
265
|
-
external: true # Or file: ./secrets/db_password
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### Privilege Restrictions
|
|
269
|
-
|
|
270
|
-
```yaml
|
|
271
|
-
# SAFE: Security options in compose
|
|
272
|
-
services:
|
|
273
|
-
app:
|
|
274
|
-
image: myimage
|
|
275
|
-
user: "1000:1000"
|
|
276
|
-
read_only: true
|
|
277
|
-
security_opt:
|
|
278
|
-
- no-new-privileges:true
|
|
279
|
-
cap_drop:
|
|
280
|
-
- ALL
|
|
281
|
-
cap_add:
|
|
282
|
-
- NET_BIND_SERVICE
|
|
283
|
-
tmpfs:
|
|
284
|
-
- /tmp
|
|
285
|
-
deploy:
|
|
286
|
-
resources:
|
|
287
|
-
limits:
|
|
288
|
-
memory: 512M
|
|
289
|
-
cpus: '1'
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### Network Isolation
|
|
293
|
-
|
|
294
|
-
```yaml
|
|
295
|
-
# SAFE: Internal networks for backend services
|
|
296
|
-
services:
|
|
297
|
-
frontend:
|
|
298
|
-
networks:
|
|
299
|
-
- public
|
|
300
|
-
- internal
|
|
301
|
-
|
|
302
|
-
backend:
|
|
303
|
-
networks:
|
|
304
|
-
- internal # Not accessible from outside
|
|
305
|
-
|
|
306
|
-
database:
|
|
307
|
-
networks:
|
|
308
|
-
- internal
|
|
309
|
-
|
|
310
|
-
networks:
|
|
311
|
-
public:
|
|
312
|
-
internal:
|
|
313
|
-
internal: true # No external access
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
---
|
|
317
|
-
|
|
318
|
-
## .dockerignore
|
|
319
|
-
|
|
320
|
-
### Required Exclusions
|
|
321
|
-
|
|
322
|
-
```dockerignore
|
|
323
|
-
# SAFE: Exclude sensitive files
|
|
324
|
-
.env
|
|
325
|
-
.env.*
|
|
326
|
-
*.pem
|
|
327
|
-
*.key
|
|
328
|
-
id_rsa*
|
|
329
|
-
secrets/
|
|
330
|
-
credentials/
|
|
331
|
-
.git/
|
|
332
|
-
.gitignore
|
|
333
|
-
.dockerignore
|
|
334
|
-
Dockerfile
|
|
335
|
-
docker-compose*.yml
|
|
336
|
-
*.log
|
|
337
|
-
node_modules/
|
|
338
|
-
__pycache__/
|
|
339
|
-
.pytest_cache/
|
|
340
|
-
coverage/
|
|
341
|
-
.nyc_output/
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### Missing .dockerignore
|
|
345
|
-
|
|
346
|
-
```bash
|
|
347
|
-
# FLAG: No .dockerignore may copy secrets into image
|
|
348
|
-
# Check if .env, keys, or credentials are copied
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## Registry Security
|
|
354
|
-
|
|
355
|
-
### Image Pull Policy
|
|
356
|
-
|
|
357
|
-
```yaml
|
|
358
|
-
# VULNERABLE: Always pulling latest
|
|
359
|
-
image: myregistry/myimage:latest
|
|
360
|
-
|
|
361
|
-
# VULNERABLE: No digest verification
|
|
362
|
-
image: myregistry/myimage:1.0
|
|
363
|
-
|
|
364
|
-
# SAFE: Pinned with digest
|
|
365
|
-
image: myregistry/myimage@sha256:abc123...
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Private Registry Auth
|
|
369
|
-
|
|
370
|
-
```bash
|
|
371
|
-
# VULNERABLE: Credentials in plain text
|
|
372
|
-
docker login -u user -p password registry.example.com
|
|
373
|
-
|
|
374
|
-
# SAFE: Use credential helpers
|
|
375
|
-
# ~/.docker/config.json
|
|
376
|
-
{
|
|
377
|
-
"credHelpers": {
|
|
378
|
-
"gcr.io": "gcloud",
|
|
379
|
-
"*.dkr.ecr.*.amazonaws.com": "ecr-login"
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
## Grep Patterns for Dockerfiles
|
|
387
|
-
|
|
388
|
-
```bash
|
|
389
|
-
# Running as root
|
|
390
|
-
grep -rn "^USER" Dockerfile || echo "No USER directive - runs as root"
|
|
391
|
-
|
|
392
|
-
# Secrets in environment
|
|
393
|
-
grep -rn "^ENV.*PASSWORD\|^ENV.*SECRET\|^ENV.*KEY\|^ENV.*TOKEN" Dockerfile
|
|
394
|
-
|
|
395
|
-
# Secrets in build args
|
|
396
|
-
grep -rn "^ARG.*PASSWORD\|^ARG.*SECRET\|^ARG.*KEY" Dockerfile
|
|
397
|
-
|
|
398
|
-
# Latest tags
|
|
399
|
-
grep -rn "FROM.*:latest\|FROM.*@" Dockerfile | grep -v "@sha256"
|
|
400
|
-
|
|
401
|
-
# Privileged instructions
|
|
402
|
-
grep -rn "^ADD\|EXPOSE 22\|apt-get install.*ssh" Dockerfile
|
|
403
|
-
|
|
404
|
-
# Missing cleanup
|
|
405
|
-
grep -rn "apt-get install" Dockerfile | grep -v "rm -rf"
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## Testing Checklist
|
|
411
|
-
|
|
412
|
-
- [ ] Container runs as non-root user
|
|
413
|
-
- [ ] Base image is pinned with digest
|
|
414
|
-
- [ ] No secrets in image layers (ENV, ARG, COPY)
|
|
415
|
-
- [ ] Multi-stage build for secrets/build tools
|
|
416
|
-
- [ ] Minimal base image (alpine, distroless)
|
|
417
|
-
- [ ] Package manager cache cleaned
|
|
418
|
-
- [ ] .dockerignore excludes sensitive files
|
|
419
|
-
- [ ] No --privileged or dangerous capabilities
|
|
420
|
-
- [ ] No Docker socket mount
|
|
421
|
-
- [ ] Resource limits configured
|
|
422
|
-
- [ ] Network isolation configured
|
|
423
|
-
- [ ] Image scanned for vulnerabilities
|
|
424
|
-
- [ ] Read-only root filesystem where possible
|
|
425
|
-
|
|
426
|
-
---
|
|
427
|
-
|
|
428
|
-
## References
|
|
429
|
-
|
|
430
|
-
- [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
|
|
431
|
-
- [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
|
|
432
|
-
- [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)
|
|
1
|
+
# Docker Security Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Container security involves the Dockerfile, image composition, runtime configuration, and orchestration. Misconfigurations can lead to container escapes, privilege escalation, or exposure of sensitive data.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Dockerfile Security
|
|
10
|
+
|
|
11
|
+
### Running as Root
|
|
12
|
+
|
|
13
|
+
```dockerfile
|
|
14
|
+
# VULNERABLE: Running as root (default)
|
|
15
|
+
FROM node:18
|
|
16
|
+
COPY . /app
|
|
17
|
+
CMD ["node", "app.js"] # Runs as root
|
|
18
|
+
|
|
19
|
+
# SAFE: Non-root user
|
|
20
|
+
FROM node:18
|
|
21
|
+
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
COPY --chown=appuser:appgroup . .
|
|
24
|
+
USER appuser
|
|
25
|
+
CMD ["node", "app.js"]
|
|
26
|
+
|
|
27
|
+
# SAFE: Using numeric UID (more portable)
|
|
28
|
+
USER 1000:1000
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Base Image Issues
|
|
32
|
+
|
|
33
|
+
```dockerfile
|
|
34
|
+
# VULNERABLE: Using latest tag (unpredictable)
|
|
35
|
+
FROM node:latest
|
|
36
|
+
FROM ubuntu:latest
|
|
37
|
+
|
|
38
|
+
# VULNERABLE: Using untrusted/unverified base image
|
|
39
|
+
FROM randomuser/myimage
|
|
40
|
+
|
|
41
|
+
# SAFE: Pinned versions with digest
|
|
42
|
+
FROM node:18.19.0-alpine@sha256:abc123...
|
|
43
|
+
FROM python:3.11.7-slim-bookworm
|
|
44
|
+
|
|
45
|
+
# SAFE: Official images from verified publishers
|
|
46
|
+
FROM docker.io/library/node:18.19.0-alpine
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Sensitive Data in Images
|
|
50
|
+
|
|
51
|
+
```dockerfile
|
|
52
|
+
# VULNERABLE: Secrets in build args visible in history
|
|
53
|
+
ARG DB_PASSWORD
|
|
54
|
+
RUN echo $DB_PASSWORD > /config
|
|
55
|
+
|
|
56
|
+
# VULNERABLE: Copying secrets into image
|
|
57
|
+
COPY .env /app/.env
|
|
58
|
+
COPY secrets.json /app/
|
|
59
|
+
COPY id_rsa /root/.ssh/
|
|
60
|
+
|
|
61
|
+
# VULNERABLE: Secrets in environment variables
|
|
62
|
+
ENV API_KEY=sk-12345
|
|
63
|
+
ENV DB_PASSWORD=mysecret
|
|
64
|
+
|
|
65
|
+
# SAFE: Mount secrets at runtime
|
|
66
|
+
# docker run -v /secrets:/secrets:ro myimage
|
|
67
|
+
# Or use Docker secrets in Swarm/K8s
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Build-Time Secrets
|
|
71
|
+
|
|
72
|
+
```dockerfile
|
|
73
|
+
# SAFE: Multi-stage build to exclude secrets
|
|
74
|
+
FROM node:18 AS builder
|
|
75
|
+
# Use build-time secret (Docker BuildKit)
|
|
76
|
+
RUN --mount=type=secret,id=npm_token \
|
|
77
|
+
NPM_TOKEN=$(cat /run/secrets/npm_token) npm install
|
|
78
|
+
|
|
79
|
+
FROM node:18-alpine
|
|
80
|
+
COPY --from=builder /app/node_modules /app/node_modules
|
|
81
|
+
# Secret not in final image
|
|
82
|
+
|
|
83
|
+
# Build with: docker build --secret id=npm_token,src=.npmrc .
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Package Installation
|
|
87
|
+
|
|
88
|
+
```dockerfile
|
|
89
|
+
# VULNERABLE: Not cleaning up package manager cache
|
|
90
|
+
RUN apt-get update && apt-get install -y curl wget
|
|
91
|
+
# Leaves cache, increases image size and attack surface
|
|
92
|
+
|
|
93
|
+
# VULNERABLE: Installing unnecessary packages
|
|
94
|
+
RUN apt-get install -y vim nano curl wget git ssh
|
|
95
|
+
|
|
96
|
+
# SAFE: Minimal installation with cleanup
|
|
97
|
+
RUN apt-get update && \
|
|
98
|
+
apt-get install -y --no-install-recommends curl && \
|
|
99
|
+
rm -rf /var/lib/apt/lists/*
|
|
100
|
+
|
|
101
|
+
# SAFE: Using minimal base images
|
|
102
|
+
FROM alpine:3.19
|
|
103
|
+
FROM gcr.io/distroless/nodejs18
|
|
104
|
+
FROM scratch # Empty base image
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### COPY vs ADD
|
|
108
|
+
|
|
109
|
+
```dockerfile
|
|
110
|
+
# VULNERABLE: ADD can auto-extract and fetch URLs
|
|
111
|
+
ADD https://example.com/file.tar.gz /app/ # Downloads from URL
|
|
112
|
+
ADD archive.tar.gz /app/ # Auto-extracts
|
|
113
|
+
|
|
114
|
+
# SAFE: COPY is more explicit
|
|
115
|
+
COPY archive.tar.gz /app/
|
|
116
|
+
RUN tar -xzf /app/archive.tar.gz && rm /app/archive.tar.gz
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Exposed Ports
|
|
120
|
+
|
|
121
|
+
```dockerfile
|
|
122
|
+
# CHECK: Are all exposed ports necessary?
|
|
123
|
+
EXPOSE 22 # FLAG: SSH in container usually unnecessary
|
|
124
|
+
EXPOSE 3306 # FLAG: Database port exposed
|
|
125
|
+
EXPOSE 80 443 8080 9090 5000 # CHECK: Multiple ports
|
|
126
|
+
|
|
127
|
+
# SAFE: Only expose what's needed
|
|
128
|
+
EXPOSE 8080
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Image Scanning
|
|
134
|
+
|
|
135
|
+
### Vulnerability Patterns
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Scan for vulnerabilities
|
|
139
|
+
docker scan myimage
|
|
140
|
+
trivy image myimage
|
|
141
|
+
grype myimage
|
|
142
|
+
|
|
143
|
+
# Check for secrets in image
|
|
144
|
+
trufflehog docker --image myimage
|
|
145
|
+
# Or manually inspect layers
|
|
146
|
+
docker history --no-trunc myimage
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### High-Risk Packages
|
|
150
|
+
|
|
151
|
+
```dockerfile
|
|
152
|
+
# FLAG: Packages that increase attack surface
|
|
153
|
+
RUN apt-get install -y \
|
|
154
|
+
openssh-server \ # SSH access
|
|
155
|
+
sudo \ # Privilege escalation
|
|
156
|
+
netcat \ # Network tools
|
|
157
|
+
nmap \ # Network scanning
|
|
158
|
+
gcc make \ # Compilers (should be in build stage only)
|
|
159
|
+
python3-pip # Package managers (install deps, then remove)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Runtime Security
|
|
165
|
+
|
|
166
|
+
### Privileged Mode
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# VULNERABLE: Running privileged (full host access)
|
|
170
|
+
docker run --privileged myimage
|
|
171
|
+
|
|
172
|
+
# VULNERABLE: Dangerous capabilities
|
|
173
|
+
docker run --cap-add=ALL myimage
|
|
174
|
+
docker run --cap-add=SYS_ADMIN myimage
|
|
175
|
+
docker run --cap-add=NET_ADMIN myimage
|
|
176
|
+
|
|
177
|
+
# SAFE: Drop all capabilities, add only needed
|
|
178
|
+
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myimage
|
|
179
|
+
|
|
180
|
+
# SAFE: Read-only root filesystem
|
|
181
|
+
docker run --read-only myimage
|
|
182
|
+
|
|
183
|
+
# SAFE: No new privileges
|
|
184
|
+
docker run --security-opt=no-new-privileges myimage
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Volume Mounts
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# VULNERABLE: Mounting sensitive host paths
|
|
191
|
+
docker run -v /:/host myimage # Entire host filesystem
|
|
192
|
+
docker run -v /etc:/etc myimage # Host config files
|
|
193
|
+
docker run -v /var/run/docker.sock:/var/run/docker.sock # Docker socket
|
|
194
|
+
|
|
195
|
+
# VULNERABLE: Writable mounts of sensitive paths
|
|
196
|
+
docker run -v /etc/passwd:/etc/passwd myimage
|
|
197
|
+
|
|
198
|
+
# SAFE: Specific paths, read-only where possible
|
|
199
|
+
docker run -v /app/data:/data:ro myimage
|
|
200
|
+
docker run -v myvolume:/app/data myimage # Named volume
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Docker Socket Access
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# CRITICAL: Docker socket mount = root on host
|
|
207
|
+
docker run -v /var/run/docker.sock:/var/run/docker.sock myimage
|
|
208
|
+
# Container can create privileged containers, access host
|
|
209
|
+
|
|
210
|
+
# If required, use read-only and restrict with authz plugin
|
|
211
|
+
# Or use Docker API proxy with limited permissions
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Network Security
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# VULNERABLE: Host network mode
|
|
218
|
+
docker run --network=host myimage # No network isolation
|
|
219
|
+
|
|
220
|
+
# SAFE: User-defined networks with isolation
|
|
221
|
+
docker network create --internal internal-net # No external access
|
|
222
|
+
docker run --network=internal-net myimage
|
|
223
|
+
|
|
224
|
+
# SAFE: Restrict inter-container communication
|
|
225
|
+
docker network create --driver=bridge --opt com.docker.network.bridge.enable_icc=false isolated
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Resource Limits
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# VULNERABLE: No resource limits (DoS risk)
|
|
232
|
+
docker run myimage
|
|
233
|
+
|
|
234
|
+
# SAFE: Set memory and CPU limits
|
|
235
|
+
docker run --memory=512m --cpus=1 myimage
|
|
236
|
+
|
|
237
|
+
# SAFE: Limit processes
|
|
238
|
+
docker run --pids-limit=100 myimage
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Docker Compose Security
|
|
244
|
+
|
|
245
|
+
### Secrets Management
|
|
246
|
+
|
|
247
|
+
```yaml
|
|
248
|
+
# VULNERABLE: Secrets in environment
|
|
249
|
+
services:
|
|
250
|
+
app:
|
|
251
|
+
environment:
|
|
252
|
+
- DB_PASSWORD=mysecret
|
|
253
|
+
- API_KEY=sk-12345
|
|
254
|
+
|
|
255
|
+
# SAFE: Use secrets
|
|
256
|
+
services:
|
|
257
|
+
app:
|
|
258
|
+
secrets:
|
|
259
|
+
- db_password
|
|
260
|
+
environment:
|
|
261
|
+
- DB_PASSWORD_FILE=/run/secrets/db_password
|
|
262
|
+
|
|
263
|
+
secrets:
|
|
264
|
+
db_password:
|
|
265
|
+
external: true # Or file: ./secrets/db_password
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Privilege Restrictions
|
|
269
|
+
|
|
270
|
+
```yaml
|
|
271
|
+
# SAFE: Security options in compose
|
|
272
|
+
services:
|
|
273
|
+
app:
|
|
274
|
+
image: myimage
|
|
275
|
+
user: "1000:1000"
|
|
276
|
+
read_only: true
|
|
277
|
+
security_opt:
|
|
278
|
+
- no-new-privileges:true
|
|
279
|
+
cap_drop:
|
|
280
|
+
- ALL
|
|
281
|
+
cap_add:
|
|
282
|
+
- NET_BIND_SERVICE
|
|
283
|
+
tmpfs:
|
|
284
|
+
- /tmp
|
|
285
|
+
deploy:
|
|
286
|
+
resources:
|
|
287
|
+
limits:
|
|
288
|
+
memory: 512M
|
|
289
|
+
cpus: '1'
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Network Isolation
|
|
293
|
+
|
|
294
|
+
```yaml
|
|
295
|
+
# SAFE: Internal networks for backend services
|
|
296
|
+
services:
|
|
297
|
+
frontend:
|
|
298
|
+
networks:
|
|
299
|
+
- public
|
|
300
|
+
- internal
|
|
301
|
+
|
|
302
|
+
backend:
|
|
303
|
+
networks:
|
|
304
|
+
- internal # Not accessible from outside
|
|
305
|
+
|
|
306
|
+
database:
|
|
307
|
+
networks:
|
|
308
|
+
- internal
|
|
309
|
+
|
|
310
|
+
networks:
|
|
311
|
+
public:
|
|
312
|
+
internal:
|
|
313
|
+
internal: true # No external access
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## .dockerignore
|
|
319
|
+
|
|
320
|
+
### Required Exclusions
|
|
321
|
+
|
|
322
|
+
```dockerignore
|
|
323
|
+
# SAFE: Exclude sensitive files
|
|
324
|
+
.env
|
|
325
|
+
.env.*
|
|
326
|
+
*.pem
|
|
327
|
+
*.key
|
|
328
|
+
id_rsa*
|
|
329
|
+
secrets/
|
|
330
|
+
credentials/
|
|
331
|
+
.git/
|
|
332
|
+
.gitignore
|
|
333
|
+
.dockerignore
|
|
334
|
+
Dockerfile
|
|
335
|
+
docker-compose*.yml
|
|
336
|
+
*.log
|
|
337
|
+
node_modules/
|
|
338
|
+
__pycache__/
|
|
339
|
+
.pytest_cache/
|
|
340
|
+
coverage/
|
|
341
|
+
.nyc_output/
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Missing .dockerignore
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# FLAG: No .dockerignore may copy secrets into image
|
|
348
|
+
# Check if .env, keys, or credentials are copied
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Registry Security
|
|
354
|
+
|
|
355
|
+
### Image Pull Policy
|
|
356
|
+
|
|
357
|
+
```yaml
|
|
358
|
+
# VULNERABLE: Always pulling latest
|
|
359
|
+
image: myregistry/myimage:latest
|
|
360
|
+
|
|
361
|
+
# VULNERABLE: No digest verification
|
|
362
|
+
image: myregistry/myimage:1.0
|
|
363
|
+
|
|
364
|
+
# SAFE: Pinned with digest
|
|
365
|
+
image: myregistry/myimage@sha256:abc123...
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Private Registry Auth
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
# VULNERABLE: Credentials in plain text
|
|
372
|
+
docker login -u user -p password registry.example.com
|
|
373
|
+
|
|
374
|
+
# SAFE: Use credential helpers
|
|
375
|
+
# ~/.docker/config.json
|
|
376
|
+
{
|
|
377
|
+
"credHelpers": {
|
|
378
|
+
"gcr.io": "gcloud",
|
|
379
|
+
"*.dkr.ecr.*.amazonaws.com": "ecr-login"
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Grep Patterns for Dockerfiles
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# Running as root
|
|
390
|
+
grep -rn "^USER" Dockerfile || echo "No USER directive - runs as root"
|
|
391
|
+
|
|
392
|
+
# Secrets in environment
|
|
393
|
+
grep -rn "^ENV.*PASSWORD\|^ENV.*SECRET\|^ENV.*KEY\|^ENV.*TOKEN" Dockerfile
|
|
394
|
+
|
|
395
|
+
# Secrets in build args
|
|
396
|
+
grep -rn "^ARG.*PASSWORD\|^ARG.*SECRET\|^ARG.*KEY" Dockerfile
|
|
397
|
+
|
|
398
|
+
# Latest tags
|
|
399
|
+
grep -rn "FROM.*:latest\|FROM.*@" Dockerfile | grep -v "@sha256"
|
|
400
|
+
|
|
401
|
+
# Privileged instructions
|
|
402
|
+
grep -rn "^ADD\|EXPOSE 22\|apt-get install.*ssh" Dockerfile
|
|
403
|
+
|
|
404
|
+
# Missing cleanup
|
|
405
|
+
grep -rn "apt-get install" Dockerfile | grep -v "rm -rf"
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Testing Checklist
|
|
411
|
+
|
|
412
|
+
- [ ] Container runs as non-root user
|
|
413
|
+
- [ ] Base image is pinned with digest
|
|
414
|
+
- [ ] No secrets in image layers (ENV, ARG, COPY)
|
|
415
|
+
- [ ] Multi-stage build for secrets/build tools
|
|
416
|
+
- [ ] Minimal base image (alpine, distroless)
|
|
417
|
+
- [ ] Package manager cache cleaned
|
|
418
|
+
- [ ] .dockerignore excludes sensitive files
|
|
419
|
+
- [ ] No --privileged or dangerous capabilities
|
|
420
|
+
- [ ] No Docker socket mount
|
|
421
|
+
- [ ] Resource limits configured
|
|
422
|
+
- [ ] Network isolation configured
|
|
423
|
+
- [ ] Image scanned for vulnerabilities
|
|
424
|
+
- [ ] Read-only root filesystem where possible
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## References
|
|
429
|
+
|
|
430
|
+
- [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
|
|
431
|
+
- [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
|
|
432
|
+
- [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)
|