cloudformation
Author, validate, and deploy AWS CloudFormation templates using this repo's IaC conventions — ProjectPrefix/Environment parameters, the cloudformation/ folder…
Skill by tforster
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/tforster-cloudformation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: devops, cloud, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/cloudformation
What's inside
- Skill name
cloudformation- Description
- Author, validate, and deploy AWS CloudFormation templates using this repo's IaC conventions — ProjectPrefix/Environment parameters, the cloudformation/ folder layout, provision.sh deployment, and cfn-lint validation. Use when asked to create, review, or deploy CloudFormation templates, set up an AWS IaC folder, or write a provisioning script for CFN stacks.
- License
- MIT
- Instructions
- 136 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# CloudFormation
## Required parameters
Every template accepts these two parameters, even if a given stack doesn't strictly need both:
```yaml
Parameters:
ProjectPrefix:
Type: String
Description: Domain/project prefix (e.g. ecommerce, store, auth)
AllowedPattern: "^[a-z0-9-]+$"
ConstraintDescription: Must contain only lowercase letters, numbers, and hyphens
Environment:
Type: String
AllowedValues: [dev, int, stage, prod]
Description: Target environment
```
Use them to name and scope resources predictably rather than hardcoding names:
```yaml
BucketName: !Sub "${ProjectPrefix}-${Environment}-assets"
```
## Folder layout
```
cloudformation/
network.yml
database.yml
api.yml
provision.sh
```
- All templates live in `cloudformation/`, one stack concern per file.
- `provision.sh` sits adjacent to the folder (not inside it) and is the only sanctioned way to deploy — don't run `aws cloudformation deploy` by hand against a tracked template.
## Cross-stack outputs
When one template produces a value another needs, export it as a CloudFormation `Output` and mirror it to SSM Parameter Store — don't invent a bespoke config-sharing mechanism per stack.
```yaml
Resources:
ThingIdParameter:
Type: AWS::SSM::Parameter
Properties:
Name: !Sub "/${ProjectPrefix}/${Environment}/ThingId"
Type: String
Value: !Ref Thing
Outputs:
ThingId:
Description: ID of the thing other stacks depend on
Value: !Ref Thing
Export:
Name: !Sub "${ProjectPrefix}-${Environment}-ThingId"
ThingIdParameterName:
Description: SSM Parameter name mirroring ThingId
Value: !Ref ThingIdParameter
```
Consumers within the same account/region resolve the export directly:
```yaml
SomeProperty: !ImportValue
Fn::Sub: "${ProjectPrefix}-${Environment}-ThingId"
```
Consumers outside CloudFormation (deploy scripts, Lambdas) or across an account/region boundary where `!ImportValue` can't reach read the SSM mirror instead:
```bash
aws ssm get-parameter --name "/${PROJECT_PREFIX}/${ENVIRONMENT}/ThingId" --query "Parameter.Value" --output text
```
Before deploying a stack that imports another stack's export, guard the lookup in `provision.sh` rather than letting `!ImportValue` fail with a cryptic CloudFormation error:
```bash
value=$(aws cloudformation list-exports \
--query "Exports[?Name=='${PROJECT_PREFIX}-${ENVIRONMENT}-ThingId'].Value" \
--output text)
if [[ -z "$value" || "$value" == "None" ]]; then
echo "Deploy the producing stack first: provision.sh --thing" >&2
exit 1
fi
```
Some outputs deliberately aren't auto-wired — e.g. an ID that a human must hand-carry into an application manifest or config file consumed outside IaC entirely. Print those clearly at the end of the deploy step rather than silently expecting the operator to know to go look.
## provision.sh contract
Give each deployable stack its own boolean flag rather than a generic `<template-name>` positional — stacks in a folder are rarely interchangeable enough for one argument shape, and named flags document what's deployable directly in `--help`. Reserve a positional/`--all` shape for a folder of genuinely homogeneous, safe-to-batch stacks.
```bash
./provision.sh --environment <env> --<stack-flag> [--<stack-flag> ...]
```
- `--environment` (`-e`) is required and validated against an explicit allow-list (e.g. `int`, `stage`, `prod`, plus any account-level aliases you use); default to the least-risky environment, never `prod`.
- Each stack gets its own flag (e.g. `--network`, `--database`, `--api`). Running with zero stack flags fails with a usage message — it never silently no-ops.
- `ProjectPrefix` is usually hardcoded per deploy function rather than accepted as a flag — a given `provision.sh` typically belongs to one project already, so there's rarely a need to parameterize it at the CLI.
- Guard cross-stack dependencies with an export lookup and a clear error before deploying (see Cross-stack outputs above) — don't let a missing dependency surface as a raw CloudFormation failure.
- Run `cfn-lint` against the target template(s) before invoking `aws cloudformation deploy` — fail closed on lint errors.
## Validation — cfn-lint
Every template must pass `cfn-lint` before being considered done:
```bash
cfn-lint cloudformation/*.yml
```
Install with `pip install cfn-lint` (or `brew install cfn-lint`).
Treat these as blocking, not advisory:
- Broad IAM `Resource: "*"` — scope to a specific ARN, or use `!Ref`/`!GetAtt` for dynamic references.From tforster/agents0, MIT.
More from tforster/agents0
- 0.570score
markdown
tforster
Author or restructure a Markdown document to the house standard, and regenerate its Table of Contents and section numbers with the bundled scripts.
SkillAFreshness: AClaude Code +9 - 0.570score
timetracker
tforster
Build paste-ready time-tracker entries -- date, ticket and title, up to 5 bullets of work done -- from the user's Jira and Paca activity, GitHub activity and…
SkillAFreshness: AClaude Code +9 - 0.570score
business-rule-extraction
tforster
Reverse-engineers business rules out of a legacy monolith codebase (PHP, SQL, JS, PHTML, MD, INI, or any other source type present, not a fixed list) into a…
SkillAFreshness: AClaude Code +9 - 0.570score
jira
tforster
Create, read, update and query Jira issues via the Atlassian Cloud REST API v3.
SkillAFreshness: AClaude Code +9 - 0.565score
tracker
tforster
Work stories in the project's issue tracker through one five-operation contract (next, get, comment, transition, create).
SkillAFreshness: AClaude Code +9 - 0.565score
diataxis-documentation
tforster
Write a new Diátaxis-compliant documentation file from scratch.
SkillAFreshness: AClaude Code +9 - 0.565score
arc42-architecture
tforster
Produce an Arc42 architecture document for a software system.
SkillAFreshness: AClaude Code +9 - 0.565score
github
tforster
Read and write GitHub issues, pull requests, workflows, runs, releases, and labels using the GitHub CLI (gh).
SkillAFreshness: AClaude Code +9 - 0.565score
subgroup
Vic Peters
Work a seed of live content by joining both sides of its split fully and in alternation until integration emerges and novelty exhausts — functional…
SkillAFreshness: AClaude Code +9 - 0.560score
software-erasure
tforster
Apply the erasure operation to software artifacts: architecture documents, ADRs, interface contracts, API specs, PR descriptions, system designs, code…
SkillAFreshness: AClaude Code +9 - 0.559score
web-ui
tforster
House rules for HTML, CSS and Handlebars templates.
SkillAFreshness: AClaude Code +9 - 0.559score
shell
tforster
House rules for shell scripts and shell configuration.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/tforster/agents0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from tforster
- 0.570score
business-rule-extraction
tforster
Reverse-engineers business rules out of a legacy monolith codebase (PHP, SQL, JS, PHTML, MD, INI, or any other source type present, not a fixed list) into a…
SkillAFreshness: AClaude Code +9 - 0.570score
timetracker
tforster
Build paste-ready time-tracker entries -- date, ticket and title, up to 5 bullets of work done -- from the user's Jira and Paca activity, GitHub activity and…
SkillAFreshness: AClaude Code +9 - 0.570score
jira
tforster
Create, read, update and query Jira issues via the Atlassian Cloud REST API v3.
SkillAFreshness: AClaude Code +9 - 0.570score
markdown
tforster
Author or restructure a Markdown document to the house standard, and regenerate its Table of Contents and section numbers with the bundled scripts.
SkillAFreshness: AClaude Code +9 - 0.565score
diataxis-documentation
tforster
Write a new Diátaxis-compliant documentation file from scratch.
SkillAFreshness: AClaude Code +9 - 0.565score
tracker
tforster
Work stories in the project's issue tracker through one five-operation contract (next, get, comment, transition, create).
SkillAFreshness: AClaude Code +9
Cite this page
cloudformation skill. Agent Mart. https://agentmart.dev/skills/tforster-cloudformation (last updated 2026-10-24)