Complete dockerfile toolkit with generation and validation capabilities
94
94%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
{
"context": "Agent identifies multi-stage build opportunity for a Go application and produces an optimised Dockerfile using a named build stage and distroless or Alpine final image.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Multi-stage build opportunity identified",
"description": "Agent correctly identifies that Go produces a statically compiled binary and the build toolchain (golang:1.21 ~900MB) does not need to be in the final image.",
"max_score": 20
},
{
"name": "Named AS build stage used",
"description": "Proposed Dockerfile uses 'FROM golang:1.21 AS build' and then a separate final FROM stage with COPY --from=build.",
"max_score": 25
},
{
"name": "Minimal final base image chosen",
"description": "Final stage uses gcr.io/distroless/base-debian12, distroless/static, or alpine:3.x rather than the full golang image.",
"max_score": 20
},
{
"name": "Image size reduction estimate provided",
"description": "Agent provides a reasonable estimate of image size reduction (e.g., from ~900MB to ~20-30MB for distroless static) and explains why the toolchain layers are dropped.",
"max_score": 15
},
{
"name": "--target build debugging benefit explained",
"description": "Agent explains that named stages allow 'docker build --target build' to access the intermediate build stage for CI debugging without exposing the final runtime image.",
"max_score": 10
},
{
"name": "Security improvements noted",
"description": "Agent notes that distroless images have no shell, package manager, or unnecessary system libraries, reducing the attack surface.",
"max_score": 10
}
]
}