From arn-infra
Optional customization tool for infrastructure projects. This skill should be used when the user says "infra init", "arn infra init", "initialize infra", "setup infrastructure", "arn-infra-init", "configure infra", "init infra", "infrastructure setup", "set up infrastructure", "infra setup", "start infra", "configure arn infra", "add infrastructure to this project", "review infra config", "customize infra config", "infra settings", or wants to configure providers, environments, IaC tools, CI/CD platform, or review current infrastructure settings. Arness Infra auto-configures with sensible defaults on first skill invocation — this init is optional for basic usage but required for provider/environment configuration.
npx claudepluginhub appsvortex/arness --plugin arn-infraThis skill uses the workspace's default tool permissions.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Builds 3-5 year financial models for startups with cohort revenue projections, cost structures, cash flow, headcount plans, burn rate, runway, and scenario analysis.
Configure the Arness Infra plugin for a project by selecting cloud providers and IaC tools, establishing environment strategy, and persisting configuration to CLAUDE.md. This is optional — Arness Infra auto-configures with sensible defaults on first skill invocation. Use this to configure providers, environments, IaC tools, CI/CD platform, or review your current settings.
This skill does NOT require Arness Core. It writes infra configuration fields into the shared ## Arness section in CLAUDE.md, preserving any existing fields from arn-code or arn-spark. If no ## Arness section exists, it creates one.
The infra configuration written by this skill contains up to 25 fields that govern the behavior of all downstream infrastructure skills and agents. The configuration is expertise-adaptive: experience level is derived from your user profile (set during first Arness skill invocation) and governs conversational tone and recommendations. Beginner users get opinionated PaaS recommendations, while expert users have full control over provider and IaC tool selection.
Note: Experience level is now derived from your user profile and is no longer stored in
## Arnessconfig. The derivation mapping is at${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-ensure-config/references/experience-derivation.md. If no profile exists when init runs, the welcome flow in ensure-config runs first to create one.
Before any user interaction, scan the project for existing infrastructure artifacts.
Read the local override or plugin default for
existing-infra-detection.md.
Scan for:
*.tf, *.hcl, Pulumi.*, cdk.json, *.bicepDockerfile, docker-compose.*, .dockerignore.github/workflows/, .gitlab-ci.yml, bitbucket-pipelines.ymlfly.toml, railway.json, vercel.json, render.yaml, netlify.tomlkubernetes/, k8s/, helm/, Chart.yaml.aws/, gcloud/, azure/If existing infrastructure is detected:
Present findings: "I found existing infrastructure in this project: [list detected artifacts]. I can adopt and manage these within Arness Infra."
Infer provider and IaC tool from detected artifacts (e.g., .tf files imply OpenTofu/Terraform, fly.toml implies Fly.io) and pre-populate the config suggestions in subsequent steps.
If no infrastructure is detected: Continue to Step 1 normally.
Read the project's CLAUDE.md.
Check for ## Arness section:
## Arness section exists: read it and extract all fields. Note which fields are from other plugins (Plans directory, Specs directory, etc. from arn-code; Vision directory, etc. from arn-spark) -- these will be preserved when writing infra fields.## Arness section does NOT exist: this is a standalone infra project. A new ## Arness section will be created in Step 8.Check for existing infra configuration within ## Arness:
Check for any infra-specific field within ## Arness (such as Deferred, Project topology, Providers, or Infra plans directory) -- these fields are only written by infra-init or infra-ensure-config and their presence indicates infra has been initialized. Note: the Experience level field is no longer used as the indicator since it has been removed from ## Arness config.
If infra fields do not exist (fresh init):
If infra fields exist:
Parse all infra config fields from the ## Arness section
Show the user their current configuration
Ask (using AskUserQuestion):
"What would you like to do with your existing configuration?"
Options:
## Arness fields relevant to Arness Infra, then exit the skillBefore any configuration:
Ask (using AskUserQuestion):
"When do you want to set up infrastructure?"
Options:
If deferred:
## Arness) minimal infra config with: Deferred: yes, Project topology, Application path (if applicable).arness/infra/ directory: mkdir -p .arness/infra.arness/infra/deferred-backlog.md with empty structure:
# Deferred Infrastructure Backlog
Infrastructure observations accumulated during feature development.
Run `/arn-infra-assess` when ready to produce a full infrastructure plan.
.arness/infra/deferred-backlog.md. When ready, run /arn-infra-assess to produce a full infrastructure plan from the accumulated notes."If now: Continue to Step 2.
Experience level governs conversational tone and recommendations throughout the init flow. Instead of asking the user directly, derive the experience level from the user profile.
~/.arness/user-profile.yaml or .claude/arness-profile.local.md (project override takes precedence)${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-ensure-config/references/ensure-config.md -- the welcome flow creates the profile${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-ensure-config/references/experience-derivation.md to determine the infrastructure experience level (expert, intermediate, or beginner)Note: Experience level is no longer stored in
## Arnessconfig. It is derived at runtime from the user profile. For backward compatibility, if a legacyExperience levelfield exists in## Arnessand no user profile exists, use the legacy value.
Read the local override or plugin default for
provider-overview.md. Read${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-init/references/recommendation-matrix.mdfor expertise-adaptive recommendations. (Static reference -- not part of the evolving reference set.) Read the local override or plugin default foriac-tool-guide.md.
Adapt the conversation based on experience level:
Expert:
"What cloud providers do you use? (You can specify multiple with their scope, e.g., 'AWS for backend, Vercel for frontend')"
Then: "What IaC tool do you prefer?" -- present all options, let them choose freely. Set as default IaC tool. Per-provider overrides added to providers.md.
If they say Terraform, warn about BSL licensing and recommend OpenTofu as a drop-in replacement.
Intermediate:
Analyze the application stack from codebase patterns (if available from ## Arness config). Present 2-3 recommended provider/IaC combinations with trade-offs:
"Based on your application stack, I'd recommend [provider(s)] with [IaC tool]. Here's why: [rationale]."
For multi-component apps (frontend + API + DB), suggest appropriate provider split.
Beginner:
Analyze the application stack and make an opinionated recommendation:
"For your application, I'd recommend deploying to [Fly.io / Railway / Render / Vercel] -- these platforms handle most infrastructure complexity for you."
Set IaC tool to none (platform-native configs will be used). Warning: "You are responsible for understanding your provider's pricing model."
For each provider selected:
Ask (using AskUserQuestion):
"Where does your application code live?"
Options:
Option 1 (monorepo): Set Project topology: monorepo, Application path: .
Option 2 (separate repo):
Ask for the application path. Validate the path exists. Check for ## Arness section in the app's CLAUDE.md.
Set Project topology: separate-repo, Application path: <provided-path>.
Offer to add the reverse pointer:
"I'd like to add an Infrastructure field to your application's ## Arness config at <app-path>/CLAUDE.md so Arness Core knows where infrastructure lives. This enables automatic infra issue creation when features need infrastructure changes. OK?"
If approved, add - **Infrastructure:** <relative-path-to-infra> to the app's ## Arness section.
Option 3 (infra-only): Set Project topology: infra-only. Omit Application path.
Auto-detect the infra project's own Git, Platform, and Issue tracker. This follows the same detection logic as Arness Core's arn-code-init Step 3 but runs independently for the infra project (in separate-repo topology, the infra repo may have different git remotes and issue trackers than the app repo).
5.1. Git check:
git rev-parse --is-inside-work-tree5.2. Remote classification:
git remote -v and classify:
github.com --> candidate: githubbitbucket.org --> candidate: bitbucket5.3a. If candidate is github:
gh auth status to check authenticationgh auth login, and STOP init5.3b. If candidate is bitbucket:
bkt --version to check for the Bitbucket CLI
bkt auth status to check authentication
5.4. CI/CD Platform Detection:
Scan the project for CI/CD configuration files to determine which CI/CD system is in use. This is independent of the code hosting Platform — a GitHub-hosted project can use GitLab CI.
.github/workflows/ directory with .yml/.yaml files --> CI/CD platform: github-actions.gitlab-ci.yml --> CI/CD platform: gitlab-cibitbucket-pipelines.yml --> CI/CD platform: bitbucket-pipelinesRecord the result as CI/CD platform: github-actions | gitlab-ci | bitbucket-pipelines | none.
Ask (using AskUserQuestion):
"How do you want to manage environments?"
Options:
Option 3 gets a warning: "Deploying directly to production means infrastructure mistakes affect live users immediately. There is no staging environment to test changes first. Are you sure?" Requires explicit confirmation.
Option 4: Ask the user to list their environment names in promotion order (e.g., "dev, qa, staging, prod").
Create .arness/infra/environments.md with the chosen pipeline. Each environment entry includes:
--)none)Ask:
7.1. Cost threshold: "What is your monthly infrastructure budget limit? Arness will warn before deployments that would exceed this threshold."
7.2. Validation ceiling: "What is the maximum validation level Arness should perform without asking for explicit approval? (0 = syntax only, 1 = dry run, 2 = security scan, 3 = cost estimate, 4 = full apply)"
Create infrastructure directory structure:
mkdir -p .arness/infra
mkdir -p .arness/infra-plans
mkdir -p .arness/infra-specs
mkdir -p .arness/infra-docs
mkdir -p .arness/infra-templates
Create .arness/infra/providers.md with provider entries from Step 3:
# Providers
## [provider-name]
- **Scope:** [components this provider handles]
- **IaC tool:** [tool or "none"]
- **Confidence:** -- (set by arn-infra-discover)
- **Status:** active
- **Migration:** none
Create .arness/infra/environments.md with environment config from Step 6:
# Environments
## Promotion Pipeline
[env1] --> [env2] --> [env3]
## [environment-name]
- **Auto-deploy:** [yes | no]
- **Approval required:** [yes | no]
- **Last deployed:** --
- **Pending changes:** none
Create the Arness Infra labels defined in the reference file (if Platform is github or Issue tracker is jira).
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-init/references/infra-labels.mdfor the full label list with colors and descriptions.
For GitHub: use gh label create --force for each label (idempotent).
For Jira: labels are implicit (no creation needed).
If no issue tracker: skip label creation.
Write infra configuration fields to the ## Arness section in CLAUDE.md.
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-init/references/config-schema.mdfor the full field documentation.
The following infra fields are written to ## Arness:
- **Deferred:** no
- **Project topology:** [monorepo | separate-repo | infra-only]
- **Application path:** [path] (omitted for infra-only)
- **Providers:** [comma-separated list]
- **Providers config:** .arness/infra/providers.md
- **Default IaC tool:** [tool or "none"]
- **Environments:** [comma-separated in promotion order]
- **Environments config:** .arness/infra/environments.md
- **Tooling manifest:** .arness/infra/tooling-manifest.json
- **Resource manifest:** .arness/infra/active-resources.json
- **Cost threshold:** [USD amount or "none"]
- **Validation ceiling:** [0-4]
- **Infra plans directory:** .arness/infra-plans
- **Infra specs directory:** .arness/infra-specs
- **Infra docs directory:** .arness/infra-docs
- **Infra report templates:** default
- **Infra template path:** .arness/infra-templates
- **Infra template version:** <version from plugin.json>
- **Git:** [yes | no]
- **Platform:** [github | bitbucket | none]
- **CI/CD platform:** [github-actions | gitlab-ci | bitbucket-pipelines | none]
- **Issue tracker:** [github | jira | none]
- **Jira site:** [site] (only if Issue tracker is jira)
- **Jira project:** [key] (only if Issue tracker is jira)
- **Reference overrides:** .arness/infra-references
- **Reference version:** <version from plugin.json>
- **Reference updates:** ask | auto | manual
Note: Experience level is no longer written to
## Arness. It is derived at runtime from the user profile. If a legacyExperience levelfield exists in## Arness, it may be removed during the next upgrade cycle.
Rules:
## Arness already exists (monorepo with arn-code/green): Append infra fields to the existing section. Skip shared fields (Git, Platform, Issue tracker, Jira site, Jira project) that are already present. Preserve all existing fields not managed by this skill (Plans directory, Specs directory, Report templates, Template path, Template version, Template updates, Code patterns, Docs directory, Vision directory, Use cases directory, Prototypes directory, etc.).## Arness does not exist (separate-repo or infra-only): Create a new ## Arness section with all infra fields including shared fields.Set up locally-owned copies of the 28 evolving reference files so they survive plugin updates and can be refreshed via online research. This step creates the overrides directory, copies files from the plugin, generates SHA-256 checksums, and asks the user for their Reference updates preference.
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-init/references/reference-override-protocol.md(Step 8b section) for the full initialization procedure (sub-steps 8b.1 through 8b.6).
Confirm with the user:
.arness/infra/providers.md created.arness/infra/environments.md created.arness/infra-plans/ created.arness/infra-specs/ created.arness/infra-docs/ created.arness/infra-templates/ created.arness/infra-references/ created with 28 evolving reference files.arness/infra-references/.reference-checksums.json generated## Arness section in CLAUDE.mdList all created/modified files with their paths.
Next steps:
"Arness Infra is configured. Here is the recommended next step:
/arn-infra-discover to audit your installed tools, MCPs, CLIs, and configure provider access.After discovery, the infrastructure pipeline continues:
2. Containerize: Run /arn-infra-containerize to generate Docker configurations
3. Define infrastructure: Run /arn-infra-define to generate IaC in your chosen tool
4. Deploy: Run /arn-infra-deploy to deploy to your environments
5. Verify: Run /arn-infra-verify to validate your deployment
Or run /arn-infra-wizard for the full guided pipeline."
This step runs during the Update flow (from Step 1) to check whether reference files need upgrading after a plugin update. It compares version numbers, performs checksum-based conflict detection on all 28 files, and applies updates based on the user's Reference updates preference (ask, auto, or manual).
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-infra-init/references/reference-override-protocol.md(Step U1 section) for the full upgrade procedure (sub-steps U1.1 through U1.4).
## Arness section: This is expected for standalone or separate-repo usage. A new ## Arness section will be created with infra fields.gh auth login not resolved: Explain the issue and stop init. The user must resolve authentication before proceeding. They can re-run /arn-infra-init after fixing auth..reference-checksums.json is missing or unparseable during upgrade, treat all files as unmodified and re-initialize from plugin defaults. Regenerate the checksums file.