util-projectinit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited util-projectinit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Bootstrap a new CO2 project by transforming a free-form prompt or markdown brief into the three foundational documents at the project root:
CLAUDE.md — canonical project context: project detail, terminology, infrastructure,applications, port allocation, modules, rules.
DEVTOOL.md — skeleton of the local development tools the inferred technology stack will need(JDK, Maven, Node, PNPM, database/queue CLIs, kubectl, etc.).
ENVIRONMENT.md — skeleton of local environment variables and credentials for everysupporting 3rd party application and external service declared in CLAUDE.md.
This skill is the first skill in the CO2 workflow. Once these three files exist, downstream skills (util-projectsync, util-preparek8senv, modelgen-*, mockgen-*, specgen-*, testgen-*, conductor-*) can take over.
This skill accepts a single optional argument:
/util-projectinit [prompt-or-markdown-path]| Argument | Required | Example | Description |
|---|---|---|---|
<input> | No | "A universal recruitment platform between countries" or ./brief.md | Free-form prompt OR path to a markdown file describing the project |
.md, .markdown or .txt extension (relative to the project root or absolute) → read it as the brief.Before doing any analysis, inspect the project root:
| File | Action |
|---|---|
CLAUDE.md exists | Stop. Print: "CLAUDE.md already exists at the project root. This skill only initializes a new project. To evolve an existing CLAUDE.md, use `util-projectsync` (sync folders/modules) or edit it manually." |
DEVTOOL.md exists | Warn and skip generation of DEVTOOL.md. Do not overwrite. |
ENVIRONMENT.md exists | Warn and skip generation of ENVIRONMENT.md. Do not overwrite. |
The skill is non-destructive: it never overwrites an existing root-level CLAUDE.md, DEVTOOL.md or ENVIRONMENT.md. If all three files exist, stop after printing the existence summary.
Parse the prompt or markdown file and extract / infer the following. Where the brief is ambiguous, prefer a sensible default and emit a [TODO] annotation in the generated file rather than blocking the workflow.
#### 1a. Project Metadata
URP for"Universal Recruitment Platform", HMS for "Hospital Management System"). 3–5 letters preferred. If the brief gives one, use it verbatim.
problem statements in the brief into outcome-oriented goal statements.
Extract from the brief; include obvious additions (e.g., IC: Industrial Classification) only when the brief mentions the concept.
#### 1b. Infrastructure Inference
From the brief, infer the 3rd party supporting applications the project needs. Apply this heuristic table (these are starting points — adjust to what the brief actually says):
| Capability in brief | Default 3rd party application |
|---|---|
| Email / notifications | SMTP Server — Mailcatcher (dev) |
| Document upload, files, attachments | File Storage — MinIO |
| Caching, session, rate-limit | Cache — Redis |
| Unstructured / document data, JSON, profiles | Document Database — MongoDB |
| Structured / relational data, transactions | Relational Database — MySQL or PostgreSQL |
| User login, SSO, OIDC, roles | Single Sign On — Keycloak |
| Inter-service async messaging, events | Message Queue — RabbitMQ |
| Full-text search | Search — Meilisearch |
| API gateway, rate-limit at edge | API Gateway — Kong |
| Background jobs, scheduling | (handled by custom apps; no 3rd party unless the brief says so) |
Pick the minimum set that satisfies the brief. Do not invent infrastructure the brief did not imply. For every 3rd party application picked:
CLAUDE.md (## <Name>, technology &version bullet, optional Databases: / Buckets: / Vhosts: bullets, optional Depends on: bullet).
Hub Core Database, Hub Support Database,HC Database, SC Database) when the brief implies multiple bounded contexts.
vhosts** as sub-bullets so they survive into ENVIRONMENT.md.
#### 1c. External Services Inference
External services are SaaS or remote APIs the project consumes but does not deploy itself:
If the brief mentions any of these, declare them under a ## External Services sub-section inside # Supporting 3rd Party Applications (see reference layout — ## External Services sits as a sibling sub-heading under the 3rd party section). Each service becomes a ## <Service Name> heading immediately under ## External Services.
If none are implied, omit ## External Services (do not insert a stub).
#### 1d. Custom Application Inference
From the brief, infer the custom applications the project will deliver. Heuristic:
primary domain (e.g., Hub Middleware, Order Service, Booking Core).
parties (e.g., Hiring Country ↔ Source Country, B2B partners). Each side gets its own adapter, named with a side prefix (HC Adapter, SC Adapter).
platform. Pair each SDK with the adapter it wraps (HC Adapter SDK, SC Adapter SDK).
For each custom application, write:
## <Application Name> heading.Depends on: bulleted list referencing the 3rd party applications, external services orother custom applications it relies on. Match the dependency names exactly to the ## <Name> headings used elsewhere in CLAUDE.md so util-projectsync validation passes.
#### 1e. Port Allocation
Assign one local port per server-style custom application (backends, portals, adapters, gateways — not SDK libraries). Group by tier when the brief describes tiers (Public / Hub / HC / SC, or Frontend / Backend, etc.):
| Tier | Port Range |
|---|---|
| Public Layer | 8080 |
| Tier 1 / Hub Layer | 9001–9019 |
| Tier 2 / HC Layer | 9020–9039 |
| Tier 3 / SC Layer | 9040–9059 |
If the project has no tier split, allocate sequential ports from 8080 upward.
Emit the allocation as the same markdown table format used in the reference CLAUDE.md, with a Sub Domain column. The sub-domain follows the pattern <type-abbr>-<tier-abbr>-<project-code-lower> (e.g., mw-hub-urp, sup-hub-urp, ad-hc-urp, ad-sc-urp). If no clear pattern fits, use the application snake_case name as the sub-domain.
#### 1f. Module Inference
CO2 distinguishes two module tiers — System Modules (cross-cutting, framework-level) and Business Modules (domain-specific).
System Modules — default seven. Always include all seven unless the brief makes one clearly inapplicable. Use these names verbatim so downstream skills recognise them:
| Module | Always include unless… |
|---|---|
| Authentication and Authorization | Brief says no users (rare). |
| User | Brief says no users (rare). |
| Notification | Brief explicitly says no notifications. |
| Activities | Brief says no audit need (rare). |
| Audit Trail | Brief says no audit need (rare). |
| Document Management | Brief says no documents/files. |
| Batch Job | Brief says no scheduled jobs. |
Business Modules — derive from the brief. Extract every domain concept that warrants its own bounded context: entities, workflows, taxonomies, sync operations. Common patterns:
Dashboard module if any user-facing portal is mentioned.Location Information module if geography (countries, cities, postcodes) appears.Employer, Candidate Profile, Job Demand, …).Employer Sync, Recruitment Agent Sync).News and Announcement module if the brief mentions broadcast content.Support Ticket module if the brief mentions support / help desk.Each module becomes a ### <Module Name> heading (three hashes) under either ## System Module or ## Business Module (which themselves sit under # Modules). The body is a one-line description of what the module covers — short enough that util-projectsync later expands it into PRD.md skeletons.
#### 1g. Technology Stack Inference (for DEVTOOL.md)
From the inferred applications, decide which tools DEVTOOL.md must list. Apply this mapping (starting points — extend if the brief calls out a specific stack):
| Custom app technology | DEVTOOL.md entries |
|---|---|
| Spring Boot / Java backend | JDK (Azul Zulu 21), Maven 3.9, Docker Hub |
| Laravel / PHP backend | PHP 8.3, Composer 2.x, Docker Hub |
| Node.js / TypeScript backend or CLI | NVM, Node.js 22 LTS, PNPM 10 |
| React / Vue / Angular SPA | NVM, Node.js 22 LTS, PNPM 10 |
| Flutter mobile / desktop | FVM, Flutter (resolved by FVM) |
| Python service | Python 3.x |
For every 3rd party application picked in step 1b, add the matching CLI:
| 3rd party app | DEVTOOL.md CLI entry |
|---|---|
| MySQL / MariaDB | MySQL Shell |
| MongoDB | Mongo Shell (mongosh) |
| PostgreSQL | psql |
| Redis | Redis CLI (rdcli) |
| RabbitMQ | RabbitMQ Admin CLI (rabbitmqadmin) |
| MinIO / S3 | S3 Compatible CLI (mc) |
| Keycloak | Keycloak CLI (kc), Keycloak Admin CLI (kcadm), Keycloak Registration CLI (kcreg) |
| Firebase Cloud Messaging | Firebase CLI |
If a Kubernetes target is mentioned anywhere in the brief, include Kubectl.
For tool versions and paths, use placeholder values (see DEVTOOL.md template) — the developer fills them in for their machine. Do not copy paths from the reference file; those are Windows-specific to one developer.
Write CLAUDE.md at the project root using the CLAUDE.md Template (below), substituting the analysis from step 1. Order of top-level sections is fixed:
# Context# Project Detail# Goals# Terminology# Development Tool (link to DEVTOOL.md)# Environment (link to ENVIRONMENT.md; no per-environment sub-sections in this skill —environments are added later by util-preparek8senv)
# Supporting 3rd Party Applications (with ## External Services sub-section if any)# Custom Applications# Port Allocation# Modules (## System Module then ## Business Module)# Application Folder structure# RulesFor empty sections (e.g., no external services, no business modules) use the **No <category>** for this project since … sentence pattern shown in the project root CLAUDE.md, not an empty section.
If DEVTOOL.md already exists at the project root, skip this step and log a warning.
Otherwise write DEVTOOL.md using the DEVTOOL.md Template (below). Include only the toolchain entries derived from step 1g. Every version, path and credential field is a placeholder (<version>, <path>, <to be filled by developer>) — DEVTOOL.md is per-developer and machine-specific.
If ENVIRONMENT.md already exists at the project root, skip this step and log a warning.
Otherwise write ENVIRONMENT.md using the ENVIRONMENT.md Template (below). The structure mirrors CLAUDE.md's 3rd party application and external services list:
# External Services — one ## <Service> sub-section per external service from step 1c,with the credential keys appropriate to the service (API Key, Project ID, etc.) all set to <to be filled by developer>.
# Environment — one ## <Application Name> sub-section per 3rd party application fromstep 1b. Use the Technology-Specific Config Fields table from util-preparek8senv (reproduced below in the ENVIRONMENT.md template) to choose which keys to include. All values default to placeholders or technology defaults (e.g., RabbitMQ user/password guest/guest, no auth for Redis/MongoDB unless the brief implies otherwise).
util-projectinit writes only the localhost / single-developer skeleton. Multi-environment sections (e.g., Home Server, Kubernetes targets) are added later by util-preparek8senv when the developer chooses a deployment target. Do not wrap services in a # <Environment Name> heading here — the top-level # Environment heading is sufficient for the skeleton.
Print a single summary block:
## Project Init Summary
### Project Detail
| Field | Value |
|-------|-------|
| Project Code | URP |
| Project Name | Universal Recruitment Platform |
| Description | <one-line> |
### Inferred Infrastructure
| Category | Count | Names |
|----------|-------|-------|
| 3rd Party Applications | 8 | SMTP Server, Hub File Storage, Hub Cache, Hub Core Database, Hub Support Database, Hub Single Sign On, HC Adapter Message Queue, SC Adapter Message Queue |
| External Services | 0 | — |
| Custom Applications | 6 | Hub Middleware, Hub Support Portal, HC Adapter, HC Adapter SDK, SC Adapter, SC Adapter SDK |
| System Modules | 7 | Authentication and Authorization, User, Notification, Activities, Audit Trail, Document Management, Batch Job |
| Business Modules | 14 | Dashboard, Location Information, Corridor, Recruitment Step, Employer, Recruitment Agent, … |
### Port Allocation
| Port | Application | Sub Domain |
|------|-------------|------------|
| 9001 | Hub Middleware | mw-hub-urp |
| 9002 | Hub Support Portal | sup-hub-urp |
| 9020 | HC Adapter | ad-hc-urp |
| 9040 | SC Adapter | ad-sc-urp |
### Files Generated
| File | Status | Notes |
|------|--------|-------|
| CLAUDE.md | Created | — |
| DEVTOOL.md | Created | JDK, Maven, Node, PNPM, MySQL Shell, mongosh, rdcli, rabbitmqadmin, mc, Keycloak CLIs, Kubectl |
| ENVIRONMENT.md | Created | 8 services, 0 external services |
### Next Steps
1. Fill in DEVTOOL.md version and path fields for your machine.
2. Fill in ENVIRONMENT.md credentials and any `<to be filled by developer>` values.
3. Review CLAUDE.md and adjust any `[TODO]` annotations.
4. Run `/util-projectsync` to scaffold per-application folders, PRD.md and BUG.md files.
5. (Optional) Run `/util-preparek8senv <env>` to generate K8s manifests for 3rd party services.If any of the three files were skipped because they already existed, mark their row in the Files Generated table as Skipped (already exists) and omit the corresponding "Next Steps" sub-step.
When generating CLAUDE.md, use this structure verbatim, substituting {{...}} placeholders.
# Context
- This document is for coding agent to understand the project as a whole, including the project detail, goals and terminology.
- This document will be used as reference in any of the tasks related to this project.
- This document also contain the development environment deployment strategy ONLY. Local and production deployment strategy will be handled separately and not included in this document.
# Project Detail
- Project Code: {{PROJECT_CODE}}
- Project Name: {{PROJECT_NAME}}
- Project Description: {{PROJECT_DESCRIPTION}}
# Goals
{{#each GOALS}}
- {{this}}
{{/each}}
# Terminology
{{#each TERMS}}
- {{name}}: {{definition}}
{{/each}}
# Development Tool
- Refer to [DEVTOOL.md](DEVTOOL.md) for all the development tools to be used by AI coding agent to build and execute applications developed in this project.
- **Load all the information in this section into the context window of the AI coding agent, as it will be used as reference for building and executing the applications in this project.**
# Environment
- Refer to [ENVIRONMENT.md](ENVIRONMENT.md) for the local environment variables and credentials used for this project.
- **Load all the information in this section into the context window of the AI coding agent, as it will be used as reference for building and executing the applications in this project.**
# Supporting 3rd Party Applications
- Below are the list of 3rd party applications which will be used as part of this project:
{{#each THIRD_PARTY_APPS}}
## {{name}}
- {{technology}} version {{version}}.
{{#if databases}}
- Databases:
{{#each databases}}
- {{this}}
{{/each}}
{{/if}}
{{#if buckets}}
- Buckets:
{{#each buckets}}
- {{this}}
{{/each}}
{{/if}}
{{#if dependsOn}}
- Depends on:
{{#each dependsOn}}
- {{this}}
{{/each}}
{{/if}}
{{/each}}
{{#if EXTERNAL_SERVICES}}
## External Services
{{#each EXTERNAL_SERVICES}}
## {{name}}
- {{description}}
{{/each}}
{{/if}}
# Custom Applications
- Below are the list of applications which will be custom developed as part of this project.:
{{#each CUSTOM_APPS}}
## {{name}}
- {{description}}
{{#if dependsOn}}
- Depends on:
{{#each dependsOn}}
- {{this}}
{{/each}}
{{/if}}
{{/each}}
# Port Allocation
- Each application runs on a unique port to avoid conflicts during local development.
- Port ranges are grouped by layer:
{{#each TIERS}}
- {{name}}: {{range}}
{{/each}}
| Port | Application | Sub Domain |
|------|------------------------|--------------|
{{#each PORT_ROWS}}
| {{port}} | {{application}} | {{subDomain}} |
{{/each}}
# Modules
## System Module
{{#each SYSTEM_MODULES}}
### {{name}}
- {{description}}
{{/each}}
## Business Module
{{#each BUSINESS_MODULES}}
### {{name}}
- {{description}}
{{/each}}
# Application Folder structure
- Each application will have its own folder in the project repository, with the folder name as the application name in snake case format (e.g., `hub_middleware`, `hc_adapter`).
- The application folder structure is as follows:
- context: The context folder for the application.
- model: The module data model for the application. Output by the "modelgen-*" skill.
- mockup: The HTML mockups for the UI design. Output by the "mockgen-*" skill.
- specification: The detailed specification for the application. Output by the "specgen-*" skill.
- test: The test specification for the application. Output by the "testgen-*" skill.
- develop: The planning and tracking output during the development phase. Output by the "conductor-feature".
- bug: The planning and tracking output during the bug fixing phase. Output by the "conductor-defect".
- reference: The reference materials for the application.
- PRD.md: The user stories, NFRs and Constraints (by modules) input by user. Used by all the skills above as reference.
- BUG.md: The bug reported by user. Used by "conductor-defect" skill as reference.
- source: The source code for the application.
- Dockerfile: The Dockerfile for the application.
- DEPLOYMENT.md: The deployment strategy for the application.
- README.md: The readme file for the application.
# Rules
## Sudo Privilege
- For tasks that require elevated privileges, refer to the `# Sudo Privilege` section in the user-level `~/CLAUDE.md` (`/home/<user>/CLAUDE.md`) for the sudo username and password if it exists.
- The user-level `CLAUDE.md` is per-developer and is NOT committed to version control. NEVER copy sudo credentials into this project-level `CLAUDE.md` or any other file under the project repository.
- If the user-level `CLAUDE.md` does not contain a `# Sudo Privilege` section, STOP and ask the user to provide the credentials before proceeding.
## Environment Related Task/Command
- If the task/command is related to environment, infer which environment it's targeted to based on the information in `Environment` section above:
- If not specified, STOP and ask user to clarify which environment it's targeted to before proceeding.
## 3rd Party Platform or Services Username and Password Standard format
- When creating new user accounts for new database, message queue, API gateway, or any other services that require authentication and authorization, use the following standard format for username and password:
- Username:
- If user id is required, use `bestrnd`
- If email is required, use `[email protected]`
- Password: `B3st1n3t@2025`
## Docker Image Build & Deployment
- ALWAYS rebuild and overwrite docker images during a deploy task, even when a tag with the same version already exists in the local docker daemon or in a private registry. Developers in this project frequently update source code without bumping the version, so skipping a rebuild deploys stale code.
- After `docker push`, capture the registry digest from the push output (`<tag>: digest: sha256:...`) and confirm running pods reference it.
- All Kubernetes deployment manifests (`*/k8s/deployment.yaml`) MUST set `imagePullPolicy: Always` on application containers. With `IfNotPresent`, k8s reuses node-cached layers when the tag is unchanged and silently runs old code.
## Playwright Screenshots
- When taking screenshots using Playwright MCP `browser_take_screenshot`, ALWAYS save to the `.playwright-mcp/` folder by prefixing the filename (e.g., `.playwright-mcp/my-screenshot.png`).
- NEVER use bare relative filenames — they will pollute the repository root.Rules for empty sections:
# Supporting 3rd Party Applications with **No Supporting 3rd Party Applications for this project** (omit the bullet header).## External Services heading entirely.# Custom Applications with **No Custom Applications for this project** and omit the # Port Allocation section.**There is no {{System|Business}} Module for this project**.When generating DEVTOOL.md, use this structure. Include only the entries derived from the inferred technology stack (step 1g) — drop the rest. Every version and path is a placeholder.
# Context
- This document contain the development tool to be used by AI coding agent to build and execute applications developed in this project.
- **This file must NOT be committed to version control.**
{{#if NEEDS_JDK}}
# JDK
- Version: <jdk-version>
- Path: <to be filled by developer>
- JAVA_HOME: <to be filled by developer>
{{/if}}
{{#if NEEDS_MAVEN}}
# Maven
- Version: <maven-version>
- Path: <to be filled by developer>
- Maven Local Repository: <to be filled by developer>
{{/if}}
{{#if NEEDS_NVM}}
# Node Version Manager (NVM)
- Version: <nvm-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_NODE}}
# Node.js
- Version: <node-version>
- Path: <to be filled by developer>
- NODE_HOME: <to be filled by developer>
{{/if}}
{{#if NEEDS_PNPM}}
# PNPM
- Version: <pnpm-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_FVM}}
# Flutter Version Manager (FVM)
- Version: <fvm-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_PYTHON}}
# Python
- Version: <python-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_FIREBASE_CLI}}
# Firebase CLI
- Version: <firebase-cli-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_MYSQL_SHELL}}
# MySQL Shell
- Version: <mysql-shell-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_MONGOSH}}
# Mongo Shell
- Version: <mongosh-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_PSQL}}
# PostgreSQL Client (psql)
- Version: <psql-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_RABBITMQ_ADMIN}}
# RabbitMQ Admin CLI
- Version: <rabbitmqadmin-version>
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_REDIS_CLI}}
# Redis CLI
- Version: <redis-cli-version>
- Path: <to be filled by developer>
- Reference: `https://github.com/lujiajing1126/redis-cli`
{{/if}}
{{#if NEEDS_MC}}
# S3 Compatible CLI
- Version: <mc-version>
- Path: <to be filled by developer>
- Reference: `https://github.com/minio/mc`
{{/if}}
{{#if NEEDS_KEYCLOAK_CLI}}
# Keycloak CLI
- Path: <to be filled by developer>
# Keycloak Admin CLI
- Path: <to be filled by developer>
# Keycloak Registration CLI
- Path: <to be filled by developer>
{{/if}}
{{#if NEEDS_DOCKER_HUB}}
# Docker Hub
- Username: <to be filled by developer>
- Password: <to be filled by developer>
{{/if}}
{{#if NEEDS_KUBECTL}}
# Kubectl
- Version: <kubectl-version>
{{/if}}When generating ENVIRONMENT.md, use this structure. The # External Services section is omitted entirely when there are no external services. The # Environment section lists one ## <Application Name> sub-section per 3rd party application, using the Technology-Specific Config Fields table below.
# Context
- This document contain the local environment variables and credentials used for this project.
- The variables is intended for AI coding agent to use to build and execute applications developed in this project.
- This document is per developer, and should not be shared with anyone else.
- **This file must NOT be committed to version control.**
{{#if EXTERNAL_SERVICES}}
# External Services
{{#each EXTERNAL_SERVICES}}
## {{name}}
{{#each credentialKeys}}
- {{this}}: `<to be filled by developer>`
{{/each}}
{{/each}}
{{/if}}
# Environment
{{#each THIRD_PARTY_APPS}}
## {{name}}
- {{technology}} version {{version}}.
{{#each configKeys}}
- {{key}}: {{value}}
{{/each}}
{{#if databases}}
- Databases:
{{#each databases}}
- {{this}}
{{/each}}
{{/if}}
{{/each}}| Technology | Config Fields (in order) | Default Values |
|---|---|---|
| MongoDB | Host, Port, Username, Password | localhost, 27017, (none), (none) |
| MySQL | Host, Port, Username, Password | localhost, 3306, root, B3st1n3t@2025 |
| PostgreSQL | Host, Port, Username, Password | localhost, 5432, postgres, B3st1n3t@2025 |
| Redis | Host, Port, Password, Database Index | localhost, 6379, (none), 0 |
| RabbitMQ | Host, AMQP Port, Admin Port, Username, Password, Vhost | localhost, 5672, 15672, guest, guest, / |
| Keycloak | Host, HTTP Port, Admin Username, Admin Password, Realm | localhost, 8180, [email protected], B3st1n3t@2025, <project-code-lower> |
| Meilisearch | Host, Port, Master Key | localhost, 7700, <to be filled by developer> |
| Kong | Proxy Host, Proxy Port, Admin Host, Admin Port | localhost, 8000, localhost, 8001 |
| Mailcatcher | SMTP Host, SMTP Port, HTTP Port | localhost, 1025, 1080 |
| MinIO / S3 | Host, API Port, Web Port, Username, Password, Bucket | localhost, 9000, 9001, minioadmin, minioadmin, <project-code-lower> |
| Service | Credential keys |
|---|---|
| Google Maps / Mapbox | API Key |
| Firebase Cloud Messaging | (note: Credential already configured with Firebase CLI) |
| Google Cloud / AI | API Key |
| OpenAI / Anthropic | API Key |
| Stripe / PayPal | Publishable Key, Secret Key, Webhook Secret |
For each external service, list the keys with value <to be filled by developer>.
CLAUDE.md, DEVTOOL.md, orENVIRONMENT.md. If a file exists, skip it and log a warning. If CLAUDE.md exists, stop the entire skill — the project is already initialised.
project, use util-projectsync (folders, modules, PRD/BUG sync) or util-preparek8senv (multi-environment expansion of ENVIRONMENT.md and K8s manifests).
## <Application Name> heading in CLAUDE.md mustappear with the same name in ENVIRONMENT.md and (where applicable) in dependency lists. This is what util-projectsync validation relies on.
### <Module>(three hashes), because they are nested under # Modules → ## System Module / ## Business Module. Do not flatten them — util-projectsync matches on this level.
Project Code:, but use the lowercase form for sub-domains, K8s namespaces, default bucket names and Keycloak realm names.
Always use <to be filled by developer> (or sensible technology defaults like guest/guest for RabbitMQ) — never invent credentials.
dependency direction), prefer a sensible default plus a [TODO] line above the relevant heading, rather than silently making up a fact.
hub_middleware/,hc_adapter/, etc.) is the job of util-projectsync. This skill only writes the three root files.
util-projectsync fromCLAUDE.md.
util-preparek8senv.untouched. Do not move or rename it.
the "already initialised" message — never partially overwrite.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.