---
name: app
description: Initializes EB projects and manages Elastic Beanstalk applications, application versions, and version lifecycle rules. Use when user says "eb init", "eb appversion", "application versions", "version lifecycle", "list applications", "delete version", "initialize project", "create beanstalk app", "new eb application", or "my beanstalk apps". For environment operations use environment skill.
compatibility: Requires EB CLI (awsebcli) and AWS CLI with configured credentials.
license: MIT
allowed-tools:
  - Bash
metadata:
  author: shinmc
  version: 1.0.0
---

# Application Management

Initialize projects, manage application versions, and configure version lifecycle using the EB CLI.

## When to Use

- Initialize an EB project (`eb init`)
- List applications
- Manage application versions
- Configure version lifecycle rules

## When NOT to Use

- Managing environments → use `environment` skill
- Deploying code → use `deploy` skill
- Checking status → use `status` skill

---

## Initialize

```bash
eb init
eb init <app-name> --region <region> --platform "<platform>"
```

## List Applications

```bash
aws elasticbeanstalk describe-applications \
  --query 'Applications[*].[ApplicationName,DateCreated]' --output table
```

## Application Versions

```bash
eb appversion                            # List versions
eb appversion --delete <version-label>   # Delete version
```

## Version Lifecycle

```bash
eb appversion lifecycle                  # Configure lifecycle rules
```

Or via AWS CLI:
```bash
aws elasticbeanstalk update-application-resource-lifecycle \
  --application-name <app-name> \
  --resource-lifecycle-config '{
    "VersionLifecycleConfig": {
      "MaxCountRule": {"Enabled": true, "MaxCount": 200, "DeleteSourceFromS3": true},
      "MaxAgeRule": {"Enabled": true, "MaxAgeInDays": 180, "DeleteSourceFromS3": true}
    },
    "ServiceRole": "arn:aws:iam::<account>:role/aws-elasticbeanstalk-service-role"
  }' --output json
```

## .elasticbeanstalk/config.yml

`eb init` creates `.elasticbeanstalk/config.yml` in your project root. This file stores:
- Default application name and region
- Default environment
- Platform and branch settings

```yaml
# .elasticbeanstalk/config.yml (auto-generated by eb init)
branch-defaults:
  main:
    environment: my-app-prod
global:
  application_name: my-app
  default_region: us-east-1
  default_platform: Node.js 22
```

Add `.elasticbeanstalk/` to `.gitignore` if it contains environment-specific settings, or commit it for shared CI/CD workflows.

---

## Composability

- **Create environment**: Use `environment` skill
- **Deploy code**: Use `deploy` skill
- **Platform updates**: Use `maintenance` skill

## Additional Resources

- [Platforms](../_shared/references/platforms.md)
