Speckit.devops
bro-skills - Spec-Driven Development CLI
npx -y skills add wedabro/bro-skills --skill speckit.devopsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Docker Infrastructure & Security Hardening Specialist β Port ENV-first.
SKILL.md
3.1 KB, 767 tokens by cl100k_base, as published. Nobody here has run it
π― Mission
Set up and manage a standardized and secure Docker system for the project. Published ports MUST always be configured via environment variables.
π₯ Input
.agent/memory/constitution.md(port range, security rules)- Existing
Dockerfile,docker-compose.yml(if available) .env.example
π Protocol
1. Port Allocation (ENV-first) β
ALWAYS configure ports via ENV:
.envfile (local) or server ENV (production)docker-compose.ymlreads:"${PUBLIC_PORT}:${WEB_CONTAINER_PORT}"- Document required port variables in
.env.example; do not hide missing configuration behind a fixed fallback. - CRITICAL: If
.envor system environment already has port variables defined (e.g.PUBLIC_PORT,ADMIN_PORT,API_PORTor equivalents), ABSOLUTELY SKIP port scanning/assignment and NEVER overwrite the existing port configuration.
Port scanning rules according to environment:
| Environment | Existing Ports in .env? | Docker running? | Act |
|---|---|---|---|
| Any | β Yes | Any | SKIP scan β use existing ports, DO NOT overwrite |
| Local | β No | β No (first time) | Scan available ports with socket/helper β select 3 consecutive empty ports |
| Local | β No | β Already running | SKIP scan β use current ports from docker/containers |
| Staging/Beta/Prod | β No | Any | ALWAYS initial scan for configuration β write to .env |
Check Docker is running (Local):
docker compose ps --format json 2>$null
# There are containers β SKIP port scan
# Empty/error β RUN port scan
- Pattern: Public FE
Nβ Admin FEN+1β Backend APIN+2
2. Local Docker (docker-compose.yml):
- Published and container ports read from ENV:
"${PUBLIC_PORT}:${WEB_CONTAINER_PORT}" - Volume mounts cho hot-reload code
- Named volumes for
node_modules(avoid host-container lock) - Health checks for each service
3. Production Docker (docker-compose.prod.yml):
- Multi-stage builds (builder β runner)
USER nodeorUSER appuser(DO NOT run as root)- Remove devDependencies in the final image
- Alpine/Slim base images
- Ports read from ENV (NO hard-code)
4. Security Checklist:
.dockerignore: block.env,.git,node_modules- No hard-code secrets in Dockerfile
- Only EXPOSE ports are needed
5. Documentation:
- Update
.agent/knowledge_base/infrastructure.mdwith the results - Update
.env.examplewith all port vars
π€ Output
- Files:
Dockerfile,docker-compose.yml,docker-compose.prod.yml,.dockerignore - Config:
.env(ports),.env.example(documented) - Doc:
.agent/knowledge_base/infrastructure.md(updated)
π« Guard Rails
- Flexibly configure ports via environment variables (.env) to avoid conflicts.
- DO NOT hard-code port numbers β ALWAYS use ENV vars.
- DO NOT run
docker compose down -von production. - DO NOT hard-code credentials into the Dockerfile.
- DO NOT scan ports when Docker local is already running (with containers).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most ship operate skills give in 767 tokens
Counted across 779 of the 1,178 authors here whose files we hold, read 2026-08-07
- Document a rollback plan before deploymentin 41 of 779, across 22 files
- Update the changelogin 21 of 779, across 19 files
- Run the test suitein 20 of 779
- Create an annotated git tagin 20 of 779
- Clean up feature flags after full rolloutin 18 of 779, across 10 files
- Verify deployment health after launchin 18 of 779, across 10 files
- Test both feature flag statesin 17 of 779, across 9 files
- Verify the working tree is cleanin 17 of 779
- Make database migrations backward-compatiblein 16 of 779, across 8 files
- Set up error monitoring before launchin 15 of 779, across 7 files
- Monitor metrics at each rollout stagein 14 of 779, across 5 files
- Create a GitHub releasein 14 of 779
Said here and by no other author read
- configure published ports via environment variables
- never overwrite existing port configuration
- scan available ports if none are configured
- use named volumes for node_modules
- create a .dockerignore file
- update infrastructure documentation with results
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.