brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
progenUse when the user wants to create/generate/scaffold a new Spring Boot project (Maven or Gradle, REST API / Web App / Spring Boot + Angular full stack). Derives progen CLI inputs from the user's plain-English project description, asks for any missing mandatory info, ensures the progen binary is available, and runs it to generate the project. If the user asks…
Independent GitHub snapshot · Automated classification · Original documentation governs
progen is an offline, single-binary Go CLI (https://github.com/sivaprasadreddy/progen) that
scaffolds a complete, production-ready Spring Boot project: build files, Java source, tests,
Docker Compose, GitHub Actions, DB migrations, security, and more.
This skill's job: turn a user's description of the app they want into a .progen.json config,
fill gaps by asking the user, run progen to generate the project, and — if the user asked for
anything progen can't do natively — layer that on afterward by editing the generated code.
progen is availableCheck for a working binary:
progen --version
If not found (or version looks outdated and the user wants latest), download the right asset for the current OS/arch from the latest release:
# Example for macOS arm64 — adapt OS/ARCH from `uname -s` / `uname -m`
curl -L -o progen.tar.gz \
"https://github.com/sivaprasadreddy/progen/releases/latest/download/progen_<os>_<arch>.tar.gz"
tar -xzf progen.tar.gz
chmod +x progen
sudo mv progen /usr/local/bin/ # or anywhere on PATH
progen --version
If the exact asset naming isn't obvious, fetch the releases page
(https://github.com/sivaprasadreddy/progen/releases) to find the correct filename for the
user's OS/architecture before downloading. If a Go toolchain is available, go install github.com/sivaprasadreddy/progen@latest also works and avoids the asset-naming problem
entirely.
On macOS, downloaded binaries may trigger a Gatekeeper "cannot be opened because the developer
cannot be verified" error — tell the user to right-click → Open once in Finder to approve it (or
xattr -d com.apple.quarantine progen if working non-interactively is fine with them).
.progen.json)progen takes no scaffolding info via flags — everything goes through a JSON config file
consumed as progen -c <file> (interactive prompts are the only other input path, and are not
used by this skill). Field names below are exactly as marshaled to JSON (Go field names,
capitalized).
| Field | Type / allowed values | Default | Required |
|---|---|---|---|
AppName | string (used as output directory name) | myapp | Yes — ask if not derivable |
GroupID | string, e.g. com.mycompany | com.mycompany | Yes — ask if not derivable |
ArtifactID | string, e.g. boot-demo | myapp | Yes — ask if not derivable |
AppVersion | string, e.g. 1.0.0 | 1.0.0 | No |
BasePackage | string, e.g. com.mycompany.myapp | derived from GroupID+ArtifactID | No |
AppType | "REST API" | "Web App" | "Spring Boot + Angular Full Stack" | "REST API" | No (but shapes many other choices) |
BuildTool | "Maven" | "Gradle" | "Maven" | No |
PersistenceType | "Spring Data JPA" | "Spring JdbcClient" | "jOOQ" | "Spring Data JPA" | No |
DbType | "PostgreSQL" | "MySQL" | "MariaDB" | "PostgreSQL" | No |
DbMigrationTool | "Flyway" | "Liquibase" | "Flyway" | No |
SpringCloudAWSSupport | bool | false | No |
ThymeleafSupport | bool — set automatically to true when AppType is "Web App"; leave false otherwise | false | No (don't ask; derive from AppType) |
HTMXSupport | bool — only meaningful when AppType is "Web App" | false | No |
EmailSupport | bool | false | No |
RabbitMQSupport | bool | false | No |
RedisCachingSupport | bool | false | No |
OpenTelemetrySupport | bool | false | No |
K8sSupport | bool — generates Kubernetes manifests | false | No |
Notes:
.editorconfig/AI-assistant config files are always generated — there's no toggle for them."Spring Boot + Angular Full Stack" additionally scaffolds an Angular + TailwindCSS frontend; HTMXSupport and ThymeleafSupport don't apply to it.progen init, which writes a .progen.json pre-filled with the defaults above into the current directory.Read the user's description and map it onto the fields above:
GroupID), or repo-style slug (→ ArtifactID, AppName). If genuinely absent, this is mandatory — ask (see Step 4).RestApi. "website", "server-rendered pages", "HTMX" → WebApp (and set HTMXSupport if HTMX is mentioned). "Angular", "SPA", "single page app" → SpringBootAngularFullStack.Maven.SpringDataJPA; "JdbcClient"/"plain JDBC"/"no ORM" → SpringJdbcClient; "jOOQ" → SpringJOOQ.PostgreSQL; "MySQL" → MySQL; "MariaDB" → MariaDB.Flyway; "Liquibase" → Liquibase.SpringCloudAWSSupport;EmailSupport;RabbitMQSupport;RedisCachingSupport;OpenTelemetrySupport;K8sSupport.Only pause to ask when AppName, GroupID, or ArtifactID cannot be reasonably derived from
the description (progen's own prompt flow treats these three as required; everything else has a sane default). Ask concisely, e.g.:
What should the app/artifact be called, and what's the group id (e.g.
com.acme)?
Don't ask about AppType, BuildTool, PersistenceType, DbType, DbMigrationTool, or the feature booleans — apply the Step 3 mapping and fall back to defaults silently.
Write the derived config to a .progen.json file, then run progen non-interactively:
cat > .progen.json <<'EOF'
{
"AppType": "REST API",
"AppName": "orders-service",
"GroupID": "com.acme",
"ArtifactID": "orders-service",
"AppVersion": "1.0.0",
"BasePackage": "com.acme.ordersservice",
"BuildTool": "Maven",
"PersistenceType": "Spring Data JPA",
"DbType": "PostgreSQL",
"DbMigrationTool": "Flyway",
"SpringCloudAWSSupport": false,
"ThymeleafSupport": false,
"HTMXSupport": false,
"EmailSupport": false,
"RabbitMQSupport": false,
"RedisCachingSupport": false,
"OpenTelemetrySupport": false,
"K8sSupport": false
}
EOF
progen -c .progen.json
This creates a new directory named after AppName containing the generated project (and drops a copy of the resolved config as <AppName>/.progen.json).
Any invalid enum value is replaced with its default and a WARNING: is printed — check the command output for these.
progen only knows the fields in Step 2's table. If the user asked for something outside that list (e.g. GraphQL, a specific cloud provider integration beyond Spring Cloud AWS, a particular auth provider, gRPC, a non-listed database, CI platform other than GitHub Actions):
BasePackage, the chosen persistence/build tool, existing test setup, etc.).Don't block project generation waiting on unsupported-feature design decisions — scaffold first, layer the custom feature on top second.